playcademy 0.33.3 → 0.33.4-beta.2
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/bucket.js +1 -1
- package/dist/cli.js +2 -2
- package/dist/constants.js +1 -1
- package/dist/db.js +1 -1
- package/dist/index.d.ts +29 -29
- package/dist/index.js +25 -3
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +12 -3
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/utils.js +2 -2
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/bucket.js
CHANGED
|
@@ -42,7 +42,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
42
42
|
// ../better-auth/package.json
|
|
43
43
|
var package_default = {
|
|
44
44
|
name: "@playcademy/better-auth",
|
|
45
|
-
version: "0.0.
|
|
45
|
+
version: "0.0.29-beta.2",
|
|
46
46
|
type: "module",
|
|
47
47
|
exports: {
|
|
48
48
|
"./server": {
|
package/dist/cli.js
CHANGED
|
@@ -1204,7 +1204,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1204
1204
|
// ../better-auth/package.json
|
|
1205
1205
|
var package_default = {
|
|
1206
1206
|
name: "@playcademy/better-auth",
|
|
1207
|
-
version: "0.0.
|
|
1207
|
+
version: "0.0.29-beta.2",
|
|
1208
1208
|
type: "module",
|
|
1209
1209
|
exports: {
|
|
1210
1210
|
"./server": {
|
|
@@ -3045,7 +3045,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3045
3045
|
import { join as join12 } from "node:path";
|
|
3046
3046
|
|
|
3047
3047
|
// src/version.ts
|
|
3048
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
3048
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.4-beta.2";
|
|
3049
3049
|
|
|
3050
3050
|
// src/lib/init/database.ts
|
|
3051
3051
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
package/dist/constants.js
CHANGED
package/dist/db.js
CHANGED
|
@@ -2333,7 +2333,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
2333
2333
|
// ../better-auth/package.json
|
|
2334
2334
|
var package_default = {
|
|
2335
2335
|
name: "@playcademy/better-auth",
|
|
2336
|
-
version: "0.0.
|
|
2336
|
+
version: "0.0.29-beta.2",
|
|
2337
2337
|
type: "module",
|
|
2338
2338
|
exports: {
|
|
2339
2339
|
"./server": {
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,32 @@ import { GamePermission as GamePermission$2 } from '@playcademy/constants';
|
|
|
3
3
|
import { PlaycademyClient } from '@playcademy/sdk/internal';
|
|
4
4
|
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* TimeBack Configuration Types
|
|
8
|
+
*
|
|
9
|
+
* Configuration interfaces for Organization, Course, Component,
|
|
10
|
+
* Resource, and complete TimeBack setup.
|
|
11
|
+
*
|
|
12
|
+
* @module types/timeback/config
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* All TimeBack resource IDs derived from courseId
|
|
17
|
+
*/
|
|
18
|
+
interface TimebackSourcedIds {
|
|
19
|
+
organization: string;
|
|
20
|
+
course: string;
|
|
21
|
+
component: string;
|
|
22
|
+
resource: string;
|
|
23
|
+
componentResource: string;
|
|
24
|
+
classCore: string;
|
|
25
|
+
classAfterHours: string;
|
|
26
|
+
}
|
|
27
|
+
interface TimebackCourseConfig$1 {
|
|
28
|
+
subject: string;
|
|
29
|
+
grade: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
6
32
|
/**
|
|
7
33
|
* User Types
|
|
8
34
|
*
|
|
@@ -609,7 +635,7 @@ interface ComponentResourceConfig {
|
|
|
609
635
|
/** Lesson type for PowerPath integration */
|
|
610
636
|
lessonType?: LessonType;
|
|
611
637
|
}
|
|
612
|
-
interface TimebackCourseConfig
|
|
638
|
+
interface TimebackCourseConfig {
|
|
613
639
|
subject: string;
|
|
614
640
|
grade: number;
|
|
615
641
|
}
|
|
@@ -643,7 +669,7 @@ interface TimebackBaseConfig {
|
|
|
643
669
|
* Extended course configuration that merges TimebackCourseConfig with per-course overrides.
|
|
644
670
|
* Used in playcademy.config.* to allow per-course customization.
|
|
645
671
|
*/
|
|
646
|
-
interface TimebackCourseConfigWithOverrides extends TimebackCourseConfig
|
|
672
|
+
interface TimebackCourseConfigWithOverrides extends TimebackCourseConfig {
|
|
647
673
|
title?: string;
|
|
648
674
|
courseCode?: string;
|
|
649
675
|
level?: string;
|
|
@@ -831,32 +857,6 @@ interface WorkerDeploymentBundle {
|
|
|
831
857
|
compatibilityFlags?: string[];
|
|
832
858
|
}
|
|
833
859
|
|
|
834
|
-
/**
|
|
835
|
-
* TimeBack Configuration Types
|
|
836
|
-
*
|
|
837
|
-
* Configuration interfaces for Organization, Course, Component,
|
|
838
|
-
* Resource, and complete TimeBack setup.
|
|
839
|
-
*
|
|
840
|
-
* @module types/timeback/config
|
|
841
|
-
*/
|
|
842
|
-
|
|
843
|
-
/**
|
|
844
|
-
* All TimeBack resource IDs derived from courseId
|
|
845
|
-
*/
|
|
846
|
-
interface TimebackSourcedIds {
|
|
847
|
-
organization: string;
|
|
848
|
-
course: string;
|
|
849
|
-
component: string;
|
|
850
|
-
resource: string;
|
|
851
|
-
componentResource: string;
|
|
852
|
-
classCore: string;
|
|
853
|
-
classAfterHours: string;
|
|
854
|
-
}
|
|
855
|
-
interface TimebackCourseConfig {
|
|
856
|
-
subject: string;
|
|
857
|
-
grade: number;
|
|
858
|
-
}
|
|
859
|
-
|
|
860
860
|
/**
|
|
861
861
|
* Browser permissions a game may declare and the hub may delegate to its
|
|
862
862
|
* iframe. Opt-in per game because a delegated grant keys to the hub's
|
|
@@ -2354,4 +2354,4 @@ interface RunShellOptions {
|
|
|
2354
2354
|
env?: NodeJS.ProcessEnv;
|
|
2355
2355
|
}
|
|
2356
2356
|
|
|
2357
|
-
export type { ApiConfig, ApiErrorResponse, ApiKeyListItem, ApiKeyWithSecret, ApiRequestOptions, ApplySecretsOptions, AssetManifest, AuthProfile, AuthStore, AuthStrategy, AvailableUpdate, BackendDiff, BaseKVOptions, BlockedCode, BucketAdapter, BucketDeleteOptions, BucketGetOptions, BucketLevelView, BucketListOptions, BucketMigrateMode, BucketObjectRef, BucketPutOptions, BucketSyncOptions, BucketUploadOptions, BuildDiff, BundleOptions, CallbackServerResult, CheckSecretsOptions, CollectedFile, CompatibilityKey, CompatibilityManifest, ComponentConfig, ComponentResourceConfig, ConfigDiff, CreateApiKeyResponse, CustomRoutesIntegrationOptions, DashboardConfig, DatabaseIntegrationOptions, DependencyCheck, DeployConfig, DeployNewGameOptions, DeployedGameInfo, DeploymentChanges, DeploymentContext, DeploymentDiffOptions, DeploymentPlan, DeploymentResult, DiscoveredDependency, EngineConfig, EngineType, EnvironmentAuthProfiles, GameBackendBundle, GameBackendDeploymentMetadata, GameBackendFeatures, GameDevServerOptions, GameRuntimePaths, GameStore, HashedFile, InstalledVersions, IntegrationChangeDetector, IntegrationChangeDetectors, IntegrationConfigChange, IntegrationsConfig, IntegrationsDiff, KVClearOptions, KVDeleteOptions, KVDumpOptions, KVGetOptions, KVInspectOptions, KVListOptions, KVSeedOptions, KVSetOptions, KVStatsOptions, KeyMetadata, KeyStats, ListedObject, LoadConfigResult, LogEntry, LogFilters, LogHistoryQuery, LogHistoryResult, LogStreamConfig, LogStreamUrlOptions, LoginCredentials, LoginResponse, MissingSecret, OrganizationConfig, PlaycademyConfig, PluginLogger, PreviewOptions, PreviewResponse, ProjectDirectoryInfo, QueueConfig, ResourceConfig, RunShellOptions, RuntimeManifest, ScaffoldResult, SecretCommandOptions, SecretListOptions, SecretPushOptions, SecretsSyncOptions, SecretsSyncResult, SignInResponse, SsoCallbackData, Template, TemplateFramework, TemplateHook, TemplateHookOptions, TemplateSource, TimebackBaseConfig, TimebackCourseConfig, TimebackCourseConfigWithOverrides, TimebackGrade, TimebackIntegrationConfig, TimebackSourcedIds, TimebackSubject, TokenType, UpdateCommand, UpdateExistingGameOptions, Violation, WorkspaceDependencies };
|
|
2357
|
+
export type { ApiConfig, ApiErrorResponse, ApiKeyListItem, ApiKeyWithSecret, ApiRequestOptions, ApplySecretsOptions, AssetManifest, AuthProfile, AuthStore, AuthStrategy, AvailableUpdate, BackendDiff, BaseKVOptions, BlockedCode, BucketAdapter, BucketDeleteOptions, BucketGetOptions, BucketLevelView, BucketListOptions, BucketMigrateMode, BucketObjectRef, BucketPutOptions, BucketSyncOptions, BucketUploadOptions, BuildDiff, BundleOptions, CallbackServerResult, CheckSecretsOptions, CollectedFile, CompatibilityKey, CompatibilityManifest, ComponentConfig, ComponentResourceConfig, ConfigDiff, CreateApiKeyResponse, CustomRoutesIntegrationOptions, DashboardConfig, DatabaseIntegrationOptions, DependencyCheck, DeployConfig, DeployNewGameOptions, DeployedGameInfo, DeploymentChanges, DeploymentContext, DeploymentDiffOptions, DeploymentPlan, DeploymentResult, DiscoveredDependency, EngineConfig, EngineType, EnvironmentAuthProfiles, GameBackendBundle, GameBackendDeploymentMetadata, GameBackendFeatures, GameDevServerOptions, GameRuntimePaths, GameStore, HashedFile, InstalledVersions, IntegrationChangeDetector, IntegrationChangeDetectors, IntegrationConfigChange, IntegrationsConfig, IntegrationsDiff, KVClearOptions, KVDeleteOptions, KVDumpOptions, KVGetOptions, KVInspectOptions, KVListOptions, KVSeedOptions, KVSetOptions, KVStatsOptions, KeyMetadata, KeyStats, ListedObject, LoadConfigResult, LogEntry, LogFilters, LogHistoryQuery, LogHistoryResult, LogStreamConfig, LogStreamUrlOptions, LoginCredentials, LoginResponse, MissingSecret, OrganizationConfig, PlaycademyConfig, PluginLogger, PreviewOptions, PreviewResponse, ProjectDirectoryInfo, QueueConfig, ResourceConfig, RunShellOptions, RuntimeManifest, ScaffoldResult, SecretCommandOptions, SecretListOptions, SecretPushOptions, SecretsSyncOptions, SecretsSyncResult, SignInResponse, SsoCallbackData, Template, TemplateFramework, TemplateHook, TemplateHookOptions, TemplateSource, TimebackBaseConfig, TimebackCourseConfig$1 as TimebackCourseConfig, TimebackCourseConfigWithOverrides, TimebackGrade, TimebackIntegrationConfig, TimebackSourcedIds, TimebackSubject, TokenType, UpdateCommand, UpdateExistingGameOptions, Violation, WorkspaceDependencies };
|
package/dist/index.js
CHANGED
|
@@ -2345,7 +2345,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
2345
2345
|
// ../better-auth/package.json
|
|
2346
2346
|
var package_default = {
|
|
2347
2347
|
name: "@playcademy/better-auth",
|
|
2348
|
-
version: "0.0.
|
|
2348
|
+
version: "0.0.29-beta.2",
|
|
2349
2349
|
type: "module",
|
|
2350
2350
|
exports: {
|
|
2351
2351
|
"./server": {
|
|
@@ -6487,7 +6487,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync2, readFileSync as re
|
|
|
6487
6487
|
import { join as join12 } from "node:path";
|
|
6488
6488
|
|
|
6489
6489
|
// src/version.ts
|
|
6490
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
6490
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.4-beta.2";
|
|
6491
6491
|
|
|
6492
6492
|
// src/lib/init/database.ts
|
|
6493
6493
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -29535,6 +29535,7 @@ import { sql } from "drizzle-orm";
|
|
|
29535
29535
|
import {
|
|
29536
29536
|
check,
|
|
29537
29537
|
doublePrecision,
|
|
29538
|
+
foreignKey,
|
|
29538
29539
|
index as index3,
|
|
29539
29540
|
integer as integer2,
|
|
29540
29541
|
jsonb as jsonb2,
|
|
@@ -29549,6 +29550,10 @@ var gameTimebackIntegrationStatusEnum = pgEnum3("game_timeback_integration_statu
|
|
|
29549
29550
|
"active",
|
|
29550
29551
|
"deactivated"
|
|
29551
29552
|
]);
|
|
29553
|
+
var gameTimebackIntegrationKindEnum = pgEnum3("game_timeback_integration_kind", [
|
|
29554
|
+
"base",
|
|
29555
|
+
"hole_filling"
|
|
29556
|
+
]);
|
|
29552
29557
|
var gameTimebackAssessmentPurposeEnum = pgEnum3(
|
|
29553
29558
|
"game_timeback_assessment_purpose",
|
|
29554
29559
|
ASSESSMENT_PURPOSES
|
|
@@ -29567,6 +29572,8 @@ var gameTimebackIntegrations = pgTable3(
|
|
|
29567
29572
|
grade: integer2("grade").notNull(),
|
|
29568
29573
|
subject: text3("subject").notNull(),
|
|
29569
29574
|
status: gameTimebackIntegrationStatusEnum("status"),
|
|
29575
|
+
kind: gameTimebackIntegrationKindEnum("kind").notNull().default("base"),
|
|
29576
|
+
baseIntegrationId: uuid2("base_integration_id"),
|
|
29570
29577
|
totalXp: integer2("total_xp"),
|
|
29571
29578
|
lastVerifiedAt: timestamp3("last_verified_at", { withTimezone: true }),
|
|
29572
29579
|
deactivatedAt: timestamp3("deactivated_at", { withTimezone: true }),
|
|
@@ -29575,7 +29582,22 @@ var gameTimebackIntegrations = pgTable3(
|
|
|
29575
29582
|
updatedAt: timestamp3("updated_at", { withTimezone: true }).notNull().defaultNow()
|
|
29576
29583
|
},
|
|
29577
29584
|
(table2) => [
|
|
29578
|
-
uniqueIndex3("game_timeback_integrations_game_grade_subject_idx").on(table2.gameId, table2.grade, table2.subject).where(sql`${table2.status} IS DISTINCT FROM 'deactivated'`)
|
|
29585
|
+
uniqueIndex3("game_timeback_integrations_game_grade_subject_idx").on(table2.gameId, table2.grade, table2.subject).where(sql`${table2.status} IS DISTINCT FROM 'deactivated' AND ${table2.kind} = 'base'`),
|
|
29586
|
+
uniqueIndex3("game_timeback_integrations_hole_filling_course_idx").on(table2.gameId, table2.courseId).where(sql`${table2.kind} = 'hole_filling'`),
|
|
29587
|
+
index3("game_timeback_integrations_base_integration_idx").on(table2.baseIntegrationId),
|
|
29588
|
+
foreignKey({
|
|
29589
|
+
name: "game_timeback_integrations_base_integration_id_fk",
|
|
29590
|
+
columns: [table2.baseIntegrationId],
|
|
29591
|
+
foreignColumns: [table2.id]
|
|
29592
|
+
}),
|
|
29593
|
+
check(
|
|
29594
|
+
"game_timeback_integrations_kind_base_check",
|
|
29595
|
+
sql`(
|
|
29596
|
+
(${table2.kind}::text = 'base' AND ${table2.baseIntegrationId} IS NULL)
|
|
29597
|
+
OR
|
|
29598
|
+
(${table2.kind}::text = 'hole_filling' AND ${table2.baseIntegrationId} IS NOT NULL)
|
|
29599
|
+
)`
|
|
29600
|
+
)
|
|
29579
29601
|
]
|
|
29580
29602
|
);
|
|
29581
29603
|
var gameTimebackAssessmentTests = pgTable3(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.33.
|
|
3
|
-
"sdkVersion": "0.24.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.33.4-beta.2",
|
|
3
|
+
"sdkVersion": "0.24.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "63939c747740",
|
|
5
|
+
"inputFingerprint": "63939c7477404947658a9f7657d3c1207c93dcc8968e0256626d75cc5d2792cd",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
|
@@ -1214,6 +1214,13 @@ var init_activity_tracker = __esm({
|
|
|
1214
1214
|
}
|
|
1215
1215
|
});
|
|
1216
1216
|
|
|
1217
|
+
// ../sdk/src/core/timeback/course-hint.ts
|
|
1218
|
+
var init_course_hint = __esm({
|
|
1219
|
+
"../sdk/src/core/timeback/course-hint.ts"() {
|
|
1220
|
+
"use strict";
|
|
1221
|
+
}
|
|
1222
|
+
});
|
|
1223
|
+
|
|
1217
1224
|
// ../sdk/src/namespaces/game/embed.ts
|
|
1218
1225
|
var init_embed2 = __esm({
|
|
1219
1226
|
"../sdk/src/namespaces/game/embed.ts"() {
|
|
@@ -1227,6 +1234,7 @@ var init_embed2 = __esm({
|
|
|
1227
1234
|
init_resume_store();
|
|
1228
1235
|
init_session();
|
|
1229
1236
|
init_activity_tracker();
|
|
1237
|
+
init_course_hint();
|
|
1230
1238
|
init_keepalive();
|
|
1231
1239
|
}
|
|
1232
1240
|
});
|
|
@@ -1321,6 +1329,7 @@ var init_engine = __esm({
|
|
|
1321
1329
|
init_src();
|
|
1322
1330
|
init_ttl_cache();
|
|
1323
1331
|
init_activity_tracker();
|
|
1332
|
+
init_course_hint();
|
|
1324
1333
|
init_user();
|
|
1325
1334
|
}
|
|
1326
1335
|
});
|
|
@@ -14358,9 +14367,9 @@ var init_list = __esm({
|
|
|
14358
14367
|
// ../edge-play/src/game/lib/metadata.ts
|
|
14359
14368
|
function getRuntimeMetadata() {
|
|
14360
14369
|
return {
|
|
14361
|
-
cliVersion: true ? "0.33.
|
|
14362
|
-
sdkVersion: true ? "0.24.
|
|
14363
|
-
buildId: true ? "
|
|
14370
|
+
cliVersion: true ? "0.33.4-beta.2" : "0.0.0-dev",
|
|
14371
|
+
sdkVersion: true ? "0.24.1-beta.2" : "0.0.0-dev",
|
|
14372
|
+
buildId: true ? "63939c747740" : "dev-source"
|
|
14364
14373
|
};
|
|
14365
14374
|
}
|
|
14366
14375
|
var init_metadata = __esm({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.33.
|
|
3
|
-
"sdkVersion": "0.24.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.33.4-beta.2",
|
|
3
|
+
"sdkVersion": "0.24.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "63939c747740",
|
|
5
|
+
"inputFingerprint": "63939c7477404947658a9f7657d3c1207c93dcc8968e0256626d75cc5d2792cd",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
package/dist/utils.js
CHANGED
|
@@ -401,7 +401,7 @@ var DASHBOARD_API_ROUTES_DIRECTORY = "api";
|
|
|
401
401
|
// ../better-auth/package.json
|
|
402
402
|
var package_default = {
|
|
403
403
|
name: "@playcademy/better-auth",
|
|
404
|
-
version: "0.0.
|
|
404
|
+
version: "0.0.29-beta.2",
|
|
405
405
|
type: "module",
|
|
406
406
|
exports: {
|
|
407
407
|
"./server": {
|
|
@@ -2890,7 +2890,7 @@ import { existsSync as existsSync10, mkdirSync as mkdirSync2, writeFileSync as w
|
|
|
2890
2890
|
import { dirname as dirname4, join as join14 } from "node:path";
|
|
2891
2891
|
|
|
2892
2892
|
// src/version.ts
|
|
2893
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
2893
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.4-beta.2";
|
|
2894
2894
|
|
|
2895
2895
|
// src/lib/build/binary-resource.ts
|
|
2896
2896
|
function writeFileTree(baseDir, files) {
|
package/dist/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __pcCreateRequire } from 'node:module'; const require = __pcCreateRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/version.ts
|
|
4
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
4
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.4-beta.2";
|
|
5
5
|
export {
|
|
6
6
|
cliVersion
|
|
7
7
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playcademy",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.4-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@inquirer/prompts": "^7.8.6",
|
|
58
|
-
"@playcademy/sdk": "0.24.
|
|
58
|
+
"@playcademy/sdk": "0.24.1-beta.2",
|
|
59
59
|
"chokidar": "^4.0.3",
|
|
60
60
|
"colorette": "^2.0.20",
|
|
61
61
|
"commander": "^14.0.1",
|