@happyvertical/smrt-expenses 0.56.0 → 0.56.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal-_1CdcvvW.js","names":[],"sources":["../../src/actions/principal.ts"],"sourcesContent":["/**\n * The acting principal for the generated service-backed expense actions\n * (#4001).\n *\n * Identity always comes from the ambient request context, never from the\n * request body: the tenancy ALS (`withTenant`, the SvelteKit/Express\n * adapters) first, then the authenticated smrt-users session-permission ALS\n * (`createSessionHandler()` without `enterTenantContext`). This is the\n * smrt-fields / smrt-preferences precedent. Authorization goes through\n * smrt-users' `assertOperationPermission()` against the principal's published\n * permission snapshot, so ceilings, super-admin and catalog presence behave\n * exactly as they do for every other guarded operation.\n */\nimport type { SmrtClassOptions } from '@happyvertical/smrt-core';\nimport { getCurrentTenant, withTenant } from '@happyvertical/smrt-tenancy';\nimport {\n assertOperationPermission,\n getCurrentSessionPermissionContext,\n type OperationPermissionCollectionInput,\n OperationPermissionError,\n UserCollection,\n} from '@happyvertical/smrt-users';\n\n/** A refused action with a 4xx status the generated transports serialize. */\nexport class ExpenseActionError extends Error {\n readonly status: number;\n readonly code: string;\n readonly publicMessage: string;\n\n constructor(status: number, code: string, message: string) {\n super(message);\n this.name = 'ExpenseActionError';\n this.status = status;\n this.code = code;\n this.publicMessage = message;\n }\n}\n\n/** Who is acting, resolved from the ambient context. */\nexport interface ExpenseActionPrincipal {\n tenantId: string;\n userId: string;\n permissions: ReadonlySet<string>;\n /** smrt-profiles Profile linked to the user; stamped into audit fields. */\n profileId: string;\n /** True when the tenancy ALS already carries this principal. */\n fromTenancy: boolean;\n}\n\ninterface AmbientPrincipal {\n tenantId: string | null;\n userId: string | null;\n permissions: ReadonlySet<string>;\n profileId: string | null;\n fromTenancy: boolean;\n}\n\nfunction profileIdOf(user: unknown): string | null {\n if (!user || typeof user !== 'object') return null;\n const value = (user as { profileId?: unknown }).profileId;\n return typeof value === 'string' && value ? value : null;\n}\n\nfunction ambientPrincipal(): AmbientPrincipal {\n const tenant = getCurrentTenant();\n const session = getCurrentSessionPermissionContext();\n if (tenant?.tenantId) {\n // Generated SvelteKit routes enter `{ tenantId, userId, permissions }`\n // without the user object; the same person's session still carries it.\n const sessionProfile =\n session?.userId && session.userId === tenant.userId\n ? profileIdOf(session.user)\n : null;\n return {\n tenantId: tenant.tenantId,\n userId: tenant.userId ?? null,\n permissions: tenant.permissions,\n profileId: profileIdOf(tenant.user) ?? sessionProfile,\n fromTenancy: true,\n };\n }\n return {\n tenantId: session?.tenantId ?? null,\n userId: session?.userId ?? null,\n permissions: session?.permissionSet ?? new Set<string>(),\n profileId: profileIdOf(session?.user),\n fromTenancy: false,\n };\n}\n\nasync function loadProfileId(\n userId: string,\n options: SmrtClassOptions,\n): Promise<string | null> {\n try {\n const users = await UserCollection.create({\n db: options.db ?? options.persistence,\n } as SmrtClassOptions);\n return profileIdOf(await users.get({ id: userId }));\n } catch {\n return null;\n }\n}\n\n/** True when the ambient principal holds `<collection>.<action>`. */\nexport async function principalHolds(\n collection: OperationPermissionCollectionInput,\n action: string,\n options: SmrtClassOptions,\n): Promise<boolean> {\n const ambient = ambientPrincipal();\n try {\n await assertOperationPermission({\n collection,\n action,\n db: options.db ?? options.persistence,\n tenantId: ambient.tenantId,\n userId: ambient.userId,\n permissionSet: ambient.permissions,\n allowSystemContextBypass: false,\n allowSuperAdminBypass: false,\n });\n return true;\n } catch (error) {\n if (error instanceof OperationPermissionError) return false;\n throw error;\n }\n}\n\n/**\n * Authorize `<collection>.<action>` for the ambient principal and resolve the\n * profile it acts as. Fails closed (403) without an authenticated,\n * tenant-bound principal, without the permission, or without a linked\n * profile — an action always records who took it.\n *\n * System context never bypasses: trusted server code without a person calls\n * the `Expense` methods directly. `allowSuperAdminBypass: false` is for\n * money and separation-of-duties operations that need an explicit grant.\n */\nexport async function authorizeExpenseAction(\n collection: OperationPermissionCollectionInput,\n action: string,\n options: SmrtClassOptions,\n guard: { allowSuperAdminBypass: boolean },\n): Promise<ExpenseActionPrincipal> {\n const ambient = ambientPrincipal();\n try {\n await assertOperationPermission({\n collection,\n action,\n db: options.db ?? options.persistence,\n tenantId: ambient.tenantId,\n userId: ambient.userId,\n permissionSet: ambient.permissions,\n allowSystemContextBypass: false,\n allowSuperAdminBypass: guard.allowSuperAdminBypass,\n });\n } catch (error) {\n if (error instanceof OperationPermissionError) {\n throw new ExpenseActionError(403, 'permission_denied', error.message);\n }\n throw error;\n }\n if (!ambient.tenantId || !ambient.userId) {\n throw new ExpenseActionError(\n 403,\n 'permission_denied',\n 'Expense actions need an authenticated tenant context.',\n );\n }\n const profileId =\n ambient.profileId ?? (await loadProfileId(ambient.userId, options));\n if (!profileId) {\n throw new ExpenseActionError(\n 403,\n 'actor_profile_required',\n 'Expense actions need a user with a linked profile.',\n );\n }\n return {\n tenantId: ambient.tenantId,\n userId: ambient.userId,\n permissions: ambient.permissions,\n profileId,\n fromTenancy: ambient.fromTenancy,\n };\n}\n\n/**\n * Run `fn` with the tenancy ALS carrying `principal`, so the tenancy\n * interceptor scopes every read and write. A session-only principal is\n * entered with the same tenant, user and permissions; nothing is widened.\n */\nexport async function withActionPrincipal<T>(\n principal: ExpenseActionPrincipal,\n fn: () => Promise<T>,\n): Promise<T> {\n if (principal.fromTenancy) return fn();\n return withTenant(\n {\n tenantId: principal.tenantId,\n userId: principal.userId,\n permissions: new Set(principal.permissions),\n },\n fn,\n );\n}\n"],"mappings":";;;AAwBO,IAAM,qBAAN,cAAiC,MAAM;CACnC;CACA;CACA;CAET,YAAY,QAAgB,MAAc,SAAiB;EACzD,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,OAAO;EACZ,KAAK,gBAAgB;CACvB;AACF;AAqBA,SAAS,YAAY,MAA8B;CACjD,IAAI,CAAC,QAAQ,OAAO,SAAS,UAAU,OAAO;CAC9C,MAAM,QAAS,KAAiC;CAChD,OAAO,OAAO,UAAU,YAAY,QAAQ,QAAQ;AACtD;AAEA,SAAS,mBAAqC;CAC5C,MAAM,SAAS,iBAAiB;CAChC,MAAM,UAAU,mCAAmC;CACnD,IAAI,QAAQ,UAAU;EAGpB,MAAM,iBACJ,SAAS,UAAU,QAAQ,WAAW,OAAO,SACzC,YAAY,QAAQ,IAAI,IACxB;EACN,OAAO;GACL,UAAU,OAAO;GACjB,QAAQ,OAAO,UAAU;GACzB,aAAa,OAAO;GACpB,WAAW,YAAY,OAAO,IAAI,KAAK;GACvC,aAAa;EACf;CACF;CACA,OAAO;EACL,UAAU,SAAS,YAAY;EAC/B,QAAQ,SAAS,UAAU;EAC3B,aAAa,SAAS,iCAAiB,IAAI,IAAY;EACvD,WAAW,YAAY,SAAS,IAAI;EACpC,aAAa;CACf;AACF;AAEA,eAAe,cACb,QACA,SACwB;CACxB,IAAI;EAIF,OAAO,YAAY,OAAM,MAHL,eAAe,OAAO,EACxC,IAAI,QAAQ,MAAM,QAAQ,YAC5B,CAAqB,EAAA,CACU,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC;CACpD,QAAQ;EACN,OAAO;CACT;AACF;AAGA,eAAsB,eACpB,YACA,QACA,SACkB;CAClB,MAAM,UAAU,iBAAiB;CACjC,IAAI;EACF,MAAM,0BAA0B;GAC9B;GACA;GACA,IAAI,QAAQ,MAAM,QAAQ;GAC1B,UAAU,QAAQ;GAClB,QAAQ,QAAQ;GAChB,eAAe,QAAQ;GACvB,0BAA0B;GAC1B,uBAAuB;EACzB,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,IAAI,iBAAiB,0BAA0B,OAAO;EACtD,MAAM;CACR;AACF;AAYA,eAAsB,uBACpB,YACA,QACA,SACA,OACiC;CACjC,MAAM,UAAU,iBAAiB;CACjC,IAAI;EACF,MAAM,0BAA0B;GAC9B;GACA;GACA,IAAI,QAAQ,MAAM,QAAQ;GAC1B,UAAU,QAAQ;GAClB,QAAQ,QAAQ;GAChB,eAAe,QAAQ;GACvB,0BAA0B;GAC1B,uBAAuB,MAAM;EAC/B,CAAC;CACH,SAAS,OAAO;EACd,IAAI,iBAAiB,0BACnB,MAAM,IAAI,mBAAmB,KAAK,qBAAqB,MAAM,OAAO;EAEtE,MAAM;CACR;CACA,IAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,QAChC,MAAM,IAAI,mBACR,KACA,qBACA,uDACF;CAEF,MAAM,YACJ,QAAQ,aAAc,MAAM,cAAc,QAAQ,QAAQ,OAAO;CACnE,IAAI,CAAC,WACH,MAAM,IAAI,mBACR,KACA,0BACA,oDACF;CAEF,OAAO;EACL,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,aAAa,QAAQ;EACrB;EACA,aAAa,QAAQ;CACvB;AACF;AAOA,eAAsB,oBACpB,WACA,IACY;CACZ,IAAI,UAAU,aAAa,OAAO,GAAG;CACrC,OAAO,WACL;EACE,UAAU,UAAU;EACpB,QAAQ,UAAU;EAClB,aAAa,IAAI,IAAI,UAAU,WAAW;CAC5C,GACA,EACF;AACF"}
@@ -4,18 +4,65 @@
4
4
  * @packageDocumentation
5
5
  */
6
6
  import { SmrtCollection } from '@happyvertical/smrt-core';
7
+ import type { AttachExpenseReceiptActionInput, MarkExpenseReimbursedActionInput, RecordExpenseActionInput, ReviewExpenseActionInput } from '../actions/expense-actions.js';
7
8
  import { Expense } from '../models/Expense.js';
8
- import { type CommitmentPosition, type CurrencyTotals, type ExpenseTotalsOptions } from '../types.js';
9
+ import type { ExpenseReceipt } from '../models/ExpenseReceipt.js';
10
+ import { type CommitmentPosition, type CurrencyTotals, type ExpenseFinancialBreakdown, type ExpenseTotalsOptions } from '../types.js';
11
+ /** A reviewed, non-duplicate expense and its optional stored supplier facts. */
12
+ export interface ReviewedExpenseTaxFact {
13
+ /** Legacy owner identity alias retained for existing callers. */
14
+ id: string;
15
+ /** Reporting identity consumed by commerce tax-summary facts. */
16
+ expenseId: string;
17
+ tenantId: string;
18
+ incurredOn: string;
19
+ currency: string;
20
+ commitmentId: string | null;
21
+ commitmentLineId: string | null;
22
+ /** `null` is unknown legacy supplier tax, never an implied zero. */
23
+ financialBreakdown: ExpenseFinancialBreakdown | null;
24
+ }
25
+ export interface ReviewedExpenseTaxFactsOptions {
26
+ tenantId: string;
27
+ from: string;
28
+ to: string;
29
+ currency?: string;
30
+ }
9
31
  /**
10
32
  * Collection for {@link Expense}. Reads go through the normal tenant
11
33
  * interceptors, so inside `withTenant()` every method here sees only that
12
34
  * tenant's expenses.
13
35
  *
14
- * Collection classes are registered too, so this one carries its own closed
15
- * surface; without it every public method here would become an MCP tool.
36
+ * Collection classes are registered too, so this one carries its own
37
+ * surface; without it every public method here would become an MCP tool. It
38
+ * publishes only the service-backed write actions (#4001), on REST: each
39
+ * authorizes the signed-in person itself (`expenses.<action>`) and delegates
40
+ * to the guarded domain flow. Reads, MCP and CLI stay closed.
16
41
  */
17
42
  export declare class ExpenseCollection extends SmrtCollection<Expense> {
18
43
  static readonly _itemClass: typeof Expense;
44
+ /**
45
+ * Record a new, unreviewed expense for the signed-in person in their
46
+ * tenant. Needs `expenses.record`; a person-paid expense for someone else
47
+ * also needs `expenses.recordReview`.
48
+ */
49
+ record(options: RecordExpenseActionInput): Promise<Expense>;
50
+ /**
51
+ * Attach a stored asset to an expense as its receipt. Needs
52
+ * `expenses.attachReceipt`; only the recorder or payer may attach unless
53
+ * the caller holds `expenses.recordReview`.
54
+ */
55
+ attachReceipt(options: AttachExpenseReceiptActionInput): Promise<ExpenseReceipt>;
56
+ /**
57
+ * Accept or refuse (with a reason) an expense, attributed to the signed-in
58
+ * reviewer. Needs an explicit `expenses.recordReview` grant.
59
+ */
60
+ recordReview(options: ReviewExpenseActionInput): Promise<Expense>;
61
+ /**
62
+ * Record that the person who paid an expense has been paid back. Needs an
63
+ * explicit `expenses.recordReimbursement` grant.
64
+ */
65
+ recordReimbursement(options: MarkExpenseReimbursedActionInput): Promise<Expense>;
19
66
  /**
20
67
  * Expenses charged to one cost object, oldest incurred first.
21
68
  *
@@ -38,6 +85,11 @@ export declare class ExpenseCollection extends SmrtCollection<Expense> {
38
85
  * ```
39
86
  */
40
87
  totalsByCurrency(options?: ExpenseTotalsOptions): Promise<CurrencyTotals>;
88
+ /**
89
+ * Stored supplier-tax facts for reporting. Only reviewed non-duplicate
90
+ * expenses are returned; callers must retain a null breakdown as unknown.
91
+ */
92
+ listReviewedTaxFacts(options: ReviewedExpenseTaxFactsOptions): Promise<ReviewedExpenseTaxFact[]>;
41
93
  /**
42
94
  * What remains open on a commitment — a commerce `Contract`, normally a
43
95
  * `PurchaseOrder` — or on one of its lines.
@@ -1 +1 @@
1
- {"version":3,"file":"ExpenseCollection.d.ts","sourceRoot":"","sources":["../../src/collections/ExpenseCollection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,cAAc,EAAQ,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAGnB,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AA0CrB;;;;;;;GAOG;AACH,qBACa,iBAAkB,SAAQ,cAAc,CAAC,OAAO,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,iBAAW;IAErC;;;;;OAKG;IACG,aAAa,CACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,EAAE,CAAC;IAOrB;;;;;;;;;;;;;OAaG;IACG,gBAAgB,CACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC;IAsB1B;;;;;;;;;;;;;;OAcG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC,kBAAkB,CAAC;CAwE/B"}
1
+ {"version":3,"file":"ExpenseCollection.d.ts","sourceRoot":"","sources":["../../src/collections/ExpenseCollection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAU,cAAc,EAAQ,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EAChC,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,KAAK,yBAAyB,EAE9B,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oEAAoE;IACpE,kBAAkB,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkDD;;;;;;;;;;GAUG;AACH,qBAOa,iBAAkB,SAAQ,cAAc,CAAC,OAAO,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,iBAAW;IAErC;;;;OAIG;IASG,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjE;;;;OAIG;IASG,aAAa,CACjB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,cAAc,CAAC;IAO1B;;;OAGG;IASG,YAAY,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOvE;;;OAGG;IASG,mBAAmB,CACvB,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,aAAa,CACjB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,EAAE,CAAC;IAOrB;;;;;;;;;;;;;OAaG;IACG,gBAAgB,CACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC;IAsB1B;;;OAGG;IACG,oBAAoB,CACxB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,sBAAsB,EAAE,CAAC;IA4CpC;;;;;;;;;;;;;;OAcG;IACG,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC,kBAAkB,CAAC;CAwE/B"}
package/dist/index.d.ts CHANGED
@@ -39,10 +39,13 @@
39
39
  * @packageDocumentation
40
40
  */
41
41
  import './__smrt-register__.js';
42
- export { ExpenseCollection } from './collections/ExpenseCollection.js';
42
+ export type { AttachExpenseReceiptActionInput, MarkExpenseReimbursedActionInput, RecordExpenseActionInput, ReviewExpenseActionInput, } from './actions/expense-actions.js';
43
+ export { ExpenseActionError, type ExpenseActionPrincipal, } from './actions/principal.js';
44
+ export { ExpenseCollection, type ReviewedExpenseTaxFact, type ReviewedExpenseTaxFactsOptions, } from './collections/ExpenseCollection.js';
43
45
  export { ExpenseReceiptCollection } from './collections/ExpenseReceiptCollection.js';
44
46
  export { Expense } from './models/Expense.js';
45
47
  export { ExpenseReceipt } from './models/ExpenseReceipt.js';
48
+ export { ExpensesRecipe } from './recipes.js';
46
49
  export { type AttachReceiptInput, type CommitmentPosition, type CurrencyTotal, type CurrencyTotals, DuplicateReceiptError, type DuplicateReceiptGroup, EXPENSE_PAYERS, EXPENSE_REVIEW_STATUSES, type ExpenseCostBasis, ExpenseError, type ExpenseErrorCode, type ExpenseFinancialBreakdown, type ExpenseOptions, type ExpensePayer, type ExpenseReceiptOptions, type ExpenseReviewStatus, type ExpenseTaxComponent, type ExpenseTotalsOptions, type FindDuplicateReceiptsOptions, type MarkDuplicateExpenseInput, type MarkReimbursedInput, type RejectExpenseInput, type ReopenExpenseInput, type ReviewExpenseInput, SUGGESTED_EXPENSE_CATEGORIES, } from './types.js';
47
50
  export { computeContentSha256 } from './validation.js';
48
51
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,cAAc,EACd,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,OAAO,wBAAwB,CAAC;AAEhC,YAAY,EACV,+BAA+B,EAC/B,gCAAgC,EAChC,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,GACpC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,cAAc,EACd,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}