@datamoc/mw_games 0.34.0 → 0.35.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.
@@ -1,17 +1,25 @@
1
- // @datamoc/fengari intentionally ships JavaScript without TypeScript declarations.
2
- // @ts-expect-error Fengari has no declarations in its npm package.
3
1
  import fengari from '@datamoc/fengari';
4
- const { lauxlib, lua, lualib } = fengari;
2
+ const { lauxlib, lua } = fengari;
5
3
  const to_luastring = (str) => new TextEncoder().encode(str);
4
+ export { createFengariRuntime } from './fengari-runtime.js';
5
+ /**
6
+ * Translates Lua source to readable JavaScript without running it, for a game that
7
+ * is leaving Lua scripting behind. Metatables, coroutines, general `goto` and some
8
+ * patterns are not translated: they stay as `TODO(lua2js)` comments and `warnings`.
9
+ * Throws a `LuaSyntaxError` for source that does not parse.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { luaToJs } from '@datamoc/mw_games/mwl/fengari';
14
+ *
15
+ * const { code } = luaToJs('function double(n) return n * 2 end', { format: 'esm' });
16
+ * ```
17
+ */
18
+ export function luaToJs(source, options = {}) {
19
+ return fengari.FengariVm.toJs(source, options);
20
+ }
6
21
  const DEFAULT_INSTRUCTION_LIMIT = 100_000;
7
22
  const DEFAULT_MEMORY_LIMIT = 32 * 1024 * 1024;
8
- /** only the sandbox-safe standard libraries: `io`, `os`, `debug` and `package` are never opened */
9
- const SAFE_LIBRARIES = lualib.LUA_GLIBK |
10
- lualib.LUA_COLIBK |
11
- lualib.LUA_MATHLIBK |
12
- lualib.LUA_STRLIBK |
13
- lualib.LUA_TABLIBK |
14
- lualib.LUA_UTF8LIBK;
15
23
  /**
16
24
  * Optional Lua 5.4 host. Fengari is loaded only by this subpath, never by `mwg/mwl`.
17
25
  *
@@ -37,8 +45,6 @@ const SAFE_LIBRARIES = lualib.LUA_GLIBK |
37
45
  * ```
38
46
  */
