@ollie-shop/cli 0.3.0 → 0.3.3

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 (139) hide show
  1. package/.turbo/turbo-build.log +14 -2
  2. package/CHANGELOG.md +48 -0
  3. package/__tests__/mocks/core.ts +1 -1
  4. package/dist/index.d.ts +0 -2
  5. package/dist/index.js +40631 -75
  6. package/package.json +7 -6
  7. package/src/actions/component.actions.ts +148 -204
  8. package/src/actions/function.actions.ts +78 -171
  9. package/src/actions/project.actions.ts +16 -11
  10. package/src/commands/__tests__/component.test.ts +4 -7
  11. package/src/commands/__tests__/function.test.ts +1 -1
  12. package/src/commands/__tests__/store-version.test.ts +1 -4
  13. package/src/commands/component.ts +0 -10
  14. package/src/commands/function.ts +5 -56
  15. package/src/schemas/command.schema.ts +296 -6
  16. package/src/utils/__tests__/rich-progress.test.ts +22 -11
  17. package/src/utils/cli-progress-reporter.ts +2 -2
  18. package/src/utils/command-parser.ts +0 -5
  19. package/src/utils/console.ts +33 -4
  20. package/src/utils/constants.ts +32 -0
  21. package/src/utils/deploy-helpers.ts +357 -0
  22. package/src/utils/errors.ts +133 -2
  23. package/src/utils/interactive-builder.ts +61 -7
  24. package/src/utils/rich-progress.ts +25 -14
  25. package/src/utils/validation-helpers.ts +145 -12
  26. package/tsup.config.ts +15 -0
  27. package/dist/__tests__/helpers/cli-test-helper.d.ts +0 -89
  28. package/dist/__tests__/helpers/cli-test-helper.d.ts.map +0 -1
  29. package/dist/__tests__/helpers/cli-test-helper.js +0 -220
  30. package/dist/__tests__/mocks/index.d.ts +0 -69
  31. package/dist/__tests__/mocks/index.d.ts.map +0 -1
  32. package/dist/__tests__/mocks/index.js +0 -77
  33. package/dist/actions/component.actions.d.ts +0 -14
  34. package/dist/actions/component.actions.d.ts.map +0 -1
  35. package/dist/actions/component.actions.js +0 -273
  36. package/dist/actions/function.actions.d.ts +0 -15
  37. package/dist/actions/function.actions.d.ts.map +0 -1
  38. package/dist/actions/function.actions.js +0 -254
  39. package/dist/actions/project.actions.d.ts +0 -17
  40. package/dist/actions/project.actions.d.ts.map +0 -1
  41. package/dist/actions/project.actions.js +0 -97
  42. package/dist/actions/version.actions.d.ts +0 -19
  43. package/dist/actions/version.actions.d.ts.map +0 -1
  44. package/dist/actions/version.actions.js +0 -216
  45. package/dist/commands/component.d.ts +0 -3
  46. package/dist/commands/component.d.ts.map +0 -1
  47. package/dist/commands/component.js +0 -192
  48. package/dist/commands/docs.d.ts +0 -3
  49. package/dist/commands/docs.d.ts.map +0 -1
  50. package/dist/commands/docs.js +0 -16
  51. package/dist/commands/function.d.ts +0 -3
  52. package/dist/commands/function.d.ts.map +0 -1
  53. package/dist/commands/function.js +0 -243
  54. package/dist/commands/help.d.ts +0 -3
  55. package/dist/commands/help.d.ts.map +0 -1
  56. package/dist/commands/help.js +0 -20
  57. package/dist/commands/index.d.ts +0 -3
  58. package/dist/commands/index.d.ts.map +0 -1
  59. package/dist/commands/index.js +0 -26
  60. package/dist/commands/login.d.ts +0 -3
  61. package/dist/commands/login.d.ts.map +0 -1
  62. package/dist/commands/login.js +0 -175
  63. package/dist/commands/project.d.ts +0 -3
  64. package/dist/commands/project.d.ts.map +0 -1
  65. package/dist/commands/project.js +0 -78
  66. package/dist/commands/store-version.d.ts +0 -3
  67. package/dist/commands/store-version.d.ts.map +0 -1
  68. package/dist/commands/store-version.js +0 -241
  69. package/dist/commands/version.d.ts +0 -3
  70. package/dist/commands/version.d.ts.map +0 -1
  71. package/dist/commands/version.js +0 -46
  72. package/dist/commands/whoami.d.ts +0 -3
  73. package/dist/commands/whoami.d.ts.map +0 -1
  74. package/dist/commands/whoami.js +0 -41
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/prompts/component.prompts.d.ts +0 -14
  77. package/dist/prompts/component.prompts.d.ts.map +0 -1
  78. package/dist/prompts/component.prompts.js +0 -75
  79. package/dist/prompts/function.prompts.d.ts +0 -21
  80. package/dist/prompts/function.prompts.d.ts.map +0 -1
  81. package/dist/prompts/function.prompts.js +0 -127
  82. package/dist/schemas/command.schema.d.ts +0 -516
  83. package/dist/schemas/command.schema.d.ts.map +0 -1
  84. package/dist/schemas/command.schema.js +0 -267
  85. package/dist/types/index.d.ts +0 -147
  86. package/dist/types/index.d.ts.map +0 -1
  87. package/dist/types/index.js +0 -18
  88. package/dist/utils/auth.d.ts +0 -4
  89. package/dist/utils/auth.d.ts.map +0 -1
  90. package/dist/utils/auth.js +0 -26
  91. package/dist/utils/cli-progress-reporter.d.ts +0 -12
  92. package/dist/utils/cli-progress-reporter.d.ts.map +0 -1
  93. package/dist/utils/cli-progress-reporter.js +0 -77
  94. package/dist/utils/command-builder.d.ts +0 -22
  95. package/dist/utils/command-builder.d.ts.map +0 -1
  96. package/dist/utils/command-builder.js +0 -268
  97. package/dist/utils/command-helpers.d.ts +0 -19
  98. package/dist/utils/command-helpers.d.ts.map +0 -1
  99. package/dist/utils/command-helpers.js +0 -79
  100. package/dist/utils/command-parser.d.ts +0 -146
  101. package/dist/utils/command-parser.d.ts.map +0 -1
  102. package/dist/utils/command-parser.js +0 -179
  103. package/dist/utils/command-suggestions.d.ts +0 -35
  104. package/dist/utils/command-suggestions.d.ts.map +0 -1
  105. package/dist/utils/command-suggestions.js +0 -152
  106. package/dist/utils/console.d.ts +0 -44
  107. package/dist/utils/console.d.ts.map +0 -1
  108. package/dist/utils/console.js +0 -233
  109. package/dist/utils/constants.d.ts +0 -8
  110. package/dist/utils/constants.d.ts.map +0 -1
  111. package/dist/utils/constants.js +0 -10
  112. package/dist/utils/context-detector.d.ts +0 -12
  113. package/dist/utils/context-detector.d.ts.map +0 -1
  114. package/dist/utils/context-detector.js +0 -155
  115. package/dist/utils/enhanced-error-handler.d.ts +0 -47
  116. package/dist/utils/enhanced-error-handler.d.ts.map +0 -1
  117. package/dist/utils/enhanced-error-handler.js +0 -221
  118. package/dist/utils/error-handler.d.ts +0 -3
  119. package/dist/utils/error-handler.d.ts.map +0 -1
  120. package/dist/utils/error-handler.js +0 -55
  121. package/dist/utils/errors.d.ts +0 -44
  122. package/dist/utils/errors.d.ts.map +0 -1
  123. package/dist/utils/errors.js +0 -76
  124. package/dist/utils/interactive-builder.d.ts +0 -22
  125. package/dist/utils/interactive-builder.d.ts.map +0 -1
  126. package/dist/utils/interactive-builder.js +0 -246
  127. package/dist/utils/rich-progress.d.ts +0 -59
  128. package/dist/utils/rich-progress.d.ts.map +0 -1
  129. package/dist/utils/rich-progress.js +0 -234
  130. package/dist/utils/store.d.ts +0 -11
  131. package/dist/utils/store.d.ts.map +0 -1
  132. package/dist/utils/store.js +0 -19
  133. package/dist/utils/validation-error-formatter.d.ts +0 -25
  134. package/dist/utils/validation-error-formatter.d.ts.map +0 -1
  135. package/dist/utils/validation-error-formatter.js +0 -258
  136. package/dist/utils/validation-helpers.d.ts +0 -60
  137. package/dist/utils/validation-helpers.d.ts.map +0 -1
  138. package/dist/utils/validation-helpers.js +0 -152
  139. package/src/commands/__tests__/version.test.ts +0 -71
