@datamoc/mw_games 0.30.0 → 0.33.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/CHANGELOG.md +86 -0
- package/README.md +1 -1
- package/api-surface.json +384 -0
- package/dist/assets/index.d.ts +2 -0
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +1 -0
- package/dist/assets/index.js.map +1 -1
- package/dist/assets/svg.d.ts +87 -0
- package/dist/assets/svg.d.ts.map +1 -0
- package/dist/assets/svg.js +162 -0
- package/dist/assets/svg.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mw_games.global.js +41 -41
- package/dist/mwl/fengari.d.ts +12 -6
- package/dist/mwl/fengari.d.ts.map +1 -1
- package/dist/mwl/fengari.js +56 -70
- package/dist/mwl/fengari.js.map +1 -1
- package/dist/mwl/runtime.d.ts +13 -0
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +72 -4
- package/dist/mwl/runtime.js.map +1 -1
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/schema.js +4 -1
- package/dist/mwl/schema.js.map +1 -1
- package/dist/roguelike/Cave.d.ts +109 -0
- package/dist/roguelike/Cave.d.ts.map +1 -0
- package/dist/roguelike/Cave.js +192 -0
- package/dist/roguelike/Cave.js.map +1 -0
- package/dist/roguelike/Overworld.d.ts +82 -0
- package/dist/roguelike/Overworld.d.ts.map +1 -0
- package/dist/roguelike/Overworld.js +306 -0
- package/dist/roguelike/Overworld.js.map +1 -0
- package/dist/roguelike/index.d.ts +4 -0
- package/dist/roguelike/index.d.ts.map +1 -1
- package/dist/roguelike/index.js +2 -0
- package/dist/roguelike/index.js.map +1 -1
- package/dist/skeleton/index.d.ts +131 -0
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/index.js +206 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/testing/SceneControls.d.ts +35 -0
- package/dist/testing/SceneControls.d.ts.map +1 -0
- package/dist/testing/SceneControls.js +49 -0
- package/dist/testing/SceneControls.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/two-d/render/Camera.d.ts +13 -3
- package/dist/two-d/render/Camera.d.ts.map +1 -1
- package/dist/two-d/render/Camera.js +35 -25
- package/dist/two-d/render/Camera.js.map +1 -1
- package/dist/two-d/render/SkeletalSprite.d.ts +118 -0
- package/dist/two-d/render/SkeletalSprite.d.ts.map +1 -0
- package/dist/two-d/render/SkeletalSprite.js +189 -0
- package/dist/two-d/render/SkeletalSprite.js.map +1 -0
- package/dist/two-d/render/SpriteMotion.d.ts +121 -0
- package/dist/two-d/render/SpriteMotion.d.ts.map +1 -0
- package/dist/two-d/render/SpriteMotion.js +193 -0
- package/dist/two-d/render/SpriteMotion.js.map +1 -0
- package/dist/two-d/render/index.d.ts +4 -0
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +2 -0
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -2
- package/sbom.cdx.json +222 -222
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG as inbound data (roadmap 398): sanitization, named scale variants, and group-split
|
|
3
|
+
* parts.
|
|
4
|
+
*
|
|
5
|
+
* An SVG is inbound data that can carry active content - `<script>`, event-handler
|
|
6
|
+
* attributes, `foreignObject` - the same way a save slot or a replay file is inbound data.
|
|
7
|
+
* `sanitizeSvg` refuses what it cannot prove inert, by name, conservatively: anything the
|
|
8
|
+
* scan does not recognize as inert is an error, never a silent pass, and the posture is the
|
|
9
|
+
* same one the saves and replay rules carry rather than a trust in the `file://` CSP to make
|
|
10
|
+
* the question moot.
|
|
11
|
+
*
|
|
12
|
+
* `svgScaleVariants` rasterizes one source once per named scale (1x, 2x, 3x), so a game
|
|
13
|
+
* picks the variant by device the way it picks an asset path, instead of every call site
|
|
14
|
+
* re-deciding a resolution multiplier. `splitSvgGroups` loads an SVG authored with named
|
|
15
|
+
* `<g>` groups as one standalone SVG per group - the natural authoring form for a skeletal
|
|
16
|
+
* puppet: one drawing, one source of truth, split at load.
|
|
17
|
+
*
|
|
18
|
+
* All three are string processing with no renderer: they run headless, and the compiled
|
|
19
|
+
* `data:` URI form is what they consume and produce.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { sanitizeSvg, splitSvgGroups } from '@datamoc/mw_games/assets';
|
|
24
|
+
*
|
|
25
|
+
* const puppet = '<svg><g id=\"arm\"><rect/></g></svg>';
|
|
26
|
+
* const parts = splitSvgGroups(sanitizeSvg(puppet));
|
|
27
|
+
* console.log(Object.keys(parts)); // ['arm']
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Refuse an SVG that is not proven inert, by name. The scan is deliberately conservative:
|
|
32
|
+
* it names what it refuses, and anything it cannot read as inert is an error rather than a
|
|
33
|
+
* silent pass. The source is returned unchanged once proven inert - sanitization here is a
|
|
34
|
+
* gate, not a rewrite; what a game authors is what a game gets.
|
|
35
|
+
*/
|
|
36
|
+
export declare function sanitizeSvg(source: string): string;
|
|
37
|
+
export interface ScaleVariant {
|
|
38
|
+
/** the name a game picks the variant by, the way it picks an asset path */
|
|
39
|
+
name: string;
|
|
40
|
+
/** the rasterization resolution multiple, so a device picks its sharpness at load */
|
|
41
|
+
resolution: number;
|
|
42
|
+
}
|
|
43
|
+
export interface SvgVariant {
|
|
44
|
+
name: string;
|
|
45
|
+
/** a `data:image/svg\+xml` URI ready for the asset loader */
|
|
46
|
+
src: string;
|
|
47
|
+
/** the loader's own resolution hint, carried from the named scale */
|
|
48
|
+
resolution: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The `data:image/svg+xml` form of a source, ready for the loader.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { svgDataUri } from '@datamoc/mw_games/assets';
|
|
56
|
+
*
|
|
57
|
+
* console.log(svgDataUri('<svg/>').startsWith('data:image/svg+xml,')); // true
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function svgDataUri(source: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* One source, one variant per named scale. Each variant is the same proven-inert source at
|
|
63
|
+
* its own resolution multiple, so the loader rasterizes each scale once and a game asks for
|
|
64
|
+
* the variant by name instead of re-deciding a multiplier at every call site.
|
|
65
|
+
*/
|
|
66
|
+
/**
|
|
67
|
+
* One source, one variant per named scale.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { svgScaleVariants } from '@datamoc/mw_games/assets';
|
|
72
|
+
*
|
|
73
|
+
* const [sharp] = svgScaleVariants('<svg/>', [{ name: '3x', resolution: 3 }]);
|
|
74
|
+
* console.log(sharp.resolution); // 3
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function svgScaleVariants(source: string, scales: readonly ScaleVariant[]): SvgVariant[];
|
|
78
|
+
/**
|
|
79
|
+
* An SVG authored with named `<g id="...">` groups loads as one standalone SVG per group -
|
|
80
|
+
* the natural authoring form for a skeletal puppet: one drawing, one source of truth for
|
|
81
|
+
* palette and style, split at load. Each part keeps the original `<svg>` root attributes
|
|
82
|
+
* (viewBox included) and carries exactly one group's children.
|
|
83
|
+
*
|
|
84
|
+
* Refused by name: an empty id, a duplicate id, and any group the scan cannot balance.
|
|
85
|
+
*/
|
|
86
|
+
export declare function splitSvgGroups(source: string): Record<string, string>;
|
|
87
|
+
//# sourceMappingURL=svg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/assets/svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAcH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,MAAM,WAAW,YAAY;IAC5B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,EAAE,CAa9F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2CrE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG as inbound data (roadmap 398): sanitization, named scale variants, and group-split
|
|
3
|
+
* parts.
|
|
4
|
+
*
|
|
5
|
+
* An SVG is inbound data that can carry active content - `<script>`, event-handler
|
|
6
|
+
* attributes, `foreignObject` - the same way a save slot or a replay file is inbound data.
|
|
7
|
+
* `sanitizeSvg` refuses what it cannot prove inert, by name, conservatively: anything the
|
|
8
|
+
* scan does not recognize as inert is an error, never a silent pass, and the posture is the
|
|
9
|
+
* same one the saves and replay rules carry rather than a trust in the `file://` CSP to make
|
|
10
|
+
* the question moot.
|
|
11
|
+
*
|
|
12
|
+
* `svgScaleVariants` rasterizes one source once per named scale (1x, 2x, 3x), so a game
|
|
13
|
+
* picks the variant by device the way it picks an asset path, instead of every call site
|
|
14
|
+
* re-deciding a resolution multiplier. `splitSvgGroups` loads an SVG authored with named
|
|
15
|
+
* `<g>` groups as one standalone SVG per group - the natural authoring form for a skeletal
|
|
16
|
+
* puppet: one drawing, one source of truth, split at load.
|
|
17
|
+
*
|
|
18
|
+
* All three are string processing with no renderer: they run headless, and the compiled
|
|
19
|
+
* `data:` URI form is what they consume and produce.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { sanitizeSvg, splitSvgGroups } from '@datamoc/mw_games/assets';
|
|
24
|
+
*
|
|
25
|
+
* const puppet = '<svg><g id=\"arm\"><rect/></g></svg>';
|
|
26
|
+
* const parts = splitSvgGroups(sanitizeSvg(puppet));
|
|
27
|
+
* console.log(Object.keys(parts)); // ['arm']
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
/** active shapes and attributes a name-based scan refuses, by name, conservatively */
|
|
31
|
+
const REFUSED_PATTERNS = [
|
|
32
|
+
{ name: '<script>', pattern: /<script[\s/>]/i },
|
|
33
|
+
{ name: '<foreignObject>', pattern: /<foreignobject[\s/>]/i },
|
|
34
|
+
{ name: '<iframe>', pattern: /<iframe[\s/>]/i },
|
|
35
|
+
{ name: '<embed>', pattern: /<embed[\s/>]/i },
|
|
36
|
+
{ name: '<object>', pattern: /<object[\s/>]/i },
|
|
37
|
+
{ name: 'an event-handler attribute', pattern: /\son[a-z]+\s*=/i },
|
|
38
|
+
{ name: 'a javascript: URL', pattern: /javascript\s*:/i },
|
|
39
|
+
{ name: 'a data: URL of an active type', pattern: /data:(?:text\/html|application\/xml|image\/svg\+xml)/i },
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Refuse an SVG that is not proven inert, by name. The scan is deliberately conservative:
|
|
43
|
+
* it names what it refuses, and anything it cannot read as inert is an error rather than a
|
|
44
|
+
* silent pass. The source is returned unchanged once proven inert - sanitization here is a
|
|
45
|
+
* gate, not a rewrite; what a game authors is what a game gets.
|
|
46
|
+
*/
|
|
47
|
+
export function sanitizeSvg(source) {
|
|
48
|
+
for (const { name, pattern } of REFUSED_PATTERNS)
|
|
49
|
+
if (pattern.test(source))
|
|
50
|
+
throw new Error(`SVG refused: contains ${name}`);
|
|
51
|
+
return source;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The `data:image/svg+xml` form of a source, ready for the loader.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* import { svgDataUri } from '@datamoc/mw_games/assets';
|
|
59
|
+
*
|
|
60
|
+
* console.log(svgDataUri('<svg/>').startsWith('data:image/svg+xml,')); // true
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function svgDataUri(source) {
|
|
64
|
+
return `data:image/svg\+xml,${encodeURIComponent(source)}`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* One source, one variant per named scale. Each variant is the same proven-inert source at
|
|
68
|
+
* its own resolution multiple, so the loader rasterizes each scale once and a game asks for
|
|
69
|
+
* the variant by name instead of re-deciding a multiplier at every call site.
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* One source, one variant per named scale.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* import { svgScaleVariants } from '@datamoc/mw_games/assets';
|
|
77
|
+
*
|
|
78
|
+
* const [sharp] = svgScaleVariants('<svg/>', [{ name: '3x', resolution: 3 }]);
|
|
79
|
+
* console.log(sharp.resolution); // 3
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function svgScaleVariants(source, scales) {
|
|
83
|
+
const inert = sanitizeSvg(source);
|
|
84
|
+
if (scales.length === 0)
|
|
85
|
+
throw new Error('SVG scale variants need at least one named scale');
|
|
86
|
+
const seen = new Set();
|
|
87
|
+
for (const scale of scales) {
|
|
88
|
+
if (!scale.name)
|
|
89
|
+
throw new Error('an SVG scale variant needs a name');
|
|
90
|
+
if (!Number.isFinite(scale.resolution) || scale.resolution <= 0)
|
|
91
|
+
throw new Error(`SVG scale variant ${scale.name} needs a positive resolution`);
|
|
92
|
+
if (seen.has(scale.name))
|
|
93
|
+
throw new Error(`duplicate SVG scale variant ${scale.name}`);
|
|
94
|
+
seen.add(scale.name);
|
|
95
|
+
}
|
|
96
|
+
const src = svgDataUri(inert);
|
|
97
|
+
return scales.map((scale) => ({ name: scale.name, src, resolution: scale.resolution }));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* An SVG authored with named `<g id="...">` groups loads as one standalone SVG per group -
|
|
101
|
+
* the natural authoring form for a skeletal puppet: one drawing, one source of truth for
|
|
102
|
+
* palette and style, split at load. Each part keeps the original `<svg>` root attributes
|
|
103
|
+
* (viewBox included) and carries exactly one group's children.
|
|
104
|
+
*
|
|
105
|
+
* Refused by name: an empty id, a duplicate id, and any group the scan cannot balance.
|
|
106
|
+
*/
|
|
107
|
+
export function splitSvgGroups(source) {
|
|
108
|
+
const inert = sanitizeSvg(source);
|
|
109
|
+
const root = /^([\s\S]*?)<svg([^>]*)>/i.exec(inert);
|
|
110
|
+
const close = inert.lastIndexOf('</svg>');
|
|
111
|
+
if (!root || close < 0)
|
|
112
|
+
throw new Error('SVG group split needs an <svg> root');
|
|
113
|
+
const body = inert.slice(root[0].length, close);
|
|
114
|
+
const parts = {};
|
|
115
|
+
let position = 0;
|
|
116
|
+
while (position < body.length) {
|
|
117
|
+
const open = /<g\b([^>]*?)(\/?)>/i.exec(body.slice(position));
|
|
118
|
+
if (!open)
|
|
119
|
+
break;
|
|
120
|
+
const attributes = open[1];
|
|
121
|
+
const id = /\bid\s*=\s*["']([^"']+)["']/i.exec(attributes)?.[1];
|
|
122
|
+
const contentStart = position + open.index + open[0].length;
|
|
123
|
+
if (open[2] === '/') {
|
|
124
|
+
//a self-closing group is an empty part, not a walk that never closes
|
|
125
|
+
if (!id)
|
|
126
|
+
throw new Error('SVG group split refuses a group with no id');
|
|
127
|
+
if (id in parts)
|
|
128
|
+
throw new Error(`SVG group split refuses a duplicate id ${id}`);
|
|
129
|
+
parts[id] = `${root[0]}</svg>`;
|
|
130
|
+
position = contentStart;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
//walk forward balancing nested <g> opens against their closes
|
|
134
|
+
let depth = 1;
|
|
135
|
+
let cursor = contentStart;
|
|
136
|
+
let closer = '';
|
|
137
|
+
while (depth > 0 && cursor < body.length) {
|
|
138
|
+
const next = body.slice(cursor).match(/<g\b[^>]*>|<\/g\s*>/i);
|
|
139
|
+
if (!next)
|
|
140
|
+
throw new Error(`SVG group ${id ?? '<unnamed>'} never closes`);
|
|
141
|
+
if (next[0].startsWith('</')) {
|
|
142
|
+
depth--;
|
|
143
|
+
if (depth === 0)
|
|
144
|
+
closer = next[0];
|
|
145
|
+
}
|
|
146
|
+
else
|
|
147
|
+
depth++;
|
|
148
|
+
cursor += next.index + next[0].length;
|
|
149
|
+
}
|
|
150
|
+
const content = body.slice(contentStart, cursor - closer.length);
|
|
151
|
+
position = cursor;
|
|
152
|
+
if (!id)
|
|
153
|
+
throw new Error('SVG group split refuses a group with no id');
|
|
154
|
+
if (id in parts)
|
|
155
|
+
throw new Error(`SVG group split refuses a duplicate id ${id}`);
|
|
156
|
+
parts[id] = `${root[0]}${content}</svg>`;
|
|
157
|
+
}
|
|
158
|
+
if (Object.keys(parts).length === 0)
|
|
159
|
+
throw new Error('SVG group split found no named groups');
|
|
160
|
+
return parts;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/assets/svg.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,4 +22,5 @@ export * as Audio from './audio/index.ts';
|
|
|
22
22
|
export * as Simulation from './simulation/index.ts';
|
|
23
23
|
export * as Mwl from './mwl/index.ts';
|
|
24
24
|
export * as AI from './ai/index.ts';
|
|
25
|
+
export * as Skeleton from './skeleton/index.ts';
|
|
25
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -22,4 +22,5 @@ export * as Audio from './audio/index.js';
|
|
|
22
22
|
export * as Simulation from './simulation/index.js';
|
|
23
23
|
export * as Mwl from './mwl/index.js';
|
|
24
24
|
export * as AI from './ai/index.js';
|
|
25
|
+
export * as Skeleton from './skeleton/index.js';
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
|