@mpgd/cli 0.33.2 → 0.35.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.
- package/dist/capacitor-shell-starter.d.ts +40 -0
- package/dist/capacitor-shell-starter.js +2130 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +171 -8
- package/dist/kit-upgrade.d.ts +39 -0
- package/dist/kit-upgrade.js +486 -0
- package/dist/native-shell-identity.d.ts +19 -0
- package/dist/native-shell-identity.js +490 -0
- package/dist/production-target-readiness.d.ts +1 -0
- package/dist/production-target-readiness.js +1 -1
- package/package.json +16 -13
- package/templates/phaser-game/package.json +1 -0
- package/templates/phaser-game/src/styles.css +6 -4
- package/templates/phaser-game/vite.runtime-target-config.ts +5 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { renderGameAcceptanceMarkdown, resolveGameAcceptanceReleaseManifestFile, runGameAcceptance, defaultGameAcceptanceCommandTimeoutMs, maximumGameplayE2EReportBytes, type GameAcceptanceCommandResult, type GameAcceptanceCommandRunner, type GameAcceptanceReport, type GameAcceptanceStatus, type GameAcceptanceStep, type GameAcceptanceStepResult, type GameAcceptanceStepStatus, type RunGameAcceptanceInput, type RunGameAcceptanceResult, } from './game-acceptance.js';
|
|
2
|
+
export { applyCapacitorShellStarter, materializeCapacitorShellStarter, planCapacitorShellStarter, type CapacitorShellCommandRunner, type CapacitorShellStarterInput, type CapacitorShellStarterPlan, } from './capacitor-shell-starter.js';
|
|
2
3
|
export { createBrowserGameplayE2EDriver, type BrowserGameplayE2EInspectInput, type BrowserGameplayE2EPage, type BrowserGameplayE2EScreenshotOptions, type BrowserGameplayE2EViewport, type CreateBrowserGameplayE2EDriverInput, } from './browser-gameplay-e2e.js';
|
|
3
4
|
export { collectGameplayE2EPathEvidence, defaultGameplayE2EReportFile, maximumGameplayE2EStates, parseGameplayE2EPlan, readGameplayE2EPlan, renderGameplayE2EMarkdown, resolveGameplayE2EReportFile, runGameplayE2E, type GameplayE2EAction, type GameplayE2EActionResult, type GameplayE2EDriver, type GameplayE2EHashLimits, type GameplayE2EInputAction, type GameplayE2EObservation, type GameplayE2EPauseResumeAction, type GameplayE2EPathEvidence, type GameplayE2EPlan, type GameplayE2EReport, type GameplayE2EResultStatus, type GameplayE2EState, type GameplayE2EStateResult, type GameplayE2EStatus, type RunGameplayE2EInput, type RunGameplayE2EResult, } from './gameplay-e2e.js';
|
|
4
5
|
export { cloudflarePagesDeploymentProfiles, hostedPwaDeploymentHosts, isSupportedHostedPwaProfile, verifyHostedPwaDeployment, type CloudflarePagesDeploymentProfile, type HostedPwaDeploymentHost, type HostedPwaDeploymentVerification, type VerifyHostedPwaDeploymentInput, } from './hosted-pwa-deployment.js';
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import resources from '@gunshi/resources';
|
|
|
8
8
|
import { cli } from 'gunshi';
|
|
9
9
|
import { buildAssetPacks } from './asset-pack-build.js';
|
|
10
10
|
import { verifyAssetPackDelivery } from './asset-pack-verify.js';
|
|
11
|
+
import { materializeCapacitorShellStarter, planCapacitorShellStarter, } from './capacitor-shell-starter.js';
|
|
11
12
|
import { normalizeConfiguredBuildTargets, normalizeBuildTarget as normalizeConfiguredTargetName, supportedBuildTargets, } from './build-targets.js';
|
|
12
13
|
import { escapeMarkdownInline as escapeEvidenceMarkdownInline, writeEvidenceReportFiles, } from './evidence-io.js';
|
|
13
14
|
import { defaultGameAcceptanceCommandTimeoutMs, resolveGameAcceptanceReleaseManifestFile, runGameAcceptance, } from './game-acceptance.js';
|
|
@@ -16,10 +17,12 @@ import { cloudflarePagesDeploymentProfiles, hostedPwaDeploymentHosts, verifyHost
|
|
|
16
17
|
import { createMicrosoftStorePackageAcceptanceRuntime, runMicrosoftStorePackageAcceptance, } from './microsoft-store-package-acceptance.js';
|
|
17
18
|
import { runMicrosoftStorePackageGeneration } from './microsoft-store-package-generation.js';
|
|
18
19
|
import { defaultMpgdKitPath, initializeMicrosoftStoreStarter, listMicrosoftStoreInitializerTemplateFiles, prepareBaseGameTemplateFile, resolveMicrosoftStoreAdapterDependencyVersion, } from './microsoft-store-starter.js';
|
|
20
|
+
import { applyKitUpgrade, planKitUpgrade } from './kit-upgrade.js';
|
|
19
21
|
import { runMicrosoftStoreSubmissionPreflight } from './microsoft-store-submission.js';
|
|
20
22
|
import { defaultOfflinePlaytestArtifactDir, defaultOfflinePlaytestMaximumBytes, defaultOfflinePlaytestOutputDir, runOfflinePlaytestPackaging, } from './offline-playtest.js';
|
|
21
23
|
import { targetConfigExtensionsFileEnv } from './target-config-env.js';
|
|
22
24
|
export { renderGameAcceptanceMarkdown, resolveGameAcceptanceReleaseManifestFile, runGameAcceptance, defaultGameAcceptanceCommandTimeoutMs, maximumGameplayE2EReportBytes, } from './game-acceptance.js';
|
|
25
|
+
export { applyCapacitorShellStarter, materializeCapacitorShellStarter, planCapacitorShellStarter, } from './capacitor-shell-starter.js';
|
|
23
26
|
export { createBrowserGameplayE2EDriver, } from './browser-gameplay-e2e.js';
|
|
24
27
|
export { collectGameplayE2EPathEvidence, defaultGameplayE2EReportFile, maximumGameplayE2EStates, parseGameplayE2EPlan, readGameplayE2EPlan, renderGameplayE2EMarkdown, resolveGameplayE2EReportFile, runGameplayE2E, } from './gameplay-e2e.js';
|
|
25
28
|
export { cloudflarePagesDeploymentProfiles, hostedPwaDeploymentHosts, isSupportedHostedPwaProfile, verifyHostedPwaDeployment, } from './hosted-pwa-deployment.js';
|
|
@@ -133,7 +136,7 @@ export async function runMpgdCli(args) {
|
|
|
133
136
|
// partial document. Every other command keeps the default rendering.
|
|
134
137
|
renderHeader: async (ctx) => {
|
|
135
138
|
const values = ctx.values;
|
|
136
|
-
if (ctx.name === 'verify-delivery' && values.json === true) {
|
|
139
|
+
if ((ctx.name === 'verify-delivery' || ctx.name === 'upgrade') && values.json === true) {
|
|
137
140
|
return '';
|
|
138
141
|
}
|
|
139
142
|
const title = ctx.env.description || ctx.env.name || '';
|
|
@@ -144,7 +147,7 @@ export async function runMpgdCli(args) {
|
|
|
144
147
|
renderValidationErrors: async (ctx, error) => {
|
|
145
148
|
const messages = error.errors.map((entry) => String(entry.message)).join('\n');
|
|
146
149
|
const values = ctx.values;
|
|
147
|
-
if (ctx.name === 'verify-delivery' && values.json === true) {
|
|
150
|
+
if ((ctx.name === 'verify-delivery' || ctx.name === 'upgrade') && values.json === true) {
|
|
148
151
|
process.stderr.write(`${messages}\n`);
|
|
149
152
|
return '';
|
|
150
153
|
}
|
|
@@ -1117,8 +1120,8 @@ const targetCommand = defineI18n({
|
|
|
1117
1120
|
ko: '충돌 파일을 덮어쓰지 않고 기존 게임에 선택적 타깃 워크플로를 초기화합니다.',
|
|
1118
1121
|
}, {
|
|
1119
1122
|
target: {
|
|
1120
|
-
en: 'Target to initialize
|
|
1121
|
-
ko: '초기화할
|
|
1123
|
+
en: 'Target to initialize: microsoft-store or capacitor.',
|
|
1124
|
+
ko: '초기화할 타깃: microsoft-store 또는 capacitor.',
|
|
1122
1125
|
},
|
|
1123
1126
|
game: {
|
|
1124
1127
|
en: 'Existing game root. Defaults to the current directory.',
|
|
@@ -1132,12 +1135,32 @@ const targetCommand = defineI18n({
|
|
|
1132
1135
|
en: 'Validate and print planned file changes without writing them.',
|
|
1133
1136
|
ko: '파일을 쓰지 않고 예정 변경을 검증하고 출력합니다.',
|
|
1134
1137
|
},
|
|
1138
|
+
'app-id': {
|
|
1139
|
+
en: 'Game-owned Android package ID and iOS bundle ID.',
|
|
1140
|
+
ko: '게임 소유 Android 패키지 ID 및 iOS 번들 ID.',
|
|
1141
|
+
},
|
|
1142
|
+
'display-name': {
|
|
1143
|
+
en: 'Native application display name.',
|
|
1144
|
+
ko: '네이티브 앱 표시 이름.',
|
|
1145
|
+
},
|
|
1146
|
+
'icon-source': {
|
|
1147
|
+
en: 'Game-owned native icon source file.',
|
|
1148
|
+
ko: '게임 소유 네이티브 아이콘 원본 파일.',
|
|
1149
|
+
},
|
|
1150
|
+
'backend-url': {
|
|
1151
|
+
en: 'Production HTTPS Game Services base URL.',
|
|
1152
|
+
ko: '프로덕션 HTTPS Game Services 기본 URL.',
|
|
1153
|
+
},
|
|
1154
|
+
providers: {
|
|
1155
|
+
en: 'Comma-separated requested provider IDs; this does not install SDKs.',
|
|
1156
|
+
ko: '쉼표로 구분한 요청 provider ID. SDK를 설치하지는 않습니다.',
|
|
1157
|
+
},
|
|
1135
1158
|
}),
|
|
1136
1159
|
args: {
|
|
1137
1160
|
target: {
|
|
1138
1161
|
type: 'positional',
|
|
1139
1162
|
required: true,
|
|
1140
|
-
description: 'Target to initialize
|
|
1163
|
+
description: 'Target to initialize: microsoft-store or capacitor.',
|
|
1141
1164
|
},
|
|
1142
1165
|
game: {
|
|
1143
1166
|
type: 'string',
|
|
@@ -1155,15 +1178,86 @@ const targetCommand = defineI18n({
|
|
|
1155
1178
|
required: false,
|
|
1156
1179
|
description: 'Validate and print planned file changes without writing them.',
|
|
1157
1180
|
},
|
|
1181
|
+
'app-id': {
|
|
1182
|
+
type: 'string',
|
|
1183
|
+
required: false,
|
|
1184
|
+
description: 'Game-owned Android package ID and iOS bundle ID.',
|
|
1185
|
+
},
|
|
1186
|
+
'display-name': {
|
|
1187
|
+
type: 'string',
|
|
1188
|
+
required: false,
|
|
1189
|
+
description: 'Native application display name.',
|
|
1190
|
+
},
|
|
1191
|
+
'icon-source': {
|
|
1192
|
+
type: 'string',
|
|
1193
|
+
required: false,
|
|
1194
|
+
description: 'Game-owned native icon source file.',
|
|
1195
|
+
},
|
|
1196
|
+
'backend-url': {
|
|
1197
|
+
type: 'string',
|
|
1198
|
+
required: false,
|
|
1199
|
+
description: 'Production HTTPS Game Services base URL.',
|
|
1200
|
+
},
|
|
1201
|
+
providers: {
|
|
1202
|
+
type: 'string',
|
|
1203
|
+
required: false,
|
|
1204
|
+
description: 'Comma-separated requested provider IDs; this does not install SDKs.',
|
|
1205
|
+
},
|
|
1158
1206
|
},
|
|
1159
1207
|
run: (ctx) => {
|
|
1160
1208
|
const positionals = readLocalPositionals(ctx.positionals, ['target', 'init']);
|
|
1161
1209
|
const requestedTarget = readRequiredPositional(positionals, 0, 'target');
|
|
1210
|
+
const gameRoot = path.resolve(readOptionalString(ctx.values.game) ?? '.');
|
|
1211
|
+
const dryRun = ctx.values['dry-run'] === true;
|
|
1212
|
+
if (requestedTarget === 'capacitor') {
|
|
1213
|
+
if (ctx.values['kit-path'] !== undefined) {
|
|
1214
|
+
throw new Error('--kit-path is not used by the game-owned Capacitor initializer.');
|
|
1215
|
+
}
|
|
1216
|
+
const appId = readOptionalString(ctx.values['app-id']);
|
|
1217
|
+
const displayName = readOptionalString(ctx.values['display-name']);
|
|
1218
|
+
if (appId === undefined || displayName === undefined) {
|
|
1219
|
+
throw new Error('Capacitor initialization requires --app-id and --display-name.');
|
|
1220
|
+
}
|
|
1221
|
+
const iconSource = readOptionalString(ctx.values['icon-source']);
|
|
1222
|
+
const backendUrl = readOptionalString(ctx.values['backend-url']);
|
|
1223
|
+
const selectedProviders = readOptionalString(ctx.values.providers);
|
|
1224
|
+
const plan = planCapacitorShellStarter({
|
|
1225
|
+
gameRoot,
|
|
1226
|
+
appId,
|
|
1227
|
+
displayName,
|
|
1228
|
+
...(iconSource === undefined ? {} : { iconSource }),
|
|
1229
|
+
...(backendUrl === undefined ? {} : { backendUrl }),
|
|
1230
|
+
...(selectedProviders === undefined ? {} : {
|
|
1231
|
+
providerIds: selectedProviders.split(',').map((id) => id.trim()),
|
|
1232
|
+
}),
|
|
1233
|
+
});
|
|
1234
|
+
if (!dryRun) {
|
|
1235
|
+
materializeCapacitorShellStarter(plan);
|
|
1236
|
+
}
|
|
1237
|
+
console.info(`${dryRun ? 'Would update' : 'Updated'} game-owned Capacitor shell: ${plan.changedFiles.length} file(s).`);
|
|
1238
|
+
for (const file of plan.changedFiles) {
|
|
1239
|
+
console.info(`- ${file}`);
|
|
1240
|
+
}
|
|
1241
|
+
for (const platform of plan.nativePlatformsToAdd) {
|
|
1242
|
+
console.info(`${dryRun ? 'Would add' : 'Added'} native platform: ${platform}`);
|
|
1243
|
+
}
|
|
1244
|
+
console.info('File count covers managed shell files only; pnpm may also update root or shell lockfiles.');
|
|
1245
|
+
if (!dryRun) {
|
|
1246
|
+
console.info('Production native builds still require release identity and signing checks.');
|
|
1247
|
+
}
|
|
1248
|
+
return;
|
|
1249
|
+
}
|
|
1162
1250
|
const target = normalizeConfiguredBuildTarget(requestedTarget);
|
|
1163
1251
|
if (target !== 'microsoft-store') {
|
|
1164
1252
|
throw new Error(`Target initialization is only available for microsoft-store; received: ${requestedTarget}`);
|
|
1165
1253
|
}
|
|
1166
|
-
const
|
|
1254
|
+
for (const option of [
|
|
1255
|
+
'app-id', 'display-name', 'icon-source', 'backend-url', 'providers',
|
|
1256
|
+
]) {
|
|
1257
|
+
if (ctx.values[option] !== undefined) {
|
|
1258
|
+
throw new Error(`--${option} is only available for capacitor initialization.`);
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1167
1261
|
const configuredKitPath = readOptionalString(ctx.values['kit-path']);
|
|
1168
1262
|
const resolvedKitPath = configuredKitPath === undefined
|
|
1169
1263
|
? detectedKitRoot
|
|
@@ -1172,7 +1266,6 @@ const targetCommand = defineI18n({
|
|
|
1172
1266
|
const defaultKitPath = resolvedKitPath === undefined
|
|
1173
1267
|
? defaultMpgdKitPath
|
|
1174
1268
|
: toTemplatePath(path.relative(canonicalGameRoot, resolvedKitPath) || '.');
|
|
1175
|
-
const dryRun = ctx.values['dry-run'] === true;
|
|
1176
1269
|
const adapterDependencyVersion = resolveMicrosoftStoreAdapterDependencyVersion(requireMpgdDependencyVersion(resolveMpgdDependencyVersionReplacements({
|
|
1177
1270
|
workspace: false,
|
|
1178
1271
|
...(resolvedKitPath === undefined ? {} : { kitPath: resolvedKitPath }),
|
|
@@ -1950,6 +2043,76 @@ const kitCommand = defineI18n({
|
|
|
1950
2043
|
ko: '현재 mpgd-kit 체크아웃을 점검합니다.',
|
|
1951
2044
|
}),
|
|
1952
2045
|
subCommands: {
|
|
2046
|
+
upgrade: defineI18n({
|
|
2047
|
+
name: 'upgrade',
|
|
2048
|
+
description: 'Plan or apply the latest published Kit package versions for a game.',
|
|
2049
|
+
resource: commandResource({
|
|
2050
|
+
base: {
|
|
2051
|
+
en: 'Plan or apply the latest published Kit package versions for a game.',
|
|
2052
|
+
ko: '게임에 배포된 최신 Kit 패키지 버전 적용을 계획하거나 실행합니다.',
|
|
2053
|
+
},
|
|
2054
|
+
args: {
|
|
2055
|
+
game: {
|
|
2056
|
+
en: 'Game directory containing package.json and optional mpgd.targets.json.',
|
|
2057
|
+
ko: 'package.json과 선택적 mpgd.targets.json이 있는 게임 디렉터리.',
|
|
2058
|
+
},
|
|
2059
|
+
'targets-file': {
|
|
2060
|
+
en: 'Optional game-owned target configuration file.',
|
|
2061
|
+
ko: '선택적 게임 소유 타깃 구성 파일.',
|
|
2062
|
+
},
|
|
2063
|
+
apply: {
|
|
2064
|
+
en: 'Write the planned manifests and pnpm lockfiles.',
|
|
2065
|
+
ko: '계획된 의존성 선언과 pnpm 락파일을 갱신합니다.',
|
|
2066
|
+
},
|
|
2067
|
+
json: {
|
|
2068
|
+
en: 'Write one machine-readable JSON document to stdout.',
|
|
2069
|
+
ko: '표준 출력에 기계 판독용 JSON 문서 하나를 출력합니다.',
|
|
2070
|
+
},
|
|
2071
|
+
},
|
|
2072
|
+
}),
|
|
2073
|
+
args: {
|
|
2074
|
+
game: { type: 'string', required: false, default: '.', description: 'Game directory.' },
|
|
2075
|
+
'targets-file': { type: 'string', required: false, description: 'Target config file.' },
|
|
2076
|
+
apply: { type: 'boolean', required: false, description: 'Apply the upgrade plan.' },
|
|
2077
|
+
json: { type: 'boolean', required: false, description: 'Print JSON.' },
|
|
2078
|
+
},
|
|
2079
|
+
run: async (ctx) => {
|
|
2080
|
+
const game = readOptionalString(ctx.values.game) ?? '.';
|
|
2081
|
+
const plan = await planKitUpgrade(game, undefined, readOptionalString(ctx.values['targets-file']));
|
|
2082
|
+
const result = ctx.values.apply === true && plan.blockers.length === 0
|
|
2083
|
+
? applyKitUpgrade(plan)
|
|
2084
|
+
: undefined;
|
|
2085
|
+
if (ctx.values.json === true) {
|
|
2086
|
+
process.stdout.write(JSON.stringify({ plan, result: result ?? null }, null, 2) + '\n');
|
|
2087
|
+
}
|
|
2088
|
+
else {
|
|
2089
|
+
console.info('Kit upgrade plan for ' + plan.gameRoot);
|
|
2090
|
+
for (const update of plan.updates) {
|
|
2091
|
+
console.info(' ' + path.relative(plan.gameRoot, update.manifest)
|
|
2092
|
+
+ ': ' + update.packageName + ' ' + update.current + ' -> ' + update.next);
|
|
2093
|
+
}
|
|
2094
|
+
if (plan.updates.length === 0) {
|
|
2095
|
+
console.info(' Already current for published npm latest tags.');
|
|
2096
|
+
}
|
|
2097
|
+
for (const note of plan.notes) {
|
|
2098
|
+
console.info('Note: ' + note);
|
|
2099
|
+
}
|
|
2100
|
+
for (const blocker of plan.blockers) {
|
|
2101
|
+
console.error('Blocked: ' + blocker);
|
|
2102
|
+
}
|
|
2103
|
+
if (result !== undefined) {
|
|
2104
|
+
console.info('Updated ' + result.manifests.length + ' manifest(s) and '
|
|
2105
|
+
+ result.lockfiles.length + ' lockfile(s). Run target checks before release.');
|
|
2106
|
+
}
|
|
2107
|
+
else if (plan.updates.length > 0 && plan.blockers.length === 0) {
|
|
2108
|
+
console.info('Run again with --apply to update manifests and pnpm lockfiles.');
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2111
|
+
if (plan.blockers.length > 0) {
|
|
2112
|
+
process.exitCode = 1;
|
|
2113
|
+
}
|
|
2114
|
+
},
|
|
2115
|
+
}),
|
|
1953
2116
|
doctor: defineI18n({
|
|
1954
2117
|
name: 'doctor',
|
|
1955
2118
|
description: 'Print CLI, kit, template, and target-wrapper status.',
|
|
@@ -1968,7 +2131,7 @@ const kitCommand = defineI18n({
|
|
|
1968
2131
|
}),
|
|
1969
2132
|
},
|
|
1970
2133
|
run: () => {
|
|
1971
|
-
console.info('Use "mpgd kit doctor".');
|
|
2134
|
+
console.info('Use "mpgd kit doctor" or "mpgd kit upgrade --game <directory> [--apply]".');
|
|
1972
2135
|
},
|
|
1973
2136
|
});
|
|
1974
2137
|
function commandResource(description, args = {}) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
declare const dependencySections: readonly ['dependencies', 'devDependencies', 'optionalDependencies'];
|
|
2
|
+
type DependencySection = (typeof dependencySections)[number];
|
|
3
|
+
export interface PublishedKitPackage {
|
|
4
|
+
readonly version: string;
|
|
5
|
+
readonly peerDependencies?: Readonly<Record<string, string>>;
|
|
6
|
+
readonly optionalPeerDependencies?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export type LatestKitPackageLookup = (name: string, gameRoot: string) => Promise<PublishedKitPackage>;
|
|
9
|
+
export interface KitUpgradeUpdate {
|
|
10
|
+
readonly manifest: string;
|
|
11
|
+
readonly section: DependencySection;
|
|
12
|
+
readonly packageName: string;
|
|
13
|
+
readonly current: string;
|
|
14
|
+
readonly next: string;
|
|
15
|
+
readonly latestVersion: string;
|
|
16
|
+
}
|
|
17
|
+
export interface KitUpgradePlan {
|
|
18
|
+
readonly gameRoot: string;
|
|
19
|
+
readonly updates: readonly KitUpgradeUpdate[];
|
|
20
|
+
readonly blockers: readonly string[];
|
|
21
|
+
readonly notes: readonly string[];
|
|
22
|
+
readonly manifestDigests: Readonly<Record<string, string>>;
|
|
23
|
+
readonly targetConfigDigest: {
|
|
24
|
+
readonly file: string;
|
|
25
|
+
readonly sha256: string | null;
|
|
26
|
+
};
|
|
27
|
+
readonly lockfileDigests: Readonly<Record<string, string>>;
|
|
28
|
+
readonly workspaceRoots: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export interface KitUpgradeApplyResult {
|
|
31
|
+
readonly manifests: readonly string[];
|
|
32
|
+
readonly lockfiles: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
export type KitUpgradeLockfileRunner = (workspaceRoot: string) => void;
|
|
35
|
+
export declare function planKitUpgrade(gameDirectory: string, lookup?: LatestKitPackageLookup, targetsFileName?: string): Promise<KitUpgradePlan>;
|
|
36
|
+
export declare function applyKitUpgrade(plan: KitUpgradePlan, runLockfileUpdate?: KitUpgradeLockfileRunner): KitUpgradeApplyResult;
|
|
37
|
+
export declare function lookupPublishedKitPackage(packageName: string, gameRoot: string): Promise<PublishedKitPackage>;
|
|
38
|
+
export declare function parsePublishedKitPackageResponse(source: string, packageName: string): PublishedKitPackage;
|
|
39
|
+
export {};
|