39
47
  export function createFengariScriptHost(options = {}) {
40
- const state = lauxlib.luaL_newstate();
41
- lualib.luaL_openselectedlibs(state, SAFE_LIBRARIES, 0);
42
48
  const limit = options.instructionLimit ?? DEFAULT_INSTRUCTION_LIMIT;
43
49
  if (!Number.isInteger(limit) || limit < 1)
44
50
  throw new RangeError('instructionLimit must be a positive integer');
@@ -47,21 +53,15 @@ export function createFengariScriptHost(options = {}) {
47
53
  throw new RangeError('memoryLimit must be a positive integer');
48
54
  let randomState = (options.seed ?? 0x6d7767) >>> 0;
49
55
  let emit;
50
- //the per-call byte budget, charged by the fork's allocation hook: every internal string or
51
- //buffer allocation decrements `remaining`, and the first to cross zero refuses the
52
- //allocation exactly like a failing C allocator (LUA_ERRMEM, "not enough memory")
53
- const budget = { remaining: memoryLimit, exceeded: false };
54
- lua.lua_setallocf(state, (_ud, nsize) => {
55
- budget.remaining -= nsize;
56
- if (budget.remaining < 0) {
57
- budget.exceeded = true;
58
- throw new Error('Lua memory limit exceeded');
59
- }
60
- }, budget);
61
- const resetBudget = () => {
62
- budget.remaining = memoryLimit;
63
- budget.exceeded = false;
64
- };
56
+ // Keep our text-only loader and JSON conversion, but share Fengari's guard with
57
+ // native operations, coroutine resumes and script-level protected calls.
58
+ const vm = new fengari.FengariVm(undefined, options.seed, {
59
+ sandbox: true,
60
+ print: 'native',
61
+ remove: ['load'],
62
+ limits: { instructions: limit, totalAllocation: memoryLimit },
63
+ });
64
+ const state = vm.state;
65
65
  const push = (value) => {
66
66
  if (value === null)
67
67
  return lua.lua_pushnil(state);
@@ -120,40 +120,28 @@ export function createFengariScriptHost(options = {}) {
120
120
  }
121
121
  };
122
122
  const protectedCall = (args, results) => {
123
- let remaining = limit;
124
- lua.lua_sethook(state, () => {
125
- remaining -= limit > 1000 ? 1000 : 1;
126
- if (remaining <= 0) {
127
- lua.lua_pushstring(state, to_luastring('Lua instruction limit exceeded'));
128
- lua.lua_error(state);
129
- }
130
- }, lua.LUA_MASKCOUNT, limit > 1000 ? 1000 : 1);
131
- //the memory budget is reset by the caller (run/call), not here, so the parse of a
132
- //chunk is charged against the same budget as its execution
133
123
  const status = lua.lua_pcall(state, args, results, 0);
134
- lua.lua_sethook(state, null, 0, 0);
135
- if (budget.exceeded) {
124
+ if (vm.limitHit !== null) {
136
125
  lua.lua_settop(state, 0);
137
- throw new Error('Lua memory limit exceeded');
126
+ throw new Error(`Lua ${vm.limitHit === 'memory' ? 'memory' : 'instruction'} limit exceeded`);
138
127
  }
139
128
  if (status !== lua.LUA_OK)
140
129
  throw new Error(lua.lua_tojsstring(state, -1) ?? 'Lua execution error');
141
130
  return results === 0 ? null : read(state, -1);
142
131
  };
143
- const run = (source, results) => {
132
+ const run = (source, results) => vm.guarded(() => {
144
133
  lua.lua_settop(state, 0);
145
- resetBudget();
146
134
  const bytes = to_luastring(source);
147
135
  //'t' compiles text only: a '\x1bLua' binary dump must never reach the bytecode undumper
148
136
  const loadStatus = lauxlib.luaL_loadbufferx(state, bytes, bytes.length, bytes, to_luastring('t'));
149
137
  if (loadStatus !== lua.LUA_OK) {
150
138
  //a budget exhausted by parsing itself is a limit error, not a syntax error
151
- if (budget.exceeded)
139
+ if (vm.limitHit === 'memory')
152
140
  throw new Error('Lua memory limit exceeded');
153
141
  throw new Error(lua.lua_tojsstring(state, -1) ?? 'Lua syntax error');
154
142
  }
155
143
  return protectedCall(0, results);
156
- };
144
+ });
157
145
  const install = (context, callback) => {
158
146
  emit = callback;
159
147
  setContext(context);
@@ -171,8 +159,7 @@ export function createFengariScriptHost(options = {}) {
171
159
  return 1;
172
160
  });
173
161
  lua.lua_setglobal(state, to_luastring('__mwg_random'));
174
- const sandbox = 'load=nil; loadfile=nil; dofile=nil; math.random=__mwg_random; math.randomseed=function() end';
175
- run(sandbox, 0);
162
+ run('math.random=__mwg_random; math.randomseed=function() end', 0);
176
163
  };
177
164
  //hides the string metatable (the `string` library itself) from `getmetatable("")`
178
165
  run('getmetatable("").__metatable = false', 0);
@@ -187,11 +174,12 @@ export function createFengariScriptHost(options = {}) {
187
174
  },
188
175
  call(name, args = [], context = {}, callback) {
189
176
  install(context, callback);
190
- lua.lua_settop(state, 0);
191
- resetBudget();
192
- lua.lua_getglobal(state, to_luastring(name));
193
- args.forEach(push);
194
- return protectedCall(args.length, 1);
177
+ return vm.guarded(() => {
178
+ lua.lua_settop(state, 0);
179
+ lua.lua_getglobal(state, to_luastring(name));
180
+ args.forEach(push);
181
+ return protectedCall(args.length, 1);
182
+ });
195
183
  },
196
184
  dispose() {
197
185
  lua.lua_close(state);
@@ -1 +1 @@
1
- {"version":3,"file":"fengari.js","sourceRoot":"","sources":["../../src/mwl/fengari.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fengari.js","sourceRoot":"","sources":["../../src/mwl/fengari.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACjC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAGpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAY5D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,OAAO,GAAmB,EAAE;IACnE,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AASD,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAC1C,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAO,GAA6B,EAAE;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAC;IAC/G,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;IAChE,IAAI,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,IAA4B,CAAC;IACjC,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE;QACzD,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE;KAC7D,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;IAEvB,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAQ,EAAE;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzE,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,GAAG,CAAC,eAAe,CAClB,KAAK,EACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACvC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CACpD,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,CAAC;gBACZ,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,CAAC;gBACZ,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,KAAa,EAAE,KAAK,GAAG,CAAC,EAAe,EAAE;QAClE,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,GAAG,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,IAAI,KAAK,GAAG,CAAC,YAAY;YAAE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,IAAI,KAAK,GAAG,CAAC,WAAW;YAAE,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,GAAG,CAAC,WAAW;YAAE,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,IAAI,KAAK,GAAG,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3F,IAAI,KAAK,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnE,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpG,IAAI,GAAG,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACrC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,OAAO,GAAkB,EAAE,EAAQ,EAAE;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpD,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,OAAe,EAAe,EAAE;QACpE,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,iBAAiB,CAAC,CAAC;QAC9F,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC;QACnG,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,OAAe,EAAe,EAAE,CAC5D,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,wFAAwF;QACxF,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,IAAI,UAAU,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,2EAA2E;YAC3E,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAQ,EAAE;QACvE,IAAI,GAAG,QAAQ,CAAC;QAChB,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,YAAqB,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,mFAAmF;YACnF,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;QACnD,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,YAAqB,EAAE,EAAE;YACvD,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACnE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;QACvD,GAAG,CAAC,0DAA0D,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,kFAAkF;IAClF,GAAG,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;IAE/C,OAAO;QACN,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE;YAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC,WAAW,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ;YACrC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ;YAC3C,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACtB,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzB,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO;YACN,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;KACD,CAAC;AACH,CAAC"}
package/dist/version.d.ts CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export declare const version = "0.34.0";
12
+ export declare const version = "0.35.1";
13
13
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -9,5 +9,5 @@
9
9
  * this from `package.json` automatically, chosen because this project's own build already
10
10
  * has no step before `tsc`/`vite` that this would need to run ahead of.
11
11
  */
12
- export const version = '0.34.0';
12
+ export const version = '0.35.1';
13
13
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datamoc/mw_games",
3
- "version": "0.34.0",
3
+ "version": "0.35.1",
4
4
  "description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
5
5
  "license": "MPL-2.0",
6
6
  "repository": {
@@ -417,6 +417,6 @@
417
417
  "types": "./dist/index.d.ts",
418
418
  "unpkg": "./dist/mw_games.global.js",
419
419
  "optionalDependencies": {
420
- "@datamoc/fengari": "^0.3.0"
420
+ "@datamoc/fengari": "^0.5.4"
421
421
  }
422
422
  }
package/sbom.cdx.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:a9fb11f4-2720-5464-963a-827647920e75",
4
+ "serialNumber": "urn:uuid:3e62dab5-a42a-5172-8b56-a445e53bf279",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "tools": {
@@ -10,16 +10,16 @@
10
10
  "type": "application",
11
11
  "group": "datamoc",
12
12
  "name": "tools/sbom.mjs",
13
- "version": "0.34.0"
13
+ "version": "0.35.1"
14
14
  }
15
15
  ]
16
16
  },
17
17
  "component": {
18
18
  "type": "library",
19
- "bom-ref": "pkg:npm/%40datamoc/mw_games@0.34.0",
19
+ "bom-ref": "pkg:npm/%40datamoc/mw_games@0.35.1",
20
20
  "name": "@datamoc/mw_games",
21
- "version": "0.34.0",
22
- "purl": "pkg:npm/%40datamoc/mw_games@0.34.0",
21
+ "version": "0.35.1",
22
+ "purl": "pkg:npm/%40datamoc/mw_games@0.35.1",
23
23
  "description": "A local-file game framework: renderer-free game logic, drawn through PixiJS in 2D or Babylon.js in 3D, with mobile and desktop packaging.",
24
24
  "licenses": [
25
25
  {
@@ -159,15 +159,15 @@
159
159
  },
160
160
  {
161
161
  "type": "library",
162
- "bom-ref": "pkg:npm/%40datamoc/fengari@0.3.0",
162
+ "bom-ref": "pkg:npm/%40datamoc/fengari@0.5.4",
163
163
  "name": "@datamoc/fengari",
164
- "version": "0.3.0",
165
- "purl": "pkg:npm/%40datamoc/fengari@0.3.0",
164
+ "version": "0.5.4",
165
+ "purl": "pkg:npm/%40datamoc/fengari@0.5.4",
166
166
  "scope": "optional",
167
167
  "hashes": [
168
168
  {
169
169
  "alg": "SHA-512",
170
- "content": "6d19883d15c1b086d076626ea1d606c2495d9a9b06ed69c3273b6f91d721010c8699dd4bde9bb82054b6358d9111d8896ba20c5e7d3b6927d7699f8d456952c3"
170
+ "content": "600ee0cf8026d34e0222194a2030866a7087af55eded0422af36df86870c1831b542b108da2d3e527775134336250b4582876329132712c61848b10e617bd526"
171
171
  }
172
172
  ],
173
173
  "licenses": [
@@ -4601,7 +4601,7 @@
4601
4601
  ]
4602
4602
  },
4603
4603
  {
4604
- "ref": "pkg:npm/%40datamoc/fengari@0.3.0",
4604
+ "ref": "pkg:npm/%40datamoc/fengari@0.5.4",
4605
4605
  "dependsOn": [
4606
4606
  "pkg:npm/readline-sync@1.4.10",
4607
4607
  "pkg:npm/sprintf-js@1.1.3",
@@ -4609,7 +4609,7 @@
4609
4609
  ]
4610
4610
  },
4611
4611
  {
4612
- "ref": "pkg:npm/%40datamoc/mw_games@0.34.0",
4612
+ "ref": "pkg:npm/%40datamoc/mw_games@0.35.1",
4613
4613
  "dependsOn": [
4614
4614
  "pkg:npm/%40babylonjs/core@9.30.0",
4615
4615
  "pkg:npm/%40babylonjs/loaders@9.30.0",
@@ -4617,7 +4617,7 @@
4617
4617
  "pkg:npm/%40capacitor/cli@8.5.3",
4618
4618
  "pkg:npm/%40capacitor/core@8.5.3",
4619
4619
  "pkg:npm/%40capacitor/ios@8.5.3",
4620
- "pkg:npm/%40datamoc/fengari@0.3.0",
4620
+ "pkg:npm/%40datamoc/fengari@0.5.4",
4621
4621
  "pkg:npm/%40types/node@26.6.5",
4622
4622
  "pkg:npm/%40types/ws@8.18.2",
4623
4623
  "pkg:npm/json5@2.2.3",