@energy8platform/platform-core 0.28.2 → 0.29.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.
Files changed (57) hide show
  1. package/README.md +127 -150
  2. package/bin/simulate.ts +35 -98
  3. package/dist/dev-bridge.cjs.js +3 -3
  4. package/dist/dev-bridge.cjs.js.map +1 -1
  5. package/dist/dev-bridge.d.ts +9 -2
  6. package/dist/dev-bridge.esm.js +3 -3
  7. package/dist/dev-bridge.esm.js.map +1 -1
  8. package/dist/game-spec.cjs.js +70 -27
  9. package/dist/game-spec.cjs.js.map +1 -1
  10. package/dist/game-spec.d.ts +47 -11
  11. package/dist/game-spec.esm.js +68 -25
  12. package/dist/game-spec.esm.js.map +1 -1
  13. package/dist/index.cjs.js +3 -3
  14. package/dist/index.cjs.js.map +1 -1
  15. package/dist/index.d.ts +28 -2
  16. package/dist/index.esm.js +3 -3
  17. package/dist/index.esm.js.map +1 -1
  18. package/dist/lua.cjs.js +0 -1234
  19. package/dist/lua.cjs.js.map +1 -1
  20. package/dist/lua.d.ts +8 -206
  21. package/dist/lua.esm.js +0 -1225
  22. package/dist/lua.esm.js.map +1 -1
  23. package/dist/simulation.cjs.js +48 -179
  24. package/dist/simulation.cjs.js.map +1 -1
  25. package/dist/simulation.d.ts +33 -60
  26. package/dist/simulation.esm.js +48 -178
  27. package/dist/simulation.esm.js.map +1 -1
  28. package/dist/vite.cjs.js +323 -109
  29. package/dist/vite.cjs.js.map +1 -1
  30. package/dist/vite.d.ts +19 -9
  31. package/dist/vite.esm.js +322 -109
  32. package/dist/vite.esm.js.map +1 -1
  33. package/package.json +6 -5
  34. package/scripts/install-e8.mjs +113 -0
  35. package/src/dev-bridge/DevBridge.ts +3 -3
  36. package/src/game-spec/defineGame.ts +2 -2
  37. package/src/game-spec/derive.ts +46 -17
  38. package/src/game-spec/export.ts +28 -8
  39. package/src/game-spec/index.ts +3 -2
  40. package/src/game-spec/types.ts +11 -1
  41. package/src/index.ts +6 -12
  42. package/src/lua/index.ts +4 -11
  43. package/src/lua/types.ts +7 -0
  44. package/src/simulation/NativeSimulationRunner.ts +71 -45
  45. package/src/simulation/index.ts +2 -4
  46. package/src/vite/index.ts +4 -121
  47. package/src/vite/spinPlugin.ts +338 -0
  48. package/scripts/install-simulate.mjs +0 -101
  49. package/src/lua/ActionRouter.ts +0 -132
  50. package/src/lua/LuaEngine.ts +0 -520
  51. package/src/lua/LuaEngineAPI.ts +0 -314
  52. package/src/lua/PersistentState.ts +0 -80
  53. package/src/lua/SessionManager.ts +0 -249
  54. package/src/lua/SimulationRunner.ts +0 -190
  55. package/src/lua/fengari.d.ts +0 -10
  56. package/src/simulation/ParallelSimulationRunner.ts +0 -156
  57. package/src/simulation/SimulationWorker.ts +0 -44
package/dist/vite.cjs.js CHANGED
@@ -1,13 +1,333 @@
1
1
  'use strict';
2
2
 
