playcademy 0.14.11-alpha.6 → 0.14.11-alpha.7

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.
@@ -155,6 +155,59 @@ declare const SCHEMA_INDEX_FILE = "index.ts";
155
155
  */
156
156
  declare const DEFAULT_SEED_FILE_NAME = "seed.ts";
157
157
 
158
+ /**
159
+ * Godot engine integration constants
160
+ *
161
+ * Constants for detecting Godot projects and running headless exports
162
+ */
163
+ /**
164
+ * Godot project file (presence indicates Godot project)
165
+ */
166
+ declare const GODOT_PROJECT_FILE = "project.godot";
167
+ /**
168
+ * Godot export presets configuration file
169
+ */
170
+ declare const GODOT_EXPORT_PRESETS_FILE = "export_presets.cfg";
171
+ /**
172
+ * Web platform identifier in export_presets.cfg
173
+ */
174
+ declare const GODOT_WEB_PLATFORM = "platform=\"Web\"";
175
+ /**
176
+ * Build output directories
177
+ */
178
+ declare const GODOT_BUILD_DIRECTORIES: {
179
+ /** Root build directory (cleared before each export) */
180
+ readonly ROOT: "build";
181
+ /** Web export subdirectory */
182
+ readonly WEB: "build/web";
183
+ };
184
+ /**
185
+ * Build output file paths
186
+ */
187
+ declare const GODOT_BUILD_OUTPUTS: {
188
+ /** Exported web build entry point */
189
+ readonly INDEX_HTML: "build/web/index.html";
190
+ /** Packaged zip file (created by Godot export) */
191
+ readonly ZIP: "build/web_playcademy.zip";
192
+ };
193
+ /**
194
+ * Platform-specific Godot executable discovery patterns
195
+ */
196
+ declare const GODOT_EXECUTABLE_PATTERNS: {
197
+ /** macOS app bundle suffix */
198
+ readonly MACOS_APP_SUFFIX: ".app/";
199
+ /** macOS executable path within .app bundle */
200
+ readonly MACOS_APP_EXECUTABLE: "Contents/MacOS/Godot";
201
+ /** Flatpak application ID */
202
+ readonly FLATPAK_ID: "org.godotengine.Godot";
203
+ /** Flatpak run command */
204
+ readonly FLATPAK_COMMAND: "flatpak run org.godotengine.Godot";
205
+ /** Snap package name */
206
+ readonly SNAP_NAME: "godot";
207
+ /** Snap run command */
208
+ readonly SNAP_COMMAND: "snap run godot";
209
+ };
210
+
158
211
  /**
159
212
  * HTTP server constants for CLI OAuth callback handling
160
213
  */
