@hobokengrace/n8n-nodes-pco 0.1.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 (124) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +79 -0
  3. package/dist/credentials/PlanningCenterPatApi.credentials.d.ts +9 -0
  4. package/dist/credentials/PlanningCenterPatApi.credentials.js +84 -0
  5. package/dist/credentials/PlanningCenterPatApi.credentials.js.map +1 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.js +28 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/nodes/assets/api.svg +4 -0
  10. package/dist/nodes/assets/calendar.svg +4 -0
  11. package/dist/nodes/assets/check-ins.svg +4 -0
  12. package/dist/nodes/assets/current.svg +4 -0
  13. package/dist/nodes/assets/giving.svg +4 -0
  14. package/dist/nodes/assets/groups.svg +4 -0
  15. package/dist/nodes/assets/pco.svg +4 -0
  16. package/dist/nodes/assets/people.svg +4 -0
  17. package/dist/nodes/assets/publishing.svg +4 -0
  18. package/dist/nodes/assets/registrations.svg +4 -0
  19. package/dist/nodes/assets/services.svg +4 -0
  20. package/dist/nodes/assets/webhooks.svg +4 -0
  21. package/dist/nodes/generated/api/PlanningCenterApi.node.d.ts +16 -0
  22. package/dist/nodes/generated/api/PlanningCenterApi.node.js +745 -0
  23. package/dist/nodes/generated/api/PlanningCenterApi.node.js.map +1 -0
  24. package/dist/nodes/generated/api/api.svg +4 -0
  25. package/dist/nodes/generated/api/pco.svg +4 -0
  26. package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.d.ts +305 -0
  27. package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.js +33813 -0
  28. package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.js.map +1 -0
  29. package/dist/nodes/generated/calendar/calendar.svg +4 -0
  30. package/dist/nodes/generated/calendar/pco.svg +4 -0
  31. package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.d.ts +308 -0
  32. package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.js +29142 -0
  33. package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.js.map +1 -0
  34. package/dist/nodes/generated/check-ins/check-ins.svg +4 -0
  35. package/dist/nodes/generated/check-ins/pco.svg +4 -0
  36. package/dist/nodes/generated/current/PlanningCenterCurrent.node.d.ts +13 -0
  37. package/dist/nodes/generated/current/PlanningCenterCurrent.node.js +564 -0
  38. package/dist/nodes/generated/current/PlanningCenterCurrent.node.js.map +1 -0
  39. package/dist/nodes/generated/current/current.svg +4 -0
  40. package/dist/nodes/generated/current/pco.svg +4 -0
  41. package/dist/nodes/generated/giving/PlanningCenterGiving.node.d.ts +308 -0
  42. package/dist/nodes/generated/giving/PlanningCenterGiving.node.js +25566 -0
  43. package/dist/nodes/generated/giving/PlanningCenterGiving.node.js.map +1 -0
  44. package/dist/nodes/generated/giving/giving.svg +4 -0
  45. package/dist/nodes/generated/giving/pco.svg +4 -0
  46. package/dist/nodes/generated/groups/PlanningCenterGroups.node.d.ts +189 -0
  47. package/dist/nodes/generated/groups/PlanningCenterGroups.node.js +15344 -0
  48. package/dist/nodes/generated/groups/PlanningCenterGroups.node.js.map +1 -0
  49. package/dist/nodes/generated/groups/groups.svg +4 -0
  50. package/dist/nodes/generated/groups/pco.svg +4 -0
  51. package/dist/nodes/generated/people/PlanningCenterPeople.node.d.ts +979 -0
  52. package/dist/nodes/generated/people/PlanningCenterPeople.node.js +102040 -0
  53. package/dist/nodes/generated/people/PlanningCenterPeople.node.js.map +1 -0
  54. package/dist/nodes/generated/people/pco.svg +4 -0
  55. package/dist/nodes/generated/people/people.svg +4 -0
  56. package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.d.ts +130 -0
  57. package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.js +10671 -0
  58. package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.js.map +1 -0
  59. package/dist/nodes/generated/publishing/pco.svg +4 -0
  60. package/dist/nodes/generated/publishing/publishing.svg +4 -0
  61. package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.d.ts +55 -0
  62. package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.js +3640 -0
  63. package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.js.map +1 -0
  64. package/dist/nodes/generated/registrations/pco.svg +4 -0
  65. package/dist/nodes/generated/registrations/registrations.svg +4 -0
  66. package/dist/nodes/generated/services/PlanningCenterServices.node.d.ts +1032 -0
  67. package/dist/nodes/generated/services/PlanningCenterServices.node.js +82196 -0
  68. package/dist/nodes/generated/services/PlanningCenterServices.node.js.map +1 -0
  69. package/dist/nodes/generated/services/pco.svg +4 -0
  70. package/dist/nodes/generated/services/services.svg +4 -0
  71. package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.d.ts +25 -0
  72. package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.js +1346 -0
  73. package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.js.map +1 -0
  74. package/dist/nodes/generated/webhooks/pco.svg +4 -0
  75. package/dist/nodes/generated/webhooks/webhooks.svg +4 -0
  76. package/dist/src/generator/checkGenerated.d.ts +1 -0
  77. package/dist/src/generator/checkGenerated.js +34 -0
  78. package/dist/src/generator/checkGenerated.js.map +1 -0
  79. package/dist/src/generator/config.d.ts +13 -0
  80. package/dist/src/generator/config.js +114 -0
  81. package/dist/src/generator/config.js.map +1 -0
  82. package/dist/src/generator/generate.d.ts +1 -0
  83. package/dist/src/generator/generate.js +26 -0
  84. package/dist/src/generator/generate.js.map +1 -0
  85. package/dist/src/generator/labels.d.ts +3 -0
  86. package/dist/src/generator/labels.js +23 -0
  87. package/dist/src/generator/labels.js.map +1 -0
  88. package/dist/src/generator/model.d.ts +81 -0
  89. package/dist/src/generator/model.js +3 -0
  90. package/dist/src/generator/model.js.map +1 -0
  91. package/dist/src/generator/openapi.d.ts +3 -0
  92. package/dist/src/generator/openapi.js +667 -0
  93. package/dist/src/generator/openapi.js.map +1 -0
  94. package/dist/src/generator/refreshSnapshots.d.ts +1 -0
  95. package/dist/src/generator/refreshSnapshots.js +28 -0
  96. package/dist/src/generator/refreshSnapshots.js.map +1 -0
  97. package/dist/src/generator/render.d.ts +3 -0
  98. package/dist/src/generator/render.js +580 -0
  99. package/dist/src/generator/render.js.map +1 -0
  100. package/dist/src/runtime/execute.d.ts +2 -0
  101. package/dist/src/runtime/execute.js +25 -0
  102. package/dist/src/runtime/execute.js.map +1 -0
  103. package/dist/src/runtime/jsonApi.d.ts +3 -0
  104. package/dist/src/runtime/jsonApi.js +43 -0
  105. package/dist/src/runtime/jsonApi.js.map +1 -0
  106. package/dist/src/runtime/pagination.d.ts +8 -0
  107. package/dist/src/runtime/pagination.js +68 -0
  108. package/dist/src/runtime/pagination.js.map +1 -0
  109. package/dist/src/runtime/request.d.ts +22 -0
  110. package/dist/src/runtime/request.js +93 -0
  111. package/dist/src/runtime/request.js.map +1 -0
  112. package/dist/src/runtime/resourceLocator.d.ts +1 -0
  113. package/dist/src/runtime/resourceLocator.js +15 -0
  114. package/dist/src/runtime/resourceLocator.js.map +1 -0
  115. package/dist/tests/generator.test.d.ts +1 -0
  116. package/dist/tests/generator.test.js +622 -0
  117. package/dist/tests/generator.test.js.map +1 -0
  118. package/dist/tests/metadata.test.d.ts +1 -0
  119. package/dist/tests/metadata.test.js +124 -0
  120. package/dist/tests/metadata.test.js.map +1 -0
  121. package/dist/tests/runtime.test.d.ts +1 -0
  122. package/dist/tests/runtime.test.js +181 -0
  123. package/dist/tests/runtime.test.js.map +1 -0
  124. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonApi.js","sourceRoot":"","sources":["../../../src/runtime/jsonApi.ts"],"names":[],"mappings":";;AAQA,4DAoBC;AAED,4DAeC;AA3CD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAiB;IACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,IAAI,IAAI,IAAI,QAAQ;QAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC9C,IAAI,MAAM,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3E,CAAC;IAED,IAAI,eAAe,IAAI,QAAQ;QAAE,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC/E,IAAI,OAAO,IAAI,QAAQ;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACvD,IAAI,MAAM,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAiB;IACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { IExecuteFunctions } from 'n8n-workflow';
