@vibegameengine/shipit 0.1.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.
Files changed (142) hide show
  1. package/README.md +86 -0
  2. package/dist/app/build-cli.d.ts +5 -0
  3. package/dist/app/build-cli.d.ts.map +1 -0
  4. package/dist/app/build-cli.js +70 -0
  5. package/dist/app/build-cli.js.map +1 -0
  6. package/dist/bin.d.ts +3 -0
  7. package/dist/bin.d.ts.map +1 -0
  8. package/dist/bin.js +19 -0
  9. package/dist/bin.js.map +1 -0
  10. package/dist/entities/credentials/api/credentials-store.d.ts +12 -0
  11. package/dist/entities/credentials/api/credentials-store.d.ts.map +1 -0
  12. package/dist/entities/credentials/api/credentials-store.js +21 -0
  13. package/dist/entities/credentials/api/credentials-store.js.map +1 -0
  14. package/dist/entities/credentials/index.d.ts +4 -0
  15. package/dist/entities/credentials/index.d.ts.map +1 -0
  16. package/dist/entities/credentials/index.js +6 -0
  17. package/dist/entities/credentials/index.js.map +1 -0
  18. package/dist/entities/credentials/model/credentials.d.ts +4 -0
  19. package/dist/entities/credentials/model/credentials.d.ts.map +1 -0
  20. package/dist/entities/credentials/model/credentials.js +3 -0
  21. package/dist/entities/credentials/model/credentials.js.map +1 -0
  22. package/dist/entities/gamefeed-config/api/gamefeed-config-store.d.ts +15 -0
  23. package/dist/entities/gamefeed-config/api/gamefeed-config-store.d.ts.map +1 -0
  24. package/dist/entities/gamefeed-config/api/gamefeed-config-store.js +32 -0
  25. package/dist/entities/gamefeed-config/api/gamefeed-config-store.js.map +1 -0
  26. package/dist/entities/gamefeed-config/index.d.ts +6 -0
  27. package/dist/entities/gamefeed-config/index.d.ts.map +1 -0
  28. package/dist/entities/gamefeed-config/index.js +10 -0
  29. package/dist/entities/gamefeed-config/index.js.map +1 -0
  30. package/dist/entities/gamefeed-config/lib/default-config.d.ts +4 -0
  31. package/dist/entities/gamefeed-config/lib/default-config.d.ts.map +1 -0
  32. package/dist/entities/gamefeed-config/lib/default-config.js +21 -0
  33. package/dist/entities/gamefeed-config/lib/default-config.js.map +1 -0
  34. package/dist/entities/gamefeed-config/model/gamefeed-config.d.ts +52 -0
  35. package/dist/entities/gamefeed-config/model/gamefeed-config.d.ts.map +1 -0
  36. package/dist/entities/gamefeed-config/model/gamefeed-config.js +23 -0
  37. package/dist/entities/gamefeed-config/model/gamefeed-config.js.map +1 -0
  38. package/dist/features/init/index.d.ts +3 -0
  39. package/dist/features/init/index.d.ts.map +1 -0
  40. package/dist/features/init/index.js +6 -0
  41. package/dist/features/init/index.js.map +1 -0
  42. package/dist/features/init/model/init-command.d.ts +15 -0
  43. package/dist/features/init/model/init-command.d.ts.map +1 -0
  44. package/dist/features/init/model/init-command.js +72 -0
  45. package/dist/features/init/model/init-command.js.map +1 -0
  46. package/dist/features/login/index.d.ts +3 -0
  47. package/dist/features/login/index.d.ts.map +1 -0
  48. package/dist/features/login/index.js +6 -0
  49. package/dist/features/login/index.js.map +1 -0
  50. package/dist/features/login/model/login-command.d.ts +16 -0
  51. package/dist/features/login/model/login-command.d.ts.map +1 -0
  52. package/dist/features/login/model/login-command.js +24 -0
  53. package/dist/features/login/model/login-command.js.map +1 -0
  54. package/dist/features/publish/index.d.ts +3 -0
  55. package/dist/features/publish/index.d.ts.map +1 -0
  56. package/dist/features/publish/index.js +6 -0
  57. package/dist/features/publish/index.js.map +1 -0
  58. package/dist/features/publish/model/publish-command.d.ts +19 -0
  59. package/dist/features/publish/model/publish-command.d.ts.map +1 -0
  60. package/dist/features/publish/model/publish-command.js +85 -0
  61. package/dist/features/publish/model/publish-command.js.map +1 -0
  62. package/dist/features/register/index.d.ts +3 -0
  63. package/dist/features/register/index.d.ts.map +1 -0
  64. package/dist/features/register/index.js +6 -0
  65. package/dist/features/register/index.js.map +1 -0
  66. package/dist/features/register/model/register-command.d.ts +14 -0
  67. package/dist/features/register/model/register-command.d.ts.map +1 -0
  68. package/dist/features/register/model/register-command.js +17 -0
  69. package/dist/features/register/model/register-command.js.map +1 -0
  70. package/dist/features/validate/index.d.ts +2 -0
  71. package/dist/features/validate/index.d.ts.map +1 -0
  72. package/dist/features/validate/index.js +6 -0
  73. package/dist/features/validate/index.js.map +1 -0
  74. package/dist/features/validate/model/validate-command.d.ts +10 -0
  75. package/dist/features/validate/model/validate-command.d.ts.map +1 -0
  76. package/dist/features/validate/model/validate-command.js +41 -0
  77. package/dist/features/validate/model/validate-command.js.map +1 -0
  78. package/dist/features/version/index.d.ts +2 -0
  79. package/dist/features/version/index.d.ts.map +1 -0
  80. package/dist/features/version/index.js +6 -0
  81. package/dist/features/version/index.js.map +1 -0
  82. package/dist/features/version/model/version-command.d.ts +18 -0
  83. package/dist/features/version/model/version-command.d.ts.map +1 -0
  84. package/dist/features/version/model/version-command.js +54 -0
  85. package/dist/features/version/model/version-command.js.map +1 -0
  86. package/dist/shared/api/http-client/api-client.d.ts +22 -0
  87. package/dist/shared/api/http-client/api-client.d.ts.map +1 -0
  88. package/dist/shared/api/http-client/api-client.js +73 -0
  89. package/dist/shared/api/http-client/api-client.js.map +1 -0
  90. package/dist/shared/api/http-client/index.d.ts +4 -0
  91. package/dist/shared/api/http-client/index.d.ts.map +1 -0
  92. package/dist/shared/api/http-client/index.js +6 -0
  93. package/dist/shared/api/http-client/index.js.map +1 -0
  94. package/dist/shared/api/http-client/platform-api.d.ts +11 -0
  95. package/dist/shared/api/http-client/platform-api.d.ts.map +1 -0
  96. package/dist/shared/api/http-client/platform-api.js +3 -0
  97. package/dist/shared/api/http-client/platform-api.js.map +1 -0
  98. package/dist/shared/config/config.d.ts +7 -0
  99. package/dist/shared/config/config.d.ts.map +1 -0
  100. package/dist/shared/config/config.js +17 -0
  101. package/dist/shared/config/config.js.map +1 -0
  102. package/dist/shared/config/index.d.ts +3 -0
  103. package/dist/shared/config/index.d.ts.map +1 -0
  104. package/dist/shared/config/index.js +6 -0
  105. package/dist/shared/config/index.js.map +1 -0
  106. package/dist/shared/contracts.d.ts +112 -0
  107. package/dist/shared/contracts.d.ts.map +1 -0
  108. package/dist/shared/contracts.js +34 -0
  109. package/dist/shared/contracts.js.map +1 -0
  110. package/dist/shared/lib/archive/create-archive.d.ts +8 -0
  111. package/dist/shared/lib/archive/create-archive.d.ts.map +1 -0
  112. package/dist/shared/lib/archive/create-archive.js +17 -0
  113. package/dist/shared/lib/archive/create-archive.js.map +1 -0
  114. package/dist/shared/lib/archive/index.d.ts +3 -0
  115. package/dist/shared/lib/archive/index.d.ts.map +1 -0
  116. package/dist/shared/lib/archive/index.js +6 -0
  117. package/dist/shared/lib/archive/index.js.map +1 -0
  118. package/dist/shared/lib/console/index.d.ts +3 -0
  119. package/dist/shared/lib/console/index.d.ts.map +1 -0
  120. package/dist/shared/lib/console/index.js +6 -0
  121. package/dist/shared/lib/console/index.js.map +1 -0
  122. package/dist/shared/lib/console/reporter.d.ts +12 -0
  123. package/dist/shared/lib/console/reporter.d.ts.map +1 -0
  124. package/dist/shared/lib/console/reporter.js +23 -0
  125. package/dist/shared/lib/console/reporter.js.map +1 -0
  126. package/dist/shared/lib/errors/cli-error.d.ts +6 -0
  127. package/dist/shared/lib/errors/cli-error.d.ts.map +1 -0
  128. package/dist/shared/lib/errors/cli-error.js +14 -0
  129. package/dist/shared/lib/errors/cli-error.js.map +1 -0
  130. package/dist/shared/lib/errors/index.d.ts +2 -0
  131. package/dist/shared/lib/errors/index.d.ts.map +1 -0
  132. package/dist/shared/lib/errors/index.js +6 -0
  133. package/dist/shared/lib/errors/index.js.map +1 -0
  134. package/dist/shared/lib/fs/fs.d.ts +6 -0
  135. package/dist/shared/lib/fs/fs.d.ts.map +1 -0
  136. package/dist/shared/lib/fs/fs.js +32 -0
  137. package/dist/shared/lib/fs/fs.js.map +1 -0
  138. package/dist/shared/lib/fs/index.d.ts +2 -0
  139. package/dist/shared/lib/fs/index.d.ts.map +1 -0
  140. package/dist/shared/lib/fs/index.js +10 -0
  141. package/dist/shared/lib/fs/index.js.map +1 -0
  142. package/package.json +47 -0
