@playcademy/vite-plugin 0.1.8 → 0.1.10
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/dist/index.js +73 -63
- package/dist/lib/cli-server.d.ts +5 -23
- package/dist/types.d.ts +18 -0
- package/dist/utils.d.ts +0 -8
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -169556,32 +169556,37 @@ var version3 = package_default.version;
|
|
|
169556
169556
|
|
|
169557
169557
|
// src/lib/cli-server.ts
|
|
169558
169558
|
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
169559
|
-
import {
|
|
169559
|
+
import {
|
|
169560
|
+
loadPlaycademyConfig as loadConfig2,
|
|
169561
|
+
startPlaycademyDevServer,
|
|
169562
|
+
startPlaycademyHotReload
|
|
169563
|
+
} from "playcademy/utils";
|
|
169564
|
+
async function tryLoadConfig(viteConfig) {
|
|
169565
|
+
try {
|
|
169566
|
+
return await loadConfig2();
|
|
169567
|
+
} catch (error2) {
|
|
169568
|
+
if (error2 instanceof Error && !error2.message.includes("Could not find")) {
|
|
169569
|
+
viteConfig.logger.warn(`Could not load playcademy.config.js: ${error2.message}`);
|
|
169570
|
+
}
|
|
169571
|
+
return null;
|
|
169572
|
+
}
|
|
169573
|
+
}
|
|
169560
169574
|
function needsCliDevServer(config2) {
|
|
169561
|
-
|
|
169562
|
-
return true;
|
|
169563
|
-
return false;
|
|
169575
|
+
return !!config2.integrations;
|
|
169564
169576
|
}
|
|
169565
|
-
|
|
169566
|
-
|
|
169567
|
-
|
|
169568
|
-
|
|
169569
|
-
|
|
169570
|
-
|
|
169571
|
-
|
|
169572
|
-
|
|
169573
|
-
|
|
169574
|
-
|
|
169575
|
-
server = await startPlaycademyDevServer({
|
|
169576
|
-
port,
|
|
169577
|
-
config: config2,
|
|
169578
|
-
quiet: true,
|
|
169579
|
-
platformUrl
|
|
169580
|
-
});
|
|
169581
|
-
}, {
|
|
169577
|
+
function formatChangedPath(changedPath) {
|
|
169578
|
+
if (!changedPath)
|
|
169579
|
+
return;
|
|
169580
|
+
if (changedPath.includes("/api/")) {
|
|
169581
|
+
return changedPath.substring(changedPath.indexOf("/api/"));
|
|
169582
|
+
}
|
|
169583
|
+
return changedPath;
|
|
169584
|
+
}
|
|
169585
|
+
function createHotReloadCallbacks(viteConfig) {
|
|
169586
|
+
return {
|
|
169582
169587
|
onSuccess: (changedPath) => {
|
|
169583
|
-
|
|
169584
|
-
|
|
169588
|
+
const relativePath = formatChangedPath(changedPath);
|
|
169589
|
+
if (relativePath) {
|
|
169585
169590
|
viteConfig.logger.info(`${import_picocolors.dim("(backend)")} ${import_picocolors.green("hmr update")} ${import_picocolors.dim(relativePath)}`, { timestamp: true });
|
|
169586
169591
|
} else {
|
|
169587
169592
|
viteConfig.logger.info("backend reloaded", { timestamp: true });
|
|
@@ -169590,12 +169595,44 @@ async function startCliDevServer(options) {
|
|
|
169590
169595
|
onError: (error2) => {
|
|
169591
169596
|
viteConfig.logger.error(`backend reload failed: ${error2 instanceof Error ? error2.message : String(error2)}`);
|
|
169592
169597
|
}
|
|
169593
|
-
});
|
|
169594
|
-
return {
|
|
169595
|
-
server,
|
|
169596
|
-
stopHotReload: () => watcher.close()
|
|
169597
169598
|
};
|
|
169598
169599
|
}
|
|
169600
|
+
async function startServer2(options) {
|
|
169601
|
+
const { port, config: config2, platformUrl } = options;
|
|
169602
|
+
return startPlaycademyDevServer({
|
|
169603
|
+
port,
|
|
169604
|
+
config: config2,
|
|
169605
|
+
quiet: true,
|
|
169606
|
+
platformUrl
|
|
169607
|
+
});
|
|
169608
|
+
}
|
|
169609
|
+
function setupHotReload(serverRef, options, viteConfig) {
|
|
169610
|
+
const watcher = startPlaycademyHotReload(async () => {
|
|
169611
|
+
await serverRef.current.dispose();
|
|
169612
|
+
serverRef.current = await startServer2(options);
|
|
169613
|
+
}, createHotReloadCallbacks(viteConfig));
|
|
169614
|
+
return () => watcher.close();
|
|
169615
|
+
}
|
|
169616
|
+
async function setupCliDevServer(options) {
|
|
169617
|
+
const { port, viteConfig, platformUrl } = options;
|
|
169618
|
+
const config2 = await tryLoadConfig(viteConfig);
|
|
169619
|
+
if (!config2)
|
|
169620
|
+
return null;
|
|
169621
|
+
if (!needsCliDevServer(config2))
|
|
169622
|
+
return null;
|
|
169623
|
+
try {
|
|
169624
|
+
const serverOptions = { port, config: config2, platformUrl };
|
|
169625
|
+
const serverRef = { current: await startServer2(serverOptions) };
|
|
169626
|
+
const stopHotReload = setupHotReload(serverRef, serverOptions, viteConfig);
|
|
169627
|
+
return {
|
|
169628
|
+
server: serverRef.current,
|
|
169629
|
+
stopHotReload
|
|
169630
|
+
};
|
|
169631
|
+
} catch (error2) {
|
|
169632
|
+
viteConfig.logger.error(`Failed to start game backend: ${error2 instanceof Error ? error2.message : String(error2)}`);
|
|
169633
|
+
return null;
|
|
169634
|
+
}
|
|
169635
|
+
}
|
|
169599
169636
|
|
|
169600
169637
|
// src/lib/logging.ts
|
|
169601
169638
|
var import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
@@ -169621,7 +169658,6 @@ import path3 from "node:path";
|
|
|
169621
169658
|
// src/utils.ts
|
|
169622
169659
|
import fs4 from "node:fs";
|
|
169623
169660
|
import path2 from "node:path";
|
|
169624
|
-
import { loadPlaycademyConfig as loadConfig2 } from "playcademy/utils";
|
|
169625
169661
|
function extractProjectInfo(viteConfig) {
|
|
169626
169662
|
const projectRoot = viteConfig.root;
|
|
169627
169663
|
const directoryName = path2.basename(projectRoot);
|
|
@@ -169672,20 +169708,6 @@ async function findAvailablePort(startPort = 4321) {
|
|
|
169672
169708
|
});
|
|
169673
169709
|
});
|
|
169674
169710
|
}
|
|
169675
|
-
async function loadPlaycademyConfig(viteConfig) {
|
|
169676
|
-
const projectRoot = viteConfig.root;
|
|
169677
|
-
const configPath = path2.join(projectRoot, "playcademy.config.js");
|
|
169678
|
-
try {
|
|
169679
|
-
if (fs4.existsSync(configPath)) {
|
|
169680
|
-
return await loadConfig2(configPath);
|
|
169681
|
-
}
|
|
169682
|
-
} catch (error2) {
|
|
169683
|
-
viteConfig.logger.error(`Failed to load playcademy.config.js: ${error2 instanceof Error ? error2.message : String(error2)}`);
|
|
169684
|
-
viteConfig.logger.error(`configPath: ${configPath}`);
|
|
169685
|
-
throw error2;
|
|
169686
|
-
}
|
|
169687
|
-
return null;
|
|
169688
|
-
}
|
|
169689
169711
|
|
|
169690
169712
|
// src/lib/manifest.ts
|
|
169691
169713
|
var LOG_LINE_TOTAL_WIDTH = 60;
|
|
@@ -170341,7 +170363,6 @@ function devServerMiddleware(server, sandbox, gameUrl, showBadge) {
|
|
|
170341
170363
|
function playcademy(options = {}) {
|
|
170342
170364
|
let viteConfig;
|
|
170343
170365
|
let currentBuildOutputs = {};
|
|
170344
|
-
let playcademyConfig = null;
|
|
170345
170366
|
const exportOptions = options.export ?? {};
|
|
170346
170367
|
const sandboxOptions = options.sandbox ?? {};
|
|
170347
170368
|
const devOptions = options.dev ?? {};
|
|
@@ -170364,7 +170385,6 @@ function playcademy(options = {}) {
|
|
|
170364
170385
|
async configResolved(resolvedConfig) {
|
|
170365
170386
|
viteConfig = resolvedConfig;
|
|
170366
170387
|
currentBuildOutputs = {};
|
|
170367
|
-
playcademyConfig = await loadPlaycademyConfig(resolvedConfig);
|
|
170368
170388
|
},
|
|
170369
170389
|
async configureServer(server) {
|
|
170370
170390
|
const sandbox = await startSandbox(viteConfig, _options.startSandbox, {
|
|
@@ -170372,21 +170392,13 @@ function playcademy(options = {}) {
|
|
|
170372
170392
|
customUrl: _options.sandboxUrl,
|
|
170373
170393
|
quiet: true
|
|
170374
170394
|
});
|
|
170375
|
-
|
|
170376
|
-
|
|
170377
|
-
|
|
170378
|
-
|
|
170379
|
-
|
|
170380
|
-
config: playcademyConfig,
|
|
170381
|
-
viteConfig,
|
|
170382
|
-
platformUrl: sandbox.baseUrl
|
|
170383
|
-
});
|
|
170384
|
-
} catch (error2) {
|
|
170385
|
-
viteConfig.logger.error(`Failed to start game backend: ${error2}`);
|
|
170386
|
-
}
|
|
170387
|
-
}
|
|
170395
|
+
const backend = await setupCliDevServer({
|
|
170396
|
+
port: DEFAULT_PORTS2.BACKEND,
|
|
170397
|
+
viteConfig,
|
|
170398
|
+
platformUrl: sandbox.baseUrl
|
|
170399
|
+
});
|
|
170388
170400
|
if (sandbox.project) {
|
|
170389
|
-
const gameUrl =
|
|
170401
|
+
const gameUrl = backend ? `http://localhost:${DEFAULT_PORTS2.BACKEND}` : undefined;
|
|
170390
170402
|
devServerMiddleware(server, sandbox, gameUrl, _options.showBadge);
|
|
170391
170403
|
}
|
|
170392
170404
|
server.httpServer?.once("listening", () => {
|
|
@@ -170394,16 +170406,14 @@ function playcademy(options = {}) {
|
|
|
170394
170406
|
const projectInfo = extractProjectInfo(viteConfig);
|
|
170395
170407
|
printBanner(viteConfig, {
|
|
170396
170408
|
sandbox: DEFAULT_PORTS2.SANDBOX,
|
|
170397
|
-
backend:
|
|
170409
|
+
backend: backend ? DEFAULT_PORTS2.BACKEND : undefined
|
|
170398
170410
|
}, projectInfo, version3);
|
|
170399
170411
|
}, 100);
|
|
170400
170412
|
});
|
|
170401
170413
|
server.httpServer?.on("close", () => {
|
|
170402
170414
|
sandbox.cleanup();
|
|
170403
|
-
|
|
170404
|
-
|
|
170405
|
-
cliServerManager.stopHotReload();
|
|
170406
|
-
}
|
|
170415
|
+
backend?.server.dispose();
|
|
170416
|
+
backend?.stopHotReload();
|
|
170407
170417
|
});
|
|
170408
170418
|
},
|
|
170409
170419
|
async writeBundle() {
|
package/dist/lib/cli-server.d.ts
CHANGED
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { PlaycademyConfig } from 'playcademy/types';
|
|
3
|
-
import type { ResolvedConfig } from 'vite';
|
|
1
|
+
import type { CliDevServerOptions, CliServerManager } from '../types';
|
|
4
2
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Sets up the CLI dev server with hot reload enabled.
|
|
4
|
+
* Loads config, checks if backend is needed, and starts server if appropriate.
|
|
5
|
+
* Returns null if no config or no integrations (backend not needed).
|
|
7
6
|
*
|
|
8
|
-
* @param config - Playcademy configuration
|
|
9
|
-
* @returns True if CLI dev server is needed
|
|
10
|
-
*/
|
|
11
|
-
export declare function needsCliDevServer(config: PlaycademyConfig): boolean;
|
|
12
|
-
interface CliServerManager {
|
|
13
|
-
server: Awaited<ReturnType<typeof startPlaycademyDevServer>>;
|
|
14
|
-
stopHotReload: () => void;
|
|
15
|
-
}
|
|
16
|
-
export interface CliDevServerOptions {
|
|
17
|
-
port: number;
|
|
18
|
-
config: PlaycademyConfig;
|
|
19
|
-
viteConfig: ResolvedConfig;
|
|
20
|
-
platformUrl?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Starts the CLI dev server with hot reload enabled.
|
|
24
7
|
* Used by the Vite plugin to manage the game backend server.
|
|
25
8
|
*/
|
|
26
|
-
export declare function
|
|
27
|
-
export {};
|
|
9
|
+
export declare function setupCliDevServer(options: CliDevServerOptions): Promise<CliServerManager | null>;
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type definitions for the Playcademy Vite Plugin
|
|
3
3
|
*/
|
|
4
|
+
import type { ResolvedConfig } from 'vite';
|
|
4
5
|
import type { ManifestV1 } from '@playcademy/data/types';
|
|
5
6
|
/**
|
|
6
7
|
* Project information extracted from package.json and directory structure
|
|
@@ -74,3 +75,20 @@ export interface SandboxManager {
|
|
|
74
75
|
project: ProjectInfo | null;
|
|
75
76
|
cleanup: () => void;
|
|
76
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* CLI server manager interface for controlling backend server lifecycle
|
|
80
|
+
*/
|
|
81
|
+
export interface CliServerManager {
|
|
82
|
+
server: {
|
|
83
|
+
dispose: () => Promise<void>;
|
|
84
|
+
};
|
|
85
|
+
stopHotReload: () => void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Options for setting up the CLI dev server
|
|
89
|
+
*/
|
|
90
|
+
export interface CliDevServerOptions {
|
|
91
|
+
port: number;
|
|
92
|
+
viteConfig: ResolvedConfig;
|
|
93
|
+
platformUrl?: string;
|
|
94
|
+
}
|
package/dist/utils.d.ts
CHANGED
|
@@ -2,15 +2,7 @@
|
|
|
2
2
|
* Utility functions for the Playcademy Vite plugin
|
|
3
3
|
*/
|
|
4
4
|
import type { ResolvedConfig } from 'vite';
|
|
5
|
-
import type { PlaycademyConfig } from '@playcademy/sdk/server';
|
|
6
5
|
import type { ProjectInfo } from './types';
|
|
7
6
|
export declare function extractProjectInfo(viteConfig: ResolvedConfig): ProjectInfo;
|
|
8
7
|
export declare function formatNumberWithCommas(numStr: string): string;
|
|
9
8
|
export declare function findAvailablePort(startPort?: number): Promise<number>;
|
|
10
|
-
/**
|
|
11
|
-
* Loads the Playcademy configuration from the project root.
|
|
12
|
-
*
|
|
13
|
-
* @param viteConfig - Vite resolved configuration
|
|
14
|
-
* @returns Playcademy configuration or null if not found
|
|
15
|
-
*/
|
|
16
|
-
export declare function loadPlaycademyConfig(viteConfig: ResolvedConfig): Promise<PlaycademyConfig | null>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@playcademy/vite-plugin",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"archiver": "^7.0.1",
|
|
27
27
|
"picocolors": "^1.1.1",
|
|
28
|
-
"playcademy": "0.12.
|
|
28
|
+
"playcademy": "0.12.9"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@inquirer/prompts": "^7.8.6",
|