@@ -223,4 +276,4 @@ declare const DEFAULT_PORTS: {
223
276
  */
224
277
  declare const CONFIG_FILE_NAMES: string[];
225
278
 
226
- export { AUTH_API_SUBDIRECTORY, AUTH_CONFIG_FILE, AUTH_PROVIDER_NAMES, BETTER_AUTH_VERSION, BUCKET_ALWAYS_SKIP, CALLBACK_PATH, CALLBACK_PORT, CLI_DEFAULT_OUTPUTS, CLI_DIRECTORIES, CLI_FILES, CLI_USER_DIRECTORIES, CLOUDFLARE_BINDINGS, CLOUDFLARE_COMPATIBILITY_DATE, CONFIG_FILE_NAMES, DEFAULT_API_ROUTES_DIRECTORY, DEFAULT_DATABASE_DIRECTORY, DEFAULT_PORTS, DEFAULT_SEED_FILE_NAME, ENV_EXAMPLE_FILE, ENV_FILES, MINIFLARE_D1_DIRECTORY, OAUTH_CALLBACK_URL_PATTERN, PLACEHOLDER_GAME_URL, PLAYCADEMY_AUTH_VERSION, SAMPLE_API_SUBDIRECTORY, SAMPLE_BUCKET_FILENAME, SAMPLE_CUSTOM_FILENAME, SAMPLE_DATABASE_FILENAME, SAMPLE_KV_FILENAME, SCHEMA_INDEX_FILE, SCHEMA_SUBDIRECTORY, SERVER_LIB_DIRECTORY, SERVER_ROOT_DIRECTORY, SSO_AUTH_TIMEOUT_MS, TSCONFIG_FILES, WORKSPACE_NAME };
279
+ export { AUTH_API_SUBDIRECTORY, AUTH_CONFIG_FILE, AUTH_PROVIDER_NAMES, BETTER_AUTH_VERSION, BUCKET_ALWAYS_SKIP, CALLBACK_PATH, CALLBACK_PORT, CLI_DEFAULT_OUTPUTS, CLI_DIRECTORIES, CLI_FILES, CLI_USER_DIRECTORIES, CLOUDFLARE_BINDINGS, CLOUDFLARE_COMPATIBILITY_DATE, CONFIG_FILE_NAMES, DEFAULT_API_ROUTES_DIRECTORY, DEFAULT_DATABASE_DIRECTORY, DEFAULT_PORTS, DEFAULT_SEED_FILE_NAME, ENV_EXAMPLE_FILE, ENV_FILES, GODOT_BUILD_DIRECTORIES, GODOT_BUILD_OUTPUTS, GODOT_EXECUTABLE_PATTERNS, GODOT_EXPORT_PRESETS_FILE, GODOT_PROJECT_FILE, GODOT_WEB_PLATFORM, MINIFLARE_D1_DIRECTORY, OAUTH_CALLBACK_URL_PATTERN, PLACEHOLDER_GAME_URL, PLAYCADEMY_AUTH_VERSION, SAMPLE_API_SUBDIRECTORY, SAMPLE_BUCKET_FILENAME, SAMPLE_CUSTOM_FILENAME, SAMPLE_DATABASE_FILENAME, SAMPLE_KV_FILENAME, SCHEMA_INDEX_FILE, SCHEMA_SUBDIRECTORY, SERVER_LIB_DIRECTORY, SERVER_ROOT_DIRECTORY, SSO_AUTH_TIMEOUT_MS, TSCONFIG_FILES, WORKSPACE_NAME };
package/dist/constants.js CHANGED
@@ -171,6 +171,37 @@ var SCHEMA_SUBDIRECTORY = "schema";
171
171
  var SCHEMA_INDEX_FILE = "index.ts";
172
172
  var DEFAULT_SEED_FILE_NAME = "seed.ts";
173
173
 
174
+ // src/constants/godot.ts
175
+ var GODOT_PROJECT_FILE = "project.godot";
176
+ var GODOT_EXPORT_PRESETS_FILE = "export_presets.cfg";
177
+ var GODOT_WEB_PLATFORM = 'platform="Web"';
178
+ var GODOT_BUILD_DIRECTORIES = {
179
+ /** Root build directory (cleared before each export) */
180
+ ROOT: "build",
181
+ /** Web export subdirectory */
182
+ WEB: "build/web"
183
+ };
184
+ var GODOT_BUILD_OUTPUTS = {
185
+ /** Exported web build entry point */
186
+ INDEX_HTML: "build/web/index.html",
187
+ /** Packaged zip file (created by Godot export) */
188
+ ZIP: "build/web_playcademy.zip"
189
+ };
190
+ var GODOT_EXECUTABLE_PATTERNS = {
191
+ /** macOS app bundle suffix */
192
+ MACOS_APP_SUFFIX: ".app/",
193
+ /** macOS executable path within .app bundle */
194
+ MACOS_APP_EXECUTABLE: "Contents/MacOS/Godot",
195
+ /** Flatpak application ID */
196
+ FLATPAK_ID: "org.godotengine.Godot",
197
+ /** Flatpak run command */
198
+ FLATPAK_COMMAND: "flatpak run org.godotengine.Godot",
199
+ /** Snap package name */
200
+ SNAP_NAME: "godot",
201
+ /** Snap run command */
202
+ SNAP_COMMAND: "snap run godot"
203
+ };
204
+
174
205
  // src/constants/http-server.ts
175
206
  var CALLBACK_PORT = 6175;
176
207
  var CALLBACK_PATH = "/callback";
@@ -291,6 +322,12 @@ export {
291
322
  ENV_EXAMPLE_FILE,
292
323
  ENV_FILES,
293
324
  GAME_WORKER_DOMAINS,
325
+ GODOT_BUILD_DIRECTORIES,
326
+ GODOT_BUILD_OUTPUTS,
327
+ GODOT_EXECUTABLE_PATTERNS,
328
+ GODOT_EXPORT_PRESETS_FILE,
329
+ GODOT_PROJECT_FILE,
330
+ GODOT_WEB_PLATFORM,
294
331
  MINIFLARE_D1_DIRECTORY,
295
332
  OAUTH_CALLBACK_URL_PATTERN,
296
333
  PLACEHOLDER_GAME_URL,
package/dist/index.js CHANGED
@@ -947,6 +947,43 @@ var init_database = __esm({
947
947
  }
948
948
  });
949
949
 
950
+ // src/constants/godot.ts
951
+ var GODOT_PROJECT_FILE, GODOT_EXPORT_PRESETS_FILE, GODOT_WEB_PLATFORM, GODOT_BUILD_DIRECTORIES, GODOT_BUILD_OUTPUTS, GODOT_EXECUTABLE_PATTERNS;
952
+ var init_godot = __esm({
953
+ "src/constants/godot.ts"() {
954
+ "use strict";
955
+ GODOT_PROJECT_FILE = "project.godot";
956
+ GODOT_EXPORT_PRESETS_FILE = "export_presets.cfg";
957
+ GODOT_WEB_PLATFORM = 'platform="Web"';
958
+ GODOT_BUILD_DIRECTORIES = {
959
+ /** Root build directory (cleared before each export) */
960
+ ROOT: "build",
961
+ /** Web export subdirectory */
962
+ WEB: "build/web"
963
+ };
964
+ GODOT_BUILD_OUTPUTS = {
965
+ /** Exported web build entry point */
966
+ INDEX_HTML: "build/web/index.html",
967
+ /** Packaged zip file (created by Godot export) */
968
+ ZIP: "build/web_playcademy.zip"
969
+ };
970
+ GODOT_EXECUTABLE_PATTERNS = {
971
+ /** macOS app bundle suffix */
972
+ MACOS_APP_SUFFIX: ".app/",
973
+ /** macOS executable path within .app bundle */
974
+ MACOS_APP_EXECUTABLE: "Contents/MacOS/Godot",
975
+ /** Flatpak application ID */
976
+ FLATPAK_ID: "org.godotengine.Godot",
977
+ /** Flatpak run command */
978
+ FLATPAK_COMMAND: "flatpak run org.godotengine.Godot",
979
+ /** Snap package name */
980
+ SNAP_NAME: "godot",
981
+ /** Snap run command */
982
+ SNAP_COMMAND: "snap run godot"
983
+ };
984
+ }
985
+ });
986
+
950
987
  // src/constants/http-server.ts
951
988
  var CALLBACK_PORT, CALLBACK_PATH, SSO_AUTH_TIMEOUT_MS;
952
989
  var init_http_server = __esm({
@@ -1156,6 +1193,7 @@ var init_constants = __esm({
1156
1193
  init_cloudflare();
1157
1194
  init_config();
1158
1195
  init_database();
1196
+ init_godot();
1159
1197
  init_http_server();
1160
1198
  init_paths();
1161
1199
  init_ports();
@@ -3888,13 +3926,13 @@ function getErrorMessage(error) {
3888
3926
  }
3889
3927
  return "Unknown error";
3890
3928
  }
3891
- function logAndExit(error, logger3, options = {}) {
3929
+ function logAndExit(error, logger2, options = {}) {
3892
3930
  const { code = 1, prefix } = options;
3893
3931
  const message = getErrorMessage(error);
3894
3932
  const fullMessage = prefix ? `${prefix}: ${message}` : message;
3895
- logger3.newLine();
3896
- logger3.error(fullMessage);
3897
- logger3.newLine();
3933
+ logger2.newLine();
3934
+ logger2.error(fullMessage);
3935
+ logger2.newLine();
3898
3936
  process.exit(code);
3899
3937
  }
3900
3938
  var init_errors2 = __esm({
@@ -6482,8 +6520,8 @@ var timebackChangeDetector = {
6482
6520
  }
6483
6521
  } catch (error) {
6484
6522
  if (verbose && error instanceof Error) {
6485
- const { logger: logger3 } = await Promise.resolve().then(() => (init_core(), core_exports));
6486
- logger3.remark(`TimeBack config change failed: ${error.message}`);
6523
+ const { logger: logger2 } = await Promise.resolve().then(() => (init_core(), core_exports));
6524
+ logger2.remark(`TimeBack config change failed: ${error.message}`);
6487
6525
  }
6488
6526
  }
6489
6527
  }
@@ -6779,23 +6817,24 @@ function displayDeploymentDiff(options) {
6779
6817
 
6780
6818
  // src/lib/deploy/godot.ts
6781
6819
  init_src();
6820
+ init_constants2();
6782
6821
  init_core();
6783
6822
  import { execSync as execSync4 } from "child_process";
6784
- import { existsSync as existsSync10, mkdirSync as mkdirSync2, readFileSync as readFileSync5 } from "fs";
6823
+ import { existsSync as existsSync10, mkdirSync as mkdirSync2, readFileSync as readFileSync5, rmSync as rmSync3 } from "fs";
6785
6824
  import { join as join13 } from "path";
6786
6825
  import { confirm, select } from "@inquirer/prompts";
6787
6826
  function isGodotProject() {
6788
- return existsSync10(join13(getWorkspace(), "project.godot"));
6827
+ return existsSync10(join13(getWorkspace(), GODOT_PROJECT_FILE));
6789
6828
  }
6790
6829
  function hasWebExportPreset() {
6791
- const presetsPath = join13(getWorkspace(), "export_presets.cfg");
6830
+ const presetsPath = join13(getWorkspace(), GODOT_EXPORT_PRESETS_FILE);
6792
6831
  if (!existsSync10(presetsPath)) {
6793
6832
  return { configured: false };
6794
6833
  }
6795
6834
  try {
6796
6835
  const content = readFileSync5(presetsPath, "utf-8");
6797
6836
  const lines = content.split("\n");
6798
- const webPlatformIndex = lines.findIndex((line) => line.trim() === 'platform="Web"');
6837
+ const webPlatformIndex = lines.findIndex((line) => line.trim() === GODOT_WEB_PLATFORM);
6799
6838
  if (webPlatformIndex === -1) {
6800
6839
  return { configured: false };
6801
6840
  }
@@ -6824,8 +6863,8 @@ async function findGodotExecutable() {
6824
6863
  const result = execSync4(whichCmd, { stdio: "pipe", encoding: "utf-8" });
6825
6864
  const paths = result.trim().split("\n").filter(Boolean);
6826
6865
  for (const path4 of paths) {
6827
- if (platform === "darwin" && path4.includes(".app/")) {
6828
- const appPath = path4.split(".app/")[0] + ".app";
6866
+ if (platform === "darwin" && path4.includes(GODOT_EXECUTABLE_PATTERNS.MACOS_APP_SUFFIX)) {
6867
+ const appPath = path4.split(GODOT_EXECUTABLE_PATTERNS.MACOS_APP_SUFFIX)[0] + GODOT_EXECUTABLE_PATTERNS.MACOS_APP_SUFFIX.slice(0, -1);
6829
6868
  const appName = appPath.split("/").pop() || "Godot";
6830
6869
  foundExecutables.push({ path: path4, label: appName });
6831
6870
  seenAppBundles.add(appPath);
@@ -6844,7 +6883,7 @@ async function findGodotExecutable() {
6844
6883
  const apps = result.split("\n").filter(Boolean);
6845
6884
  for (const appPath of apps) {
6846
6885
  if (seenAppBundles.has(appPath)) continue;
6847
- const executable = join13(appPath, "Contents/MacOS/Godot");
6886
+ const executable = join13(appPath, GODOT_EXECUTABLE_PATTERNS.MACOS_APP_EXECUTABLE);
6848
6887
  const appName = appPath.split("/").pop() || "Godot";
6849
6888
  foundExecutables.push({ path: executable, label: appName });
6850
6889
  }
@@ -6853,16 +6892,23 @@ async function findGodotExecutable() {
6853
6892
  }
6854
6893
  if (platform === "linux") {
6855
6894
  try {
6856
- execSync4("flatpak list 2>/dev/null | grep org.godotengine.Godot", { stdio: "pipe" });
6895
+ execSync4(`flatpak list 2>/dev/null | grep ${GODOT_EXECUTABLE_PATTERNS.FLATPAK_ID}`, {
6896
+ stdio: "pipe"
6897
+ });
6857
6898
  foundExecutables.push({
6858
- path: "flatpak run org.godotengine.Godot",
6899
+ path: GODOT_EXECUTABLE_PATTERNS.FLATPAK_COMMAND,
6859
6900
  label: "Godot (flatpak)"
6860
6901
  });
6861
6902
  } catch {
6862
6903
  }
6863
6904
  try {
6864
- execSync4("snap list 2>/dev/null | grep godot", { stdio: "pipe" });
6865
- foundExecutables.push({ path: "snap run godot", label: "Godot (snap)" });
6905
+ execSync4(`snap list 2>/dev/null | grep ${GODOT_EXECUTABLE_PATTERNS.SNAP_NAME}`, {
6906
+ stdio: "pipe"
6907
+ });
6908
+ foundExecutables.push({
6909
+ path: GODOT_EXECUTABLE_PATTERNS.SNAP_COMMAND,
6910
+ label: "Godot (snap)"
6911
+ });
6866
6912
  } catch {
6867
6913
  }
6868
6914
  }
@@ -6899,7 +6945,11 @@ async function findGodotExecutable() {
6899
6945
  async function runGodotExport(godotPath, presetName, outputPath) {
6900
6946
  const root = getWorkspace();
6901
6947
  try {
6902
- mkdirSync2(join13(root, "build", "web"), { recursive: true });
6948
+ const buildDir = join13(root, GODOT_BUILD_DIRECTORIES.ROOT);
6949
+ if (existsSync10(buildDir)) {
6950
+ rmSync3(buildDir, { recursive: true, force: true });
6951
+ }
6952
+ mkdirSync2(join13(root, GODOT_BUILD_DIRECTORIES.WEB), { recursive: true });
6903
6953
  await runStep(
6904
6954
  `Exporting project using "${presetName}" preset`,
6905
6955
  async () => {
@@ -6945,19 +6995,22 @@ async function handleGodotBuildPrompt() {
6945
6995
  logger.newLine();
6946
6996
  return null;
6947
6997
  }
6948
- const success = await runGodotExport(godotPath, webExport.presetName, "build/web/index.html");
6998
+ const success = await runGodotExport(
6999
+ godotPath,
7000
+ webExport.presetName,
7001
+ GODOT_BUILD_OUTPUTS.INDEX_HTML
7002
+ );
6949
7003
  if (!success) {
6950
7004
  logger.error("Export failed. Please export manually or provide zip file.");
6951
7005
  logger.newLine();
6952
7006
  return null;
6953
7007
  }
6954
- const zipPath = "build/web_playcademy.zip";
6955
- if (existsSync10(join13(getWorkspace(), zipPath))) {
6956
- return zipPath;
7008
+ if (existsSync10(join13(getWorkspace(), GODOT_BUILD_OUTPUTS.ZIP))) {
7009
+ return GODOT_BUILD_OUTPUTS.ZIP;
6957
7010
  }
6958
7011
  logger.warn("Expected zip file not found, using build directory");
6959
7012
  logger.newLine();
6960
- return "build/web";
7013
+ return GODOT_BUILD_DIRECTORIES.WEB;
6961
7014
  }
6962
7015
 
6963
7016
  // src/lib/deploy/interaction.ts
@@ -8905,7 +8958,6 @@ init_src();
8905
8958
  init_config3();
8906
8959
  init_client();
8907
8960
  init_context();
8908
- init_logger();
8909
8961
 
8910
8962
  // src/lib/games/storage.ts
8911
8963
  init_constants2();
@@ -9195,13 +9247,6 @@ async function analyzeChanges(context2) {
9195
9247
  let buildChanged;
9196
9248
  if (buildHash !== void 0 && previousBuildHash !== void 0) {
9197
9249
  buildChanged = buildHash !== previousBuildHash;
9198
- if (context2.debug) {
9199
- console.log("\n[DEBUG] Build change detection:");
9200
- console.log(` Current hash: ${buildHash}`);
9201
- console.log(` Previous hash: ${previousBuildHash}`);
9202
- console.log(` Changed: ${buildChanged}
9203
- `);
9204
- }
9205
9250
  } else if (buildHash !== void 0 && previousBuildHash === void 0) {
9206
9251
  buildChanged = true;
9207
9252
  } else if (buildHash === void 0 && previousBuildHash !== void 0) {
@@ -9922,7 +9967,7 @@ async function startDevServer(options) {
9922
9967
  port: preferredPort,
9923
9968
  config: providedConfig,
9924
9969
  platformUrl,
9925
- logger: logger3 = true,
9970
+ logger: logger2 = true,
9926
9971
  customLogger
9927
9972
  } = options;
9928
9973
  const port = await findAvailablePort(preferredPort);
@@ -9942,7 +9987,7 @@ async function startDevServer(options) {
9942
9987
  const bucketDir = hasBucket ? await ensureBucketDirectory() : void 0;
9943
9988
  const workspace = getWorkspace();
9944
9989
  const envSecrets = await readEnvFile(workspace);
9945
- const log2 = logger3 ? new FilteredLog(LogLevel.INFO, customLogger) : new Log(LogLevel.NONE);
9990
+ const log2 = logger2 ? new FilteredLog(LogLevel.INFO, customLogger) : new Log(LogLevel.NONE);
9946
9991
  const sandboxInfo = readServerInfo("sandbox", workspace);
9947
9992
  const baseUrl = platformUrl ?? sandboxInfo?.url ?? process.env.PLAYCADEMY_BASE_URL ?? `http://localhost:${DEFAULT_PORTS.SANDBOX}`;
9948
9993
  const bindings = {
@@ -10236,64 +10281,64 @@ ${error.suggestion}` : error.message;
10236
10281
 
10237
10282
  // src/lib/timeback/cleanup.ts
10238
10283
  init_logger();
10239
- function displayCleanupWarning(integration, gameName, logger3) {
10240
- logger3.newLine();
10241
- logger3.warn("This will remove your TimeBack integration");
10242
- logger3.data("Game", gameName, 1);
10243
- logger3.data("Course ID", integration.courseId, 1);
10244
- logger3.newLine();
10245
- logger3.admonition("warning", "Are you sure?", [
10284
+ function displayCleanupWarning(integration, gameName, logger2) {
10285
+ logger2.newLine();
10286
+ logger2.warn("This will remove your TimeBack integration");
10287
+ logger2.data("Game", gameName, 1);
10288
+ logger2.data("Course ID", integration.courseId, 1);
10289
+ logger2.newLine();
10290
+ logger2.admonition("warning", "Are you sure?", [
10246
10291
  "This action will soft-delete all OneRoster resources"
10247
10292
  ]);
10248
- logger3.newLine();
10293
+ logger2.newLine();
10249
10294
  }
10250
10295
 
10251
10296
  // src/lib/timeback/setup.ts
10252
10297
  init_logger();
10253
- function displayConfigPreview(config, logger3) {
10254
- logger3.newLine();
10255
- logger3.highlight("Dry Run");
10256
- logger3.newLine();
10257
- logger3.highlight("Organization");
10258
- logger3.data("Name", config.organization.name, 1);
10259
- logger3.data("Type", config.organization.type, 1);
10260
- logger3.data("ID", config.organization.identifier, 1);
10261
- logger3.newLine();
10262
- logger3.highlight("Course");
10263
- logger3.data("Title", config.course.title, 1);
10264
- logger3.data("Code", config.course.courseCode, 1);
10265
- logger3.data("Subjects", config.course.subjects.join(", "), 1);
10266
- logger3.data("Grades", config.course.grades.join(", "), 1);
10267
- logger3.data("Level", config.course.level, 1);
10268
- logger3.newLine();
10269
- logger3.highlight("Resource");
10270
- logger3.data("Title", config.resource.title, 1);
10271
- logger3.data("Launch URL", config.resource.metadata.launchUrl, 1);
10272
- logger3.newLine();
10298
+ function displayConfigPreview(config, logger2) {
10299
+ logger2.newLine();
10300
+ logger2.highlight("Dry Run");
10301
+ logger2.newLine();
10302
+ logger2.highlight("Organization");
10303
+ logger2.data("Name", config.organization.name, 1);
10304
+ logger2.data("Type", config.organization.type, 1);
10305
+ logger2.data("ID", config.organization.identifier, 1);
10306
+ logger2.newLine();
10307
+ logger2.highlight("Course");
10308
+ logger2.data("Title", config.course.title, 1);
10309
+ logger2.data("Code", config.course.courseCode, 1);
10310
+ logger2.data("Subjects", config.course.subjects.join(", "), 1);
10311
+ logger2.data("Grades", config.course.grades.join(", "), 1);
10312
+ logger2.data("Level", config.course.level, 1);
10313
+ logger2.newLine();
10314
+ logger2.highlight("Resource");
10315
+ logger2.data("Title", config.resource.title, 1);
10316
+ logger2.data("Launch URL", config.resource.metadata.launchUrl, 1);
10317
+ logger2.newLine();
10273
10318
  }
10274
10319
 
10275
10320
  // src/lib/timeback/verify.ts
10276
- function displayIntegrationDetails(integration, logger3) {
10277
- logger3.highlight("Integration");
10278
- logger3.data("Course ID", integration.courseId, 1);
10279
- logger3.data(
10321
+ function displayIntegrationDetails(integration, logger2) {
10322
+ logger2.highlight("Integration");
10323
+ logger2.data("Course ID", integration.courseId, 1);
10324
+ logger2.data(
10280
10325
  "Last verified",
10281
10326
  integration.lastVerifiedAt ? new Date(integration.lastVerifiedAt).toLocaleString() : "Never",
10282
10327
  1
10283
10328
  );
10284
- logger3.newLine();
10285
- }
10286
- function displayResourcesStatus(resources, logger3) {
10287
- logger3.highlight("Resources");
10288
- logger3.data("Course", resources.course.found ? "\u2713 Found" : "\u2717 Not found", 1);
10289
- logger3.data("Component", resources.component.found ? "\u2713 Found" : "\u2717 Not found", 1);
10290
- logger3.data("Resource", resources.resource.found ? "\u2713 Found" : "\u2717 Not found", 1);
10291
- logger3.data(
10329
+ logger2.newLine();
10330
+ }
10331
+ function displayResourcesStatus(resources, logger2) {
10332
+ logger2.highlight("Resources");
10333
+ logger2.data("Course", resources.course.found ? "\u2713 Found" : "\u2717 Not found", 1);
10334
+ logger2.data("Component", resources.component.found ? "\u2713 Found" : "\u2717 Not found", 1);
10335
+ logger2.data("Resource", resources.resource.found ? "\u2713 Found" : "\u2717 Not found", 1);
10336
+ logger2.data(
10292
10337
  "Component Resource",
10293
10338
  resources.componentResource.found ? "\u2713 Found" : "\u2717 Not found",
10294
10339
  1
10295
10340
  );
10296
- logger3.newLine();
10341
+ logger2.newLine();
10297
10342
  }
10298
10343
 
10299
10344
  // src/commands/init/config.ts
@@ -10785,36 +10830,9 @@ async function runDeployment(options) {
10785
10830
  await selectEnvironment({ env: environment, dryRun: options.dryRun });
10786
10831
  const context2 = await prepareDeploymentContext(options);
10787
10832
  displayCurrentConfiguration(context2);
10788
- if (options.debug) {
10789
- console.log("\n[DEBUG] Before promptForMissingConfig:");
10790
- console.log(` config.displayName: ${context2.config.displayName}`);
10791
- console.log(` config.buildPath: ${context2.config.buildPath}`);
10792
- console.log(` context.buildHash: ${context2.buildHash}`);
10793
- console.log(` context.buildSize: ${context2.buildSize}`);
10794
- }
10795
10833
  const didPrompt = await promptForMissingConfig(context2);
10796
- if (options.debug) {
10797
- console.log("\n[DEBUG] After promptForMissingConfig:");
10798
- console.log(` didPrompt: ${didPrompt}`);
10799
- console.log(` config.buildPath: ${context2.config.buildPath}`);
10800
- }
10801
10834
  if (didPrompt && context2.config.buildPath) {
10802
- if (options.debug) {
10803
- console.log("\n[DEBUG] Before updateBuildMetadata:");
10804
- console.log(` buildPath: ${context2.config.buildPath}`);
10805
- console.log(` buildHash: ${context2.buildHash}`);
10806
- console.log(` previousBuildHash: ${context2.previousBuildHash}`);
10807
- console.log(` buildSize: ${context2.buildSize}`);
10808
- console.log(` previousBuildSize: ${context2.previousBuildSize}`);
10809
- }
10810
10835
  await updateBuildMetadata(context2);
10811
- if (options.debug) {
10812
- console.log("\n[DEBUG] After updateBuildMetadata:");
10813
- console.log(` buildHash: ${context2.buildHash}`);
10814
- console.log(` buildSize: ${context2.buildSize}`);
10815
- console.log(` Hash changed: ${context2.buildHash !== context2.previousBuildHash}
10816
- `);
10817
- }
10818
10836
  }
10819
10837
  if (didPrompt) logger.newLine();
10820
10838
  await validateDeployConfig(context2.config).catch((error) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playcademy",
3
- "version": "0.14.11-alpha.6",
3
+ "version": "0.14.11-alpha.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {