stitchkit 0.71.0 → 0.72.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/README.md +1 -1
- package/dist/application/admission.d.ts +22 -2
- package/dist/application/admission.d.ts.map +1 -1
- package/dist/application/channel.d.ts +28 -0
- package/dist/application/channel.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-contract.d.ts +20 -0
- package/dist/application/diagnostic-journal-contract.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-lock.d.ts +17 -0
- package/dist/application/diagnostic-journal-lock.d.ts.map +1 -0
- package/dist/application/diagnostic-journal-manager.d.ts +2 -1
- package/dist/application/diagnostic-journal-manager.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-storage.d.ts +4 -1
- package/dist/application/diagnostic-journal-storage.d.ts.map +1 -1
- package/dist/application/diagnostic-journal.d.ts +4 -2
- package/dist/application/diagnostic-journal.d.ts.map +1 -1
- package/dist/application-opentelemetry.js +1 -1
- package/dist/application.d.ts +3 -3
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +134 -21
- package/dist/browser/resumable.d.ts +56 -0
- package/dist/browser/resumable.d.ts.map +1 -0
- package/dist/{index-zpyj7hsv.js → index-3cwck0rm.js} +98 -33
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +103 -14
- package/dist/primitives/audit.d.ts +52 -0
- package/dist/primitives/audit.d.ts.map +1 -0
- package/dist/primitives/deadline.d.ts +39 -0
- package/dist/primitives/deadline.d.ts.map +1 -0
- package/dist/primitives/decimal.d.ts +10 -0
- package/dist/primitives/decimal.d.ts.map +1 -0
- package/dist/primitives/delivery.d.ts +96 -0
- package/dist/primitives/delivery.d.ts.map +1 -0
- package/dist/primitives/event.d.ts +42 -0
- package/dist/primitives/event.d.ts.map +1 -0
- package/dist/primitives/export-operation.d.ts +89 -0
- package/dist/primitives/export-operation.d.ts.map +1 -0
- package/dist/primitives/index.d.ts +12 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/lifecycle.d.ts +90 -0
- package/dist/primitives/lifecycle.d.ts.map +1 -0
- package/dist/primitives/migration-checks.d.ts +15 -0
- package/dist/primitives/migration-checks.d.ts.map +1 -0
- package/dist/primitives/money.d.ts +43 -0
- package/dist/primitives/money.d.ts.map +1 -0
- package/dist/primitives/owner-scope.d.ts +30 -0
- package/dist/primitives/owner-scope.d.ts.map +1 -0
- package/dist/primitives/permission.d.ts +28 -0
- package/dist/primitives/permission.d.ts.map +1 -0
- package/dist/primitives/quantity.d.ts +57 -0
- package/dist/primitives/quantity.d.ts.map +1 -0
- package/dist/primitives.d.ts +3 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +750 -0
- package/llms-full.txt +246 -3
- package/llms.txt +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ZodType, z } from 'zod';
|
|
2
|
+
export declare const DomainEventActorSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
role: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export type DomainEventActor = z.infer<typeof DomainEventActorSchema>;
|
|
7
|
+
export declare const DomainEventSubjectSchema: z.ZodObject<{
|
|
8
|
+
type: z.ZodString;
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export type DomainEventSubject = z.infer<typeof DomainEventSubjectSchema>;
|
|
12
|
+
/** Build one application-owned event envelope around a typed payload. */
|
|
13
|
+
export declare function createDomainEventSchema<TPayload extends ZodType>(payload: TPayload): z.ZodObject<{
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
type: z.ZodString;
|
|
16
|
+
occurredAt: z.ZodISODateTime;
|
|
17
|
+
actor: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
role: z.ZodString;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
subject: z.ZodObject<{
|
|
22
|
+
type: z.ZodString;
|
|
23
|
+
id: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
payload: TPayload;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export declare const DomainEventSchema: z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
type: z.ZodString;
|
|
30
|
+
occurredAt: z.ZodISODateTime;
|
|
31
|
+
actor: z.ZodOptional<z.ZodObject<{
|
|
32
|
+
id: z.ZodString;
|
|
33
|
+
role: z.ZodString;
|
|
34
|
+
}, z.core.$strip>>;
|
|
35
|
+
subject: z.ZodObject<{
|
|
36
|
+
type: z.ZodString;
|
|
37
|
+
id: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
payload: z.ZodUnknown;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type DomainEvent = z.infer<typeof DomainEventSchema>;
|
|
42
|
+
//# sourceMappingURL=event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/primitives/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAEtC,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,wBAAwB;;;iBAGnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,OAAO,EAAE,OAAO,EAAE,QAAQ;;;;;;;;;;;;;kBASlF;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAAuC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type ZodType, z } from 'zod';
|
|
2
|
+
export declare function createExportResultSchema<TOperationId extends ZodType>(operationId: TOperationId): z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
3
|
+
state: z.ZodLiteral<"ready">;
|
|
4
|
+
file: z.ZodObject<{
|
|
5
|
+
path: z.ZodString;
|
|
6
|
+
size: z.ZodNumber;
|
|
7
|
+
mediaType: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
state: z.ZodLiteral<"pending">;
|
|
12
|
+
operationId: TOperationId;
|
|
13
|
+
}, z.core.$strip>], "state">;
|
|
14
|
+
export declare function defineExportOperation<TInput extends ZodType, TOperationId extends ZodType>(config: {
|
|
15
|
+
readonly input: TInput;
|
|
16
|
+
readonly operationId: TOperationId;
|
|
17
|
+
readonly mediaType: string;
|
|
18
|
+
readonly filename: (input: z.output<TInput>) => string;
|
|
19
|
+
}): Readonly<{
|
|
20
|
+
input: TInput;
|
|
21
|
+
result: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
22
|
+
state: z.ZodLiteral<"ready">;
|
|
23
|
+
file: z.ZodObject<{
|
|
24
|
+
path: z.ZodString;
|
|
25
|
+
size: z.ZodNumber;
|
|
26
|
+
mediaType: z.ZodString;
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
30
|
+
state: z.ZodLiteral<"pending">;
|
|
31
|
+
operationId: TOperationId;
|
|
32
|
+
}, z.core.$strip>], "state">;
|
|
33
|
+
ready(inputValue: z.input<TInput>, file: {
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly size: number;
|
|
36
|
+
}): z.output<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
37
|
+
state: z.ZodLiteral<"ready">;
|
|
38
|
+
file: z.ZodObject<{
|
|
39
|
+
path: z.ZodString;
|
|
40
|
+
size: z.ZodNumber;
|
|
41
|
+
mediaType: z.ZodString;
|
|
42
|
+
name: z.ZodString;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
45
|
+
state: z.ZodLiteral<"pending">;
|
|
46
|
+
operationId: TOperationId;
|
|
47
|
+
}, z.core.$strip>], "state">>;
|
|
48
|
+
pending(operationId: z.input<TOperationId>): z.output<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
49
|
+
state: z.ZodLiteral<"ready">;
|
|
50
|
+
file: z.ZodObject<{
|
|
51
|
+
path: z.ZodString;
|
|
52
|
+
size: z.ZodNumber;
|
|
53
|
+
mediaType: z.ZodString;
|
|
54
|
+
name: z.ZodString;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
57
|
+
state: z.ZodLiteral<"pending">;
|
|
58
|
+
operationId: TOperationId;
|
|
59
|
+
}, z.core.$strip>], "state">>;
|
|
60
|
+
endpoint<const TScope extends string>(definition: {
|
|
61
|
+
readonly method: 'GET' | 'POST';
|
|
62
|
+
readonly path: string;
|
|
63
|
+
readonly desc: string;
|
|
64
|
+
readonly scope: TScope;
|
|
65
|
+
readonly toolName?: string;
|
|
66
|
+
readonly meta?: Record<string, unknown>;
|
|
67
|
+
}): {
|
|
68
|
+
method: 'GET' | 'POST';
|
|
69
|
+
path: string;
|
|
70
|
+
desc: string;
|
|
71
|
+
scope: TScope;
|
|
72
|
+
toolName?: string;
|
|
73
|
+
meta?: Record<string, unknown>;
|
|
74
|
+
input: TInput;
|
|
75
|
+
output: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
76
|
+
state: z.ZodLiteral<"ready">;
|
|
77
|
+
file: z.ZodObject<{
|
|
78
|
+
path: z.ZodString;
|
|
79
|
+
size: z.ZodNumber;
|
|
80
|
+
mediaType: z.ZodString;
|
|
81
|
+
name: z.ZodString;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
84
|
+
state: z.ZodLiteral<"pending">;
|
|
85
|
+
operationId: TOperationId;
|
|
86
|
+
}, z.core.$strip>], "state">;
|
|
87
|
+
};
|
|
88
|
+
}>;
|
|
89
|
+
//# sourceMappingURL=export-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-operation.d.ts","sourceRoot":"","sources":["../../src/primitives/export-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGtC,wBAAgB,wBAAwB,CAAC,YAAY,SAAS,OAAO,EACnE,WAAW,EAAE,YAAY;;;;;;;;;;;6BAY1B;AAED,wBAAgB,qBAAqB,CACnC,MAAM,SAAS,OAAO,EACtB,YAAY,SAAS,OAAO,EAC5B,MAAM,EAAE;IACR,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;CACxD;;;;;;;;;;;;;;sBAQiB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QACrB;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACrD,CAAC,CAAC,MAAM;;;;;;;;;;;iCAAe;yBAWL,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM;;;;;;;;;;;iCAAe;mBAGrD,MAAM,SAAS,MAAM,cAAc;QAChD,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;QAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACzC;gBANkB,KAAK,GAAG,MAAM;cAChB,MAAM;cACN,MAAM;eACL,MAAM;mBACF,MAAM;eACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;GAS5C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { type AuditOmitPolicy, type AuditPolicy, type AuditRecord, type AuditRecordPolicy, AuditRecordSchema, assertAuditDeclared, audit, type CreateAuditRecordInput, createAuditRecord, } from './audit.js';
|
|
2
|
+
export { type DeadlineResult, DeadlineResultSchema, defineDeadlinePolicy, } from './deadline.js';
|
|
3
|
+
export { type DomainEventDeliveryClaim, DomainEventDeliveryClaimSchema, type DomainEventDeliveryOutcome, DomainEventDeliveryOutcomeSchema, type DomainEventDeliveryPlan, type DomainEventDestination, DomainEventDestinationSchema, type DomainEventDispatchResult, type DomainEventOutbox, type DomainEventRoute, type DomainEventTransport, defineDomainEventDelivery, } from './delivery.js';
|
|
4
|
+
export { createDomainEventSchema, type DomainEvent, type DomainEventActor, DomainEventActorSchema, DomainEventSchema, type DomainEventSubject, DomainEventSubjectSchema, } from './event.js';
|
|
5
|
+
export { createExportResultSchema, defineExportOperation, } from './export-operation.js';
|
|
6
|
+
export { defineLifecycle, type LifecycleDefinition, type LifecycleState, type LifecycleTransitionDefinition, type LifecycleTransitionEvent, LifecycleTransitionEventSchema, type LifecycleTransitionFailure, type LifecycleTransitionInput, type LifecycleTransitionResult, type LifecycleTransitionSuccess, } from './lifecycle.js';
|
|
7
|
+
export { type SourceRisk, type SourceText, scanMoneyNumberRisks, scanOwnerFilterRisks, } from './migration-checks.js';
|
|
8
|
+
export { addMoney, createMoneySchema, defineMoney, type Money, type MoneyShare, type MoneySplit, multiplyMoney, shareMoney, splitMoney, subtractMoney, } from './money.js';
|
|
9
|
+
export { defineOwnerScope, type OwnerScope, type OwnerScopeDefinition, type OwnerScopeResolution, } from './owner-scope.js';
|
|
10
|
+
export { definePermissionMatrix, type PermissionCheckResult, type PermissionGrantMatrix, } from './permission.js';
|
|
11
|
+
export { addQuantity, createQuantitySchema, defineUnitSystem, type Quantity, type QuantityProjection, QuantityProjectionSchema, type UnitConversion, } from './quantity.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,gCAAgC,EAChC,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,UAAU,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type ZodType, z } from 'zod';
|
|
2
|
+
import type { DomainEventSubject } from './event.js';
|
|
3
|
+
declare const lifecycleStateBrand: unique symbol;
|
|
4
|
+
export interface LifecycleState<TState extends string> {
|
|
5
|
+
readonly value: TState;
|
|
6
|
+
readonly [lifecycleStateBrand]: true;
|
|
7
|
+
}
|
|
8
|
+
export interface LifecycleTransitionDefinition<TState extends string = string, TRole extends string = string, TPayload extends ZodType = ZodType> {
|
|
9
|
+
readonly from: TState | readonly TState[];
|
|
10
|
+
readonly to: TState;
|
|
11
|
+
readonly by: readonly TRole[];
|
|
12
|
+
readonly payload?: TPayload;
|
|
13
|
+
}
|
|
14
|
+
export interface LifecycleDefinition<TState extends string, TRole extends string, TTransitions extends Record<string, LifecycleTransitionDefinition<TState, TRole, ZodType>>> {
|
|
15
|
+
readonly states: readonly TState[];
|
|
16
|
+
readonly roles: readonly TRole[];
|
|
17
|
+
readonly transitions: TTransitions;
|
|
18
|
+
}
|
|
19
|
+
export declare const LifecycleTransitionEventSchema: z.ZodObject<{
|
|
20
|
+
id: z.ZodString;
|
|
21
|
+
type: z.ZodLiteral<"lifecycle.transitioned">;
|
|
22
|
+
occurredAt: z.ZodISODateTime;
|
|
23
|
+
actor: z.ZodObject<{
|
|
24
|
+
id: z.ZodString;
|
|
25
|
+
role: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
subject: z.ZodObject<{
|
|
28
|
+
type: z.ZodString;
|
|
29
|
+
id: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
payload: z.ZodObject<{
|
|
32
|
+
lifecycle: z.ZodString;
|
|
33
|
+
transition: z.ZodString;
|
|
34
|
+
from: z.ZodString;
|
|
35
|
+
to: z.ZodString;
|
|
36
|
+
data: z.ZodUnknown;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type LifecycleTransitionEvent = z.infer<typeof LifecycleTransitionEventSchema>;
|
|
40
|
+
export type LifecycleTransitionFailure = {
|
|
41
|
+
readonly outcome: 'transition_not_allowed';
|
|
42
|
+
readonly transition: string;
|
|
43
|
+
readonly state: string;
|
|
44
|
+
} | {
|
|
45
|
+
readonly outcome: 'role_not_allowed';
|
|
46
|
+
readonly transition: string;
|
|
47
|
+
readonly role: string;
|
|
48
|
+
} | {
|
|
49
|
+
readonly outcome: 'invalid_payload';
|
|
50
|
+
readonly transition: string;
|
|
51
|
+
readonly issues: readonly string[];
|
|
52
|
+
};
|
|
53
|
+
export type LifecycleTransitionSuccess<TState extends string> = {
|
|
54
|
+
readonly outcome: 'transitioned';
|
|
55
|
+
readonly state: LifecycleState<TState>;
|
|
56
|
+
readonly event: LifecycleTransitionEvent;
|
|
57
|
+
};
|
|
58
|
+
export type LifecycleTransitionResult<TState extends string> = LifecycleTransitionSuccess<TState> | LifecycleTransitionFailure;
|
|
59
|
+
export type LifecycleTransitionInput<TState extends string, TRole extends string, TTransition extends string, TDefinition extends LifecycleTransitionDefinition<TState, TRole, ZodType> = LifecycleTransitionDefinition<TState, TRole, ZodType>> = {
|
|
60
|
+
readonly state: LifecycleState<TState>;
|
|
61
|
+
readonly transition: TTransition;
|
|
62
|
+
readonly role: TRole;
|
|
63
|
+
readonly actorId: string;
|
|
64
|
+
readonly subject: DomainEventSubject;
|
|
65
|
+
readonly eventId: string;
|
|
66
|
+
readonly occurredAt: string;
|
|
67
|
+
} & (TDefinition extends {
|
|
68
|
+
readonly payload: infer TPayload extends ZodType;
|
|
69
|
+
} ? {
|
|
70
|
+
readonly payload: z.input<TPayload>;
|
|
71
|
+
} : {
|
|
72
|
+
readonly payload?: never;
|
|
73
|
+
});
|
|
74
|
+
/**
|
|
75
|
+
* Declare a finite, synchronous state machine. Persistence remains application-owned;
|
|
76
|
+
* the returned event is the value to commit beside the application's state change.
|
|
77
|
+
*/
|
|
78
|
+
export declare function defineLifecycle<const TState extends string, const TRole extends string, const TTransitions extends Record<string, LifecycleTransitionDefinition<TState, TRole, ZodType>>>(config: {
|
|
79
|
+
readonly name: string;
|
|
80
|
+
readonly states: readonly TState[];
|
|
81
|
+
readonly roles: readonly TRole[];
|
|
82
|
+
readonly transitions: TTransitions;
|
|
83
|
+
}): Readonly<{
|
|
84
|
+
definition: LifecycleDefinition<TState, TRole, TTransitions>;
|
|
85
|
+
state(value: TState): LifecycleState<TState>;
|
|
86
|
+
availableTransitions(state: LifecycleState<TState>, role: TRole): readonly string[];
|
|
87
|
+
transition<TName extends keyof TTransitions & string>(input: LifecycleTransitionInput<TState, TRole, TName, TTransitions[TName]>): LifecycleTransitionResult<TState>;
|
|
88
|
+
}>;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/primitives/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SourceText {
|
|
2
|
+
readonly path: string;
|
|
3
|
+
readonly text: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SourceRisk {
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly line: number;
|
|
8
|
+
readonly kind: 'money-number' | 'manual-owner-filter';
|
|
9
|
+
readonly excerpt: string;
|
|
10
|
+
}
|
|
11
|
+
/** Find decimal formatting applied to caller-named monetary identifiers. */
|
|
12
|
+
export declare function scanMoneyNumberRisks(sources: readonly SourceText[], identifiers?: readonly string[]): readonly SourceRisk[];
|
|
13
|
+
/** Find caller-named owner keys manually embedded in data-query calls. */
|
|
14
|
+
export declare function scanOwnerFilterRisks(sources: readonly SourceText[], ownerKeys?: readonly string[]): readonly SourceRisk[];
|
|
15
|
+
//# sourceMappingURL=migration-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-checks.d.ts","sourceRoot":"","sources":["../../src/primitives/migration-checks.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,qBAAqB,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAgBD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,WAAW,GAAE,SAAS,MAAM,EAA0C,GACrE,SAAS,UAAU,EAAE,CAoBvB;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,SAAS,GAAE,SAAS,MAAM,EAAgB,GACzC,SAAS,UAAU,EAAE,CA+BvB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export interface Money<TCurrency extends string = string> {
|
|
3
|
+
readonly minor: string;
|
|
4
|
+
readonly currency: TCurrency;
|
|
5
|
+
}
|
|
6
|
+
export declare function createMoneySchema<const TCurrency extends string>(currency: TCurrency): z.ZodObject<{
|
|
7
|
+
minor: z.ZodString;
|
|
8
|
+
currency: z.ZodLiteral<TCurrency>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export declare function addMoney<TCurrency extends string>(left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>): Money<TCurrency>;
|
|
11
|
+
export declare function subtractMoney<TCurrency extends string>(left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>): Money<TCurrency>;
|
|
12
|
+
export declare function multiplyMoney<TCurrency extends string>(value: Money<TCurrency>, quantity: bigint | number): Money<TCurrency>;
|
|
13
|
+
export interface MoneyShare<TCurrency extends string> {
|
|
14
|
+
readonly amount: Money<TCurrency>;
|
|
15
|
+
readonly remainder: {
|
|
16
|
+
readonly numerator: string;
|
|
17
|
+
readonly denominator: string;
|
|
18
|
+
readonly currency: TCurrency;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Take an integer rational share and retain the indivisible minor-unit remainder explicitly. */
|
|
22
|
+
export declare function shareMoney<TCurrency extends string>(value: Money<TCurrency>, numerator: bigint, denominator: bigint): MoneyShare<TCurrency>;
|
|
23
|
+
export interface MoneySplit<TCurrency extends string> {
|
|
24
|
+
readonly part: Money<TCurrency>;
|
|
25
|
+
readonly count: number;
|
|
26
|
+
readonly remainder: Money<TCurrency>;
|
|
27
|
+
}
|
|
28
|
+
/** Split into equal whole-minor-unit parts plus the explicit undistributed remainder. */
|
|
29
|
+
export declare function splitMoney<TCurrency extends string>(value: Money<TCurrency>, count: number): MoneySplit<TCurrency>;
|
|
30
|
+
export declare function defineMoney<const TCurrency extends string>(currency: TCurrency): Readonly<{
|
|
31
|
+
currency: TCurrency;
|
|
32
|
+
schema: z.ZodObject<{
|
|
33
|
+
minor: z.ZodString;
|
|
34
|
+
currency: z.ZodLiteral<TCurrency>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
create(minor: string | bigint): Money<TCurrency>;
|
|
37
|
+
add: (left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>) => Money<TCurrency>;
|
|
38
|
+
subtract: (left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>) => Money<TCurrency>;
|
|
39
|
+
multiply: (value: Money<TCurrency>, quantity: bigint | number) => Money<TCurrency>;
|
|
40
|
+
share: (value: Money<TCurrency>, numerator: bigint, denominator: bigint) => MoneyShare<TCurrency>;
|
|
41
|
+
split: (value: Money<TCurrency>, count: number) => MoneySplit<TCurrency>;
|
|
42
|
+
}>;
|
|
43
|
+
//# sourceMappingURL=money.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../src/primitives/money.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,WAAW,KAAK,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,SAAS,SAAS,MAAM,EAAE,QAAQ,EAAE,SAAS;;;kBAKpF;AAmBD,wBAAgB,QAAQ,CAAC,SAAS,SAAS,MAAM,EAC/C,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAC/B,KAAK,CAAC,SAAS,CAAC,CAGlB;AAED,wBAAgB,aAAa,CAAC,SAAS,SAAS,MAAM,EACpD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAC/B,KAAK,CAAC,SAAS,CAAC,CAGlB;AAED,wBAAgB,aAAa,CAAC,SAAS,SAAS,MAAM,EACpD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,GACxB,KAAK,CAAC,SAAS,CAAC,CAMlB;AAED,MAAM,WAAW,UAAU,CAAC,SAAS,SAAS,MAAM;IAClD,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;KAC9B,CAAC;CACH;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,SAAS,SAAS,MAAM,EACjD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,SAAS,CAAC,CAYvB;AAED,MAAM,WAAW,UAAU,CAAC,SAAS,SAAS,MAAM;IAClD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CACtC;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,SAAS,SAAS,MAAM,EACjD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EACvB,KAAK,EAAE,MAAM,GACZ,UAAU,CAAC,SAAS,CAAC,CAWvB;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,SAAS,SAAS,MAAM,EAAE,QAAQ,EAAE,SAAS;;;;;;kBAK7D,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;;;kDAjExC,MAAM,GAAG,MAAM;gDAqBd,MAAM,eACJ,MAAM;4CAwBZ,MAAM;GA6Bd"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
declare const ownerScopeBrand: unique symbol;
|
|
2
|
+
export type OwnerScope<TOwner extends string = string> = {
|
|
3
|
+
readonly kind: 'owner';
|
|
4
|
+
readonly ownerId: TOwner;
|
|
5
|
+
readonly [ownerScopeBrand]: true;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: 'all';
|
|
8
|
+
readonly permission: 'acrossAllOwners';
|
|
9
|
+
readonly [ownerScopeBrand]: true;
|
|
10
|
+
};
|
|
11
|
+
export type OwnerScopeResolution<TOwner extends string> = {
|
|
12
|
+
readonly outcome: 'resolved';
|
|
13
|
+
readonly scope: OwnerScope<TOwner>;
|
|
14
|
+
} | {
|
|
15
|
+
readonly outcome: 'owner_missing';
|
|
16
|
+
} | {
|
|
17
|
+
readonly outcome: 'across_all_forbidden';
|
|
18
|
+
};
|
|
19
|
+
export interface OwnerScopeDefinition<TIdentity, TOwner extends string> {
|
|
20
|
+
readonly ownerId: (identity: TIdentity) => TOwner | undefined;
|
|
21
|
+
readonly canAccessAll: (identity: TIdentity) => boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Resolve an owner boundary from authenticated identity, never from handler input. */
|
|
24
|
+
export declare function defineOwnerScope<TIdentity, TOwner extends string>(definition: OwnerScopeDefinition<TIdentity, TOwner>): Readonly<{
|
|
25
|
+
definition: OwnerScopeDefinition<TIdentity, TOwner>;
|
|
26
|
+
forIdentity(identity: TIdentity): OwnerScopeResolution<TOwner>;
|
|
27
|
+
acrossAllOwners(identity: TIdentity): OwnerScopeResolution<TOwner>;
|
|
28
|
+
}>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=owner-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-scope.d.ts","sourceRoot":"","sources":["../../src/primitives/owner-scope.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,EAAE,OAAO,MAAwC,CAAC;AAEvE,MAAM,MAAM,UAAU,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,IACjD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;CAClC,CAAC;AAEN,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,MAAM,IAClD;IAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GACrC;IAAE,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAEjD,MAAM,WAAW,oBAAoB,CAAC,SAAS,EAAE,MAAM,SAAS,MAAM;IACpE,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC;CACzD;AAgBD,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,SAAS,MAAM,EAC/D,UAAU,EAAE,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC;;0BAI3B,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC;8BAMpC,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC;GAMrE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type PermissionGrantMatrix<TRole extends string, TOperation extends string> = Readonly<Record<TRole, Readonly<Record<TOperation, boolean>>>>;
|
|
2
|
+
export type PermissionCheckResult = {
|
|
3
|
+
readonly outcome: 'allowed';
|
|
4
|
+
} | {
|
|
5
|
+
readonly outcome: 'denied';
|
|
6
|
+
} | {
|
|
7
|
+
readonly outcome: 'unknown_role';
|
|
8
|
+
readonly role: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly outcome: 'unknown_operation';
|
|
11
|
+
readonly operation: string;
|
|
12
|
+
};
|
|
13
|
+
/** Declare every role × operation decision once for authorization and capability projection. */
|
|
14
|
+
export declare function definePermissionMatrix<const TRole extends string, const TOperation extends string>(config: {
|
|
15
|
+
readonly roles: readonly TRole[];
|
|
16
|
+
readonly operations: readonly TOperation[];
|
|
17
|
+
readonly grants: PermissionGrantMatrix<TRole, TOperation>;
|
|
18
|
+
}): Readonly<{
|
|
19
|
+
definition: {
|
|
20
|
+
readonly roles: readonly TRole[];
|
|
21
|
+
readonly operations: readonly TOperation[];
|
|
22
|
+
readonly grants: PermissionGrantMatrix<TRole, TOperation>;
|
|
23
|
+
};
|
|
24
|
+
allows(role: TRole, operation: TOperation): boolean;
|
|
25
|
+
capabilities(role: TRole): readonly TOperation[];
|
|
26
|
+
check(role: string, operation: string): PermissionCheckResult;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/primitives/permission.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,CAAC,KAAK,SAAS,MAAM,EAAE,UAAU,SAAS,MAAM,IAAI,QAAQ,CAC3F,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CACrD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,gGAAgG;AAChG,wBAAgB,sBAAsB,CACpC,KAAK,CAAC,KAAK,SAAS,MAAM,EAC1B,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,MAAM,EAAE;IACR,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;CAC3D;;wBAHiB,SAAS,KAAK,EAAE;6BACX,SAAS,UAAU,EAAE;yBACzB,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC;;iBA8B1C,KAAK,aAAa,UAAU,GAAG,OAAO;uBAGhC,KAAK,GAAG,SAAS,UAAU,EAAE;gBAGpC,MAAM,aAAa,MAAM,GAAG,qBAAqB;GAQhE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export interface Quantity<TUnit extends string = string> {
|
|
3
|
+
readonly value: string;
|
|
4
|
+
readonly unit: TUnit;
|
|
5
|
+
}
|
|
6
|
+
export declare function createQuantitySchema<const TUnit extends string>(unit: TUnit): z.ZodObject<{
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
unit: z.ZodLiteral<TUnit>;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export declare function addQuantity<TUnit extends string>(left: Quantity<TUnit>, right: Quantity<NoInfer<TUnit>>): Quantity<TUnit>;
|
|
11
|
+
export interface UnitConversion<TUnit extends string = string> {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly from: TUnit;
|
|
14
|
+
readonly to: TUnit;
|
|
15
|
+
readonly numerator: string;
|
|
16
|
+
readonly denominator: string;
|
|
17
|
+
}
|
|
18
|
+
export type QuantityProjection<TUnit extends string = string> = {
|
|
19
|
+
readonly kind: 'recorded';
|
|
20
|
+
readonly quantity: Quantity<TUnit>;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: 'derived';
|
|
23
|
+
readonly quantity: Quantity<TUnit>;
|
|
24
|
+
readonly source: Quantity;
|
|
25
|
+
readonly conversionId: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const QuantityProjectionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
28
|
+
kind: z.ZodLiteral<"recorded">;
|
|
29
|
+
quantity: z.ZodObject<{
|
|
30
|
+
value: z.ZodString;
|
|
31
|
+
unit: z.ZodString;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
34
|
+
kind: z.ZodLiteral<"derived">;
|
|
35
|
+
quantity: z.ZodObject<{
|
|
36
|
+
value: z.ZodString;
|
|
37
|
+
unit: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
source: z.ZodObject<{
|
|
40
|
+
value: z.ZodString;
|
|
41
|
+
unit: z.ZodString;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
conversionId: z.ZodString;
|
|
44
|
+
}, z.core.$strip>], "kind">;
|
|
45
|
+
export declare function defineUnitSystem<const TUnit extends string>(config: {
|
|
46
|
+
readonly units: readonly TUnit[];
|
|
47
|
+
readonly conversions: readonly UnitConversion<TUnit>[];
|
|
48
|
+
}): Readonly<{
|
|
49
|
+
definition: {
|
|
50
|
+
readonly units: readonly TUnit[];
|
|
51
|
+
readonly conversions: readonly UnitConversion<TUnit>[];
|
|
52
|
+
};
|
|
53
|
+
create<TSelected extends TUnit>(value: string, unit: TSelected): Quantity<TSelected>;
|
|
54
|
+
recorded<TSelected extends TUnit>(value: Quantity<TSelected>): QuantityProjection<TSelected>;
|
|
55
|
+
convert<TFrom extends TUnit, TTo extends TUnit>(source: Quantity<TFrom>, to: TTo): QuantityProjection<TTo>;
|
|
56
|
+
}>;
|
|
57
|
+
//# sourceMappingURL=quantity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../../src/primitives/quantity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,MAAM,WAAW,QAAQ,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK;;;kBAE3E;AAUD,wBAAgB,WAAW,CAAC,KAAK,SAAS,MAAM,EAC9C,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EACrB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAC9B,QAAQ,CAAC,KAAK,CAAC,CAQjB;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;CAAE,GACjE;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEN,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;2BAWnC,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAAE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;CACxD;;wBAFiB,SAAS,KAAK,EAAE;8BACV,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE;;WAqB7C,SAAS,SAAS,KAAK,SAAS,MAAM,QAAQ,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;aAI3E,SAAS,SAAS,KAAK,SACvB,QAAQ,CAAC,SAAS,CAAC,GACzB,kBAAkB,CAAC,SAAS,CAAC;YAGxB,KAAK,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,UACpC,QAAQ,CAAC,KAAK,CAAC,MACnB,GAAG,GACN,kBAAkB,CAAC,GAAG,CAAC;GA4B7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,cAAc,oBAAoB,CAAC"}
|