@bitmagic/animation-forger 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-spec.d.ts","sourceRoot":"","sources":["../src/authored-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,219 @@
1
+ /**
2
+ * The authored-clip parameter spec — what a caller sends to have an animation
3
+ * built.
4
+ *
5
+ * This is the PUBLISHED half of the animation forger: the dials and their
6
+ * ranges, and nothing that knows how to turn them into motion. The solver, the
7
+ * tuned preset tables and the pose vocabulary live in the private half and never
8
+ * reach a creator's machine.
9
+ *
10
+ * Two properties this shape exists to guarantee:
11
+ *
12
+ * 1. SAFETY. The obvious design has an agent write a clip module which the
13
+ * builder then imports — arbitrary code execution driven by end-user
14
+ * prompts. Here the caller emits DATA, this schema validates it, and only
15
+ * code that already shipped ever runs.
16
+ *
17
+ * 2. QUALITY. Every range below is the range the built-in clips were tuned
18
+ * within. Outside them the IK starts clamping and the feet skate, so a spec
19
+ * that falls outside is REFUSED with the failing field named rather than
20
+ * approximated — a clip that measures fine and looks wrong is worse than no
21
+ * clip.
22
+ *
23
+ * ── Keeping this in step with the private half ──────────────────────────────
24
+ *
25
+ * Three of the enums and defaults below are literal copies of private tables:
26
+ * `BLADE_DIRECTIONS` (the blade aim vocabulary), `GAIT_PRESETS` (the preset
27
+ * names) and `STANDING_HIP_Y`. They are inlined because this package must not
28
+ * depend on the private one. A `schema-sync` test in the private package asserts
29
+ * each of them still matches its table — without it, adding an eleventh blade
30
+ * direction would leave it silently unreachable, with no error anywhere.
31
+ */
32
+ import { z } from 'zod';
33
+ // ─── Shared pieces ──────────────────────────────────────────────────────────
34
+ /**
35
+ * The blade aim vocabulary. MUST equal `Object.keys(BLADE)` in the private half
36
+ * — pinned by its schema-sync test.
37
+ */
38
+ export const BLADE_DIRECTIONS = [
39
+ 'forward', 'forwardHigh', 'forwardLow', 'up', 'upBack',
40
+ 'down', 'downForward', 'outRight', 'outLeft', 'rest',
41
+ ];
42
+ /** MUST equal `Object.keys(GAIT_PRESETS)` in the private half. */
43
+ export const GAIT_PRESET_NAMES = ['walk', 'slowRun', 'fastRun'];
44
+ /** MUST equal `STANDING_HIP_Y` in the private half. Hip height in cm, standing. */
45
+ export const STANDING_HIP_Y = 97.5;
46
+ const blade = z.enum(BLADE_DIRECTIONS);
47
+ const ease = z.enum(['linear', 'in', 'out', 'inOut']);
48
+ /**
49
+ * CamelCase, and NOT containing idle/walk/run/jump.
50
+ *
51
+ * The reserved-word rule used to be a post-parse throw inside the builder, so a
52
+ * bad name cost a full round trip (and, in the CLI lane, an upload) before
53
+ * anything complained. It belongs in the schema: `AnimationOverrideSystem`
54
+ * routes clips to engine states by SUBSTRING, so such a name seizes that
55
+ * locomotion state for every character the moment the clip loads.
56
+ */
57
+ const clipName = z.string().min(3).max(40)
58
+ .regex(/^[A-Za-z][A-Za-z0-9]*$/, 'Use a CamelCase identifier, letters and digits only')
59
+ .refine((n) => !/idle|walk|run|jump/i.test(n), 'Name must not contain idle/walk/run/jump — AnimationOverrideSystem routes clips to engine '
60
+ + 'states by substring, so such a name seizes that locomotion state for every character. '
61
+ + 'Use e.g. "LimpStride" rather than "LimpWalk".');
62
+ /**
63
+ * The clip's OWN engine motion id, baked into the GLB meta — the same convention
64
+ * the built-in Mixamo clips use (mWalkDefault01). NOT the minted `asset_…` id:
65
+ * that is passed alongside the spec and is what `playCustomAnimation` resolves.
66
+ *
67
+ * The regex mirrors the private half's `validateMeta`, which used to be the only
68
+ * place it was enforced — so a spec reusing the asset id here passed input
69
+ * validation and then died at build time, costing a round.
70
+ */
71
+ const motionId = z.string().max(64)
72
+ .regex(/^m[A-Za-z0-9]{4,}$/, 'motionId must be the engine convention "m" followed by 4+ letters/digits (e.g. mBoatSeatedHold01). '
73
+ + "This is the clip's internal id, NOT the minted asset id — pass that as `assetId` alongside the spec.");
74
+ const baseSchema = {
75
+ name: clipName,
76
+ motionId,
77
+ duration: z.number().min(0.2).max(12),
78
+ };
79
+ /** A held arm pose. Shared by the gait family's `dials.arms` and oneShot keys. */
80
+ const armPoseSchema = z.object({
81
+ pitch: z.number().min(-1.2).max(3),
82
+ splay: z.number().min(-0.4).max(1.4).optional(),
83
+ elbow: z.number().min(0).max(2.2).optional(),
84
+ yaw: z.number().min(-1).max(1).optional(),
85
+ });
86
+ // ─── Family 1: gait ─────────────────────────────────────────────────────────
87
+ //
88
+ // A whole biped from a preset plus dial overrides.
89
+ export const gaitSpecSchema = z.object({
90
+ family: z.literal('gait'),
91
+ ...baseSchema,
92
+ basedOn: z.enum(GAIT_PRESET_NAMES),
93
+ designSpeed: z.number().min(0.3).max(9)
94
+ .describe('Metres/second the cycle is built for; feet slide if this disagrees with how fast the character actually moves.'),
95
+ loop: z.literal(true).default(true),
96
+ dials: z.object({
97
+ stance: z.number().min(0.22).max(0.72).optional()
98
+ .describe('Fraction of the cycle each foot is on the ground. >0.5 walks, <0.5 runs.'),
99
+ bob: z.number().min(0).max(16).optional(),
100
+ footLift: z.number().min(2).max(38).optional(),
101
+ lean: z.number().min(-0.25).max(0.55).optional(),
102
+ // Capped by where the HAND ends up, not by how vigorous the angle looks:
103
+ // above this the hands crest over the shoulder and read as flailing.
104
+ armSwing: z.number().min(0).max(0.95).optional()
105
+ .describe('Above ~0.8 the hands crest over the shoulder and read as flailing.'),
106
+ armSplay: z.number().min(0).max(0.6).optional(),
107
+ elbow: z.number().min(0).max(1.8).optional(),
108
+ hipYaw: z.number().min(0).max(0.25).optional(),
109
+ chestYaw: z.number().min(0).max(0.35).optional(),
110
+ // Asymmetry dials — this is what makes a limp, a swagger, a trudge.
111
+ limpSide: z.enum(['left', 'right']).optional(),
112
+ limpDepth: z.number().min(0).max(1).optional()
113
+ .describe('0 = even gait, 1 = pronounced limp on limpSide.'),
114
+ // HELD arm pose replacing the swing entirely — zombie reach, sleepwalker,
115
+ // carrying something. Both arms take the identical pose; per-side asymmetry
116
+ // is what the oneShot family is for.
117
+ arms: armPoseSchema.optional()
118
+ .describe('HELD arm pose replacing the swing. pitch is the angle from hanging: ~1.43 = hands at SHOULDER '
119
+ + 'height (zombie reach, sleepwalker), below 0.85 = low carry. The dead zone between (0.85-1.3) lands '
120
+ + 'hands at waist height and the build REJECTS it for a reach. Both arms take the same pose.'),
121
+ }).default({}),
122
+ });
123
+ // ─── Family 2: melee ────────────────────────────────────────────────────────
124
+ //
125
+ // A weapon strike as a short sequence of key poses.
126
+ const meleeKeySchema = z.object({
127
+ at: z.number().min(0).max(1),
128
+ ease: ease.default('inOut')
129
+ .describe("Use 'out' settling into the wind-up, 'in' for the strike, 'linear' between two identical keys to HOLD."),
130
+ pow: z.number().min(1).max(4).default(2.2),
131
+ grip: z.enum(['one', 'two']),
132
+ hipDrop: z.number().min(-6).max(24).default(9),
133
+ twist: z.number().min(-1.2).max(1.2).default(0),
134
+ fold: z.number().min(-0.6).max(1).default(0),
135
+ blade,
136
+ arm: z.object({
137
+ pitch: z.number().min(-1).max(2.8),
138
+ yaw: z.number().min(-1).max(1).default(0),
139
+ elbow: z.number().min(0).max(2).default(0.6),
140
+ }),
141
+ stance: z.object({
142
+ front: z.number().min(-40).max(50).default(0),
143
+ back: z.number().min(-40).max(20).default(0),
144
+ }).optional(),
145
+ });
146
+ export const meleeSpecSchema = z.object({
147
+ family: z.literal('melee'),
148
+ ...baseSchema,
149
+ loop: z.literal(false).default(false),
150
+ impactPhase: z.number().min(0.15).max(0.85)
151
+ .describe('Where in the clip the blow lands, 0..1.'),
152
+ twoHanded: z.boolean().default(false)
153
+ .describe('True puts the off hand on the shaft (solved by IK, not posed).'),
154
+ keys: z.array(meleeKeySchema).min(3).max(6)
155
+ .describe('Key poses. First must be at 0 and last at 1. A strike reads best as: '
156
+ + 'guard → wind-up → contact → follow-through → guard.'),
157
+ });
158
+ // ─── Family 3: oneShot ──────────────────────────────────────────────────────
159
+ //
160
+ // An arbitrary whole-body pose sequence — waves, salutes, crouches,
161
+ // celebrations, flinches.
162
+ const jointSchema = z.object({
163
+ pitch: z.number().min(-2.5).max(2.5).optional(),
164
+ yaw: z.number().min(-2).max(2).optional(),
165
+ roll: z.number().min(-2).max(2).optional(),
166
+ }).strict();
167
+ const oneShotKeySchema = z.object({
168
+ at: z.number().min(0).max(1),
169
+ ease: ease.default('inOut'),
170
+ hipY: z.number().min(55).max(105).default(STANDING_HIP_Y)
171
+ .describe('Hip height in cm; ~97 standing, lower to crouch.'),
172
+ stance: z.object({
173
+ front: z.number().min(-35).max(45).default(8),
174
+ back: z.number().min(-35).max(45).default(-8),
175
+ }).default({ front: 8, back: -8 }),
176
+ arms: z.object({
177
+ left: armPoseSchema.extend({
178
+ splay: z.number().min(-0.4).max(1.4).default(0.2),
179
+ elbow: z.number().min(0).max(2.2).default(0.4),
180
+ yaw: z.number().min(-1).max(1).default(0),
181
+ }).optional(),
182
+ right: armPoseSchema.extend({
183
+ splay: z.number().min(-0.4).max(1.4).default(0.2),
184
+ elbow: z.number().min(0).max(2.2).default(0.4),
185
+ yaw: z.number().min(-1).max(1).default(0),
186
+ }).optional(),
187
+ }).default({}),
188
+ torso: z.object({
189
+ spine: jointSchema.optional(),
190
+ chest: jointSchema.optional(),
191
+ neck: jointSchema.optional(),
192
+ head: jointSchema.optional(),
193
+ hips: jointSchema.optional(),
194
+ }).default({}),
195
+ });
196
+ export const oneShotSpecSchema = z.object({
197
+ family: z.literal('oneShot'),
198
+ ...baseSchema,
199
+ loop: z.boolean().default(false),
200
+ keys: z.array(oneShotKeySchema).min(2).max(8),
201
+ });
202
+ // ─── Entry point ────────────────────────────────────────────────────────────
203
+ export const authoredClipSpecSchema = z.discriminatedUnion('family', [
204
+ gaitSpecSchema, meleeSpecSchema, oneShotSpecSchema,
205
+ ]);
206
+ /**
207
+ * Render a spec rejection as one line naming each offending field.
208
+ *
209
+ * Exported because naming the field is the whole point of validating client-side:
210
+ * `bitmagic generate animation` parses the spec before it sends anything, so a bad
211
+ * dial costs a message rather than a round trip. Mirrors the shape api-server's
212
+ * route returns, so the same mistake reads the same either way.
213
+ */
214
+ export function formatSpecIssues(error) {
215
+ return error.issues
216
+ .map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`)
217
+ .join('; ');
218
+ }
219
+ //# sourceMappingURL=authored-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-spec.js","sourceRoot":"","sources":["../src/authored-spec.ts"],"names":[],"mappings":"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"}
package/dist/deps.d.ts ADDED
@@ -0,0 +1,56 @@
1
+ /**
2
+ * What the animation forger needs from its host, so the SAME builder runs
3
+ * behind game-play-agent's in-process web lane and api-server's CLI lane.
4
+ *
5
+ * Modeled on `@bitmagic/world-forger`'s `ForgeDeps` and `@bitmagic/asset-core`'s
6
+ * `GenerateDeps` — a pipeline takes its host's capabilities as a parameter and
7
+ * owns no framework, filesystem or tenant of its own.
8
+ *
9
+ * Only two seams, because building a clip is pure compute plus one upload:
10
+ * - `storage` — where the finished GLB goes, and what URL it is reachable at.
11
+ * - `logger` — diagnostics.
12
+ */
13
+ /**
14
+ * The logging surface the builder needs. Structurally satisfied by a pino logger
15
+ * (game-play-agent passes its own `createLogger(...)` result directly), same
16
+ * pattern as `world-forger`'s `ForgeLogger`. The object-first overload matters
17
+ * for errors: `warn({ err }, msg)` serializes the Error with its stack as a
18
+ * structured field, where `warn(\`${err.message}\`)` throws the stack away.
19
+ */
20
+ export interface AnimationLogger {
21
+ info(message: string, ...rest: unknown[]): void;
22
+ info(context: Record<string, unknown>, message: string): void;
23
+ warn(message: string, ...rest: unknown[]): void;
24
+ warn(context: Record<string, unknown>, message: string): void;
25
+ error(message: string, ...rest: unknown[]): void;
26
+ error(context: Record<string, unknown>, message: string): void;
27
+ }
28
+ /** One object write. A field-for-field subset of the hosts' real storage clients. */
29
+ export interface AnimationPutObjectParams {
30
+ bucket: string;
31
+ key: string;
32
+ body: Uint8Array;
33
+ contentType: string;
34
+ cacheControl?: string;
35
+ }
36
+ export interface AnimationStorageClient {
37
+ putObject(params: AnimationPutObjectParams): Promise<unknown>;
38
+ }
39
+ /**
40
+ * Where clips are written and what URL they are then reachable at.
41
+ *
42
+ * A host whose `publicUrl` is absent or a `file://` path must REFUSE rather than
43
+ * build: a clip the game's browser cannot fetch is worse than a clear failure,
44
+ * and reporting success for an animation that never plays is the specific
45
+ * outcome this guard exists to prevent.
46
+ */
47
+ export interface AnimationStorageEnv {
48
+ storageClient: AnimationStorageClient;
49
+ bucket: string;
50
+ publicUrl: string;
51
+ }
52
+ export interface AnimationForgerDeps {
53
+ storage: AnimationStorageEnv;
54
+ logger: AnimationLogger;
55
+ }
56
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,qFAAqF;AACrF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,sBAAsB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;CACzB"}
package/dist/deps.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * What the animation forger needs from its host, so the SAME builder runs
3
+ * behind game-play-agent's in-process web lane and api-server's CLI lane.
4
+ *
5
+ * Modeled on `@bitmagic/world-forger`'s `ForgeDeps` and `@bitmagic/asset-core`'s
6
+ * `GenerateDeps` — a pipeline takes its host's capabilities as a parameter and
7
+ * owns no framework, filesystem or tenant of its own.
8
+ *
9
+ * Only two seams, because building a clip is pure compute plus one upload:
10
+ * - `storage` — where the finished GLB goes, and what URL it is reachable at.
11
+ * - `logger` — diagnostics.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `@bitmagic/animation-forger` — the client half of the Bitmagic animation
3
+ * forger.
4
+ *
5
+ * The forger turns a validated parameter spec into an animation GLB built
6
+ * against the canonical rig. It is split in two along an IP line, and THIS is
7
+ * the half that ships:
8
+ *
9
+ * - here: the spec a caller writes, the wire body, the result types and
10
+ * the host seams. Depends on zod and nothing else — no three.js,
11
+ * no `node:*` — so it runs in a browser and its `.d.ts` costs a
12
+ * consumer no extra `@types`.
13
+ * - elsewhere: the solver. The footstep-target IK, the tuned gait presets, the
14
+ * blade aim vocabulary, the grounding and loop-seam gates and the
15
+ * GLB writer. That half is private, is never published, and runs
16
+ * only on our own servers.
17
+ *
18
+ * A caller that wants a clip BUILT sends a spec to an endpoint. A caller that
19
+ * only wants to construct or validate one needs nothing beyond this package.
20
+ *
21
+ * (The private half is deliberately not named anywhere in this package's
22
+ * sources: `scripts/check-packed-tarball.mjs` proves the name appears nowhere in
23
+ * what gets published, and that check has no false positives to argue with only
24
+ * so long as this stays true.)
25
+ */
26
+ export { authoredClipSpecSchema, gaitSpecSchema, meleeSpecSchema, oneShotSpecSchema, BLADE_DIRECTIONS, GAIT_PRESET_NAMES, STANDING_HIP_Y, formatSpecIssues, } from './authored-spec.js';
27
+ export type { AuthoredClipSpec, AuthoredClipSpecInput, AuthoredClipFamily, BladeDirection, GaitPresetName, } from './authored-spec.js';
28
+ export { authoredAnimationParamsSchema } from './params.js';
29
+ export type { AuthoredAnimationParams, AuthoredAnimationParamsInput } from './params.js';
30
+ export type { AuthoredClipMeta, AuthoredClipResult, AuthoredAnimationOutcome, } from './result-types.js';
31
+ export type { AnimationForgerDeps, AnimationLogger, AnimationStorageClient, AnimationStorageEnv, AnimationPutObjectParams, } from './deps.js';
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEzF,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `@bitmagic/animation-forger` — the client half of the Bitmagic animation
3
+ * forger.
4
+ *
5
+ * The forger turns a validated parameter spec into an animation GLB built
6
+ * against the canonical rig. It is split in two along an IP line, and THIS is
7
+ * the half that ships:
8
+ *
9
+ * - here: the spec a caller writes, the wire body, the result types and
10
+ * the host seams. Depends on zod and nothing else — no three.js,
11
+ * no `node:*` — so it runs in a browser and its `.d.ts` costs a
12
+ * consumer no extra `@types`.
13
+ * - elsewhere: the solver. The footstep-target IK, the tuned gait presets, the
14
+ * blade aim vocabulary, the grounding and loop-seam gates and the
15
+ * GLB writer. That half is private, is never published, and runs
16
+ * only on our own servers.
17
+ *
18
+ * A caller that wants a clip BUILT sends a spec to an endpoint. A caller that
19
+ * only wants to construct or validate one needs nothing beyond this package.
20
+ *
21
+ * (The private half is deliberately not named anywhere in this package's
22
+ * sources: `scripts/check-packed-tarball.mjs` proves the name appears nowhere in
23
+ * what gets published, and that check has no false positives to argue with only
24
+ * so long as this stays true.)
25
+ */
26
+ export { authoredClipSpecSchema, gaitSpecSchema, meleeSpecSchema, oneShotSpecSchema, BLADE_DIRECTIONS, GAIT_PRESET_NAMES, STANDING_HIP_Y, formatSpecIssues, } from './authored-spec.js';
27
+ export { authoredAnimationParamsSchema } from './params.js';
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAS5B,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC"}