@@ -1,246 +0,0 @@
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.InteractiveCommandBuilder = void 0;
7
- exports.runInteractiveCommand = runInteractiveCommand;
8
- const core_1 = require("@ollie-shop/core");
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const inquirer_1 = __importDefault(require("inquirer"));
11
- class InteractiveCommandBuilder {
12
- constructor(console) {
13
- this.console = console;
14
- }
15
- /**
16
- * Build component deploy command interactively
17
- */
18
- async buildDeployComponentCommand() {
19
- this.console.log(chalk_1.default.blue.bold("\n🚀 Component Deployment Wizard\n"));
20
- try {
21
- // Get available components (mock data for now)
22
- const components = await this.getAvailableComponents();
23
- const answers = await inquirer_1.default.prompt([
24
- {
25
- type: "list",
26
- name: "component",
27
- message: "Select component to deploy:",
28
- choices: components.map((c) => ({
29
- name: `${c.name} (${c.slot}) - v${c.version || "1.0.0"} - ${chalk_1.default.dim(`Created ${new Date(c.createdAt).toLocaleDateString()}`)}`,
30
- value: c.id,
31
- })),
32
- },
33
- {
34
- type: "checkbox",
35
- name: "options",
36
- message: "Deployment options:",
37
- choices: [
38
- { name: "Wait for completion", value: "wait", checked: true },
39
- { name: "Run tests before deploy", value: "test", checked: true },
40
- {
41
- name: "Enable verbose logging",
42
- value: "verbose",
43
- checked: false,
44
- },
45
- ],
46
- },
47
- ]);
48
- // Build the command
49
- let command = `ollieshop component deploy --id ${answers.component}`;
50
- if (answers.options.includes("wait")) {
51
- command += " --wait";
52
- }
53
- if (answers.options.includes("verbose")) {
54
- command += " --verbose";
55
- }
56
- // Show preview
57
- this.console.log(`\n${chalk_1.default.dim("[Preview] This will run:")}`);
58
- this.console.log(chalk_1.default.cyan(` ${command}\n`));
59
- // Confirm execution
60
- const { proceed } = await inquirer_1.default.prompt({
61
- type: "confirm",
62
- name: "proceed",
63
- message: "Execute this command?",
64
- default: true,
65
- });
66
- if (proceed) {
67
- // Execute the command
68
- this.console.log(chalk_1.default.dim("\nExecuting command...\n"));
69
- // Import and execute the action directly
70
- const { deployComponent } = await import("../actions/component.actions.js");
71
- const deployOptions = {
72
- componentId: answers.component,
73
- path: process.cwd(),
74
- wait: answers.options.includes("wait"),
75
- };
76
- await deployComponent(deployOptions, this.console);
77
- }
78
- else {
79
- this.console.log(chalk_1.default.yellow("\n⚠️ Deployment cancelled"));
80
- }
81
- }
82
- catch (error) {
83
- if (error instanceof Error && error.name === "ExitPromptError") {
84
- this.console.log(chalk_1.default.yellow("\n⚠️ Wizard cancelled"));
85
- }
86
- else {
87
- throw error;
88
- }
89
- }
90
- }
91
- /**
92
- * Build component create command interactively
93
- */
94
- async buildCreateComponentCommand() {
95
- this.console.log(chalk_1.default.blue.bold("\n🎨 Component Creation Wizard\n"));
96
- try {
97
- const answers = await inquirer_1.default.prompt([
98
- {
99
- type: "input",
100
- name: "name",
101
- message: "Component name:",
102
- validate: (input) => {
103
- if (!input)
104
- return "Component name is required";
105
- if (!/^[a-z0-9-]+$/.test(input)) {
106
- return "Must be lowercase with hyphens only (e.g., header-nav)";
107
- }
108
- return true;
109
- },
110
- transformer: (input) => {
111
- // Show live validation
112
- if (!/^[a-z0-9-]+$/.test(input) && input) {
113
- return chalk_1.default.red(input);
114
- }
115
- return input;
116
- },
117
- },
118
- {
119
- type: "list",
120
- name: "slot",
121
- message: "Component slot:",
122
- choices: core_1.ComponentSlot.options.map((slot) => ({
123
- name: slot.charAt(0).toUpperCase() + slot.slice(1).replace(/-/g, " "),
124
- value: slot,
125
- })),
126
- default: "main",
127
- },
128
- {
129
- type: "list",
130
- name: "language",
131
- message: "Language:",
132
- choices: [
133
- { name: "TypeScript (recommended)", value: "typescript" },
134
- { name: "JavaScript", value: "javascript" },
135
- ],
136
- default: "typescript",
137
- },
138
- {
139
- type: "confirm",
140
- name: "tests",
141
- message: "Include test files?",
142
- default: true,
143
- },
144
- ]);
145
- // Build the command
146
- let command = `ollieshop component create --name ${answers.name}`;
147
- if (answers.slot !== "main") {
148
- command += ` --slot ${answers.slot}`;
149
- }
150
- if (answers.language === "javascript") {
151
- command += " --no-typescript";
152
- }
153
- if (!answers.tests) {
154
- command += " --no-tests";
155
- }
156
- // Show preview
157
- this.console.log(`\n${chalk_1.default.dim("[Preview] This will run:")}`);
158
- this.console.log(chalk_1.default.cyan(` ${command}\n`));
159
- // Confirm execution
160
- const { proceed } = await inquirer_1.default.prompt({
161
- type: "confirm",
162
- name: "proceed",
163
- message: "Create this component?",
164
- default: true,
165
- });
166
- if (proceed) {
167
- // Execute the command
168
- this.console.log(chalk_1.default.dim("\nCreating component...\n"));
169
- const { createComponent } = await import("../actions/component.actions.js");
170
- await createComponent({
171
- name: answers.name,
172
- slot: answers.slot,
173
- tests: answers.tests,
174
- }, this.console);
175
- }
176
- else {
177
- this.console.log(chalk_1.default.yellow("\n⚠️ Component creation cancelled"));
178
- }
179
- }
180
- catch (error) {
181
- if (error instanceof Error && error.name === "ExitPromptError") {
182
- this.console.log(chalk_1.default.yellow("\n⚠️ Wizard cancelled"));
183
- }
184
- else {
185
- throw error;
186
- }
187
- }
188
- }
189
- /**
190
- * Get available components (mock for now)
191
- */
192
- async getAvailableComponents() {
193
- // TODO: Replace with actual API call
194
- return [
195
- {
196
- id: "comp_header_123",
197
- name: "header-nav",
198
- slot: "header",
199
- version: "1.2.0",
200
- enabled: true,
201
- createdAt: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),
202
- type: "ui",
203
- description: "Navigation header component",
204
- },
205
- {
206
- id: "comp_cart_456",
207
- name: "shopping-cart",
208
- slot: "sidebar",
209
- version: "1.0.0",
210
- enabled: true,
211
- createdAt: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
212
- type: "ui",
213
- description: "Shopping cart widget",
214
- },
215
- {
216
- id: "comp_product_789",
217
- name: "product-list",
218
- slot: "main",
219
- version: "2.1.0",
220
- enabled: true,
221
- createdAt: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(),
222
- type: "ui",
223
- description: "Product listing component",
224
- },
225
- ];
226
- }
227
- }
228
- exports.InteractiveCommandBuilder = InteractiveCommandBuilder;
229
- /**
230
- * Create an interactive command builder
231
- */
232
- async function runInteractiveCommand(command, console) {
233
- const builder = new InteractiveCommandBuilder(console);
234
- switch (command) {
235
- case "deploy":
236
- case "component-deploy":
237
- await builder.buildDeployComponentCommand();
238
- break;
239
- case "create":
240
- case "component-create":
241
- await builder.buildCreateComponentCommand();
242
- break;
243
- default:
244
- console.warn(`Interactive mode not available for command: ${command}`);
245
- }
246
- }
@@ -1,59 +0,0 @@
1
- interface CLIBuildProgress {
2
- phase: string;
3
- message: string;
4
- progress: number;
5
- metadata?: {
6
- bundleSize?: number;
7
- gzippedSize?: number;
8
- dependencies?: number;
9
- removedExports?: number;
10
- };
11
- }
12
- export declare class RichProgressReporter {
13
- private multibar;
14
- private bars;
15
- private steps;
16
- private startTime;
17
- private stats;
18
- constructor();
19
- /**
20
- * Custom format for progress bars
21
- */
22
- private formatBar;
23
- /**
24
- * Start progress tracking
25
- */
26
- start(): void;
27
- private readonly stepMap;
28
- /**
29
- * Update progress based on CLIBuildProgress
30
- */
31
- updateProgress(progress: CLIBuildProgress): void;
32
- private updateBar;
33
- private updatePreviousSteps;
34
- private markStepComplete;
35
- private updateStats;
36
- /**
37
- * Stop progress tracking
38
- */
39
- stop(success?: boolean): void;
40
- /**
41
- * Show success summary with stats
42
- */
43
- private showSuccessSummary;
44
- }
45
- /**
46
- * Simple progress reporter for single operations
47
- */
48
- export declare class SimpleProgressReporter {
49
- private message;
50
- private spinner;
51
- private startTime;
52
- constructor(message: string);
53
- start(): void;
54
- update(message: string): void;
55
- succeed(message?: string): void;
56
- fail(message?: string): void;
57
- }
58
- export {};
59
- //# sourceMappingURL=rich-progress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-progress.d.ts","sourceRoot":"","sources":["../../src/utils/rich-progress.ts"],"names":[],"mappings":"AAKA,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAUD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,IAAI,CAAiD;IAC7D,OAAO,CAAC,KAAK,CAMX;IACF,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,KAAK,CAKN;;IAkEP;;OAEG;IACH,OAAO,CAAC,SAAS;IAqCjB;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb,OAAO,CAAC,QAAQ,CAAC,OAAO,CAMtB;IAEF;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAShD,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,IAAI,CAAC,OAAO,UAAO,GAAG,IAAI;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA+B3B;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAIrB,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,SAAS,CAAS;gBAEN,OAAO,EAAE,MAAM;IAInC,KAAK,IAAI,IAAI;IAQb,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/B,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAK7B"}
@@ -1,234 +0,0 @@
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.SimpleProgressReporter = exports.RichProgressReporter = void 0;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const cli_progress_1 = __importDefault(require("cli-progress"));
9
- class RichProgressReporter {
10
- constructor() {
11
- this.bars = new Map();
12
- this.steps = [
13
- { name: "Validating", emoji: "🔍", weight: 10 },
14
- { name: "Building", emoji: "🔨", weight: 40 },
15
- { name: "Optimizing", emoji: "⚡", weight: 20 },
16
- { name: "Deploying", emoji: "🚀", weight: 20 },
17
- { name: "Verifying", emoji: "✅", weight: 10 },
18
- ];
19
- this.startTime = Date.now();
20
- this.stats = {};
21
- this.stepMap = {
22
- validate: "Validating",
23
- build: "Building",
24
- optimize: "Optimizing",
25
- upload: "Deploying",
26
- verify: "Verifying",
27
- };
28
- // Create a formatter function that matches cli-progress expectations
29
- const formatter = (options, params, payload) => {
30
- // Safe type conversion with validation
31
- const formatOptions = {
32
- barCompleteString: typeof options.barCompleteString === "string"
33
- ? options.barCompleteString
34
- : undefined,
35
- barIncompleteString: typeof options.barIncompleteString === "string"
36
- ? options.barIncompleteString
37
- : undefined,
38
- barsize: typeof options.barsize === "number" ? options.barsize : undefined,
39
- };
40
- // Convert params to expected format
41
- const progressParams = {
42
- progress: typeof params.progress === "number" ? params.progress : 0,
43
- value: typeof params.value === "number" ? params.value : 0,
44
- total: typeof params.total === "number" ? params.total : 0,
45
- eta: typeof params.eta === "number" ? params.eta : 0,
46
- startTime: typeof params.startTime === "number" ? params.startTime : Date.now(),
47
- stopTime: typeof params.stopTime === "number" ? params.stopTime : null,
48
- duration: typeof params.duration === "number" ? params.duration : 0,
49
- };
50
- // Convert payload to expected format
51
- const progressPayload = {
52
- ...payload,
53
- emoji: typeof payload.emoji === "string" ? payload.emoji : undefined,
54
- step: typeof payload.step === "string" ? payload.step : undefined,
55
- message: typeof payload.message === "string" ? payload.message : undefined,
56
- startTime: typeof payload.startTime === "number" ? payload.startTime : undefined,
57
- };
58
- return this.formatBar(formatOptions, progressParams, progressPayload);
59
- };
60
- // Cast formatter to unknown first to bypass TypeScript's structural typing check
61
- // cli-progress expects a GenericFormatter but the type definitions don't match exactly
62
- const formatFunction = formatter;
63
- this.multibar = new cli_progress_1.default.MultiBar({
64
- format: formatFunction,
65
- barCompleteChar: "\u2588",
66
- barIncompleteChar: "\u2591",
67
- hideCursor: true,
68
- clearOnComplete: false,
69
- forceRedraw: true,
70
- }, cli_progress_1.default.Presets.shades_classic);
71
- }
72
- /**
73
- * Custom format for progress bars
74
- */
75
- formatBar(options, params, payload) {
76
- const barCompleteString = options.barCompleteString || "\u2588";
77
- const barIncompleteString = options.barIncompleteString || "\u2591";
78
- const barsize = options.barsize || 40;
79
- const bar = barCompleteString.substring(0, Math.round(params.progress * barsize));
80
- const empty = barIncompleteString.substring(0, barsize - bar.length);
81
- const percent = Math.round(params.progress * 100);
82
- const emoji = payload.emoji || "📦";
83
- const step = payload.step || "Processing";
84
- const message = payload.message || "";
85
- let line = `${emoji} ${step.padEnd(12)} ${bar}${empty} ${percent.toString().padStart(3)}%`;
86
- if (percent === 100 && payload.startTime) {
87
- const duration = ((Date.now() - payload.startTime) / 1000).toFixed(1);
88
- line += chalk_1.default.green(` ✓ ${duration}s`);
89
- }
90
- else if (message) {
91
- line += chalk_1.default.dim(` | ${message}`);
92
- }
93
- return line;
94
- }
95
- /**
96
- * Start progress tracking
97
- */
98
- start() {
99
- console.log(chalk_1.default.blue.bold("\n🚀 Starting deployment...\n"));
100
- // Create bars for each step
101
- for (const step of this.steps) {
102
- const bar = this.multibar.create(100, 0, {
103
- emoji: step.emoji,
104
- step: step.name,
105
- startTime: Date.now(),
106
- });
107
- this.bars.set(step.name, bar);
108
- }
109
- }
110
- /**
111
- * Update progress based on CLIBuildProgress
112
- */
113
- updateProgress(progress) {
114
- const { phase, message, progress: percent } = progress;
115
- const stepName = this.stepMap[phase] || "Processing";
116
- this.updateBar(stepName, percent, message);
117
- this.updatePreviousSteps(stepName);
118
- this.updateStats(progress.metadata);
119
- }
120
- updateBar(stepName, percent, message) {
121
- const bar = this.bars.get(stepName);
122
- if (bar) {
123
- bar.update(percent * 100, { message });
124
- }
125
- }
126
- updatePreviousSteps(currentStepName) {
127
- let foundCurrent = false;
128
- for (const step of this.steps) {
129
- if (step.name === currentStepName) {
130
- foundCurrent = true;
131
- step.status = "active";
132
- }
133
- else if (!foundCurrent) {
134
- this.markStepComplete(step);
135
- }
136
- }
137
- }
138
- markStepComplete(step) {
139
- step.status = "completed";
140
- const bar = this.bars.get(step.name);
141
- if (bar) {
142
- bar.update(100);
143
- }
144
- }
145
- updateStats(metadata) {
146
- if (!metadata)
147
- return;
148
- if (metadata.bundleSize) {
149
- this.stats.bundleSize = metadata.bundleSize;
150
- }
151
- if (metadata.gzippedSize) {
152
- this.stats.gzippedSize = metadata.gzippedSize;
153
- }
154
- }
155
- /**
156
- * Stop progress tracking
157
- */
158
- stop(success = true) {
159
- // Complete all bars if they exist
160
- if (this.bars.size > 0) {
161
- for (const bar of this.bars.values()) {
162
- bar.update(100);
163
- }
164
- }
165
- this.multibar.stop();
166
- // Show summary
167
- if (success) {
168
- this.showSuccessSummary();
169
- }
170
- else {
171
- console.log(chalk_1.default.red("\n❌ Deployment failed\n"));
172
- }
173
- }
174
- /**
175
- * Show success summary with stats
176
- */
177
- showSuccessSummary() {
178
- const duration = ((Date.now() - this.startTime) / 1000).toFixed(1);
179
- console.log(chalk_1.default.green.bold("\n✅ Deployment completed successfully!\n"));
180
- if (Object.keys(this.stats).length > 0) {
181
- console.log(chalk_1.default.blue("📊 Build Stats:"));
182
- if (this.stats.bundleSize) {
183
- const sizeKB = (this.stats.bundleSize / 1024).toFixed(1);
184
- const gzipKB = this.stats.gzippedSize
185
- ? (this.stats.gzippedSize / 1024).toFixed(1)
186
- : "?";
187
- console.log(` • Bundle size: ${sizeKB}KB (gzipped: ${gzipKB}KB)`);
188
- }
189
- if (this.stats.removedExports) {
190
- console.log(` • Tree shaking: Removed ${this.stats.removedExports} unused exports`);
191
- }
192
- if (this.stats.dependencies) {
193
- console.log(` • Dependencies: ${this.stats.dependencies}`);
194
- }
195
- console.log("");
196
- }
197
- console.log(chalk_1.default.dim(`Total time: ${duration}s`));
198
- }
199
- }
200
- exports.RichProgressReporter = RichProgressReporter;
201
- /**
202
- * Simple progress reporter for single operations
203
- */
204
- class SimpleProgressReporter {
205
- constructor(message) {
206
- this.message = message;
207
- this.spinner = null;
208
- this.startTime = Date.now();
209
- }
210
- start() {
211
- const ora = require("ora");
212
- this.spinner = ora({
213
- text: this.message,
214
- spinner: "dots",
215
- }).start();
216
- }
217
- update(message) {
218
- if (this.spinner) {
219
- this.spinner.text = message;
220
- }
221
- }
222
- succeed(message) {
223
- if (this.spinner) {
224
- const duration = ((Date.now() - this.startTime) / 1000).toFixed(1);
225
- this.spinner.succeed(message || `${this.message} ${chalk_1.default.dim(`(${duration}s)`)}`);
226
- }
227
- }
228
- fail(message) {
229
- if (this.spinner) {
230
- this.spinner.fail(message || this.message);
231
- }
232
- }
233
- }
234
- exports.SimpleProgressReporter = SimpleProgressReporter;
@@ -1,11 +0,0 @@
1
- export type OllieConfig = {
2
- storeId: string;
3
- versionId: string;
4
- platform: string;
5
- platformStoreId: string;
6
- sessionId: string;
7
- props: unknown;
8
- theme: Record<string, unknown>;
9
- };
10
- export declare function getOllieConfig(): Promise<OllieConfig | null>;
11
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/utils/store.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CASlE"}
@@ -1,19 +0,0 @@
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.getOllieConfig = getOllieConfig;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- async function getOllieConfig() {
10
- try {
11
- const configPath = node_path_1.default.join(process.cwd(), "ollie.json");
12
- const raw = await promises_1.default.readFile(configPath, "utf-8");
13
- const data = JSON.parse(raw);
14
- return data;
15
- }
16
- catch {
17
- return null;
18
- }
19
- }
@@ -1,25 +0,0 @@
1
- import type { ZodError } from "zod";
2
- import type { CliConsole } from "./console";
3
- export interface ValidationError {
4
- field: string;
5
- message: string;
6
- suggestedValue?: string;
7
- examples?: ValidationExample[];
8
- }
9
- export interface ValidationExample {
10
- description: string;
11
- command: string;
12
- }
13
- /**
14
- * Format Zod errors into user-friendly validation errors
15
- */
16
- export declare function formatZodError(error: ZodError, context?: string): ValidationError[];
17
- /**
18
- * Display validation errors in a formatted way
19
- */
20
- export declare function displayErrors(console: CliConsole, errors: ValidationError[], command?: string): void;
21
- /**
22
- * Suggest a command from available commands
23
- */
24
- export declare function suggestCommand(input: string, availableCommands: string[]): string | undefined;
25
- //# sourceMappingURL=validation-error-formatter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation-error-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/validation-error-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,KAAK,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsGD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,MAAM,GACf,eAAe,EAAE,CAsBnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAyBN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAwCpB"}