@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 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 { startPlaycademyDevServer, startPlaycademyHotReload } from "playcademy/utils";
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
- if (config2.integrations)
169562
- return true;
169563
- return false;
169575
+ return !!config2.integrations;
169564
169576
  }
169565
- async function startCliDevServer(options) {
169566
- const { port, config: config2, viteConfig, platformUrl } = options;
169567
- let server = await startPlaycademyDevServer({
169568
- port,
169569
- config: config2,
169570
- quiet: true,
169571
- platformUrl
169572
- });
169573
- const watcher = startPlaycademyHotReload(async () => {
169574
- await server.dispose();
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
- if (changedPath) {
169584
- const relativePath = changedPath.includes("/api/") ? changedPath.substring(changedPath.indexOf("/api/")) : changedPath;
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
- let cliServerManager = null;
170376
- if (playcademyConfig && needsCliDevServer(playcademyConfig)) {
170377
- try {
170378
- cliServerManager = await startCliDevServer({
170379
- port: DEFAULT_PORTS2.BACKEND,
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 = cliServerManager ? `http://localhost:${DEFAULT_PORTS2.BACKEND}` : undefined;
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: cliServerManager ? DEFAULT_PORTS2.BACKEND : undefined
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
- if (cliServerManager) {
170404
- cliServerManager.server.dispose();
170405
- cliServerManager.stopHotReload();
170406
- }
170415
+ backend?.server.dispose();
170416
+ backend?.stopHotReload();
170407
170417
  });
170408
170418
  },
170409
170419
  async writeBundle() {
@@ -1,27 +1,9 @@
1
- import { startPlaycademyDevServer } from 'playcademy/utils';
2
- import type { PlaycademyConfig } from 'playcademy/types';
3
- import type { ResolvedConfig } from 'vite';
1
+ import type { CliDevServerOptions, CliServerManager } from '../types';
4
2
  /**
5
- * Determines if the CLI dev server is needed based on configuration.
6
- * Checks for integrations or custom routes that require the game backend.
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 startCliDevServer(options: CliDevServerOptions): Promise<CliServerManager>;
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.8",
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.2"
28
+ "playcademy": "0.12.9"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@inquirer/prompts": "^7.8.6",