@chadwin/sdk 0.5.0 → 0.7.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.
- package/dist/index.cjs +116 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +436 -35
- package/dist/index.d.ts +436 -35
- package/dist/index.js +116 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -444,13 +444,34 @@ var CompanyReports = class {
|
|
|
444
444
|
});
|
|
445
445
|
}
|
|
446
446
|
};
|
|
447
|
+
var FinancialStatements = class {
|
|
448
|
+
constructor(transport) {
|
|
449
|
+
this.transport = transport;
|
|
450
|
+
}
|
|
451
|
+
transport;
|
|
452
|
+
get({
|
|
453
|
+
ticker,
|
|
454
|
+
fiscalYear,
|
|
455
|
+
years
|
|
456
|
+
}) {
|
|
457
|
+
return this.transport.request({
|
|
458
|
+
path: ["v1", "companies", "US", ticker, "financial-statements"],
|
|
459
|
+
query: {
|
|
460
|
+
fiscal_year: fiscalYear,
|
|
461
|
+
years
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
};
|
|
447
466
|
var InsiderTransactions = class {
|
|
448
467
|
constructor(transport) {
|
|
449
468
|
this.transport = transport;
|
|
450
469
|
}
|
|
451
470
|
transport;
|
|
452
471
|
list({
|
|
472
|
+
cursor,
|
|
453
473
|
from,
|
|
474
|
+
limit,
|
|
454
475
|
until,
|
|
455
476
|
tickers,
|
|
456
477
|
transactionCodes
|
|
@@ -458,7 +479,9 @@ var InsiderTransactions = class {
|
|
|
458
479
|
return this.transport.request({
|
|
459
480
|
path: ["v1", "insider-transactions"],
|
|
460
481
|
query: {
|
|
482
|
+
cursor,
|
|
461
483
|
from,
|
|
484
|
+
limit,
|
|
462
485
|
tickers: commaSeparated(tickers),
|
|
463
486
|
transaction_codes: commaSeparated(transactionCodes),
|
|
464
487
|
until
|
|
@@ -466,20 +489,66 @@ var InsiderTransactions = class {
|
|
|
466
489
|
});
|
|
467
490
|
}
|
|
468
491
|
listForCompany({
|
|
492
|
+
cursor,
|
|
469
493
|
ticker,
|
|
470
494
|
from,
|
|
495
|
+
limit,
|
|
471
496
|
until,
|
|
472
497
|
transactionCodes
|
|
473
498
|
}) {
|
|
474
499
|
return this.transport.request({
|
|
475
500
|
path: ["v1", "companies", "US", ticker, "insider-transactions"],
|
|
476
501
|
query: {
|
|
502
|
+
cursor,
|
|
477
503
|
from,
|
|
504
|
+
limit,
|
|
478
505
|
transaction_codes: commaSeparated(transactionCodes),
|
|
479
506
|
until
|
|
480
507
|
}
|
|
481
508
|
});
|
|
482
509
|
}
|
|
510
|
+
async *iterate({
|
|
511
|
+
from,
|
|
512
|
+
until,
|
|
513
|
+
tickers,
|
|
514
|
+
transactionCodes,
|
|
515
|
+
limit
|
|
516
|
+
}) {
|
|
517
|
+
let cursor;
|
|
518
|
+
do {
|
|
519
|
+
const page = await this.list({
|
|
520
|
+
from,
|
|
521
|
+
...until === void 0 ? {} : { until },
|
|
522
|
+
...tickers === void 0 ? {} : { tickers },
|
|
523
|
+
...transactionCodes === void 0 ? {} : { transactionCodes },
|
|
524
|
+
...limit === void 0 ? {} : { limit },
|
|
525
|
+
...cursor === void 0 ? {} : { cursor }
|
|
526
|
+
});
|
|
527
|
+
yield* page.transactions;
|
|
528
|
+
cursor = page.next_cursor ?? void 0;
|
|
529
|
+
} while (cursor !== void 0);
|
|
530
|
+
}
|
|
531
|
+
async *iterateForCompany({
|
|
532
|
+
ticker,
|
|
533
|
+
from,
|
|
534
|
+
until,
|
|
535
|
+
transactionCodes,
|
|
536
|
+
limit
|
|
537
|
+
}) {
|
|
538
|
+
let cursor;
|
|
539
|
+
do {
|
|
540
|
+
const page = await this.listForCompany({
|
|
541
|
+
ticker,
|
|
542
|
+
from,
|
|
543
|
+
...until === void 0 ? {} : { until },
|
|
544
|
+
...transactionCodes === void 0 ? {} : { transactionCodes },
|
|
545
|
+
...limit === void 0 ? {} : { limit },
|
|
546
|
+
...cursor === void 0 ? {} : { cursor }
|
|
547
|
+
});
|
|
548
|
+
yield* page.transactions;
|
|
549
|
+
cursor = page.next_cursor ?? void 0;
|
|
550
|
+
} while (cursor !== void 0);
|
|
551
|
+
}
|
|
483
552
|
};
|
|
484
553
|
var InsiderFilings = class {
|
|
485
554
|
constructor(transport) {
|
|
@@ -500,29 +569,73 @@ var ProposedSales = class {
|
|
|
500
569
|
}
|
|
501
570
|
transport;
|
|
502
571
|
list({
|
|
572
|
+
cursor,
|
|
503
573
|
from,
|
|
574
|
+
limit,
|
|
504
575
|
until,
|
|
505
576
|
tickers
|
|
506
577
|
}) {
|
|
507
578
|
return this.transport.request({
|
|
508
579
|
path: ["v1", "proposed-sales"],
|
|
509
580
|
query: {
|
|
581
|
+
cursor,
|
|
510
582
|
from,
|
|
583
|
+
limit,
|
|
511
584
|
tickers: commaSeparated(tickers),
|
|
512
585
|
until
|
|
513
586
|
}
|
|
514
587
|
});
|
|
515
588
|
}
|
|
516
589
|
listForCompany({
|
|
590
|
+
cursor,
|
|
517
591
|
ticker,
|
|
518
592
|
from,
|
|
593
|
+
limit,
|
|
519
594
|
until
|
|
520
595
|
}) {
|
|
521
596
|
return this.transport.request({
|
|
522
597
|
path: ["v1", "companies", "US", ticker, "proposed-sales"],
|
|
523
|
-
query: { from, until }
|
|
598
|
+
query: { cursor, from, limit, until }
|
|
524
599
|
});
|
|
525
600
|
}
|
|
601
|
+
async *iterate({
|
|
602
|
+
from,
|
|
603
|
+
until,
|
|
604
|
+
tickers,
|
|
605
|
+
limit
|
|
606
|
+
}) {
|
|
607
|
+
let cursor;
|
|
608
|
+
do {
|
|
609
|
+
const page = await this.list({
|
|
610
|
+
from,
|
|
611
|
+
...until === void 0 ? {} : { until },
|
|
612
|
+
...tickers === void 0 ? {} : { tickers },
|
|
613
|
+
...limit === void 0 ? {} : { limit },
|
|
614
|
+
...cursor === void 0 ? {} : { cursor }
|
|
615
|
+
});
|
|
616
|
+
yield* page.proposed_sales;
|
|
617
|
+
cursor = page.next_cursor ?? void 0;
|
|
618
|
+
} while (cursor !== void 0);
|
|
619
|
+
}
|
|
620
|
+
async *iterateForCompany({
|
|
621
|
+
ticker,
|
|
622
|
+
from,
|
|
623
|
+
until,
|
|
624
|
+
limit
|
|
625
|
+
}) {
|
|
626
|
+
let cursor;
|
|
627
|
+
do {
|
|
628
|
+
const page = await this.listForCompany({
|
|
629
|
+
ticker,
|
|
630
|
+
from,
|
|
631
|
+
...until === void 0 ? {} : { until },
|
|
632
|
+
...limit === void 0 ? {} : { limit },
|
|
633
|
+
...cursor === void 0 ? {} : { cursor }
|
|
634
|
+
});
|
|
635
|
+
yield* page.proposed_sales;
|
|
636
|
+
cursor = page.next_cursor ?? void 0;
|
|
637
|
+
} while (cursor !== void 0);
|
|
638
|
+
}
|
|
526
639
|
getFiling({
|
|
527
640
|
accessionNumber
|
|
528
641
|
}) {
|
|
@@ -701,6 +814,7 @@ var Chadwin = class {
|
|
|
701
814
|
companies;
|
|
702
815
|
companyReports;
|
|
703
816
|
feeds;
|
|
817
|
+
financialStatements;
|
|
704
818
|
insiderFilings;
|
|
705
819
|
insiderTransactions;
|
|
706
820
|
institutionalFilings;
|
|
@@ -717,6 +831,7 @@ var Chadwin = class {
|
|
|
717
831
|
this.companies = new Companies(transport);
|
|
718
832
|
this.companyReports = new CompanyReports(transport);
|
|
719
833
|
this.feeds = new Feeds(transport);
|
|
834
|
+
this.financialStatements = new FinancialStatements(transport);
|
|
720
835
|
this.insiderFilings = new InsiderFilings(transport);
|
|
721
836
|
this.insiderTransactions = new InsiderTransactions(transport);
|
|
722
837
|
this.institutionalFilings = new InstitutionalFilings(transport);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export { Chadwin, type ClientOptions } from \"./client\";\nexport { APIError } from \"./error\";\nexport type { PromiseWithResponse } from \"./promise\";\nexport type {\n CompanyReportFeedFilters,\n CompanyReportFiscalPeriod,\n CompanyReportForm,\n InsiderActivityFeedFilters,\n InsiderActivityForm,\n InsiderTransactionCode,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n InstitutionalFilingForm,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"./types\";\n","export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-filings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFiscalPeriod,\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getByFiscalPeriod({\n ticker,\n fiscalYear,\n fiscalPeriod,\n }: {\n ticker: string;\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportForFiscalPeriod\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"quarterly\",\n String(fiscalYear),\n fiscalPeriod,\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n transactionCodes,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n transactionCodes,\n }: {\n ticker: string;\n from: string;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n from,\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n from,\n until,\n tickers,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n from,\n tickers: commaSeparated(tickers),\n until,\n },\n });\n }\n\n listForCompany({\n ticker,\n from,\n until,\n }: {\n ticker: string;\n from: string;\n until?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { from, until },\n });\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sale-filings\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n search({\n query,\n }: {\n query: string;\n }): PromiseWithResponse<JsonResponse<\"searchInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", \"search\"],\n query: { query },\n });\n }\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalManager\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPeriods\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"periods\"],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerHoldings\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"holdings\"],\n query: { cursor, limit, period },\n });\n }\n\n listPositions({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPositions\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"positions\"],\n query: { cursor, limit, period },\n });\n }\n\n async *iterateManagers({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/error.ts","../src/promise.ts","../src/internal/transport.ts","../src/resources/feeds.ts","../src/resources/products.ts","../src/client.ts"],"sourcesContent":["export { Chadwin, type ClientOptions } from \"./client\";\nexport { APIError } from \"./error\";\nexport type { PromiseWithResponse } from \"./promise\";\nexport type {\n CompanyReportFeedFilters,\n CompanyReportFiscalPeriod,\n CompanyReportForm,\n FinancialStatementsGetParams,\n InsiderActivityFeedFilters,\n InsiderActivityForm,\n InsiderTransactionCode,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n InstitutionalFilingForm,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"./types\";\n","export interface APIErrorOptions {\n status?: number;\n code?: string;\n headers?: Headers;\n}\n\nexport class APIError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly headers: Headers | undefined;\n\n constructor(message: string, options: APIErrorOptions = {}) {\n super(message);\n this.name = \"APIError\";\n this.status = options.status;\n this.code = options.code;\n this.headers = options.headers;\n }\n}\n","export interface PromiseWithResponse<T> extends Promise<T> {\n withResponse(): Promise<{ data: T; response: Response }>;\n}\n\nexport function createPromiseWithResponse<T>(\n response: Promise<{ data: T; response: Response }>,\n): PromiseWithResponse<T> {\n const promise = response.then(({ data }) => data) as PromiseWithResponse<T>;\n\n Object.defineProperty(promise, \"withResponse\", {\n value: () => response,\n });\n\n // A caller may consume only withResponse(). Mark this branch as handled while\n // preserving the original rejection for ordinary await and Promise chaining.\n void promise.catch(() => undefined);\n return promise;\n}\n","import { APIError } from \"../error\";\nimport {\n createPromiseWithResponse,\n type PromiseWithResponse,\n} from \"../promise\";\n\nexport const ATTEMPT_TIMEOUT_MS = 30_000;\nexport const MAX_RETRIES = 2;\nexport const BASE_RETRY_DELAY_MS = 250;\nexport const MAX_RETRY_DELAY_MS = 30_000;\n\nconst PRODUCTION_BASE_URL = \"https://api.chadwin.co\";\nconst INVALID_BASE_URL_MESSAGE =\n \"baseURL must be an HTTP or HTTPS URL without credentials, a query, or a fragment\";\nconst SAFE_ERROR_CODE = /^[a-z][a-z0-9_]{0,63}$/;\n\ntype QueryScalar = boolean | number | string;\n\nexport type QueryValue =\n | QueryScalar\n | readonly QueryScalar[]\n | null\n | undefined;\n\nexport interface TransportRequest {\n path: readonly string[];\n query?: Readonly<Record<string, QueryValue>>;\n responseType?: \"json\" | \"text\";\n}\n\ninterface HttpTransportOptions {\n apiKey: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\ninterface AttemptErrorResponse {\n code: string | undefined;\n response: Response;\n}\n\nclass AttemptFailure extends Error {\n constructor(readonly timedOut: boolean) {\n super(timedOut ? \"Request timed out\" : \"Network request failed\");\n }\n}\n\nexport class HttpTransport {\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #baseURL: URL;\n\n constructor(options: HttpTransportOptions) {\n this.#apiKey = options.apiKey;\n this.#baseURL = normalizeBaseURL(options.baseURL ?? PRODUCTION_BASE_URL);\n this.#fetch = options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n request<T>(request: TransportRequest): PromiseWithResponse<T> {\n return createPromiseWithResponse(this.#performRequest<T>(request));\n }\n\n async #performRequest<T>(\n request: TransportRequest,\n ): Promise<{ data: T; response: Response }> {\n const url = buildUrl(this.#baseURL, request);\n let lastFailureWasTimeout = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n let result: { data: T; response: Response } | AttemptErrorResponse;\n try {\n result = await this.#attempt<T>(url, request.responseType ?? \"json\");\n } catch (error) {\n if (error instanceof APIError) {\n throw error;\n }\n if (!(error instanceof AttemptFailure)) {\n throw new APIError(\"API request failed\");\n }\n lastFailureWasTimeout = error.timedOut;\n if (attempt === MAX_RETRIES) {\n throw new APIError(\n lastFailureWasTimeout\n ? \"API request timed out\"\n : \"API request failed\",\n );\n }\n await wait(backoffDelay(attempt));\n continue;\n }\n\n if (\"data\" in result) {\n return result;\n }\n\n if (shouldRetry(result.response.status, result.code) && attempt < MAX_RETRIES) {\n await wait(retryDelay(result.response, attempt));\n continue;\n }\n\n throw errorFromResponse(result.response, result.code, this.#apiKey);\n }\n\n throw new APIError(\n lastFailureWasTimeout ? \"API request timed out\" : \"API request failed\",\n );\n }\n\n async #attempt<T>(\n url: URL,\n responseType: \"json\" | \"text\",\n ): Promise<{ data: T; response: Response } | AttemptErrorResponse> {\n const controller = new AbortController();\n let timedOut = false;\n const timeout = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, ATTEMPT_TIMEOUT_MS);\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, {\n headers: {\n authorization: `Bearer ${this.#apiKey}`,\n },\n method: \"GET\",\n signal: controller.signal,\n });\n } catch {\n throw new AttemptFailure(timedOut);\n }\n\n if (!response.ok) {\n return {\n code: await readErrorCode(response, this.#apiKey),\n response,\n };\n }\n\n try {\n const data =\n responseType === \"text\"\n ? await response.text()\n : await response.json();\n return { data: data as T, response };\n } catch (error) {\n if (responseType === \"json\" && error instanceof SyntaxError) {\n throw new APIError(\"API returned an invalid JSON response\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n throw new APIError(\"API returned an invalid response body\", {\n headers: safeErrorHeaders(response.headers, this.#apiKey),\n status: response.status,\n });\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n\nfunction normalizeBaseURL(value: string) {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n url.username ||\n url.password ||\n url.href !== `${url.origin}${url.pathname}`\n ) {\n throw new TypeError(INVALID_BASE_URL_MESSAGE);\n }\n url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/`;\n return url;\n}\n\nfunction buildUrl(baseURL: URL, request: TransportRequest) {\n const path = request.path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n const url = new URL(path, baseURL);\n for (const [key, value] of Object.entries(request.query ?? {})) {\n if (value === undefined || value === null) continue;\n const values = Array.isArray(value) ? value : [value];\n for (const entry of values) {\n url.searchParams.append(key, String(entry));\n }\n }\n return url;\n}\n\nasync function readErrorCode(response: Response, apiKey: string) {\n try {\n const body: unknown = await response.json();\n if (\n body !== null &&\n typeof body === \"object\" &&\n \"error\" in body &&\n typeof body.error === \"string\" &&\n body.error !== apiKey &&\n SAFE_ERROR_CODE.test(body.error)\n ) {\n return body.error;\n }\n } catch {\n // A missing or malformed error body falls back to the HTTP status.\n }\n return undefined;\n}\n\nfunction shouldRetry(status: number, code: string | undefined) {\n if (code === \"billing_period_quota_exceeded\") return false;\n return (\n code === \"rate_limited\" ||\n status === 502 ||\n status === 503 ||\n status === 504\n );\n}\n\nfunction retryDelay(response: Response, retry: number) {\n const retryAfter = response.headers.get(\"retry-after\");\n if (retryAfter === null) return backoffDelay(retry);\n\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(seconds * 1_000, MAX_RETRY_DELAY_MS);\n }\n\n const date = Date.parse(retryAfter);\n if (!Number.isNaN(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_DELAY_MS);\n }\n\n return backoffDelay(retry);\n}\n\nfunction backoffDelay(retry: number) {\n return Math.min(BASE_RETRY_DELAY_MS * 2 ** retry, MAX_RETRY_DELAY_MS);\n}\n\nfunction wait(milliseconds: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction errorFromResponse(\n response: Response,\n code: string | undefined,\n apiKey: string,\n) {\n const suffix = code ? ` (${code})` : \"\";\n return new APIError(\n `API request failed with status ${response.status}${suffix}`,\n {\n ...(code === undefined ? {} : { code }),\n headers: safeErrorHeaders(response.headers, apiKey),\n status: response.status,\n },\n );\n}\n\nfunction safeErrorHeaders(headers: Headers, apiKey: string) {\n const safe = new Headers();\n for (const [name, value] of headers) {\n const normalizedName = name.toLowerCase();\n if (\n normalizedName === \"authorization\" ||\n normalizedName === \"cookie\" ||\n normalizedName === \"proxy-authorization\" ||\n normalizedName === \"set-cookie\" ||\n value.includes(apiKey)\n ) {\n continue;\n }\n safe.append(name, value);\n }\n return safe;\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFeedFilters,\n InsiderActivityFeedFilters,\n InsiderTransactionFeedFilters,\n InstitutionalFilingFeedFilters,\n} from \"../types\";\nimport type { JsonResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Feeds {\n readonly companyReports: CompanyReportFeed;\n readonly insiderActivity: InsiderActivityFeed;\n readonly insiderTransactions: InsiderTransactionFeed;\n readonly institutionalFilings: InstitutionalFilingFeed;\n\n constructor(transport: HttpTransport) {\n this.companyReports = new CompanyReportFeed(transport);\n this.insiderActivity = new InsiderActivityFeed(transport);\n this.insiderTransactions = new InsiderTransactionFeed(transport);\n this.institutionalFilings = new InstitutionalFilingFeed(transport);\n }\n}\n\nclass CompanyReportFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: CompanyReportFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: CompanyReportFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: CompanyReportFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listCompanyReportFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"company-reports\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderActivityFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderActivityFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderActivityFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderActivityFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderActivityFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-activity\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n\nclass InsiderTransactionFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InsiderTransactionFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InsiderTransactionFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InsiderTransactionFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInsiderTransactionFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\", \"feed\"],\n query: {\n ...mode,\n limit: filters.limit,\n transaction_codes: filters.transactionCodes?.join(\",\"),\n },\n });\n }\n}\n\nclass InstitutionalFilingFeed {\n constructor(private readonly transport: HttpTransport) {}\n\n listLatest(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, {});\n }\n\n listAfter({\n cursor,\n ...filters\n }: InstitutionalFilingFeedFilters & {\n cursor: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { cursor });\n }\n\n startFromNow(\n filters: InstitutionalFilingFeedFilters = {},\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.#request(filters, { start: \"now\" });\n }\n\n #request(\n filters: InstitutionalFilingFeedFilters,\n mode: { cursor?: string; start?: \"now\" },\n ): PromiseWithResponse<JsonResponse<\"listInstitutionalFilingFeed\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-filings\", \"feed\"],\n query: {\n ...mode,\n forms: filters.forms?.join(\",\"),\n limit: filters.limit,\n },\n });\n }\n}\n","import type { PromiseWithResponse } from \"../promise\";\nimport type {\n CompanyReportFiscalPeriod,\n FinancialStatementsGetParams,\n InsiderTransactionCode,\n InstitutionalHolding,\n InstitutionalManager,\n InstitutionalPosition,\n} from \"../types\";\nimport type { JsonResponse, TextResponse } from \"../internal/operations\";\nimport type { HttpTransport } from \"../internal/transport\";\n\nexport class Companies {\n constructor(private readonly transport: HttpTransport) {}\n\n search({ query }: { query: string }): PromiseWithResponse<JsonResponse<\"searchCompanies\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", \"search\"],\n query: { query },\n });\n }\n\n get({ ticker }: { ticker: string }): PromiseWithResponse<JsonResponse<\"getCompany\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker],\n });\n }\n}\n\nexport class CompanyReports {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecCompanyReport\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"company-reports\", accessionNumber],\n });\n }\n\n getByFiscalYear({\n ticker,\n fiscalYear,\n }: {\n ticker: string;\n fiscalYear: number;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReport\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"annual\",\n String(fiscalYear),\n ],\n });\n }\n\n getByFiscalPeriod({\n ticker,\n fiscalYear,\n fiscalPeriod,\n }: {\n ticker: string;\n fiscalYear: number;\n fiscalPeriod: CompanyReportFiscalPeriod;\n }): PromiseWithResponse<JsonResponse<\"getCompanyReportForFiscalPeriod\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"companies\",\n \"US\",\n ticker,\n \"reports\",\n \"quarterly\",\n String(fiscalYear),\n fiscalPeriod,\n ],\n });\n }\n\n getHtml({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<TextResponse<\"getSecCompanyReportContent\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"company-reports\",\n accessionNumber,\n \"content.html\",\n ],\n responseType: \"text\",\n });\n }\n}\n\nexport class FinancialStatements {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n ticker,\n fiscalYear,\n years,\n }: FinancialStatementsGetParams): PromiseWithResponse<\n JsonResponse<\"getCompanyFinancialStatements\">\n > {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"financial-statements\"],\n query: {\n fiscal_year: fiscalYear,\n years,\n },\n });\n }\n}\n\nexport class InsiderTransactions {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n cursor,\n from,\n limit,\n until,\n tickers,\n transactionCodes,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"insider-transactions\"],\n query: {\n cursor,\n from,\n limit,\n tickers: commaSeparated(tickers),\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n listForCompany({\n cursor,\n ticker,\n from,\n limit,\n until,\n transactionCodes,\n }: {\n cursor?: string;\n ticker: string;\n from: string;\n limit?: number;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n }): PromiseWithResponse<JsonResponse<\"listCompanyInsiderTransactions\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"insider-transactions\"],\n query: {\n cursor,\n from,\n limit,\n transaction_codes: commaSeparated(transactionCodes),\n until,\n },\n });\n }\n\n async *iterate({\n from,\n until,\n tickers,\n transactionCodes,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n transactionCodes?: InsiderTransactionCode[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listInsiderTransactions\">[\"transactions\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n from,\n ...(until === undefined ? {} : { until }),\n ...(tickers === undefined ? {} : { tickers }),\n ...(transactionCodes === undefined ? {} : { transactionCodes }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.transactions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateForCompany({\n ticker,\n from,\n until,\n transactionCodes,\n limit,\n }: {\n ticker: string;\n from: string;\n until?: string;\n transactionCodes?: InsiderTransactionCode[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listCompanyInsiderTransactions\">[\"transactions\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.listForCompany({\n ticker,\n from,\n ...(until === undefined ? {} : { until }),\n ...(transactionCodes === undefined ? {} : { transactionCodes }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.transactions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InsiderFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInsiderFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"insider-filings\", accessionNumber],\n });\n }\n}\n\nexport class ProposedSales {\n constructor(private readonly transport: HttpTransport) {}\n\n list({\n cursor,\n from,\n limit,\n until,\n tickers,\n }: {\n cursor?: string;\n from: string;\n limit?: number;\n until?: string;\n tickers?: string[];\n }): PromiseWithResponse<JsonResponse<\"listProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"proposed-sales\"],\n query: {\n cursor,\n from,\n limit,\n tickers: commaSeparated(tickers),\n until,\n },\n });\n }\n\n listForCompany({\n cursor,\n ticker,\n from,\n limit,\n until,\n }: {\n cursor?: string;\n ticker: string;\n from: string;\n limit?: number;\n until?: string;\n }): PromiseWithResponse<JsonResponse<\"listCompanyProposedSales\">> {\n return this.transport.request({\n path: [\"v1\", \"companies\", \"US\", ticker, \"proposed-sales\"],\n query: { cursor, from, limit, until },\n });\n }\n\n async *iterate({\n from,\n until,\n tickers,\n limit,\n }: {\n from: string;\n until?: string;\n tickers?: string[];\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listProposedSales\">[\"proposed_sales\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n from,\n ...(until === undefined ? {} : { until }),\n ...(tickers === undefined ? {} : { tickers }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.proposed_sales;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateForCompany({\n ticker,\n from,\n until,\n limit,\n }: {\n ticker: string;\n from: string;\n until?: string;\n limit?: number;\n }): AsyncGenerator<\n JsonResponse<\"listCompanyProposedSales\">[\"proposed_sales\"][number]\n > {\n let cursor: string | undefined;\n do {\n const page = await this.listForCompany({\n ticker,\n from,\n ...(until === undefined ? {} : { until }),\n ...(limit === undefined ? {} : { limit }),\n ...(cursor === undefined ? {} : { cursor }),\n });\n yield* page.proposed_sales;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n getFiling({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecProposedSaleFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"proposed-sale-filings\", accessionNumber],\n });\n }\n}\n\nexport class InstitutionalFilings {\n constructor(private readonly transport: HttpTransport) {}\n\n get({\n accessionNumber,\n }: {\n accessionNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getSecInstitutionalFiling\">> {\n return this.transport.request({\n path: [\"v1\", \"sec\", \"institutional-filings\", accessionNumber],\n });\n }\n\n listHoldings({\n accessionNumber,\n cursor,\n limit,\n }: {\n accessionNumber: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listSecInstitutionalFilingHoldings\">> {\n return this.transport.request({\n path: [\n \"v1\",\n \"sec\",\n \"institutional-filings\",\n accessionNumber,\n \"holdings\",\n ],\n query: { cursor, limit },\n });\n }\n\n async *iterateHoldings({\n accessionNumber,\n limit,\n }: {\n accessionNumber: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n accessionNumber,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nexport class InstitutionalManagers {\n constructor(private readonly transport: HttpTransport) {}\n\n search({\n query,\n }: {\n query: string;\n }): PromiseWithResponse<JsonResponse<\"searchInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", \"search\"],\n query: { query },\n });\n }\n\n list({\n cik,\n form13fFileNumber,\n cursor,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n cursor?: string;\n limit?: number;\n } = {}): PromiseWithResponse<JsonResponse<\"listInstitutionalManagers\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\"],\n query: {\n cik,\n cursor,\n form_13f_file_number: form13fFileNumber,\n limit,\n },\n });\n }\n\n get({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"getInstitutionalManager\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber],\n });\n }\n\n listPeriods({\n form13fFileNumber,\n }: {\n form13fFileNumber: string;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPeriods\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"periods\"],\n });\n }\n\n listHoldings({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerHoldings\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"holdings\"],\n query: { cursor, limit, period },\n });\n }\n\n listPositions({\n form13fFileNumber,\n period,\n cursor,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n cursor?: string;\n limit?: number;\n }): PromiseWithResponse<JsonResponse<\"listInstitutionalManagerPositions\">> {\n return this.transport.request({\n path: [\"v1\", \"institutional-managers\", form13fFileNumber, \"positions\"],\n query: { cursor, limit, period },\n });\n }\n\n async *iterateManagers({\n cik,\n form13fFileNumber,\n limit,\n }: {\n cik?: string;\n form13fFileNumber?: string;\n limit?: number;\n } = {}): AsyncGenerator<InstitutionalManager> {\n let cursor: string | undefined;\n do {\n const page = await this.list({\n ...(cik === undefined ? {} : { cik }),\n ...(cursor === undefined ? {} : { cursor }),\n ...(form13fFileNumber === undefined ? {} : { form13fFileNumber }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.managers;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iterateHoldings({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalHolding> {\n let cursor: string | undefined;\n do {\n const page = await this.listHoldings({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.holdings;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n async *iteratePositions({\n form13fFileNumber,\n period,\n limit,\n }: {\n form13fFileNumber: string;\n period: string;\n limit?: number;\n }): AsyncGenerator<InstitutionalPosition> {\n let cursor: string | undefined;\n do {\n const page = await this.listPositions({\n form13fFileNumber,\n period,\n ...(cursor === undefined ? {} : { cursor }),\n ...(limit === undefined ? {} : { limit }),\n });\n yield* page.positions;\n cursor = page.next_cursor ?? undefined;\n } while (cursor !== undefined);\n }\n}\n\nfunction commaSeparated(values: readonly string[] | undefined) {\n return values?.join(\",\");\n}\n","import { HttpTransport } from \"./internal/transport\";\nimport { Feeds } from \"./resources/feeds\";\nimport {\n Companies,\n CompanyReports,\n FinancialStatements,\n InsiderFilings,\n InsiderTransactions,\n InstitutionalFilings,\n InstitutionalManagers,\n ProposedSales,\n} from \"./resources/products\";\n\nexport interface ClientOptions {\n apiKey: string;\n baseURL?: string;\n}\n\nexport class Chadwin {\n readonly companies: Companies;\n readonly companyReports: CompanyReports;\n readonly feeds: Feeds;\n readonly financialStatements: FinancialStatements;\n readonly insiderFilings: InsiderFilings;\n readonly insiderTransactions: InsiderTransactions;\n readonly institutionalFilings: InstitutionalFilings;\n readonly institutionalManagers: InstitutionalManagers;\n readonly proposedSales: ProposedSales;\n\n constructor(options: ClientOptions) {\n if (\n !options ||\n typeof options.apiKey !== \"string\" ||\n options.apiKey.trim().length === 0\n ) {\n throw new TypeError(\"A non-empty Chadwin API key is required\");\n }\n\n const transport = new HttpTransport({\n apiKey: options.apiKey,\n ...(options.baseURL === undefined ? {} : { baseURL: options.baseURL }),\n });\n this.companies = new Companies(transport);\n this.companyReports = new CompanyReports(transport);\n this.feeds = new Feeds(transport);\n this.financialStatements = new FinancialStatements(transport);\n this.insiderFilings = new InsiderFilings(transport);\n this.insiderTransactions = new InsiderTransactions(transport);\n this.institutionalFilings = new InstitutionalFilings(transport);\n this.institutionalManagers = new InstitutionalManagers(transport);\n this.proposedSales = new ProposedSales(transport);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,WAAN,cAAuB,MAAM;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,UAA2B,CAAC,GAAG;AAC1D,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ;AACtB,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;;;ACdO,SAAS,0BACd,UACwB;AACxB,QAAM,UAAU,SAAS,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI;AAEhD,SAAO,eAAe,SAAS,gBAAgB;AAAA,IAC7C,OAAO,MAAM;AAAA,EACf,CAAC;AAID,OAAK,QAAQ,MAAM,MAAM,MAAS;AAClC,SAAO;AACT;;;ACXO,IAAM,qBAAqB;AAC3B,IAAM,cAAc;AACpB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAElC,IAAM,sBAAsB;AAC5B,IAAM,2BACJ;AACF,IAAM,kBAAkB;AA2BxB,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACjC,YAAqB,UAAmB;AACtC,UAAM,WAAW,sBAAsB,wBAAwB;AAD5C;AAAA,EAErB;AAAA,EAFqB;AAGvB;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAA+B;AACzC,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,iBAAiB,QAAQ,WAAW,mBAAmB;AACvE,SAAK,SAAS,QAAQ,UAAU,CAAC,OAAO,SAAS,WAAW,MAAM,OAAO,IAAI;AAAA,EAC/E;AAAA,EAEA,QAAW,SAAmD;AAC5D,WAAO,0BAA0B,KAAK,gBAAmB,OAAO,CAAC;AAAA,EACnE;AAAA,EAEA,MAAM,gBACJ,SAC0C;AAC1C,UAAM,MAAM,SAAS,KAAK,UAAU,OAAO;AAC3C,QAAI,wBAAwB;AAE5B,aAAS,UAAU,GAAG,WAAW,aAAa,WAAW,GAAG;AAC1D,UAAI;AACJ,UAAI;AACF,iBAAS,MAAM,KAAK,SAAY,KAAK,QAAQ,gBAAgB,MAAM;AAAA,MACrE,SAAS,OAAO;AACd,YAAI,iBAAiB,UAAU;AAC7B,gBAAM;AAAA,QACR;AACA,YAAI,EAAE,iBAAiB,iBAAiB;AACtC,gBAAM,IAAI,SAAS,oBAAoB;AAAA,QACzC;AACA,gCAAwB,MAAM;AAC9B,YAAI,YAAY,aAAa;AAC3B,gBAAM,IAAI;AAAA,YACR,wBACI,0BACA;AAAA,UACN;AAAA,QACF;AACA,cAAM,KAAK,aAAa,OAAO,CAAC;AAChC;AAAA,MACF;AAEA,UAAI,UAAU,QAAQ;AACpB,eAAO;AAAA,MACT;AAEA,UAAI,YAAY,OAAO,SAAS,QAAQ,OAAO,IAAI,KAAK,UAAU,aAAa;AAC7E,cAAM,KAAK,WAAW,OAAO,UAAU,OAAO,CAAC;AAC/C;AAAA,MACF;AAEA,YAAM,kBAAkB,OAAO,UAAU,OAAO,MAAM,KAAK,OAAO;AAAA,IACpE;AAEA,UAAM,IAAI;AAAA,MACR,wBAAwB,0BAA0B;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,KACA,cACiE;AACjE,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI,WAAW;AACf,UAAM,UAAU,WAAW,MAAM;AAC/B,iBAAW;AACX,iBAAW,MAAM;AAAA,IACnB,GAAG,kBAAkB;AAErB,QAAI;AACF,UAAI;AACJ,UAAI;AACF,mBAAW,MAAM,KAAK,OAAO,KAAK;AAAA,UAChC,SAAS;AAAA,YACP,eAAe,UAAU,KAAK,OAAO;AAAA,UACvC;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ,WAAW;AAAA,QACrB,CAAC;AAAA,MACH,QAAQ;AACN,cAAM,IAAI,eAAe,QAAQ;AAAA,MACnC;AAEA,UAAI,CAAC,SAAS,IAAI;AAChB,eAAO;AAAA,UACL,MAAM,MAAM,cAAc,UAAU,KAAK,OAAO;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OACJ,iBAAiB,SACb,MAAM,SAAS,KAAK,IACpB,MAAM,SAAS,KAAK;AAC1B,eAAO,EAAE,MAAiB,SAAS;AAAA,MACrC,SAAS,OAAO;AACd,YAAI,iBAAiB,UAAU,iBAAiB,aAAa;AAC3D,gBAAM,IAAI,SAAS,yCAAyC;AAAA,YAC1D,SAAS,iBAAiB,SAAS,SAAS,KAAK,OAAO;AAAA,YACxD,QAAQ,SAAS;AAAA,UACnB,CAAC;AAAA,QACH;AACA,cAAM,IAAI,SAAS,yCAAyC;AAAA,UAC1D,SAAS,iBAAiB,SAAS,SAAS,KAAK,OAAO;AAAA,UACxD,QAAQ,SAAS;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,OAAe;AACvC,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI,UAAU,wBAAwB;AAAA,EAC9C;AACA,MACG,IAAI,aAAa,WAAW,IAAI,aAAa,YAC9C,IAAI,YACJ,IAAI,YACJ,IAAI,SAAS,GAAG,IAAI,MAAM,GAAG,IAAI,QAAQ,IACzC;AACA,UAAM,IAAI,UAAU,wBAAwB;AAAA,EAC9C;AACA,MAAI,WAAW,GAAG,IAAI,SAAS,QAAQ,QAAQ,EAAE,CAAC;AAClD,SAAO;AACT;AAEA,SAAS,SAAS,SAAc,SAA2B;AACzD,QAAM,OAAO,QAAQ,KAAK,IAAI,CAAC,YAAY,mBAAmB,OAAO,CAAC,EAAE,KAAK,GAAG;AAChF,QAAM,MAAM,IAAI,IAAI,MAAM,OAAO;AACjC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC,GAAG;AAC9D,QAAI,UAAU,UAAa,UAAU,KAAM;AAC3C,UAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,eAAW,SAAS,QAAQ;AAC1B,UAAI,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,cAAc,UAAoB,QAAgB;AAC/D,MAAI;AACF,UAAM,OAAgB,MAAM,SAAS,KAAK;AAC1C,QACE,SAAS,QACT,OAAO,SAAS,YAChB,WAAW,QACX,OAAO,KAAK,UAAU,YACtB,KAAK,UAAU,UACf,gBAAgB,KAAK,KAAK,KAAK,GAC/B;AACA,aAAO,KAAK;AAAA,IACd;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAAgB,MAA0B;AAC7D,MAAI,SAAS,gCAAiC,QAAO;AACrD,SACE,SAAS,kBACT,WAAW,OACX,WAAW,OACX,WAAW;AAEf;AAEA,SAAS,WAAW,UAAoB,OAAe;AACrD,QAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AACrD,MAAI,eAAe,KAAM,QAAO,aAAa,KAAK;AAElD,QAAM,UAAU,OAAO,UAAU;AACjC,MAAI,OAAO,SAAS,OAAO,KAAK,WAAW,GAAG;AAC5C,WAAO,KAAK,IAAI,UAAU,KAAO,kBAAkB;AAAA,EACrD;AAEA,QAAM,OAAO,KAAK,MAAM,UAAU;AAClC,MAAI,CAAC,OAAO,MAAM,IAAI,GAAG;AACvB,WAAO,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC,GAAG,kBAAkB;AAAA,EACpE;AAEA,SAAO,aAAa,KAAK;AAC3B;AAEA,SAAS,aAAa,OAAe;AACnC,SAAO,KAAK,IAAI,sBAAsB,KAAK,OAAO,kBAAkB;AACtE;AAEA,SAAS,KAAK,cAAsB;AAClC,SAAO,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,YAAY,CAAC;AACzE;AAEA,SAAS,kBACP,UACA,MACA,QACA;AACA,QAAM,SAAS,OAAO,KAAK,IAAI,MAAM;AACrC,SAAO,IAAI;AAAA,IACT,kCAAkC,SAAS,MAAM,GAAG,MAAM;AAAA,IAC1D;AAAA,MACE,GAAI,SAAS,SAAY,CAAC,IAAI,EAAE,KAAK;AAAA,MACrC,SAAS,iBAAiB,SAAS,SAAS,MAAM;AAAA,MAClD,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAkB,QAAgB;AAC1D,QAAM,OAAO,IAAI,QAAQ;AACzB,aAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,UAAM,iBAAiB,KAAK,YAAY;AACxC,QACE,mBAAmB,mBACnB,mBAAmB,YACnB,mBAAmB,yBACnB,mBAAmB,gBACnB,MAAM,SAAS,MAAM,GACrB;AACA;AAAA,IACF;AACA,SAAK,OAAO,MAAM,KAAK;AAAA,EACzB;AACA,SAAO;AACT;;;AChRO,IAAM,QAAN,MAAY;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,WAA0B;AACpC,SAAK,iBAAiB,IAAI,kBAAkB,SAAS;AACrD,SAAK,kBAAkB,IAAI,oBAAoB,SAAS;AACxD,SAAK,sBAAsB,IAAI,uBAAuB,SAAS;AAC/D,SAAK,uBAAuB,IAAI,wBAAwB,SAAS;AAAA,EACnE;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACtB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAoC,CAAC,GACuB;AAC5D,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAE+D;AAC7D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAoC,CAAC,GACuB;AAC5D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MAC4D;AAC5D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,mBAAmB,MAAM;AAAA,MACtC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,sBAAN,MAA0B;AAAA,EACxB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAsC,CAAC,GACuB;AAC9D,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEiE;AAC/D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAsC,CAAC,GACuB;AAC9D,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MAC8D;AAC9D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,oBAAoB,MAAM;AAAA,MACvC,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,yBAAN,MAA6B;AAAA,EAC3B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAAyC,CAAC,GACuB;AACjE,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEoE;AAClE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAAyC,CAAC,GACuB;AACjE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MACiE;AACjE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,wBAAwB,MAAM;AAAA,MAC3C,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ;AAAA,QACf,mBAAmB,QAAQ,kBAAkB,KAAK,GAAG;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,0BAAN,MAA8B;AAAA,EAC5B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,WACE,UAA0C,CAAC,GACuB;AAClE,WAAO,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EAClC;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,GAEqE;AACnE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,aACE,UAA0C,CAAC,GACuB;AAClE,WAAO,KAAK,SAAS,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,SACE,SACA,MACkE;AAClE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,yBAAyB,MAAM;AAAA,MAC5C,OAAO;AAAA,QACL,GAAG;AAAA,QACH,OAAO,QAAQ,OAAO,KAAK,GAAG;AAAA,QAC9B,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACtKO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,OAAO,EAAE,MAAM,GAA4E;AACzF,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ;AAAA,MACxC,OAAO,EAAE,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,EAAE,OAAO,GAAwE;AACnF,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAE6D;AAC3D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,mBAAmB,eAAe;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAG0D;AACxD,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,UAAU;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIyE;AACvE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,UAAU;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ;AAAA,IACN;AAAA,EACF,GAEoE;AAClE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AACA,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ,sBAAsB;AAAA,MAC9D,OAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOiE;AAC/D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,sBAAsB;AAAA,MACnC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,eAAe,OAAO;AAAA,QAC/B,mBAAmB,eAAe,gBAAgB;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOwE;AACtE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ,sBAAsB;AAAA,MAC9D,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,mBAAmB,eAAe,gBAAgB;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ;AAAA,QAC3C,GAAI,qBAAqB,SAAY,CAAC,IAAI,EAAE,iBAAiB;AAAA,QAC7D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAQE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,eAAe;AAAA,QACrC;AAAA,QACA;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,qBAAqB,SAAY,CAAC,IAAI,EAAE,iBAAiB;AAAA,QAC7D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAE6D;AAC3D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,mBAAmB,eAAe;AAAA,IACxD,CAAC;AAAA,EACH;AACF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAM2D;AACzD,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,gBAAgB;AAAA,MAC7B,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,eAAe,OAAO;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,eAAe;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMkE;AAChE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,aAAa,MAAM,QAAQ,gBAAgB;AAAA,MACxD,OAAO,EAAE,QAAQ,MAAM,OAAO,MAAM;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,YAAY,SAAY,CAAC,IAAI,EAAE,QAAQ;AAAA,QAC3C,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAOE;AACA,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,eAAe;AAAA,QACrC;AAAA,QACA;AAAA,QACA,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,QACvC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,MAC3C,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,UAAU;AAAA,IACR;AAAA,EACF,GAEkE;AAChE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,yBAAyB,eAAe;AAAA,IAC9D,CAAC;AAAA,EACH;AACF;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,IAAI;AAAA,IACF;AAAA,EACF,GAEmE;AACjE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,OAAO,yBAAyB,eAAe;AAAA,IAC9D,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI4E;AAC1E,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,QAAQ,MAAM;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,EACF,GAGyC;AACvC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,aAAa;AAAA,QACnC;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,WAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAE7B,OAAO;AAAA,IACL;AAAA,EACF,GAEqE;AACnE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,QAAQ;AAAA,MAC/C,OAAO,EAAE,MAAM;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAmE;AACtE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,wBAAwB;AAAA,MACrC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,sBAAsB;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,IAAI;AAAA,IACF;AAAA,EACF,GAEiE;AAC/D,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,iBAAiB;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,YAAY;AAAA,IACV;AAAA,EACF,GAEyE;AACvE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,SAAS;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEA,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK0E;AACxE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,UAAU;AAAA,MACpE,OAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK2E;AACzE,WAAO,KAAK,UAAU,QAAQ;AAAA,MAC5B,MAAM,CAAC,MAAM,0BAA0B,mBAAmB,WAAW;AAAA,MACrE,OAAO,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAII,CAAC,GAAyC;AAC5C,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,KAAK;AAAA,QAC3B,GAAI,QAAQ,SAAY,CAAC,IAAI,EAAE,IAAI;AAAA,QACnC,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,sBAAsB,SAAY,CAAC,IAAI,EAAE,kBAAkB;AAAA,QAC/D,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,gBAAgB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIyC;AACvC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,aAAa;AAAA,QACnC;AAAA,QACA;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AAAA,EAEA,OAAO,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI0C;AACxC,QAAI;AACJ,OAAG;AACD,YAAM,OAAO,MAAM,KAAK,cAAc;AAAA,QACpC;AAAA,QACA;AAAA,QACA,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO;AAAA,QACzC,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,MACzC,CAAC;AACD,aAAO,KAAK;AACZ,eAAS,KAAK,eAAe;AAAA,IAC/B,SAAS,WAAW;AAAA,EACtB;AACF;AAEA,SAAS,eAAe,QAAuC;AAC7D,SAAO,QAAQ,KAAK,GAAG;AACzB;;;ACnjBO,IAAM,UAAN,MAAc;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAwB;AAClC,QACE,CAAC,WACD,OAAO,QAAQ,WAAW,YAC1B,QAAQ,OAAO,KAAK,EAAE,WAAW,GACjC;AACA,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AAEA,UAAM,YAAY,IAAI,cAAc;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,GAAI,QAAQ,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,QAAQ,QAAQ;AAAA,IACtE,CAAC;AACD,SAAK,YAAY,IAAI,UAAU,SAAS;AACxC,SAAK,iBAAiB,IAAI,eAAe,SAAS;AAClD,SAAK,QAAQ,IAAI,MAAM,SAAS;AAChC,SAAK,sBAAsB,IAAI,oBAAoB,SAAS;AAC5D,SAAK,iBAAiB,IAAI,eAAe,SAAS;AAClD,SAAK,sBAAsB,IAAI,oBAAoB,SAAS;AAC5D,SAAK,uBAAuB,IAAI,qBAAqB,SAAS;AAC9D,SAAK,wBAAwB,IAAI,sBAAsB,SAAS;AAChE,SAAK,gBAAgB,IAAI,cAAc,SAAS;AAAA,EAClD;AACF;","names":[]}
|