3
+ var node_child_process = require('node:child_process');
4
+ var node_fs = require('node:fs');
5
+ var node_module = require('node:module');
6
+ var node_url = require('node:url');
7
+ var node_os = require('node:os');
8
+ var node_path = require('node:path');
9
+
10
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
11
+ /**
12
+ * spinPlugin — dev-путь фронта поверх e8-server (SpinML, домен-API раундов).
13
+ *
14
+ * Замена luaPlugin для spin-рантайма: тот же роут POST /__lua-play и тот же
15
+ * ответ — DevBridge не меняется. Плагин ТОНКИЙ: машину раунда (сессии /
16
+ * очереди / unlimited / globals / идемпотентность) ведёт сам e8-server
17
+ * (--sessions memory), плагин лишь переводит протокол и держит history для
18
+ * HUD. Горячая перезагрузка .spin — у сервера (--watch): правка файла =
19
+ * новая версия, открытые раунды доигрываются старой.
20
+ *
21
+ * Источник истины протокола: casino-platform/e8/crates/e8-server/proto/
22
+ * engine.proto (репо движка); ниже — синхронизированная копия.
23
+ */
24
+ /**
25
+ * Поиск бинаря e8-server в порядке их NativeSimulationRunner:
26
+ * явный binPath → env E8_SERVER_BINARY →
27
+ * node_modules/@energy8platform/platform-core/bin/e8-server-<platform>-<arch>
28
+ * (его качает install-e8.mjs postinstall'ом) → голый "e8-server" из PATH.
29
+ */
30
+ function resolveServerBinary(explicit) {
31
+ const ok = (p) => {
32
+ try {
33
+ node_fs.accessSync(p, node_fs.constants.X_OK);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ };
40
+ if (explicit)
41
+ return explicit;
42
+ const env = process.env.E8_SERVER_BINARY;
43
+ if (env && ok(env))
44
+ return env;
45
+ const arch = process.arch === 'x64' ? 'amd64' : process.arch;
46
+ const platform = process.platform === 'win32' ? 'windows' : process.platform;
47
+ const ext = process.platform === 'win32' ? '.exe' : '';
48
+ const name = `e8-server-${platform}-${arch}${ext}`;
49
+ // бинарь этого пакета (его качает scripts/install-e8.mjs); раскладки
50
+ // src/vite/*.ts и dist/vite.esm.js отличаются уровнем — пробуем оба
51
+ try {
52
+ const here = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('vite.cjs.js', document.baseURI).href)));
53
+ for (const up of ['..', '../..']) {
54
+ const candidate = node_path.join(here, '..', up, 'bin', name);
55
+ if (ok(candidate))
56
+ return candidate;
57
+ }
58
+ }
59
+ catch {
60
+ // import.meta недоступен — падаем на PATH
61
+ }
62
+ return `e8-server${ext}`;
63
+ }
64
+ // Копия контракта — источник истины crates/e8-server/proto/engine.proto.
65
+ const ENGINE_PROTO = `
66
+ syntax = "proto3";
67
+ package e8;
68
+ service Engine {
69
+ rpc ListGames(ListGamesRequest) returns (ListGamesResponse);
70
+ rpc GetConfig(ConfigRequest) returns (ConfigResponse);
71
+ rpc StartRound(StartRoundRequest) returns (RoundResponse);
72
+ rpc Step(RoundStepRequest) returns (RoundResponse);
73
+ rpc GetRound(GetRoundRequest) returns (RoundStateResponse);
74
+ rpc Health(HealthRequest) returns (HealthResponse);
75
+ }
76
+ message ListGamesRequest {}
77
+ message GameInfo {
78
+ string game_id = 1;
79
+ string script_sha256 = 2;
80
+ string vars_layout_hash = 3;
81
+ repeated string entry_actions = 4;
82
+ repeated string loaded_versions = 5;
83
+ }
84
+ message ListGamesResponse { repeated GameInfo games = 1; }
85
+ message ConfigRequest { string game_id = 1; }
86
+ message ConfigResponse { string config_json = 1; string error = 2; }
87
+ message StartRoundRequest {
88
+ string game_id = 1;
89
+ string player_id = 2;
90
+ string round_id = 3;
91
+ string server_seed = 4;
92
+ string client_seed = 5;
93
+ int64 nonce = 6;
94
+ string action = 7;
95
+ double bet = 8;
96
+ string params_json = 9;
97
+ string request_id = 10;
98
+ bool recording = 11;
99
+ }
100
+ message RoundStepRequest {
101
+ string round_id = 1;
102
+ string action = 2;
103
+ string params_json = 3;
104
+ string request_id = 4;
105
+ }
106
+ message RoundResponse {
107
+ double win = 1;
108
+ double total_win = 2;
109
+ string data_json = 3;
110
+ string vars_json = 4;
111
+ string globals_json = 5;
112
+ repeated string next_actions = 6;
113
+ bool round_complete = 7;
114
+ int64 spins_remaining = 8;
115
+ uint32 spins_played = 9;
116
+ string script_sha256 = 10;
117
+ string error = 11;
118
+ double bet = 12;
119
+ }
120
+ message GetRoundRequest { string round_id = 1; }
121
+ message RoundStateResponse {
122
+ bool found = 1;
123
+ string game_id = 2;
124
+ string script_sha256 = 3;
125
+ double total_win = 4;
126
+ uint32 spins_played = 5;
127
+ int64 spins_remaining = 6;
128
+ repeated string next_actions = 7;
129
+ bool round_complete = 8;
130
+ string vars_json = 9;
131
+ string error = 10;
132
+ double bet = 11;
133
+ }
134
+ message HealthRequest {}
135
+ message HealthResponse { bool ok = 1; uint32 games_loaded = 2; string sessions_backend = 3; }
136
+ `;
137
+ function spinPlugin(opts = {}) {
138
+ const port = opts.port ?? 50151;
139
+ const serverSeed = opts.serverSeed ?? 'e8-dev-seed';
140
+ let child = null;
141
+ let client = null;
142
+ let gameId = opts.gameId ?? '';
143
+ let entryActions = [];
144
+ let roundCounter = 0;
145
+ let reqCounter = 0;
146
+ // презентационное состояние протокола (history / bet раунда)
147
+ const rounds = new Map();
148
+ let activeRoundId = null;
149
+ function grpc() {
150
+ // createRequire: vite.config грузится и как ESM, и как CJS-бандл
151
+ const req = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('vite.cjs.js', document.baseURI).href)));
152
+ const grpcJs = req('@grpc/grpc-js');
153
+ const loader = req('@grpc/proto-loader');
154
+ const dir = node_fs.mkdtempSync(node_path.join(node_os.tmpdir(), 'e8proto-'));
155
+ node_fs.writeFileSync(node_path.join(dir, 'engine.proto'), ENGINE_PROTO);
156
+ const def = loader.loadSync(node_path.join(dir, 'engine.proto'), {
157
+ keepCase: true,
158
+ longs: Number,
159
+ defaults: true,
160
+ });
161
+ const pkg = grpcJs.loadPackageDefinition(def);
162
+ return new pkg.e8.Engine(`127.0.0.1:${port}`, grpcJs.credentials.createInsecure());
163
+ }
164
+ function call(method, req) {
165
+ return new Promise((resolve, reject) => {
166
+ client[method](req, (err, resp) => err ? reject(err) : resolve(resp));
167
+ });
168
+ }
169
+ function toLegacy(r, roundId) {
170
+ const meta = rounds.get(roundId);
171
+ const data = r.data_json ? JSON.parse(r.data_json) : null;
172
+ meta.history.push({
173
+ spinIndex: r.spins_played - 1,
174
+ win: r.win * meta.bet,
175
+ data,
176
+ });
177
+ const hadSession = r.spins_played > 1 || !r.round_complete;
178
+ if (r.round_complete) {
179
+ rounds.delete(roundId);
180
+ if (activeRoundId === roundId)
181
+ activeRoundId = null;
182
+ }
183
+ return {
184
+ totalWin: r.round_complete && r.spins_played > 1 ? r.total_win : r.win,
185
+ data,
186
+ nextActions: r.next_actions,
187
+ session: hadSession
188
+ ? {
189
+ spinsRemaining: r.spins_remaining,
190
+ spinsPlayed: r.spins_played,
191
+ totalWin: r.total_win * meta.bet,
192
+ betAmount: meta.bet,
193
+ completed: r.round_complete,
194
+ maxWinReached: false,
195
+ history: meta.history,
196
+ }
197
+ : null,
198
+ variables: r.vars_json ? JSON.parse(r.vars_json) : {},
199
+ globals: r.globals_json ? JSON.parse(r.globals_json) : {},
200
+ creditDeferred: !r.round_complete,
201
+ roundId,
202
+ };
203
+ }
204
+ async function play(body) {
205
+ const action = body.action ?? 'spin';
206
+ const params = body.params ? JSON.stringify(body.params) : '';
207
+ const rid = body.roundId ?? activeRoundId;
208
+ reqCounter += 1;
209
+ // шаг открытого раунда, если действие принадлежит его активной сессии.
210
+ // Маршрутизируем ПО СЕРВЕРУ (GetRound), а не по локальной карте: клиент
211
+ // (DevBridge) - владелец roundId и может пережить перезапуск плагина.
212
+ if (rid) {
213
+ const st = await call('GetRound', { round_id: rid });
214
+ if (st.found && !st.round_complete && st.next_actions.includes(action)) {
215
+ if (!rounds.has(rid))
216
+ rounds.set(rid, { bet: st.bet || 1.0, history: [] });
217
+ const r = await call('Step', {
218
+ round_id: rid,
219
+ action,
220
+ params_json: params,
221
+ request_id: `dev-${reqCounter}`,
222
+ });
223
+ if (r.error)
224
+ throw new Error(r.error);
225
+ return toLegacy(r, rid);
226
+ }
227
+ }
228
+ // entry: новый раунд. roundId КЛИЕНТА уважается (их DevBridge генерит
229
+ // uuid на entry и шлёт его же в session-шаги) — id-пространства совпадают.
230
+ roundCounter += 1;
231
+ const roundId = body.roundId ?? `r${roundCounter.toString(16).padStart(8, '0')}`;
232
+ const bet = body.bet ?? 1.0;
233
+ rounds.set(roundId, { bet, history: [] });
234
+ const r = await call('StartRound', {
235
+ game_id: gameId,
236
+ player_id: 'dev-player',
237
+ round_id: roundId,
238
+ server_seed: serverSeed,
239
+ client_seed: 'dev',
240
+ nonce: roundCounter,
241
+ action,
242
+ bet,
243
+ params_json: params,
244
+ request_id: `dev-${reqCounter}`,
245
+ recording: true,
246
+ });
247
+ if (r.error)
248
+ throw new Error(r.error);
249
+ if (!r.round_complete)
250
+ activeRoundId = roundId;
251
+ return toLegacy(r, roundId);
252
+ }
253
+ return {
254
+ name: 'e8:spin',
255
+ apply: 'serve',
256
+ // pre: наша мидлвара /__lua-play регистрируется раньше luaPlugin из
257
+ // defineGameConfig — .spin-игры перехватывают роут без правок конфига
258
+ // движка (их LuaEngine на .spin-тексте тихо не поднимется).
259
+ enforce: 'pre',
260
+ async configureServer(server) {
261
+ if (!opts.external) {
262
+ const args = ['--port', String(port), '--sessions', 'memory', '--watch'];
263
+ if (opts.gamesDir)
264
+ args.push('--games-dir', opts.gamesDir);
265
+ else if (opts.spinPath) {
266
+ const dir = opts.spinPath.replace(/\/[^/]+$/, '') || '.';
267
+ args.push('--games-dir', dir);
268
+ }
269
+ child = node_child_process.spawn(resolveServerBinary(opts.binPath), args, { stdio: 'inherit' });
270
+ server.httpServer?.on('close', () => child?.kill());
271
+ }
272
+ client = grpc();
273
+ for (let i = 0; i < 100; i++) {
274
+ try {
275
+ const games = await call('ListGames', {});
276
+ if (!gameId)
277
+ gameId = games.games[0]?.game_id ?? '';
278
+ const info = games.games.find((g) => g.game_id === gameId);
279
+ entryActions = info?.entry_actions ?? [];
280
+ console.log(`[e8] connected: game=${gameId} script=${info?.script_sha256?.slice(0, 12)} entry=[${entryActions}]`);
281
+ break;
282
+ }
283
+ catch {
284
+ await new Promise((res) => setTimeout(res, 300));
285
+ }
286
+ }
287
+ server.middlewares.use('/__lua-play', (req, res) => {
288
+ if (req.method !== 'POST') {
289
+ res.statusCode = 405;
290
+ res.end('Method Not Allowed');
291
+ return;
292
+ }
293
+ let body = '';
294
+ req.on('data', (c) => (body += c));
295
+ req.on('end', async () => {
296
+ res.setHeader('Content-Type', 'application/json');
297
+ try {
298
+ res.statusCode = 200;
299
+ res.end(JSON.stringify(await play(JSON.parse(body))));
300
+ }
301
+ catch (e) {
302
+ res.statusCode = 500;
303
+ res.end(JSON.stringify({ error: e.message }));
304
+ }
305
+ });
306
+ });
307
+ server.middlewares.use('/config', async (_req, res) => {
308
+ res.setHeader('Content-Type', 'application/json');
309
+ try {
310
+ const c = await call('GetConfig', { game_id: gameId });
311
+ res.statusCode = 200;
312
+ res.end(c.config_json || JSON.stringify({ error: c.error }));
313
+ }
314
+ catch (e) {
315
+ res.statusCode = 500;
316
+ res.end(JSON.stringify({ error: e.message }));
317
+ }
318
+ });
319
+ },
320
+ };
321
+ }
322
+
3
323
  // ─── DevBridge Plugin ────────────────────────────────────