2
+ import { type JsonObject } from './jsonApi';
3
+ import { type PlanningCenterRequestOptions } from './request';
4
+ export interface PaginationOptions {
5
+ returnAll: boolean;
6
+ limit: number;
7
+ }
8
+ export declare function collectPaginatedPlanningCenterResults(this: IExecuteFunctions, request: PlanningCenterRequestOptions, options: PaginationOptions): Promise<JsonObject[]>;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectPaginatedPlanningCenterResults = collectPaginatedPlanningCenterResults;
4
+ const jsonApi_1 = require("./jsonApi");
5
+ const request_1 = require("./request");
6
+ const MAX_PAGE_SIZE = 100;
7
+ function nextPathFromLink(next) {
8
+ try {
9
+ const url = new URL(next, 'https://api.planningcenter.invalid');
10
+ return `${url.pathname}${url.search}`;
11
+ }
12
+ catch {
13
+ return next;
14
+ }
15
+ }
16
+ function pathWithPageSize(path, pageSize) {
17
+ try {
18
+ const url = new URL(path, 'https://api.planningcenter.invalid');
19
+ url.searchParams.set('per_page', String(pageSize));
20
+ return `${url.pathname}${url.search}`;
21
+ }
22
+ catch {
23
+ const separator = path.includes('?') ? '&' : '?';
24
+ return `${path}${separator}per_page=${pageSize}`;
25
+ }
26
+ }
27
+ function requestWithPageSize(request, pageSize) {
28
+ return {
29
+ ...request,
30
+ qs: {
31
+ ...request.qs,
32
+ per_page: pageSize,
33
+ },
34
+ };
35
+ }
36
+ async function collectPaginatedPlanningCenterResults(request, options) {
37
+ const collected = [];
38
+ const requestedLimit = Number(options.limit);
39
+ const limit = Number.isFinite(requestedLimit) ? Math.max(0, Math.floor(requestedLimit)) : 0;
40
+ if (!options.returnAll && limit === 0) {
41
+ return [];
42
+ }
43
+ let nextRequest = options.returnAll
44
+ ? request
45
+ : requestWithPageSize(request, Math.min(limit, MAX_PAGE_SIZE));
46
+ while (nextRequest) {
47
+ const response = (await request_1.planningCenterApiRequest.call(this, nextRequest));
48
+ collected.push(...(0, jsonApi_1.normalizeJsonApiResponse)(response));
49
+ if (!options.returnAll && collected.length >= limit) {
50
+ break;
51
+ }
52
+ const next = response.links?.next;
53
+ if (!next) {
54
+ nextRequest = undefined;
55
+ continue;
56
+ }
57
+ const path = nextPathFromLink(next);
58
+ nextRequest = {
59
+ ...request,
60
+ path: options.returnAll
61
+ ? path
62
+ : pathWithPageSize(path, Math.min(limit - collected.length, MAX_PAGE_SIZE)),
63
+ qs: undefined,
64
+ };
65
+ }
66
+ return options.returnAll ? collected : collected.slice(0, limit);
67
+ }
68
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/runtime/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IDataObject, IExecuteFunctions, IHttpRequestMethods } from 'n8n-workflow';
2
+ import { NodeOperationError } from 'n8n-workflow';
3
+ export interface PlanningCenterCredentials {
4
+ applicationId: string;
5
+ secret: string;
6
+ baseUrl: string;
7
+ }
8
+ export interface PlanningCenterRequestOptions {
9
+ method: IHttpRequestMethods;
10
+ path: string;
11
+ qs?: IDataObject;
12
+ body?: any;
13
+ headers?: Record<string, string>;
14
+ }
15
+ export declare const MAX_ATTEMPTS = 5;
16
+ export declare function normalizeBaseUrl(baseUrl: string): string;
17
+ export declare function buildBasicAuthHeader(applicationId: string, secret: string): string;
18
+ export declare function sanitizePlanningCenterError(error: unknown, credentials?: Partial<PlanningCenterCredentials>): string;
19
+ export declare function shouldRetry(statusCode: number | undefined): boolean;
20
+ export declare function retryDelayMs(statusCode: number | undefined, retryAfter: string | undefined, attempt: number): number;
21
+ export declare function planningCenterApiRequest(this: IExecuteFunctions, options: PlanningCenterRequestOptions): Promise<unknown>;
22
+ export declare function toNodeOperationError(context: IExecuteFunctions, error: unknown, itemIndex: number): NodeOperationError;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_ATTEMPTS = void 0;
4
+ exports.normalizeBaseUrl = normalizeBaseUrl;
5
+ exports.buildBasicAuthHeader = buildBasicAuthHeader;
6
+ exports.sanitizePlanningCenterError = sanitizePlanningCenterError;
7
+ exports.shouldRetry = shouldRetry;
8
+ exports.retryDelayMs = retryDelayMs;
9
+ exports.planningCenterApiRequest = planningCenterApiRequest;
10
+ exports.toNodeOperationError = toNodeOperationError;
11
+ const n8n_workflow_1 = require("n8n-workflow");
12
+ exports.MAX_ATTEMPTS = 5;
13
+ function normalizeBaseUrl(baseUrl) {
14
+ return baseUrl.replace(/\/+$/, '');
15
+ }
16
+ function buildBasicAuthHeader(applicationId, secret) {
17
+ return `Basic ${Buffer.from(`${applicationId}:${secret}`).toString('base64')}`;
18
+ }
19
+ function sanitizePlanningCenterError(error, credentials) {
20
+ const raw = error instanceof Error ? error.message : String(error);
21
+ let message = raw || 'Planning Center API request failed';
22
+ for (const secretValue of [credentials?.applicationId, credentials?.secret].filter(Boolean)) {
23
+ message = message.split(String(secretValue)).join('[redacted]');
24
+ }
25
+ return message;
26
+ }
27
+ function shouldRetry(statusCode) {
28
+ return statusCode === 429 || (statusCode !== undefined && statusCode >= 500 && statusCode <= 599);
29
+ }
30
+ function retryDelayMs(statusCode, retryAfter, attempt) {
31
+ if (statusCode === 429 && retryAfter) {
32
+ const seconds = Number(retryAfter);
33
+ if (Number.isFinite(seconds)) {
34
+ return Math.max(0, seconds * 1000);
35
+ }
36
+ const retryDate = Date.parse(retryAfter);
37
+ if (!Number.isNaN(retryDate)) {
38
+ return Math.max(0, retryDate - Date.now());
39
+ }
40
+ }
41
+ return Math.min(1000 * 2 ** attempt, 8000);
42
+ }
43
+ async function sleep(ms) {
44
+ if (ms <= 0)
45
+ return;
46
+ await new Promise((resolve) => setTimeout(resolve, ms));
47
+ }
48
+ function errorStatus(error) {
49
+ return error?.httpCode ?? error?.statusCode ?? error?.response?.statusCode ?? error?.response?.status;
50
+ }
51
+ function retryAfterHeader(error) {
52
+ const headers = error?.response?.headers ?? error?.headers;
53
+ return headers?.['retry-after'] ?? headers?.['Retry-After'];
54
+ }
55
+ async function planningCenterApiRequest(options) {
56
+ const credentials = (await this.getCredentials('planningCenterPatApi'));
57
+ const requestOptions = {
58
+ method: options.method,
59
+ url: `${normalizeBaseUrl(credentials.baseUrl)}${options.path}`,
60
+ qs: options.qs,
61
+ body: options.body,
62
+ json: true,
63
+ headers: {
64
+ Accept: 'application/json',
65
+ 'Content-Type': 'application/json',
66
+ Authorization: buildBasicAuthHeader(credentials.applicationId, credentials.secret),
67
+ ...options.headers,
68
+ },
69
+ };
70
+ let lastError;
71
+ for (let attempt = 0; attempt < exports.MAX_ATTEMPTS; attempt += 1) {
72
+ try {
73
+ return await this.helpers.httpRequest(requestOptions);
74
+ }
75
+ catch (error) {
76
+ lastError = error;
77
+ const statusCode = errorStatus(error);
78
+ if (attempt === exports.MAX_ATTEMPTS - 1 || !shouldRetry(statusCode)) {
79
+ break;
80
+ }
81
+ await sleep(retryDelayMs(statusCode, retryAfterHeader(error), attempt));
82
+ }
83
+ }
84
+ const message = sanitizePlanningCenterError(lastError, credentials);
85
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), lastError, { message });
86
+ }
87
+ function toNodeOperationError(context, error, itemIndex) {
88
+ if (error instanceof n8n_workflow_1.NodeOperationError) {
89
+ return error;
90
+ }
91
+ return new n8n_workflow_1.NodeOperationError(context.getNode(), sanitizePlanningCenterError(error), { itemIndex });
92
+ }
93
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/runtime/request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function extractResourceLocatorId(value: unknown): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractResourceLocatorId = extractResourceLocatorId;
4
+ function isResourceLocatorValue(value) {
5
+ return Boolean(value && typeof value === 'object' && value.__rl === true);
6
+ }
7
+ function extractResourceLocatorId(value) {
8
+ const resolved = isResourceLocatorValue(value) ? value.value : value;
9
+ if (resolved === undefined || resolved === null)
10
+ return '';
11
+ if (typeof resolved === 'string' || typeof resolved === 'number' || typeof resolved === 'boolean')
12
+ return String(resolved);
13
+ return '';
14
+ }
15
+ //# sourceMappingURL=resourceLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceLocator.js","sourceRoot":"","sources":["../../../src/runtime/resourceLocator.ts"],"names":[],"mappings":";;AAMA,4DAOC;AAXD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA4B,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACpG,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAc;IACrD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAErE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3H,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};