@@ -0,0 +1,7 @@
1
+ export interface CliConfig {
2
+ apiUrl: string;
3
+ credentialsPath: string;
4
+ projectDir: string;
5
+ }
6
+ export declare function loadCliConfig(env?: NodeJS.ProcessEnv, cwd?: string): CliConfig;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/shared/config/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAsB,GAC1B,SAAS,CAWX"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadCliConfig = loadCliConfig;
4
+ const node_os_1 = require("node:os");
5
+ const node_path_1 = require("node:path");
6
+ function loadCliConfig(env = process.env, cwd = process.cwd()) {
7
+ const apiUrl = env.SHIPIT_API_URL ?? env.GAMEFEED_API_URL;
8
+ if (!apiUrl) {
9
+ throw new Error('SHIPIT_API_URL is required.');
10
+ }
11
+ return {
12
+ apiUrl,
13
+ credentialsPath: (0, node_path_1.join)((0, node_os_1.homedir)(), '.shipit', 'credentials.json'),
14
+ projectDir: cwd,
15
+ };
16
+ }
17
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/shared/config/config.ts"],"names":[],"mappings":";;AASA,sCAcC;AAvBD,qCAAkC;AAClC,yCAAiC;AAQjC,SAAgB,aAAa,CAC3B,MAAyB,OAAO,CAAC,GAAG,EACpC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,gBAAgB,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,OAAO;QACL,MAAM;QACN,eAAe,EAAE,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC;QAC/D,UAAU,EAAE,GAAG;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { loadCliConfig } from './config';
2
+ export type { CliConfig } from './config';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadCliConfig = void 0;
4
+ var config_1 = require("./config");
5
+ Object.defineProperty(exports, "loadCliConfig", { enumerable: true, get: function () { return config_1.loadCliConfig; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/config/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
@@ -0,0 +1,112 @@
1
+ import { z } from 'zod';
2
+ export declare const orientationSchema: z.ZodEnum<["portrait", "landscape"]>;
3
+ export declare const versionStatusSchema: z.ZodEnum<["DRAFT", "SUBMITTED", "LIVE", "REJECTED"]>;
4
+ export declare const gameSlugSchema: z.ZodString;
5
+ export declare const gameTagsSchema: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6
+ export declare const releaseNameSchema: z.ZodString;
7
+ export declare const buildHashSchema: z.ZodString;
8
+ export declare const versionDescriptionSchema: z.ZodObject<{
9
+ locale: z.ZodString;
10
+ body: z.ZodString;
11
+ }, "strip", z.ZodTypeAny, {
12
+ locale: string;
13
+ body: string;
14
+ }, {
15
+ locale: string;
16
+ body: string;
17
+ }>;
18
+ export declare const publishVersionRequestSchema: z.ZodObject<{
19
+ releaseName: z.ZodOptional<z.ZodString>;
20
+ title: z.ZodString;
21
+ orientation: z.ZodDefault<z.ZodEnum<["portrait", "landscape"]>>;
22
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
23
+ entry: z.ZodString;
24
+ descriptions: z.ZodArray<z.ZodObject<{
25
+ locale: z.ZodString;
26
+ body: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ locale: string;
29
+ body: string;
30
+ }, {
31
+ locale: string;
32
+ body: string;
33
+ }>, "many">;
34
+ buildHash: z.ZodString;
35
+ }, "strip", z.ZodTypeAny, {
36
+ title: string;
37
+ orientation: "portrait" | "landscape";
38
+ tags: string[];
39
+ entry: string;
40
+ descriptions: {
41
+ locale: string;
42
+ body: string;
43
+ }[];
44
+ buildHash: string;
45
+ releaseName?: string | undefined;
46
+ }, {
47
+ title: string;
48
+ entry: string;
49
+ descriptions: {
50
+ locale: string;
51
+ body: string;
52
+ }[];
53
+ buildHash: string;
54
+ releaseName?: string | undefined;
55
+ orientation?: "portrait" | "landscape" | undefined;
56
+ tags?: string[] | undefined;
57
+ }>;
58
+ export type PublishVersionRequest = z.infer<typeof publishVersionRequestSchema>;
59
+ export interface CreatorResponse {
60
+ id: string;
61
+ email: string;
62
+ name: string;
63
+ createdAt: string;
64
+ }
65
+ export interface RegisterCreatorRequest {
66
+ email: string;
67
+ password: string;
68
+ name: string;
69
+ }
70
+ export interface IssueTokenRequest {
71
+ email: string;
72
+ password: string;
73
+ name: string;
74
+ }
75
+ export interface TokenResponse {
76
+ token: string;
77
+ tokenId: string;
78
+ name: string;
79
+ createdAt: string;
80
+ }
81
+ export interface VersionResponse {
82
+ id: string;
83
+ gameId: string;
84
+ version: number;
85
+ releaseName?: string | null;
86
+ buildHash: string;
87
+ descriptions: Array<{
88
+ locale: string;
89
+ body: string;
90
+ }>;
91
+ entry: string;
92
+ status: z.infer<typeof versionStatusSchema>;
93
+ sizeBytes: number;
94
+ playUrl: string | null;
95
+ createdAt: string;
96
+ }
97
+ export interface PublishVersionResponse {
98
+ game: {
99
+ id: string;
100
+ slug: string;
101
+ title: string;
102
+ orientation: z.infer<typeof orientationSchema>;
103
+ tags: string[];
104
+ createdAt: string;
105
+ updatedAt: string;
106
+ };
107
+ version: VersionResponse;
108
+ }
109
+ export interface ListVersionsResponse {
110
+ versions: VersionResponse[];
111
+ }
112
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/shared/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,sCAAoC,CAAC;AACnE,eAAO,MAAM,mBAAmB,uDAAqD,CAAC;AACtF,eAAO,MAAM,cAAc,aAKW,CAAC;AACvC,eAAO,MAAM,cAAc,+CAAgE,CAAC;AAC5F,eAAO,MAAM,iBAAiB,aAK6C,CAAC;AAC5E,eAAO,MAAM,eAAe,aAAoE,CAAC;AACjG,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishVersionRequestSchema = exports.versionDescriptionSchema = exports.buildHashSchema = exports.releaseNameSchema = exports.gameTagsSchema = exports.gameSlugSchema = exports.versionStatusSchema = exports.orientationSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.orientationSchema = zod_1.z.enum(['portrait', 'landscape']);
6
+ exports.versionStatusSchema = zod_1.z.enum(['DRAFT', 'SUBMITTED', 'LIVE', 'REJECTED']);
7
+ exports.gameSlugSchema = zod_1.z
8
+ .string()
9
+ .trim()
10
+ .min(3)
11
+ .max(64)
12
+ .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
13
+ exports.gameTagsSchema = zod_1.z.array(zod_1.z.string().trim().min(1).max(24)).max(12).default([]);
14
+ exports.releaseNameSchema = zod_1.z
15
+ .string()
16
+ .trim()
17
+ .min(1)
18
+ .max(80)
19
+ .regex(/^(draft|\d+\.\d+\.\d+)$/, 'must be "draft" or semver like 1.0.1');
20
+ exports.buildHashSchema = zod_1.z.string().regex(/^[a-f0-9]{64}$/, 'must be a sha256 hex digest');
21
+ exports.versionDescriptionSchema = zod_1.z.object({
22
+ locale: zod_1.z.string().trim().min(2).max(16).regex(/^[a-z]{2}(?:-[A-Z]{2})?$/),
23
+ body: zod_1.z.string().trim().min(1).max(500),
24
+ });
25
+ exports.publishVersionRequestSchema = zod_1.z.object({
26
+ releaseName: exports.releaseNameSchema.optional(),
27
+ title: zod_1.z.string().trim().min(1).max(120),
28
+ orientation: exports.orientationSchema.default('portrait'),
29
+ tags: exports.gameTagsSchema,
30
+ entry: zod_1.z.string().trim().min(1).max(255),
31
+ descriptions: zod_1.z.array(exports.versionDescriptionSchema).min(1),
32
+ buildHash: exports.buildHashSchema,
33
+ });
34
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/shared/contracts.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,iBAAiB,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACtD,QAAA,mBAAmB,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACzE,QAAA,cAAc,GAAG,OAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC1B,QAAA,cAAc,GAAG,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC/E,QAAA,iBAAiB,GAAG,OAAC;KAC/B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;AAC/D,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;AACpF,QAAA,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;IAC1E,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACxC,CAAC,CAAC;AAEU,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,WAAW,EAAE,yBAAiB,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,WAAW,EAAE,yBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC;IAClD,IAAI,EAAE,sBAAc;IACpB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,gCAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,SAAS,EAAE,uBAAe;CAC3B,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface Archive {
2
+ data: Buffer;
3
+ /** sha256 hex of the produced archive bytes. */
4
+ hash: string;
5
+ }
6
+ /** Packs a directory into a deterministic gzipped tarball and hashes the bytes. */
7
+ export declare function createTarGz(cwd: string, entries?: string[]): Promise<Archive>;
8
+ //# sourceMappingURL=create-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-archive.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/archive/create-archive.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAS1F"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTarGz = createTarGz;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const tar_1 = require("tar");
6
+ /** Packs a directory into a deterministic gzipped tarball and hashes the bytes. */
7
+ async function createTarGz(cwd, entries = ['.']) {
8
+ const stream = (0, tar_1.create)({ gzip: true, cwd, portable: true, noMtime: true }, entries);
9
+ const chunks = [];
10
+ for await (const chunk of stream) {
11
+ chunks.push(Buffer.from(chunk));
12
+ }
13
+ const data = Buffer.concat(chunks);
14
+ const hash = (0, node_crypto_1.createHash)('sha256').update(data).digest('hex');
15
+ return { data, hash };
16
+ }
17
+ //# sourceMappingURL=create-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-archive.js","sourceRoot":"","sources":["../../../../src/shared/lib/archive/create-archive.ts"],"names":[],"mappings":";;AAUA,kCASC;AAnBD,6CAAyC;AACzC,6BAA6B;AAQ7B,mFAAmF;AAC5E,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,UAAoB,CAAC,GAAG,CAAC;IACtE,MAAM,MAAM,GAAG,IAAA,YAAM,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createTarGz } from './create-archive';
2
+ export type { Archive } from './create-archive';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/archive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTarGz = void 0;
4
+ var create_archive_1 = require("./create-archive");
5
+ Object.defineProperty(exports, "createTarGz", { enumerable: true, get: function () { return create_archive_1.createTarGz; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/lib/archive/index.ts"],"names":[],"mappings":";;;AAAA,mDAA+C;AAAtC,6GAAA,WAAW,OAAA"}
@@ -0,0 +1,3 @@
1
+ export { ConsoleReporter } from './reporter';
2
+ export type { Reporter } from './reporter';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/console/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleReporter = void 0;
4
+ var reporter_1 = require("./reporter");
5
+ Object.defineProperty(exports, "ConsoleReporter", { enumerable: true, get: function () { return reporter_1.ConsoleReporter; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/lib/console/index.ts"],"names":[],"mappings":";;;AAAA,uCAA6C;AAApC,2GAAA,eAAe,OAAA"}
@@ -0,0 +1,12 @@
1
+ /** Output abstraction so commands stay testable instead of calling console directly. */
2
+ export interface Reporter {
3
+ info(message: string): void;
4
+ success(message: string): void;
5
+ warn(message: string): void;
6
+ }
7
+ export declare class ConsoleReporter implements Reporter {
8
+ info(message: string): void;
9
+ success(message: string): void;
10
+ warn(message: string): void;
11
+ }
12
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/console/reporter.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAI5B"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConsoleReporter = void 0;
7
+ const picocolors_1 = __importDefault(require("picocolors"));
8
+ class ConsoleReporter {
9
+ info(message) {
10
+ // eslint-disable-next-line no-console
11
+ console.log(message);
12
+ }
13
+ success(message) {
14
+ // eslint-disable-next-line no-console
15
+ console.log(`${picocolors_1.default.green('✓')} ${message}`);
16
+ }
17
+ warn(message) {
18
+ // eslint-disable-next-line no-console
19
+ console.warn(`${picocolors_1.default.yellow('!')} ${message}`);
20
+ }
21
+ }
22
+ exports.ConsoleReporter = ConsoleReporter;
23
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../../src/shared/lib/console/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAS5B,MAAa,eAAe;IAC1B,IAAI,CAAC,OAAe;QAClB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,oBAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,oBAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF;AAfD,0CAeC"}
@@ -0,0 +1,6 @@
1
+ /** A user-facing CLI failure: its message is printed and the process exits with exitCode. */
2
+ export declare class CliError extends Error {
3
+ readonly exitCode: number;
4
+ constructor(message: string, exitCode?: number);
5
+ }
6
+ //# sourceMappingURL=cli-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/errors/cli-error.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,qBAAa,QAAS,SAAQ,KAAK;IAG/B,QAAQ,CAAC,QAAQ;gBADjB,OAAO,EAAE,MAAM,EACN,QAAQ,SAAI;CAKxB"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliError = void 0;
4
+ /** A user-facing CLI failure: its message is printed and the process exits with exitCode. */
5
+ class CliError extends Error {
6
+ exitCode;
7
+ constructor(message, exitCode = 1) {
8
+ super(message);
9
+ this.exitCode = exitCode;
10
+ this.name = 'CliError';
11
+ }
12
+ }
13
+ exports.CliError = CliError;
14
+ //# sourceMappingURL=cli-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-error.js","sourceRoot":"","sources":["../../../../src/shared/lib/errors/cli-error.ts"],"names":[],"mappings":";;;AAAA,6FAA6F;AAC7F,MAAa,QAAS,SAAQ,KAAK;IAGtB;IAFX,YACE,OAAe,EACN,WAAW,CAAC;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,aAAQ,GAAR,QAAQ,CAAI;QAGrB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AARD,4BAQC"}
@@ -0,0 +1,2 @@
1
+ export { CliError } from './cli-error';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliError = void 0;
4
+ var cli_error_1 = require("./cli-error");
5
+ Object.defineProperty(exports, "CliError", { enumerable: true, get: function () { return cli_error_1.CliError; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/lib/errors/index.ts"],"names":[],"mappings":";;;AAAA,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
@@ -0,0 +1,6 @@
1
+ export declare function pathExists(path: string): Promise<boolean>;
2
+ export declare function readJsonFile<T>(path: string): Promise<T>;
3
+ export declare function writeJsonFile(path: string, data: unknown): Promise<void>;
4
+ export declare function fileSize(path: string): Promise<number>;
5
+ export declare function ensureDir(path: string): Promise<void>;
6
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/fs/fs.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9E;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pathExists = pathExists;
4
+ exports.readJsonFile = readJsonFile;
5
+ exports.writeJsonFile = writeJsonFile;
6
+ exports.fileSize = fileSize;
7
+ exports.ensureDir = ensureDir;
8
+ const promises_1 = require("node:fs/promises");
9
+ const node_path_1 = require("node:path");
10
+ async function pathExists(path) {
11
+ try {
12
+ await (0, promises_1.access)(path);
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ async function readJsonFile(path) {
20
+ return JSON.parse(await (0, promises_1.readFile)(path, 'utf8'));
21
+ }
22
+ async function writeJsonFile(path, data) {
23
+ await (0, promises_1.mkdir)((0, node_path_1.dirname)(path), { recursive: true });
24
+ await (0, promises_1.writeFile)(path, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
25
+ }
26
+ async function fileSize(path) {
27
+ return (await (0, promises_1.stat)(path)).size;
28
+ }
29
+ async function ensureDir(path) {
30
+ await (0, promises_1.mkdir)(path, { recursive: true });
31
+ }
32
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../../src/shared/lib/fs/fs.ts"],"names":[],"mappings":";;AAGA,gCAOC;AAED,oCAEC;AAED,sCAGC;AAED,4BAEC;AAED,8BAEC;AA3BD,+CAA4E;AAC5E,yCAAoC;AAE7B,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAAI,IAAY;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;AACvD,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,IAAa;IAC7D,MAAM,IAAA,gBAAK,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,IAAA,oBAAS,EAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,CAAC,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,IAAA,gBAAK,EAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ensureDir, fileSize, pathExists, readJsonFile, writeJsonFile } from './fs';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/fs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeJsonFile = exports.readJsonFile = exports.pathExists = exports.fileSize = exports.ensureDir = void 0;
4
+ var fs_1 = require("./fs");
5
+ Object.defineProperty(exports, "ensureDir", { enumerable: true, get: function () { return fs_1.ensureDir; } });
6
+ Object.defineProperty(exports, "fileSize", { enumerable: true, get: function () { return fs_1.fileSize; } });
7
+ Object.defineProperty(exports, "pathExists", { enumerable: true, get: function () { return fs_1.pathExists; } });
8
+ Object.defineProperty(exports, "readJsonFile", { enumerable: true, get: function () { return fs_1.readJsonFile; } });
9
+ Object.defineProperty(exports, "writeJsonFile", { enumerable: true, get: function () { return fs_1.writeJsonFile; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/lib/fs/index.ts"],"names":[],"mappings":";;;AAAA,2BAAoF;AAA3E,+FAAA,SAAS,OAAA;AAAE,8FAAA,QAAQ,OAAA;AAAE,gGAAA,UAAU,OAAA;AAAE,kGAAA,YAAY,OAAA;AAAE,mGAAA,aAAa,OAAA"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@vibegameengine/shipit",
3
+ "version": "0.1.2",
4
+ "description": "Shipit CLI for publishing playable web games to Vibe Game Engine",
5
+ "keywords": [
6
+ "vibegameengine",
7
+ "shipit",
8
+ "cli",
9
+ "games",
10
+ "html5"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/vibegameengine/ptb-games.git",
15
+ "directory": "apps/cli"
16
+ },
17
+ "homepage": "https://github.com/vibegameengine/ptb-games/tree/main/apps/cli",
18
+ "bugs": {
19
+ "url": "https://github.com/vibegameengine/ptb-games/issues"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public",
23
+ "registry": "https://registry.npmjs.org/"
24
+ },
25
+ "bin": {
26
+ "shipit": "dist/bin.js"
27
+ },
28
+ "main": "./dist/bin.js",
29
+ "types": "./dist/bin.d.ts",
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "scripts": {
34
+ "clean": "rm -rf dist",
35
+ "build": "npm run clean && tsc -p tsconfig.json",
36
+ "start": "node dist/bin.js"
37
+ },
38
+ "dependencies": {
39
+ "commander": "^12.1.0",
40
+ "picocolors": "^1.0.1",
41
+ "tar": "^6.2.1",
42
+ "zod": "^3.23.8"
43
+ },
44
+ "devDependencies": {
45
+ "@types/tar": "^6.1.13"
46
+ }
47
+ }