@datamoc/mw_games 0.38.0 → 0.39.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.
- package/CHANGELOG.md +55 -0
- package/api-surface.json +500 -2
- package/dist/assets/SvgParts.d.ts +31 -0
- package/dist/assets/SvgParts.d.ts.map +1 -0
- package/dist/assets/SvgParts.js +54 -0
- package/dist/assets/SvgParts.js.map +1 -0
- package/dist/assets/SvgSource.d.ts +3 -0
- package/dist/assets/SvgSource.d.ts.map +1 -0
- package/dist/assets/SvgSource.js +22 -0
- package/dist/assets/SvgSource.js.map +1 -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.map +1 -1
- package/dist/assets/svg.js +9 -5
- package/dist/assets/svg.js.map +1 -1
- package/dist/mw_games.global.js +110 -110
- package/dist/mwl/presentation.d.ts.map +1 -1
- package/dist/mwl/presentation.js +25 -18
- package/dist/mwl/presentation.js.map +1 -1
- package/dist/physics/PhysicsWorld.d.ts +49 -17
- package/dist/physics/PhysicsWorld.d.ts.map +1 -1
- package/dist/physics/PhysicsWorld.js +297 -59
- package/dist/physics/PhysicsWorld.js.map +1 -1
- package/dist/physics/XpbdWorld.d.ts +1 -1
- package/dist/physics/XpbdWorld.js +1 -1
- package/dist/physics/cloth/index.d.ts +98 -0
- package/dist/physics/cloth/index.d.ts.map +1 -0
- package/dist/physics/cloth/index.js +207 -0
- package/dist/physics/cloth/index.js.map +1 -0
- package/dist/physics/index.d.ts +4 -0
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +2 -0
- package/dist/physics/index.js.map +1 -1
- package/dist/physics/spring/index.d.ts +90 -0
- package/dist/physics/spring/index.d.ts.map +1 -0
- package/dist/physics/spring/index.js +97 -0
- package/dist/physics/spring/index.js.map +1 -0
- package/dist/skeleton/index.d.ts +94 -13
- package/dist/skeleton/index.d.ts.map +1 -1
- package/dist/skeleton/index.js +192 -73
- package/dist/skeleton/index.js.map +1 -1
- package/dist/two-d/presentation/MwlPresentation.d.ts +12 -0
- package/dist/two-d/presentation/MwlPresentation.d.ts.map +1 -1
- package/dist/two-d/presentation/MwlPresentation.js +204 -153
- package/dist/two-d/presentation/MwlPresentation.js.map +1 -1
- package/dist/two-d/render/ClothSprite.d.ts +83 -0
- package/dist/two-d/render/ClothSprite.d.ts.map +1 -0
- package/dist/two-d/render/ClothSprite.js +105 -0
- package/dist/two-d/render/ClothSprite.js.map +1 -0
- package/dist/two-d/render/HazeLayer.d.ts +112 -0
- package/dist/two-d/render/HazeLayer.d.ts.map +1 -0
- package/dist/two-d/render/HazeLayer.js +185 -0
- package/dist/two-d/render/HazeLayer.js.map +1 -0
- package/dist/two-d/render/NeonGlow.d.ts +100 -0
- package/dist/two-d/render/NeonGlow.d.ts.map +1 -0
- package/dist/two-d/render/NeonGlow.js +183 -0
- package/dist/two-d/render/NeonGlow.js.map +1 -0
- package/dist/two-d/render/SkeletalSprite.d.ts +5 -2
- package/dist/two-d/render/SkeletalSprite.d.ts.map +1 -1
- package/dist/two-d/render/SkeletalSprite.js +27 -3
- package/dist/two-d/render/SkeletalSprite.js.map +1 -1
- package/dist/two-d/render/SpringSprite.d.ts +40 -0
- package/dist/two-d/render/SpringSprite.d.ts.map +1 -0
- package/dist/two-d/render/SpringSprite.js +39 -0
- package/dist/two-d/render/SpringSprite.js.map +1 -0
- package/dist/two-d/render/SpriteDeform.d.ts +156 -0
- package/dist/two-d/render/SpriteDeform.d.ts.map +1 -0
- package/dist/two-d/render/SpriteDeform.js +278 -0
- package/dist/two-d/render/SpriteDeform.js.map +1 -0
- package/dist/two-d/render/SvgSkeleton.d.ts +54 -0
- package/dist/two-d/render/SvgSkeleton.d.ts.map +1 -0
- package/dist/two-d/render/SvgSkeleton.js +112 -0
- package/dist/two-d/render/SvgSkeleton.js.map +1 -0
- package/dist/two-d/render/index.d.ts +12 -0
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +6 -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 +9 -7
- package/sbom.cdx.json +6 -58
- package/tools/asset-report.d.mts +37 -0
- package/tools/asset-report.mjs +157 -0
- package/tools/compile-resources.d.mts +2 -0
- package/tools/compile-resources.mjs +23 -2
- package/tools/emit-page.d.mts +2 -0
- package/tools/emit-page.mjs +11 -1
- package/tools/vite.mjs +4 -1
|
@@ -58,6 +58,9 @@ export async function* walk(dir) {
|
|
|
58
58
|
* @param options.from folder holding the assets
|
|
59
59
|
* @param options.to folder to write the generated scripts into
|
|
60
60
|
* @param options.mime extension to MIME type, merged over the defaults
|
|
61
|
+
* @param options.assetFiles exact paths relative to `from` to embed; omit for all, [] for none.
|
|
62
|
+
* Unknown paths and explicitly selected unsupported formats fail before replacing output.
|
|
63
|
+
* credits.json is converted to CREDITS.txt only when selected (or when no list is given).
|
|
61
64
|
* @param options.groupBy how to name the script an asset lands in; defaults to its top folder
|
|
62
65
|
* @param options.toWebp convert `.png`/`.jpg`/`.jpeg` assets to WebP before embedding
|
|
63
66
|
* (default false - see `tools/webp-convert.mjs`). The asset's *key* never changes (a game
|
|
@@ -81,6 +84,7 @@ export async function compileResources({
|
|
|
81
84
|
to,
|
|
82
85
|
mime = {},
|
|
83
86
|
groupBy,
|
|
87
|
+
assetFiles,
|
|
84
88
|
toWebp: convertToWebp = false,
|
|
85
89
|
webpLossless = true,
|
|
86
90
|
webpQuality = 90,
|
|
@@ -90,6 +94,22 @@ export async function compileResources({
|
|
|
90
94
|
const types = { ...DEFAULT_MIME, ...mime };
|
|
91
95
|
const group = groupBy ?? ((key) => (key.includes('/') ? key.slice(0, key.indexOf('/')) : 'assets'));
|
|
92
96
|
|
|
97
|
+
const files = [];
|
|
98
|
+
for await (const file of walk(from)) files.push(file);
|
|
99
|
+
const keyOf = (file) => relative(from, file).split(sep).join('/');
|
|
100
|
+
const selected =
|
|
101
|
+
assetFiles === undefined
|
|
102
|
+
? undefined
|
|
103
|
+
: new Set(assetFiles.map((key) => key.replaceAll('\\', '/').replace(/^\.\//, '')));
|
|
104
|
+
if (selected) {
|
|
105
|
+
const known = new Set(files.map(keyOf));
|
|
106
|
+
for (const key of selected) {
|
|
107
|
+
if (!known.has(key)) throw new Error(`unknown asset file ${key}`);
|
|
108
|
+
if (key !== 'credits.json' && !types[extname(key).toLowerCase()])
|
|
109
|
+
throw new Error(`unsupported asset file ${key}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
93
113
|
await rm(to, { recursive: true, force: true });
|
|
94
114
|
await mkdir(to, { recursive: true });
|
|
95
115
|
|
|
@@ -106,7 +126,8 @@ export async function compileResources({
|
|
|
106
126
|
const creditsFile = join(from, 'credits.json');
|
|
107
127
|
let credits = null;
|
|
108
128
|
|
|
109
|
-
for
|
|
129
|
+
for (const file of files) {
|
|
130
|
+
if (selected && !selected.has(keyOf(file))) continue;
|
|
110
131
|
if (file === creditsFile) {
|
|
111
132
|
credits = creditsText(JSON.parse(await readFile(file, 'utf8')));
|
|
112
133
|
continue;
|
|
@@ -118,7 +139,7 @@ export async function compileResources({
|
|
|
118
139
|
continue;
|
|
119
140
|
}
|
|
120
141
|
|
|
121
|
-
const key =
|
|
142
|
+
const key = keyOf(file);
|
|
122
143
|
const data = await readFile(file);
|
|
123
144
|
|
|
124
145
|
let mimeType = type;
|
package/tools/emit-page.d.mts
CHANGED
|
@@ -9,6 +9,8 @@ export interface EmitPageOptions {
|
|
|
9
9
|
assets?: string;
|
|
10
10
|
/** maps an asset path to its script's name; defaults to one script per top-level folder */
|
|
11
11
|
groupBy?: (key: string) => string;
|
|
12
|
+
/** Exact paths relative to the asset folder to embed. Omit to include all; [] includes none. Unknown entries fail by name. */
|
|
13
|
+
assetFiles?: readonly string[];
|
|
12
14
|
/** write `.gz`/`.br` siblings for a server to negotiate; default true */
|
|
13
15
|
compress?: boolean;
|
|
14
16
|
/** also write `.xz`, where the system `xz` binary exists */
|
package/tools/emit-page.mjs
CHANGED
|
@@ -66,6 +66,7 @@ export async function emitPage({
|
|
|
66
66
|
dist,
|
|
67
67
|
assets,
|
|
68
68
|
groupBy,
|
|
69
|
+
assetFiles,
|
|
69
70
|
compress = true,
|
|
70
71
|
xz = false,
|
|
71
72
|
singleFile = false,
|
|
@@ -75,8 +76,17 @@ export async function emitPage({
|
|
|
75
76
|
csp = true,
|
|
76
77
|
}) {
|
|
77
78
|
if (!dist) throw new Error('emitPage needs the dist folder of a vite build');
|
|
79
|
+
if (!assets && assetFiles?.length) throw new Error(`unknown asset file ${assetFiles[0]}: no assets folder`);
|
|
78
80
|
const compiled = assets
|
|
79
|
-
? await compileResources({
|
|
81
|
+
? await compileResources({
|
|
82
|
+
from: assets,
|
|
83
|
+
to: join(dist, 'assets'),
|
|
84
|
+
groupBy,
|
|
85
|
+
assetFiles,
|
|
86
|
+
toWebp,
|
|
87
|
+
webpLossless,
|
|
88
|
+
webpQuality,
|
|
89
|
+
})
|
|
80
90
|
: { groups: [], rawBytes: 0, embeddedBytes: 0, webpConverted: 0 };
|
|
81
91
|
|
|
82
92
|
const html = await readFile(join(dist, 'index.html'), 'utf8');
|
package/tools/vite.mjs
CHANGED
|
@@ -11,7 +11,10 @@ import { buildArtifactSbom, serialize, shippedFiles } from './sbom.mjs';
|
|
|
11
11
|
* It sets the configuration that target needs (a classic IIFE bundle named `game.js`, relative
|
|
12
12
|
* urls through `base: './'`, no inlined or copied assets since they are compiled instead) and
|
|
13
13
|
* serves `assets` (default `'assets'`, `false` for none) as the public folder, so an asset path reads the same in `vite` dev as in the
|
|
14
|
-
* build.
|
|
14
|
+
* build. `assetFiles: ['characters/hero.svg', 'music/theme.ogg']` embeds only those paths;
|
|
15
|
+
* omit it for all assets, or pass [] for none. An unknown entry fails by name. Filtering
|
|
16
|
+
* affects the build only, so the dev server still serves the asset folder normally.
|
|
17
|
+
* At the end of the build it runs `emitPage` over the output folder with the same
|
|
15
18
|
* options. A setting the game's own config gives explicitly still wins, since vite merges a
|
|
16
19
|
* plugin's `config` result under the user's.
|
|
17
20
|
*
|