shipthis 0.1.39 → 0.1.42
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/README.md +58 -0
- package/assets/markdown/confirm-change-android-build-method.md.ejs +13 -0
- package/dist/{AppleBundleIdDetails-Ck7iAjMb.js → AppleBundleIdDetails-jDq3gYbk.js} +7 -5
- package/dist/{Command-C84QiOWP.js → Command-cVo97lkQ.js} +2 -1
- package/dist/{CommandGame-CsM9GE5Q.js → CommandGame-BwudtYCO.js} +2 -2
- package/dist/{Create-Dx1nEKmS.js → Create-By4NsPEI.js} +3 -1
- package/dist/{GameStatus-B4WBgoLs.js → GameStatus-C59zQE1H.js} +3 -1
- package/dist/{Import-BC5XgwRT.js → Import-DTcVM-T-.js} +4 -2
- package/dist/{JobLogTail-mBXpeWMu.js → JobLogTail-BzisGkY8.js} +30 -16
- package/dist/{JobProgress-KZ6EkMFi.js → JobProgress-DAnhaTho.js} +21 -9
- package/dist/{JobStatusTable-BYIxTt0d.js → JobStatusTable-BYEi8dtD.js} +3 -2
- package/dist/{ProjectCredentialsTable-DSy1YIWX.js → ProjectCredentialsTable-NZf3V39z.js} +2 -2
- package/dist/{UserCredentialsTable-qNByRE84.js → UserCredentialsTable-Dp884nYO.js} +2 -1
- package/dist/{baseAppleCommand-CdROzhyU.js → baseAppleCommand-DewNWX3L.js} +1 -1
- package/dist/baseCommand-CscxrTMI.js +757 -0
- package/dist/{baseGameAndroidCommand-B21zS0MN.js → baseGameAndroidCommand-CEcDz5P2.js} +4 -2
- package/dist/{index-Cv-92xRd.js → baseGameCommand-BKvHM3h_.js} +19 -755
- package/dist/commands/apiKey/create.js +7 -7
- package/dist/commands/apiKey/list.js +7 -7
- package/dist/commands/apiKey/revoke.js +7 -7
- package/dist/commands/apple/apiKey/create.js +14 -14
- package/dist/commands/apple/apiKey/delete.js +8 -8
- package/dist/commands/apple/apiKey/export.js +14 -14
- package/dist/commands/apple/apiKey/import.js +14 -14
- package/dist/commands/apple/apiKey/status.js +13 -13
- package/dist/commands/apple/certificate/create.js +14 -14
- package/dist/commands/apple/certificate/delete.js +8 -8
- package/dist/commands/apple/certificate/export.js +14 -14
- package/dist/commands/apple/certificate/import.js +14 -14
- package/dist/commands/apple/certificate/status.js +13 -13
- package/dist/commands/apple/login.js +5 -5
- package/dist/commands/apple/status.js +13 -13
- package/dist/commands/dashboard.js +8 -8
- package/dist/commands/game/android/apiKey/connect.js +12 -12
- package/dist/commands/game/android/apiKey/create.js +14 -14
- package/dist/commands/game/android/apiKey/delete.js +7 -7
- package/dist/commands/game/android/apiKey/export.js +14 -14
- package/dist/commands/game/android/apiKey/import.js +14 -14
- package/dist/commands/game/android/apiKey/invite.js +20 -20
- package/dist/commands/game/android/apiKey/policy.js +9 -9
- package/dist/commands/game/android/apiKey/status.js +14 -14
- package/dist/commands/game/android/keyStore/create.js +11 -11
- package/dist/commands/game/android/keyStore/delete.js +7 -7
- package/dist/commands/game/android/keyStore/export.js +13 -13
- package/dist/commands/game/android/keyStore/import.js +16 -16
- package/dist/commands/game/android/keyStore/status.js +16 -16
- package/dist/commands/game/android/status.js +6 -6
- package/dist/commands/game/build/download.js +7 -7
- package/dist/commands/game/build/list.js +12 -12
- package/dist/commands/game/create.js +5 -5
- package/dist/commands/game/details.js +16 -13
- package/dist/commands/game/export.js +5 -5
- package/dist/commands/game/ios/app/addTester.js +9 -9
- package/dist/commands/game/ios/app/create.js +10 -9
- package/dist/commands/game/ios/app/status.js +14 -14
- package/dist/commands/game/ios/app/sync.js +12 -12
- package/dist/commands/game/ios/profile/create.js +10 -10
- package/dist/commands/game/ios/profile/delete.js +8 -8
- package/dist/commands/game/ios/profile/export.js +13 -13
- package/dist/commands/game/ios/profile/import.js +13 -13
- package/dist/commands/game/ios/profile/status.js +14 -14
- package/dist/commands/game/ios/status.js +18 -18
- package/dist/commands/game/ios/wizard.js +8 -8
- package/dist/commands/game/job/list.js +7 -7
- package/dist/commands/game/job/status.js +14 -14
- package/dist/commands/game/list.js +7 -7
- package/dist/commands/game/ship.js +30 -13
- package/dist/commands/game/status.js +14 -14
- package/dist/commands/game/wizard.js +87 -37
- package/dist/commands/internal/fastlane.js +13 -13
- package/dist/commands/internal/readme.js +17 -17
- package/dist/commands/login.js +21 -21
- package/dist/commands/status.js +10 -10
- package/dist/commands/util/android-build-method.js +66 -0
- package/dist/commands/util/glass.js +118 -0
- package/dist/{export-BtUjg3Tl.js → export-DBQHSKU-.js} +1 -1
- package/dist/{import-BYSkF-tX.js → import-Bk4w8kks.js} +1 -1
- package/dist/{index-CcGRePRU.js → index-WrVwh6le.js} +6 -4
- package/dist/{index-Du6l7ZyV.js → index-qOGviaGc.js} +1 -1
- package/dist/{index-CgGLBt2v.js → index-zdIBXHs2.js} +5 -3
- package/dist/{upload-LoVBuJbT.js → upload-CeRPHRCP.js} +1 -1
- package/dist/{useAppleApp-Bg0x6s97.js → useAppleApp-DgZH0CBS.js} +1 -1
- package/dist/{useAppleBundleId-CEOssLqN.js → useAppleBundleId-CA7Pg4Hi.js} +2 -2
- package/dist/{useAppleProfiles-CHf_gHdZ.js → useAppleProfiles-CUBTPbcC.js} +1 -1
- package/dist/{useGoogleStatus-Ch36GbVo.js → useGoogleStatus-DpPwKmw_.js} +2 -1
- package/dist/{useProjectCredentials-CsQWPdyo.js → useProjectCredentials-rQLm2O1J.js} +2 -1
- package/dist/{useWebSocket-CWeaaLqi.js → useWebSocket-PU55rRGt.js} +1 -1
- package/docs/README.md +1 -0
- package/docs/util/android-build-method.md +26 -0
- package/docs/util/glass.md +47 -0
- package/docs/util.md +12 -0
- package/npm-shrinkwrap.json +14181 -0
- package/oclif.manifest.json +2966 -0
- package/package.json +11 -6
|
@@ -1,54 +1,54 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { Args } from '@oclif/core';
|
|
3
3
|
import { useScreenSize, withFullScreen } from 'fullscreen-ink';
|
|
4
|
-
import {
|
|
5
|
-
import { Box, Text } from 'ink';
|
|
6
|
-
import Spinner from 'ink-spinner';
|
|
7
|
-
import 'node:crypto';
|
|
4
|
+
import { k as cacheKeys, j as CommandContext, i as GameContext, v as useBuilds, M as Markdown, g as getShortUUID, x as useSafeInput, z as queryBuilds, n as fetchKeyTestResult, K as KeyTestStatus, p as KeyTestError, G as GameProvider, A as CreateGooglePlayGame, B as BaseAuthenticatedCommand } from '../../baseGameCommand-BKvHM3h_.js';
|
|
8
5
|
import fs__default from 'node:fs';
|
|
9
6
|
import 'node:path';
|
|
7
|
+
import 'chalk';
|
|
8
|
+
import axios from 'axios';
|
|
9
|
+
import 'crypto-js';
|
|
10
|
+
import 'uuid';
|
|
11
|
+
import { I as queryClient, q as getAuthedHeaders, p as API_URL, H as castArrayObjectDates, l as getProject, aa as updateProject, v as getGodotVersion, u as GameEngine, w as createProject, x as DEFAULT_SHIPPED_FILES_GLOBS, y as DEFAULT_IGNORED_FILES_GLOBS, P as Platform, ab as BuildType, J as JobStatus, W as WEB_URL, ac as getGradleBuildOptionKey, i as isGradleBuildEnabled, s as setGradleBuildEnabled, C as CredentialsType, O as getGoogleStatus, k as isCWDGodotGame } from '../../baseCommand-CscxrTMI.js';
|
|
12
|
+
import 'luxon';
|
|
13
|
+
import 'node:crypto';
|
|
10
14
|
import 'node:readline';
|
|
11
15
|
import 'node:url';
|
|
12
16
|
import 'readline-sync';
|
|
13
|
-
import 'luxon';
|
|
14
|
-
import axios from 'axios';
|
|
15
17
|
import 'isomorphic-git';
|
|
16
18
|
import { useMutation, useQuery } from '@tanstack/react-query';
|
|
17
19
|
import React, { useState, useContext, useEffect, useRef } from 'react';
|
|
18
|
-
import 'crypto-js';
|
|
19
|
-
import 'uuid';
|
|
20
20
|
import 'fast-glob';
|
|
21
21
|
import 'yazl';
|
|
22
22
|
import 'socket.io-client';
|
|
23
|
+
import { Box, Text } from 'ink';
|
|
24
|
+
import Spinner from 'ink-spinner';
|
|
23
25
|
import 'string-length';
|
|
24
26
|
import 'strip-ansi';
|
|
25
27
|
import 'open';
|
|
26
|
-
import { C as ConnectGoogle } from '../../index-
|
|
28
|
+
import { C as ConnectGoogle } from '../../index-zdIBXHs2.js';
|
|
27
29
|
import { TextInput, Alert } from '@inkjs/ui';
|
|
28
30
|
import 'marked';
|
|
29
31
|
import 'marked-terminal';
|
|
30
32
|
import 'qrcode';
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import { C as
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
33
|
+
import { getMajorVersion } from 'godot-export-presets';
|
|
34
|
+
import { J as JobLogTail } from '../../JobLogTail-BzisGkY8.js';
|
|
35
|
+
import { u as useShip, J as JobProgress } from '../../JobProgress-DAnhaTho.js';
|
|
36
|
+
import { C as CreateServiceAccountKey } from '../../index-WrVwh6le.js';
|
|
37
|
+
import { C as CreateKeystore } from '../../Create-By4NsPEI.js';
|
|
38
|
+
import { I as ImportKeystore } from '../../Import-DTcVM-T-.js';
|
|
39
|
+
import { a as getProjectCredentials } from '../../index-qOGviaGc.js';
|
|
37
40
|
import { T as Title } from '../../Title-BCQtayg6.js';
|
|
38
|
-
import { C as Command } from '../../Command-
|
|
39
|
-
import 'chalk';
|
|
40
|
-
import '@expo/apple-utils/build/index.js';
|
|
41
|
-
import 'deepmerge';
|
|
42
|
-
import 'ini';
|
|
41
|
+
import { C as Command } from '../../Command-cVo97lkQ.js';
|
|
43
42
|
import 'fs';
|
|
44
43
|
import 'path';
|
|
45
|
-
import '
|
|
46
|
-
import '../../
|
|
44
|
+
import '@expo/apple-utils/build/index.js';
|
|
45
|
+
import '../../useGoogleStatus-DpPwKmw_.js';
|
|
46
|
+
import '../../useWebSocket-PU55rRGt.js';
|
|
47
47
|
import '../../git-BpsfNFZ_.js';
|
|
48
48
|
import '../../ProgressSpinner-Um6ARKlk.js';
|
|
49
|
-
import '../../useProjectCredentials-
|
|
49
|
+
import '../../useProjectCredentials-rQLm2O1J.js';
|
|
50
50
|
import '../../RunWithSpinner-DucRnFp6.js';
|
|
51
|
-
import '../../import-
|
|
51
|
+
import '../../import-Bk4w8kks.js';
|
|
52
52
|
|
|
53
53
|
const useInviteServiceAccount = () => useMutation({
|
|
54
54
|
async mutationFn({ developerId, projectId }) {
|
|
@@ -247,11 +247,7 @@ const CreateGame = (props) => {
|
|
|
247
247
|
] });
|
|
248
248
|
};
|
|
249
249
|
|
|
250
|
-
const
|
|
251
|
-
const { gameId } = useContext(GameContext);
|
|
252
|
-
return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(CreateForGame, { gameId, ...props }) });
|
|
253
|
-
};
|
|
254
|
-
const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
|
|
250
|
+
const InitialAndroidBuild = ({ gameId, onComplete, onError, ...boxProps }) => {
|
|
255
251
|
const { command } = useContext(CommandContext);
|
|
256
252
|
const { data: buildData, isLoading: isLoadingBuilds } = useBuilds({ pageNumber: 0, projectId: gameId });
|
|
257
253
|
const { data: jobData, isLoading: isLoadingJobs } = useJobs({
|
|
@@ -267,7 +263,9 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
|
|
|
267
263
|
if (!buildData) return;
|
|
268
264
|
if (!jobData) return;
|
|
269
265
|
if (!command) return;
|
|
270
|
-
const hasAndroidBuild = buildData.data.some(
|
|
266
|
+
const hasAndroidBuild = buildData.data.some(
|
|
267
|
+
(build) => build.platform === Platform.ANDROID && build.buildType == BuildType.AAB
|
|
268
|
+
);
|
|
271
269
|
if (!prevHasBuild.current && hasAndroidBuild) return onComplete();
|
|
272
270
|
prevHasBuild.current = hasAndroidBuild;
|
|
273
271
|
const hasRunningAndroidJob = jobData.data.some(
|
|
@@ -293,12 +291,19 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
|
|
|
293
291
|
(isLoadingBuilds || isLoadingJobs || shipMutation.isPending) && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
|
|
294
292
|
] }),
|
|
295
293
|
androidJob === null && /* @__PURE__ */ jsx(Text, { children: shipLog }),
|
|
296
|
-
androidJob && /* @__PURE__ */ jsx(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
294
|
+
androidJob && /* @__PURE__ */ jsx(
|
|
295
|
+
JobProgress,
|
|
296
|
+
{
|
|
297
|
+
job: androidJob,
|
|
298
|
+
onComplete,
|
|
299
|
+
onFailure: (j) => {
|
|
300
|
+
setFailedJob(j);
|
|
301
|
+
setTimeout(() => {
|
|
302
|
+
onError(new Error(`Job ${j.id} failed`));
|
|
303
|
+
}, 1e3);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
),
|
|
302
307
|
failedJob && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
303
308
|
/* @__PURE__ */ jsx(
|
|
304
309
|
Markdown,
|
|
@@ -314,6 +319,49 @@ const CreateForGame = ({ gameId, onComplete, onError, ...boxProps }) => {
|
|
|
314
319
|
] }) });
|
|
315
320
|
};
|
|
316
321
|
|
|
322
|
+
const EnableGradle = ({ onConfirm, onCancel, ...boxProps }) => {
|
|
323
|
+
const godotVersion = getGodotVersion();
|
|
324
|
+
const majorVersion = getMajorVersion(godotVersion);
|
|
325
|
+
useSafeInput(async (input) => {
|
|
326
|
+
if (input == "y") return onConfirm && onConfirm();
|
|
327
|
+
if (input == "n") return onCancel && onCancel();
|
|
328
|
+
});
|
|
329
|
+
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", gap: 1, ...boxProps, children: /* @__PURE__ */ jsx(Box, { flexDirection: "row", gap: 1, children: /* @__PURE__ */ jsx(
|
|
330
|
+
Markdown,
|
|
331
|
+
{
|
|
332
|
+
filename: "confirm-change-android-build-method.md.ejs",
|
|
333
|
+
templateVars: {
|
|
334
|
+
docsURL: `${WEB_URL}docs/guides/android-build-methods`,
|
|
335
|
+
godotVersion,
|
|
336
|
+
optionKey: getGradleBuildOptionKey(majorVersion)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
) }) });
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
const CreateInitialBuild = ({ onComplete, onError, ...boxProps }) => {
|
|
343
|
+
const { gameId } = useContext(GameContext);
|
|
344
|
+
const [canBuildAAB, setCanBuildAAB] = useState(null);
|
|
345
|
+
useEffect(() => {
|
|
346
|
+
async function fetchBuildMethod() {
|
|
347
|
+
const isGradle = await isGradleBuildEnabled();
|
|
348
|
+
setCanBuildAAB(isGradle);
|
|
349
|
+
}
|
|
350
|
+
fetchBuildMethod();
|
|
351
|
+
}, []);
|
|
352
|
+
const updateBuildMethod = async () => {
|
|
353
|
+
await setGradleBuildEnabled(true);
|
|
354
|
+
setCanBuildAAB(true);
|
|
355
|
+
};
|
|
356
|
+
if (canBuildAAB === null) {
|
|
357
|
+
return /* @__PURE__ */ jsx(Text, { children: "Loading..." });
|
|
358
|
+
}
|
|
359
|
+
if (canBuildAAB === false) {
|
|
360
|
+
return /* @__PURE__ */ jsx(EnableGradle, { ...boxProps, onConfirm: () => updateBuildMethod(), onCancel: () => process.exit() });
|
|
361
|
+
}
|
|
362
|
+
return /* @__PURE__ */ jsx(Fragment, { children: gameId && /* @__PURE__ */ jsx(InitialAndroidBuild, { gameId, onComplete, onError, ...boxProps }) });
|
|
363
|
+
};
|
|
364
|
+
|
|
317
365
|
const InviteForm = ({ onSubmit }) => {
|
|
318
366
|
const [error, setError] = useState(null);
|
|
319
367
|
const [accountId, setAccountId] = useState("");
|
|
@@ -520,7 +568,9 @@ const getStatusFlags = async (cmd) => {
|
|
|
520
568
|
(cred) => cred.isActive && cred.platform === Platform.ANDROID && cred.type === CredentialsType.KEY
|
|
521
569
|
);
|
|
522
570
|
const buildsResponse = projectId && hasShipThisProject ? await queryBuilds({ pageNumber: 0, projectId: `${projectId}` }) : null;
|
|
523
|
-
const hasInitialBuild = Boolean(
|
|
571
|
+
const hasInitialBuild = Boolean(
|
|
572
|
+
buildsResponse?.data?.some((build) => build.platform === Platform.ANDROID && build.buildType === BuildType.AAB)
|
|
573
|
+
);
|
|
524
574
|
const testResult = projectId ? await fetchKeyTestResult({ projectId }) : null;
|
|
525
575
|
const hasGooglePlayGame = testResult && testResult?.status === KeyTestStatus.SUCCESS || testResult?.status === KeyTestStatus.ERROR && testResult?.error === KeyTestError.NOT_INVITED;
|
|
526
576
|
const hasInvitedServiceAccount = testResult ? testResult?.status === KeyTestStatus.SUCCESS : false;
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import fs__default, { promises } from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import path__default from 'node:path';
|
|
3
3
|
import { Args, Flags } from '@oclif/core';
|
|
4
|
-
import { ac as BaseCommand } from '../../index-Cv-92xRd.js';
|
|
5
4
|
import 'axios';
|
|
6
5
|
import 'crypto-js';
|
|
7
6
|
import 'uuid';
|
|
7
|
+
import { B as BaseCommand } from '../../baseCommand-CscxrTMI.js';
|
|
8
8
|
import 'luxon';
|
|
9
|
-
import '
|
|
10
|
-
import '
|
|
9
|
+
import 'react/jsx-runtime';
|
|
10
|
+
import 'ink';
|
|
11
|
+
import 'ink-spinner';
|
|
11
12
|
import 'node:crypto';
|
|
12
13
|
import 'node:readline';
|
|
13
14
|
import 'node:url';
|
|
14
15
|
import 'readline-sync';
|
|
15
16
|
import 'isomorphic-git';
|
|
16
|
-
import 'deepmerge';
|
|
17
|
-
import 'ini';
|
|
18
17
|
import '@tanstack/react-query';
|
|
19
18
|
import 'react';
|
|
20
19
|
import 'fast-glob';
|
|
21
20
|
import 'yazl';
|
|
22
21
|
import 'socket.io-client';
|
|
23
22
|
import 'fullscreen-ink';
|
|
24
|
-
import 'ink';
|
|
25
|
-
import 'react/jsx-runtime';
|
|
26
|
-
import 'ink-spinner';
|
|
27
23
|
import 'string-length';
|
|
28
24
|
import 'strip-ansi';
|
|
29
25
|
import 'open';
|
|
30
26
|
import '@inkjs/ui';
|
|
31
|
-
import '
|
|
32
|
-
import 'path';
|
|
27
|
+
import '../../baseGameCommand-BKvHM3h_.js';
|
|
33
28
|
import 'marked';
|
|
34
29
|
import 'marked-terminal';
|
|
35
30
|
import 'qrcode';
|
|
31
|
+
import 'godot-export-presets';
|
|
32
|
+
import 'chalk';
|
|
33
|
+
import '@expo/apple-utils/build/index.js';
|
|
34
|
+
import 'fs';
|
|
35
|
+
import 'path';
|
|
36
36
|
|
|
37
37
|
function generateFastlaneSession(cookieData) {
|
|
38
38
|
return cookieData.cookies.map((cookie) => `- !ruby/object:HTTP::Cookie
|
|
@@ -65,7 +65,7 @@ class AppleFastlane extends BaseCommand {
|
|
|
65
65
|
const { args } = this;
|
|
66
66
|
const { file, username } = args;
|
|
67
67
|
const homeDirectory = this.config.home;
|
|
68
|
-
const inputFilePath =
|
|
68
|
+
const inputFilePath = path__default.join(homeDirectory, ".app-store", "auth", username, "cookie");
|
|
69
69
|
if (!fs__default.existsSync(inputFilePath)) {
|
|
70
70
|
throw new Error(`No expo auth file found for ${username}`);
|
|
71
71
|
}
|
|
@@ -76,7 +76,7 @@ class AppleFastlane extends BaseCommand {
|
|
|
76
76
|
const fileContent = await promises.readFile(inputFilePath, "utf8");
|
|
77
77
|
const cookieData = JSON.parse(fileContent);
|
|
78
78
|
const yamlContent = generateFastlaneSession(cookieData);
|
|
79
|
-
await promises.mkdir(
|
|
79
|
+
await promises.mkdir(path__default.dirname(outputFilePath), { recursive: true });
|
|
80
80
|
await promises.writeFile(outputFilePath, yamlContent, "utf-8");
|
|
81
81
|
console.log(`FASTLANE_SESSION written to ${outputFilePath}`);
|
|
82
82
|
}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
import fs__default from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import path__default from 'node:path';
|
|
3
3
|
import { Args, Flags } from '@oclif/core';
|
|
4
|
-
import {
|
|
5
|
-
import CustomHelp from '../../utils/help.js';
|
|
4
|
+
import { q as ejs } from '../../baseGameCommand-BKvHM3h_.js';
|
|
6
5
|
import 'axios';
|
|
7
6
|
import 'crypto-js';
|
|
8
7
|
import 'uuid';
|
|
8
|
+
import { B as BaseCommand } from '../../baseCommand-CscxrTMI.js';
|
|
9
9
|
import 'luxon';
|
|
10
|
-
import '
|
|
11
|
-
import '
|
|
10
|
+
import 'react/jsx-runtime';
|
|
11
|
+
import 'ink';
|
|
12
|
+
import 'ink-spinner';
|
|
12
13
|
import 'node:crypto';
|
|
13
14
|
import 'node:readline';
|
|
14
15
|
import 'node:url';
|
|
15
16
|
import 'readline-sync';
|
|
16
17
|
import 'isomorphic-git';
|
|
17
|
-
import '
|
|
18
|
-
import 'ini';
|
|
18
|
+
import CustomHelp from '../../utils/help.js';
|
|
19
19
|
import '@tanstack/react-query';
|
|
20
20
|
import 'react';
|
|
21
21
|
import 'fast-glob';
|
|
22
22
|
import 'yazl';
|
|
23
23
|
import 'socket.io-client';
|
|
24
24
|
import 'fullscreen-ink';
|
|
25
|
-
import 'ink';
|
|
26
|
-
import 'react/jsx-runtime';
|
|
27
|
-
import 'ink-spinner';
|
|
28
25
|
import 'string-length';
|
|
29
26
|
import 'strip-ansi';
|
|
30
27
|
import 'open';
|
|
31
28
|
import '@inkjs/ui';
|
|
32
|
-
import 'fs';
|
|
33
|
-
import 'path';
|
|
34
29
|
import 'marked';
|
|
35
30
|
import 'marked-terminal';
|
|
36
31
|
import 'qrcode';
|
|
32
|
+
import 'godot-export-presets';
|
|
33
|
+
import 'fs';
|
|
34
|
+
import 'path';
|
|
35
|
+
import 'chalk';
|
|
36
|
+
import '@expo/apple-utils/build/index.js';
|
|
37
37
|
|
|
38
38
|
const ROOT_TOPIC_NAME = "shipthis";
|
|
39
39
|
const ROOT_TOPIC_DESCRIPTION = "Root topic";
|
|
@@ -133,7 +133,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
|
|
|
133
133
|
const includeTopicsAndCommands = currentParent.includeTopicsAndCommands || currentDepth >= separateFileDepth;
|
|
134
134
|
const newSubTopic = {
|
|
135
135
|
commands: [],
|
|
136
|
-
filePath: `${
|
|
136
|
+
filePath: `${path__default.join(...name.split(":"))}.md`,
|
|
137
137
|
includeTopicsAndCommands,
|
|
138
138
|
subTopics: [],
|
|
139
139
|
topic: topicsByName[name]
|
|
@@ -153,7 +153,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
|
|
|
153
153
|
if (!subTopic) throw new Error("Could not find topic for command: " + command.id);
|
|
154
154
|
currentParent = subTopic;
|
|
155
155
|
}
|
|
156
|
-
currentParent.commands.push({ command, filePath: `${
|
|
156
|
+
currentParent.commands.push({ command, filePath: `${path__default.join(...command.id.split(":"))}.md` });
|
|
157
157
|
}
|
|
158
158
|
return topicTree;
|
|
159
159
|
}
|
|
@@ -184,13 +184,13 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
|
|
|
184
184
|
outputList.push(filePath2);
|
|
185
185
|
const doWrite = !exists || overWrite;
|
|
186
186
|
if (!doWrite || dryRun) return;
|
|
187
|
-
const folder =
|
|
187
|
+
const folder = path__default.dirname(filePath2);
|
|
188
188
|
fs__default.mkdirSync(folder, { recursive: true });
|
|
189
189
|
fs__default.writeFileSync(filePath2, rendered);
|
|
190
190
|
};
|
|
191
191
|
const skipFile = (filePath2) => only && !filePath2.match(only);
|
|
192
192
|
const writeOutput = { created: [], overwritten: [] };
|
|
193
|
-
const filePath =
|
|
193
|
+
const filePath = path__default.join(outputDir, topic.filePath);
|
|
194
194
|
if (!skipFile(filePath)) makeFolderAndSave(filePath, topic.rendered);
|
|
195
195
|
for (const subTopic of topic.subTopics) {
|
|
196
196
|
const subWriteOutput = writeTopic(subTopic, outputDir, dryRun, overWrite, only);
|
|
@@ -199,7 +199,7 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
|
|
|
199
199
|
}
|
|
200
200
|
for (const command of topic.commands) {
|
|
201
201
|
if (!command.renderedForFile) throw new Error(`Command ${command.command.id} has not been rendered`);
|
|
202
|
-
const filePath2 =
|
|
202
|
+
const filePath2 = path__default.join(outputDir, command.filePath);
|
|
203
203
|
if (!skipFile(filePath2)) makeFolderAndSave(filePath2, command.renderedForFile);
|
|
204
204
|
}
|
|
205
205
|
return writeOutput;
|
package/dist/commands/login.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import { W as WEB_URL,
|
|
4
|
-
import '
|
|
5
|
-
import '
|
|
6
|
-
import '
|
|
7
|
-
import '
|
|
8
|
-
import 'node:path';
|
|
9
|
-
import 'chalk';
|
|
10
|
-
import '@expo/apple-utils/build/index.js';
|
|
11
|
-
import 'node:crypto';
|
|
12
|
-
import 'node:readline';
|
|
13
|
-
import 'node:url';
|
|
14
|
-
import 'readline-sync';
|
|
15
|
-
import 'isomorphic-git';
|
|
16
|
-
import 'deepmerge';
|
|
17
|
-
import 'ini';
|
|
18
|
-
import '@tanstack/react-query';
|
|
3
|
+
import { W as WEB_URL, B as BaseCommand, $ as acceptTerms, p as API_URL, a0 as setAuthToken } from '../baseCommand-CscxrTMI.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import 'ink';
|
|
6
|
+
import 'ink-spinner';
|
|
7
|
+
import { b as getInput } from '../baseGameCommand-BKvHM3h_.js';
|
|
19
8
|
import 'react';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'luxon';
|
|
11
|
+
import 'node:fs';
|
|
20
12
|
import 'fast-glob';
|
|
13
|
+
import 'uuid';
|
|
21
14
|
import 'yazl';
|
|
22
15
|
import 'socket.io-client';
|
|
23
16
|
import 'fullscreen-ink';
|
|
24
|
-
import 'ink';
|
|
25
|
-
import 'react/jsx-runtime';
|
|
26
|
-
import 'ink-spinner';
|
|
27
17
|
import 'string-length';
|
|
28
18
|
import 'strip-ansi';
|
|
29
19
|
import 'open';
|
|
30
20
|
import '@inkjs/ui';
|
|
31
|
-
import '
|
|
32
|
-
import 'path';
|
|
21
|
+
import 'node:path';
|
|
33
22
|
import 'marked';
|
|
34
23
|
import 'marked-terminal';
|
|
35
24
|
import 'qrcode';
|
|
25
|
+
import 'godot-export-presets';
|
|
26
|
+
import 'chalk';
|
|
27
|
+
import 'crypto-js';
|
|
28
|
+
import '@expo/apple-utils/build/index.js';
|
|
29
|
+
import 'node:crypto';
|
|
30
|
+
import 'node:readline';
|
|
31
|
+
import 'node:url';
|
|
32
|
+
import 'readline-sync';
|
|
33
|
+
import 'isomorphic-git';
|
|
34
|
+
import 'fs';
|
|
35
|
+
import 'path';
|
|
36
36
|
|
|
37
37
|
const TERMS_URL = new URL("/terms", WEB_URL).href;
|
|
38
38
|
const PRIVACY_URL = new URL("/privacy", WEB_URL).href;
|
package/dist/commands/status.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { render } from 'ink';
|
|
3
|
-
import
|
|
3
|
+
import 'node:fs';
|
|
4
|
+
import 'axios';
|
|
5
|
+
import 'crypto-js';
|
|
6
|
+
import 'uuid';
|
|
7
|
+
import { B as BaseCommand, k as isCWDGodotGame } from '../baseCommand-CscxrTMI.js';
|
|
8
|
+
import 'luxon';
|
|
4
9
|
import 'ink-spinner';
|
|
5
10
|
import 'node:crypto';
|
|
6
|
-
import 'node:fs';
|
|
7
11
|
import 'node:path';
|
|
8
12
|
import 'node:readline';
|
|
9
13
|
import 'node:url';
|
|
10
14
|
import 'readline-sync';
|
|
11
|
-
import 'luxon';
|
|
12
|
-
import 'axios';
|
|
13
15
|
import { i as isCWDGitRepo } from '../git-BpsfNFZ_.js';
|
|
14
16
|
import '@oclif/core';
|
|
15
17
|
import '@tanstack/react-query';
|
|
16
18
|
import 'react';
|
|
17
|
-
import 'crypto-js';
|
|
18
|
-
import 'uuid';
|
|
19
19
|
import 'fast-glob';
|
|
20
20
|
import 'yazl';
|
|
21
21
|
import 'socket.io-client';
|
|
@@ -25,19 +25,19 @@ import 'strip-ansi';
|
|
|
25
25
|
import { S as StatusTable } from '../StatusTable-DzRWcMr4.js';
|
|
26
26
|
import 'open';
|
|
27
27
|
import '@inkjs/ui';
|
|
28
|
+
import '../baseGameCommand-BKvHM3h_.js';
|
|
28
29
|
import 'marked';
|
|
29
30
|
import 'marked-terminal';
|
|
30
31
|
import { N as NextSteps } from '../NextSteps-DbJHmscQ.js';
|
|
31
32
|
import 'qrcode';
|
|
32
|
-
import
|
|
33
|
+
import 'godot-export-presets';
|
|
34
|
+
import { C as Command } from '../Command-cVo97lkQ.js';
|
|
33
35
|
import chalk from 'chalk';
|
|
34
36
|
import '@expo/apple-utils/build/index.js';
|
|
35
37
|
import 'isomorphic-git';
|
|
36
|
-
import '
|
|
37
|
-
import 'ini';
|
|
38
|
+
import '../Title-BCQtayg6.js';
|
|
38
39
|
import 'fs';
|
|
39
40
|
import 'path';
|
|
40
|
-
import '../Title-BCQtayg6.js';
|
|
41
41
|
|
|
42
42
|
class Status extends BaseCommand {
|
|
43
43
|
static args = {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import 'node:fs';
|
|
3
|
+
import 'axios';
|
|
4
|
+
import 'crypto-js';
|
|
5
|
+
import 'uuid';
|
|
6
|
+
import { B as BaseCommand, i as isGradleBuildEnabled, s as setGradleBuildEnabled } from '../../baseCommand-CscxrTMI.js';
|
|
7
|
+
import 'luxon';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
|
+
import 'ink';
|
|
10
|
+
import 'ink-spinner';
|
|
11
|
+
import 'node:crypto';
|
|
12
|
+
import 'node:path';
|
|
13
|
+
import 'node:readline';
|
|
14
|
+
import 'node:url';
|
|
15
|
+
import 'readline-sync';
|
|
16
|
+
import 'isomorphic-git';
|
|
17
|
+
import '@tanstack/react-query';
|
|
18
|
+
import 'react';
|
|
19
|
+
import 'fast-glob';
|
|
20
|
+
import 'yazl';
|
|
21
|
+
import 'socket.io-client';
|
|
22
|
+
import 'fullscreen-ink';
|
|
23
|
+
import 'string-length';
|
|
24
|
+
import 'strip-ansi';
|
|
25
|
+
import 'open';
|
|
26
|
+
import '@inkjs/ui';
|
|
27
|
+
import '../../baseGameCommand-BKvHM3h_.js';
|
|
28
|
+
import 'marked';
|
|
29
|
+
import 'marked-terminal';
|
|
30
|
+
import 'qrcode';
|
|
31
|
+
import 'godot-export-presets';
|
|
32
|
+
import 'chalk';
|
|
33
|
+
import '@expo/apple-utils/build/index.js';
|
|
34
|
+
import 'fs';
|
|
35
|
+
import 'path';
|
|
36
|
+
|
|
37
|
+
class UtilAndroidBuildMethod extends BaseCommand {
|
|
38
|
+
static args = {};
|
|
39
|
+
static description = "Gets and sets the Android build method in export_presets.cfg";
|
|
40
|
+
static examples = [
|
|
41
|
+
"<%= config.bin %> <%= command.id %>",
|
|
42
|
+
"<%= config.bin %> <%= command.id %> --legacy",
|
|
43
|
+
"<%= config.bin %> <%= command.id %> --gradle"
|
|
44
|
+
];
|
|
45
|
+
static flags = {
|
|
46
|
+
legacy: Flags.boolean({ char: "l", description: "use legacy build method" }),
|
|
47
|
+
gradle: Flags.boolean({ char: "g", description: "use gradle build method" })
|
|
48
|
+
};
|
|
49
|
+
async run() {
|
|
50
|
+
const { flags } = await this.parse(UtilAndroidBuildMethod);
|
|
51
|
+
if (flags.legacy && flags.gradle) {
|
|
52
|
+
this.error("Cannot use both --legacy and --gradle flags together");
|
|
53
|
+
}
|
|
54
|
+
if (!flags.legacy && !flags.gradle) {
|
|
55
|
+
const buildMethod2 = await isGradleBuildEnabled() ? "gradle" : "legacy";
|
|
56
|
+
this.log(`Current Android build method: ${buildMethod2}`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const isGradle = flags.gradle ? true : false;
|
|
60
|
+
const buildMethod = flags.legacy ? "legacy" : "gradle";
|
|
61
|
+
this.log(`Setting Android build method to: ${buildMethod}`);
|
|
62
|
+
await setGradleBuildEnabled(isGradle);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { UtilAndroidBuildMethod as default };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { B as BaseCommand } from '../../baseCommand-CscxrTMI.js';
|
|
2
|
+
import { Flags, Args } from '@oclif/core';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import xcode from 'xcode';
|
|
6
|
+
import 'chalk';
|
|
7
|
+
import 'axios';
|
|
8
|
+
import 'crypto-js';
|
|
9
|
+
import 'uuid';
|
|
10
|
+
import 'luxon';
|
|
11
|
+
import '@expo/apple-utils/build/index.js';
|
|
12
|
+
import 'node:crypto';
|
|
13
|
+
import 'node:readline';
|
|
14
|
+
import 'node:url';
|
|
15
|
+
import 'readline-sync';
|
|
16
|
+
import 'isomorphic-git';
|
|
17
|
+
import 'godot-export-presets';
|
|
18
|
+
import '@tanstack/react-query';
|
|
19
|
+
import 'react';
|
|
20
|
+
import 'fast-glob';
|
|
21
|
+
import 'yazl';
|
|
22
|
+
import 'socket.io-client';
|
|
23
|
+
import 'fullscreen-ink';
|
|
24
|
+
import 'ink';
|
|
25
|
+
|
|
26
|
+
async function applyLiquidGlassIcon(opts) {
|
|
27
|
+
const { projectDir, iconDir, verbose } = opts;
|
|
28
|
+
const info = (msg) => {
|
|
29
|
+
if (!verbose) return;
|
|
30
|
+
console.log(msg);
|
|
31
|
+
};
|
|
32
|
+
const warn = (msg) => console.warn(`Warning: ${msg}`);
|
|
33
|
+
info(`Applying Liquid Glass icon from: ${iconDir}`);
|
|
34
|
+
if (!fs.existsSync(projectDir)) {
|
|
35
|
+
throw new Error(`projectDir not found: ${projectDir}`);
|
|
36
|
+
}
|
|
37
|
+
const pbxprojPath = path.join(projectDir, "project.pbxproj");
|
|
38
|
+
if (!fs.existsSync(pbxprojPath)) {
|
|
39
|
+
throw new Error(`project.pbxproj not found at: ${pbxprojPath}`);
|
|
40
|
+
}
|
|
41
|
+
if (!fs.existsSync(iconDir)) {
|
|
42
|
+
throw new Error(`Icon directory not found: ${iconDir}`);
|
|
43
|
+
}
|
|
44
|
+
const iconFolderName = path.basename(iconDir);
|
|
45
|
+
const appIconName = iconFolderName.replace(/\.icon$/i, "");
|
|
46
|
+
info(`Detected .icon folder: ${iconFolderName}`);
|
|
47
|
+
info(`Derived app icon name: ${appIconName}`);
|
|
48
|
+
const projectRoot = path.dirname(projectDir);
|
|
49
|
+
const destIconDir = path.join(projectRoot, iconFolderName);
|
|
50
|
+
if (!fs.existsSync(destIconDir)) {
|
|
51
|
+
info(`Copying .icon folder into project root: ${destIconDir}`);
|
|
52
|
+
await fs.promises.cp(iconDir, destIconDir, {
|
|
53
|
+
recursive: true
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
info(`Icon folder already exists in project root, skipping copy.`);
|
|
57
|
+
}
|
|
58
|
+
const project = xcode.project(pbxprojPath);
|
|
59
|
+
project.parseSync();
|
|
60
|
+
info(`Adding folder reference to Copy Bundle Resources: ${iconFolderName}`);
|
|
61
|
+
const firstProject = project.getFirstProject();
|
|
62
|
+
const mainGroupId = firstProject.firstProject.mainGroup;
|
|
63
|
+
const mainGroup = project.getPBXGroupByKey(mainGroupId);
|
|
64
|
+
const fileRef = project.addResourceFile(
|
|
65
|
+
iconFolderName,
|
|
66
|
+
{ lastKnownFileType: "folder.iconcomposer.icon" },
|
|
67
|
+
mainGroup.name
|
|
68
|
+
);
|
|
69
|
+
if (fileRef) {
|
|
70
|
+
project.addToPbxResourcesBuildPhase(fileRef);
|
|
71
|
+
} else {
|
|
72
|
+
warn(`Folder reference may already exist in project: ${iconFolderName}`);
|
|
73
|
+
}
|
|
74
|
+
const configs = project.pbxXCBuildConfigurationSection();
|
|
75
|
+
let modified = 0;
|
|
76
|
+
info(`Updating build settings for app icon: ${appIconName}`);
|
|
77
|
+
for (const key in configs) {
|
|
78
|
+
const cfg = configs[key];
|
|
79
|
+
if (!cfg || typeof cfg !== "object" || !cfg.buildSettings) continue;
|
|
80
|
+
cfg.buildSettings["ASSETCATALOG_COMPILER_APPICON_NAME"] = appIconName;
|
|
81
|
+
cfg.buildSettings["ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS"] = "YES";
|
|
82
|
+
modified++;
|
|
83
|
+
}
|
|
84
|
+
info(`Modified ${modified} build configurations`);
|
|
85
|
+
info(`Writing updated project to ${pbxprojPath}`);
|
|
86
|
+
fs.writeFileSync(pbxprojPath, project.writeSync());
|
|
87
|
+
info(`Liquid Glass icon successfully applied.`);
|
|
88
|
+
}
|
|
89
|
+
class InternalGlass extends BaseCommand {
|
|
90
|
+
static description = "Apply a Liquid Glass .icon folder to a local Xcode project";
|
|
91
|
+
static flags = {
|
|
92
|
+
verbose: Flags.boolean({
|
|
93
|
+
default: false,
|
|
94
|
+
description: "Enable verbose logging"
|
|
95
|
+
})
|
|
96
|
+
};
|
|
97
|
+
static args = {
|
|
98
|
+
project: Args.string({
|
|
99
|
+
description: "Path to the .xcodeproj directory",
|
|
100
|
+
required: true
|
|
101
|
+
}),
|
|
102
|
+
icon: Args.string({
|
|
103
|
+
description: "Path to the .icon folder",
|
|
104
|
+
required: true
|
|
105
|
+
})
|
|
106
|
+
};
|
|
107
|
+
async run() {
|
|
108
|
+
const { args, flags } = await this.parse(InternalGlass);
|
|
109
|
+
await applyLiquidGlassIcon({
|
|
110
|
+
projectDir: args.project,
|
|
111
|
+
iconDir: args.icon,
|
|
112
|
+
verbose: flags.verbose
|
|
113
|
+
});
|
|
114
|
+
this.log("Liquid Glass icon applied.");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export { applyLiquidGlassIcon, InternalGlass as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import {
|
|
3
|
+
import { p as API_URL, q as getAuthedHeaders } from './baseCommand-CscxrTMI.js';
|
|
4
4
|
|
|
5
5
|
async function exportCredential({ credentialId, projectId, zipPath }) {
|
|
6
6
|
const headers = getAuthedHeaders();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { promises } from 'node:fs';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import {
|
|
3
|
+
import { p as API_URL, q as getAuthedHeaders } from './baseCommand-CscxrTMI.js';
|
|
4
4
|
|
|
5
5
|
async function getNewImportTicket(projectId) {
|
|
6
6
|
const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
|