4
324
  /**
5
325
  * Vite plugin that auto-injects the DevBridge mock-host bootstrapper
6
326
  * into the HTML during development, so the game can communicate with
7
327
  * a mock casino host without manual setup.
8
328
  *
9
- * Pair with `luaPlugin` to also enable `.lua` raw imports and serve a
10
- * Lua execution endpoint at POST /__lua-play.
329
+ * Pair with `spinPlugin` to serve the math endpoint at POST /__lua-play
330
+ * (the route name is the frozen frontend contract; the engine is e8).
11
331
  */
12
332
  const VIRTUAL_ID = '/@dev-bridge-entry.js';
13
333
  function devBridgePlugin(configPath) {
@@ -67,113 +387,7 @@ await import('${entrySrc}');
67
387
  },
68
388
  };
69
389
  }
70
- // ─── Lua Plugin ─────────────────────────────────────────
71
- /**
72
- * Vite plugin that:
73
- * 1. Enables importing `.lua` files as raw strings with HMR
74
- * 2. Runs a LuaEngine on the Vite dev server (Node.js) via POST /__lua-play
75
- *
76
- * fengari runs server-side only — no browser shims needed.
77
- */
78
- function luaPlugin(configPath) {
79
- let luaEngine = null;
80
- let viteServer = null;
81
- async function initEngine() {
82
- if (!viteServer)
83
- return;
84
- try {
85
- // Invalidate cached modules so HMR picks up changes
86
- const root = viteServer.config.root;
87
- const fullConfigPath = configPath.startsWith('.')
88
- ? root + '/' + configPath.replace(/^\.\//, '')
89
- : configPath;
90
- // Invalidate the config module and its dependencies
91
- const configMod = viteServer.moduleGraph.getModuleById(fullConfigPath);
92
- if (configMod)
93
- viteServer.moduleGraph.invalidateModule(configMod);
94
- // ssrLoadModule handles TS transpilation and resolves all imports
95
- const mod = await viteServer.ssrLoadModule(fullConfigPath);
96
- const config = mod.default ?? mod.config ?? mod;
97
- if (!config.luaScript || !config.gameDefinition) {
98
- console.log('[LuaPlugin] No luaScript/gameDefinition in config — Lua server disabled');
99
- luaEngine = null;
100
- return;
101
- }
102
- // Load LuaEngine via SSR (fengari runs natively in Node.js)
103
- const luaMod = await viteServer.ssrLoadModule('@energy8platform/platform-core/lua');
104
- const { LuaEngine } = luaMod;
105
- if (luaEngine)
106
- luaEngine.destroy();
107
- luaEngine = new LuaEngine({
108
- script: config.luaScript,
109
- gameDefinition: config.gameDefinition,
110
- seed: config.luaSeed,
111
- });
112
- console.log('[LuaPlugin] LuaEngine initialized (server-side)');
113
- }
114
- catch (e) {
115
- console.warn('[LuaPlugin] Failed to initialize LuaEngine:', e.message);
116
- luaEngine = null;
117
- }
118
- }
119
- return {
120
- name: 'platform-core:lua',
121
- apply: 'serve',
122
- async configureServer(server) {
123
- viteServer = server;
124
- await initEngine();
125
- // POST /__lua-play — execute Lua on the server
126
- server.middlewares.use('/__lua-play', (req, res) => {
127
- if (req.method !== 'POST') {
128
- res.statusCode = 405;
129
- res.end('Method Not Allowed');
130
- return;
131
- }
132
- let body = '';
133
- req.on('data', (chunk) => { body += chunk; });
134
- req.on('end', () => {
135
- try {
136
- if (!luaEngine) {
137
- res.statusCode = 503;
138
- res.setHeader('Content-Type', 'application/json');
139
- res.end(JSON.stringify({ error: 'LuaEngine not initialized' }));
140
- return;
141
- }
142
- const params = JSON.parse(body);
143
- const result = luaEngine.execute(params);
144
- res.statusCode = 200;
145
- res.setHeader('Content-Type', 'application/json');
146
- res.end(JSON.stringify(result));
147
- }
148
- catch (e) {
149
- res.statusCode = 500;
150
- res.setHeader('Content-Type', 'application/json');
151
- res.end(JSON.stringify({ error: e.message }));
152
- }
153
- });
154
- });
155
- },
156
- transform(code, id) {
157
- if (id.endsWith('.lua')) {
158
- return {
159
- code: `export default ${JSON.stringify(code)};`,
160
- map: null,
161
- };
162
- }
163
- },
164
- async handleHotUpdate({ file, server }) {
165
- if (file.endsWith('.lua') || file.includes('dev.config')) {
166
- console.log('[LuaPlugin] Reloading LuaEngine...');
167
- // Invalidate all SSR modules so ssrLoadModule picks up fresh code
168
- server.moduleGraph.invalidateAll();
169
- await initEngine();
170
- server.ws.send({ type: 'full-reload' });
171
- return [];
172
- }
173
- },
174
- };
175
- }
176
390
 
177
391
  exports.devBridgePlugin = devBridgePlugin;
178
- exports.luaPlugin = luaPlugin;
392
+ exports.spinPlugin = spinPlugin;
179
393
  //# sourceMappingURL=vite.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite.cjs.js","sources":["../src/vite/index.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite.cjs.js","sources":["../src/vite/spinPlugin.ts","../src/vite/index.ts"],"sourcesContent":[null,null],"names":["accessSync","fsConstants","fileURLToPath","join","createRequire","mkdtempSync","tmpdir","writeFileSync","spawn"],"mappings":"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"}
package/dist/vite.d.ts CHANGED
@@ -1,13 +1,23 @@
1
1
  import { Plugin } from 'vite';
2
2
 
3
+ interface SpinPluginOptions {
4
+ /** путь к бинарю e8-server (default: E8_SERVER_BINARY → platform-core/bin → PATH) */
5
+ binPath?: string;
6
+ /** .spin-файл игры или каталог */
7
+ spinPath?: string;
8
+ gamesDir?: string;
9
+ /** id игры из декларации game "..." (default: первая загруженная) */
10
+ gameId?: string;
11
+ /** порт gRPC (default 50151) */
12
+ port?: number;
13
+ /** server_seed дев-сессий (детерминированный replay) */
14
+ serverSeed?: string;
15
+ /** подключиться к уже запущенному серверу, не спавнить */
16
+ external?: boolean;
17
+ }
18
+ declare function spinPlugin(opts?: SpinPluginOptions): Plugin;
19
+
3
20
  declare function devBridgePlugin(configPath: string): Plugin;
4
- /**
5
- * Vite plugin that:
6
- * 1. Enables importing `.lua` files as raw strings with HMR
7
- * 2. Runs a LuaEngine on the Vite dev server (Node.js) via POST /__lua-play
8
- *
9
- * fengari runs server-side only — no browser shims needed.
10
- */
11
- declare function luaPlugin(configPath: string): Plugin;
12
21
 
13
- export { devBridgePlugin, luaPlugin };
22
+ export { devBridgePlugin, spinPlugin };
23
+ export type { SpinPluginOptions };