@linktr.ee/linkapp 0.0.38 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +84 -59
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +66 -84
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/deploy.d.ts +15 -10
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +26 -199
- package/dist/commands/deploy.js.map +1 -1
- package/dist/lib/config/resolve-config-path.d.ts +19 -0
- package/dist/lib/config/resolve-config-path.d.ts.map +1 -0
- package/dist/lib/config/resolve-config-path.js +54 -0
- package/dist/lib/config/resolve-config-path.js.map +1 -0
- package/dist/lib/deploy/artifacts.d.ts +21 -0
- package/dist/lib/deploy/artifacts.d.ts.map +1 -0
- package/dist/lib/deploy/artifacts.js +35 -0
- package/dist/lib/deploy/artifacts.js.map +1 -0
- package/dist/lib/deploy/confirmation.d.ts +12 -0
- package/dist/lib/deploy/confirmation.d.ts.map +1 -0
- package/dist/lib/deploy/confirmation.js +30 -0
- package/dist/lib/deploy/confirmation.js.map +1 -0
- package/dist/lib/deploy/context.d.ts +44 -0
- package/dist/lib/deploy/context.d.ts.map +1 -0
- package/dist/lib/deploy/context.js +39 -0
- package/dist/lib/deploy/context.js.map +1 -0
- package/dist/lib/deploy/deploy-output.d.ts +10 -0
- package/dist/lib/deploy/deploy-output.d.ts.map +1 -0
- package/dist/lib/deploy/deploy-output.js +79 -0
- package/dist/lib/deploy/deploy-output.js.map +1 -0
- package/dist/lib/deploy/deploy-phases.d.ts +41 -0
- package/dist/lib/deploy/deploy-phases.d.ts.map +1 -0
- package/dist/lib/deploy/deploy-phases.js +116 -0
- package/dist/lib/deploy/deploy-phases.js.map +1 -0
- package/dist/lib/deploy/deploy-utils.d.ts +53 -0
- package/dist/lib/deploy/deploy-utils.d.ts.map +1 -0
- package/dist/lib/deploy/deploy-utils.js +149 -0
- package/dist/lib/deploy/deploy-utils.js.map +1 -0
- package/dist/lib/deploy/execution.d.ts +24 -0
- package/dist/lib/deploy/execution.d.ts.map +1 -0
- package/dist/lib/deploy/execution.js +29 -0
- package/dist/lib/deploy/execution.js.map +1 -0
- package/dist/lib/deploy/output.d.ts +16 -0
- package/dist/lib/deploy/output.d.ts.map +1 -0
- package/dist/lib/deploy/output.js +115 -0
- package/dist/lib/deploy/output.js.map +1 -0
- package/dist/lib/deploy/pack-project.js +2 -2
- package/dist/lib/deploy/pack-project.js.map +1 -1
- package/dist/lib/deploy/preflight.d.ts +9 -0
- package/dist/lib/deploy/preflight.d.ts.map +1 -0
- package/dist/lib/deploy/preflight.js +59 -0
- package/dist/lib/deploy/preflight.js.map +1 -0
- package/dist/lib/deploy/validation.d.ts.map +1 -1
- package/dist/lib/deploy/validation.js +6 -8
- package/dist/lib/deploy/validation.js.map +1 -1
- package/dist/lib/utils/constants.d.ts +42 -0
- package/dist/lib/utils/constants.d.ts.map +1 -0
- package/dist/lib/utils/constants.js +42 -0
- package/dist/lib/utils/constants.js.map +1 -0
- package/dist/lib/utils/errors.d.ts +49 -0
- package/dist/lib/utils/errors.d.ts.map +1 -0
- package/dist/lib/utils/errors.js +70 -0
- package/dist/lib/utils/errors.js.map +1 -0
- package/dist/lib/utils/formatters.d.ts +34 -0
- package/dist/lib/utils/formatters.d.ts.map +1 -0
- package/dist/lib/utils/formatters.js +59 -0
- package/dist/lib/utils/formatters.js.map +1 -0
- package/dist/lib/utils/output.d.ts +46 -0
- package/dist/lib/utils/output.d.ts.map +1 -0
- package/dist/lib/utils/output.js +66 -0
- package/dist/lib/utils/output.js.map +1 -0
- package/dist/sdk/use-open-popup.d.ts +23 -0
- package/dist/sdk/use-open-popup.d.ts.map +1 -0
- package/dist/sdk/use-open-popup.js +29 -0
- package/dist/sdk/use-open-popup.js.map +1 -0
- package/package.json +1 -26
- package/runtime/index.html +0 -1
- /package/dev-server/preview/{preview.tsx → Preview.tsx} +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
import { writeLine, writeSeparator, writeSuccess, writeError, writeWarning, writeLabelValue, } from '../utils/output.js';
|
|
3
|
+
import { formatElapsedTime, formatTimestamp } from '../utils/formatters.js';
|
|
4
|
+
import { isAPIError, DeploymentCancelledError, AuthenticationError, } from '../utils/errors.js';
|
|
5
|
+
import { URLS } from '../utils/constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Displays the successful deployment results including details and next steps.
|
|
8
|
+
*
|
|
9
|
+
* @param context - Deployment context
|
|
10
|
+
* @param result - Upload result from API
|
|
11
|
+
*/
|
|
12
|
+
export function displayDeploymentSuccess(context, result) {
|
|
13
|
+
const totalTime = formatElapsedTime(Date.now() - context.startTime);
|
|
14
|
+
writeLine();
|
|
15
|
+
writeSeparator();
|
|
16
|
+
writeSuccess('\nDeployment successful!');
|
|
17
|
+
writeIndented(`Completed in ${totalTime}`);
|
|
18
|
+
writeLine();
|
|
19
|
+
writeLine(pc.bold('Details:'));
|
|
20
|
+
writeLabelValue('ID', result.linkType.linkTypeId);
|
|
21
|
+
writeLabelValue('Status', result.linkType.status);
|
|
22
|
+
const timestamp = formatTimestamp(result.linkType.updatedTimestamp);
|
|
23
|
+
if (timestamp) {
|
|
24
|
+
writeLabelValue('Updated', timestamp);
|
|
25
|
+
}
|
|
26
|
+
displayNextSteps(context, result);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Displays next steps after successful deployment.
|
|
30
|
+
*
|
|
31
|
+
* @param context - Deployment context
|
|
32
|
+
* @param result - Upload result from API
|
|
33
|
+
*/
|
|
34
|
+
function displayNextSteps(context, result) {
|
|
35
|
+
writeLine();
|
|
36
|
+
writeLine(pc.bold('Next steps:'));
|
|
37
|
+
// Step 1: Build is happening
|
|
38
|
+
if (result.build?.id) {
|
|
39
|
+
const buildUrl = URLS.buildStatus(result.linkType.linkTypeId, result.build.id);
|
|
40
|
+
writeLine(pc.cyan(' 1. Building your LinkApp (this may take a few minutes):'));
|
|
41
|
+
writeIndented(buildUrl, 5);
|
|
42
|
+
writeLine();
|
|
43
|
+
}
|
|
44
|
+
// Step 2: Add to page (only after build completes)
|
|
45
|
+
const createUrl = context.env === 'qa'
|
|
46
|
+
? URLS.adminCreateLink.qa(result.linkType.linkTypeId)
|
|
47
|
+
: URLS.adminCreateLink.production(result.linkType.linkTypeId);
|
|
48
|
+
writeLine(pc.cyan(' 2. Once the build completes, add it to your page:'));
|
|
49
|
+
writeIndented(createUrl, 5);
|
|
50
|
+
writeLine();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Helper function to write indented text with dimmed styling.
|
|
54
|
+
*/
|
|
55
|
+
function writeIndented(text, indent = 2) {
|
|
56
|
+
writeLine(pc.dim(' '.repeat(indent) + text));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Displays deployment error information.
|
|
60
|
+
*
|
|
61
|
+
* @param error - Error that occurred during deployment
|
|
62
|
+
*/
|
|
63
|
+
export function displayDeploymentError(error) {
|
|
64
|
+
writeLine();
|
|
65
|
+
writeSeparator();
|
|
66
|
+
writeError('\nDeployment failed');
|
|
67
|
+
writeLine();
|
|
68
|
+
// Handle specific error types
|
|
69
|
+
if (error instanceof DeploymentCancelledError) {
|
|
70
|
+
writeWarning('Deployment cancelled');
|
|
71
|
+
writeLine();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (error instanceof AuthenticationError) {
|
|
75
|
+
writeIndented(error.userMessage ?? error.message);
|
|
76
|
+
writeLine();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Handle API errors with detailed information
|
|
80
|
+
if (isAPIError(error)) {
|
|
81
|
+
displayAPIError(error);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Handle generic errors
|
|
85
|
+
if (error instanceof Error) {
|
|
86
|
+
writeIndented(error.message);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
writeIndented(String(error));
|
|
90
|
+
}
|
|
91
|
+
writeLine();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Displays detailed API error information.
|
|
95
|
+
*
|
|
96
|
+
* @param error - API error with status and messages
|
|
97
|
+
*/
|
|
98
|
+
function displayAPIError(error) {
|
|
99
|
+
writeLine(pc.bold('Error Details:'));
|
|
100
|
+
writeLine(pc.red(` Status: ${error.statusCode}`));
|
|
101
|
+
if (error.messages.length > 0) {
|
|
102
|
+
writeLine();
|
|
103
|
+
writeLine(pc.bold(' Validation Errors:'));
|
|
104
|
+
for (const msg of error.messages) {
|
|
105
|
+
writeLine(pc.red(` • ${msg}`));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (error.responseData?.error) {
|
|
109
|
+
writeLine();
|
|
110
|
+
writeLine(pc.bold(' Error Type:'));
|
|
111
|
+
writeLine(pc.red(` ${error.responseData.error}`));
|
|
112
|
+
}
|
|
113
|
+
writeLine();
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/deploy/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ export async function packProject(options = {}) {
|
|
|
18
18
|
{ source: join(linkappDir, 'settings.json'), dest: 'settings.json', required: false },
|
|
19
19
|
{ source: join(linkappDir, 'url_match_rules.json'), dest: 'url_match_rules.json', required: false },
|
|
20
20
|
];
|
|
21
|
-
// Icon file from
|
|
22
|
-
const iconSource = join(projectPath, '
|
|
21
|
+
// Icon file from dist directory (copied during build from app/icon.svg)
|
|
22
|
+
const iconSource = join(projectPath, 'dist', 'icon.svg');
|
|
23
23
|
const packedFiles = [];
|
|
24
24
|
// Validate required files exist
|
|
25
25
|
for (const file of requiredFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-project.js","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAOhC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAuB,EAAE;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAEzE,gGAAgG;IAChG,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,2BAA2B,CAAA;IAEjG,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAA;IACvK,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAE7D,yCAAyC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG;QACpB,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpF,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;QACrF,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE;KACpG,CAAA;IAED
|
|
1
|
+
{"version":3,"file":"pack-project.js","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DeploymentContext } from './context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runs all preflight checks before deployment.
|
|
4
|
+
* Includes building the project and validating its structure.
|
|
5
|
+
*
|
|
6
|
+
* @param context - Deployment context
|
|
7
|
+
*/
|
|
8
|
+
export declare function runPreflightChecks(context: DeploymentContext): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/preflight.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAiDrD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import pc from 'picocolors';
|
|
4
|
+
import { buildCommand } from '../../commands/build.js';
|
|
5
|
+
import { validateProject, printValidationResults } from './validation.js';
|
|
6
|
+
import { ValidationError } from '../utils/errors.js';
|
|
7
|
+
import { writeLine, writeIndented } from '../utils/output.js';
|
|
8
|
+
import { formatElapsedTime } from '../utils/formatters.js';
|
|
9
|
+
/**
|
|
10
|
+
* Ensures the project has been built before deployment.
|
|
11
|
+
* Runs the build command if dist/ directory doesn't exist.
|
|
12
|
+
*
|
|
13
|
+
* @param context - Deployment context
|
|
14
|
+
*/
|
|
15
|
+
async function ensureProjectBuilt(context) {
|
|
16
|
+
if (context.options.skipBuild) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const distPath = join(context.projectPath, 'dist');
|
|
20
|
+
if (existsSync(distPath)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
writeLine(pc.bold('Building project...'));
|
|
24
|
+
const buildStart = Date.now();
|
|
25
|
+
await buildCommand({ sourcemap: false });
|
|
26
|
+
const buildTime = formatElapsedTime(Date.now() - buildStart);
|
|
27
|
+
writeIndented(`Completed in ${buildTime}`);
|
|
28
|
+
writeLine();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validates the project structure and configuration.
|
|
32
|
+
* Checks for required files, valid config, and proper setup.
|
|
33
|
+
*
|
|
34
|
+
* @param context - Deployment context
|
|
35
|
+
* @throws ValidationError if validation fails
|
|
36
|
+
*/
|
|
37
|
+
async function validateProjectStructure(_context) {
|
|
38
|
+
writeLine(pc.bold('Pre-deployment checks'));
|
|
39
|
+
const validationResult = await validateProject();
|
|
40
|
+
printValidationResults(validationResult);
|
|
41
|
+
if (!validationResult.success) {
|
|
42
|
+
writeLine();
|
|
43
|
+
throw new ValidationError('Validation failed');
|
|
44
|
+
}
|
|
45
|
+
writeLine();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Runs all preflight checks before deployment.
|
|
49
|
+
* Includes building the project and validating its structure.
|
|
50
|
+
*
|
|
51
|
+
* @param context - Deployment context
|
|
52
|
+
*/
|
|
53
|
+
export async function runPreflightChecks(context) {
|
|
54
|
+
await ensureProjectBuilt(context);
|
|
55
|
+
if (!context.options.skipChecks) {
|
|
56
|
+
await validateProjectStructure(context);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/lib/deploy/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D;;;;;GAKG;AACH,KAAK,UAAU,kBAAkB,CAAC,OAA0B;IAC1D,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAM;IACR,CAAC;IAED,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE7B,MAAM,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAExC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAA;IAC5D,aAAa,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAA;IAC1C,SAAS,EAAE,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,wBAAwB,CAAC,QAA2B;IACjE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAE3C,MAAM,gBAAgB,GAAG,MAAM,eAAe,EAAE,CAAA;IAChD,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;IAExC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC9B,SAAS,EAAE,CAAA;QACX,MAAM,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAChD,CAAC;IAED,SAAS,EAAE,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA0B;IACjE,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAEjC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/validation.ts"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,wBAAsB,eAAe,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CpG;AA6CD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAqBrE"}
|
|
@@ -2,20 +2,18 @@ import { existsSync, statSync, readdirSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
4
|
import pc from 'picocolors';
|
|
5
|
-
|
|
6
|
-
process.stdout.write(`${message}\n`);
|
|
7
|
-
};
|
|
5
|
+
import { resolveConfigPath, writeLine } from './deploy-utils.js';
|
|
8
6
|
export async function validateProject(projectPath = process.cwd()) {
|
|
9
7
|
const result = {
|
|
10
8
|
success: true,
|
|
11
9
|
errors: [],
|
|
12
10
|
warnings: [],
|
|
13
11
|
};
|
|
14
|
-
// Check config file exists (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
// Check config file exists (use shared resolver)
|
|
13
|
+
try {
|
|
14
|
+
resolveConfigPath(projectPath);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
19
17
|
result.errors.push('Config file missing: linkapp.config.ts');
|
|
20
18
|
result.success = false;
|
|
21
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/lib/deploy/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/lib/deploy/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display constants for formatting output
|
|
3
|
+
*/
|
|
4
|
+
export declare const DISPLAY: {
|
|
5
|
+
/** Maximum number of files to show in preview list */
|
|
6
|
+
readonly FILE_PREVIEW_LIMIT: 8;
|
|
7
|
+
/** Length of separator lines */
|
|
8
|
+
readonly SEPARATOR_LENGTH: 50;
|
|
9
|
+
/** Character used for separator lines */
|
|
10
|
+
readonly SEPARATOR_CHAR: "─";
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Timestamp constants for date/time handling
|
|
14
|
+
*/
|
|
15
|
+
export declare const TIMESTAMP: {
|
|
16
|
+
/** Threshold for detecting seconds vs milliseconds (year 2100 in seconds) */
|
|
17
|
+
readonly SECONDS_TO_MS_THRESHOLD: 10000000000;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* CLI command templates
|
|
21
|
+
*/
|
|
22
|
+
export declare const CLI_COMMANDS: {
|
|
23
|
+
readonly login: (qa: boolean) => string;
|
|
24
|
+
readonly build: () => string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* URL templates for deployment-related links
|
|
28
|
+
*/
|
|
29
|
+
export declare const URLS: {
|
|
30
|
+
/**
|
|
31
|
+
* Build status URL for LinkApp CI
|
|
32
|
+
*/
|
|
33
|
+
readonly buildStatus: (linkTypeId: string, buildId: string) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Admin URL for creating a link in production
|
|
36
|
+
*/
|
|
37
|
+
readonly adminCreateLink: {
|
|
38
|
+
readonly production: (linkTypeId: string) => string;
|
|
39
|
+
readonly qa: (linkTypeId: string) => string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO;IAClB,sDAAsD;;IAEtD,gCAAgC;;IAEhC,yCAAyC;;CAEjC,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB,6EAA6E;;CAErE,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,YAAY;yBACX,OAAO;;CAEX,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,IAAI;IACf;;OAEG;uCACuB,MAAM,WAAW,MAAM;IAGjD;;OAEG;;0CAEwB,MAAM;kCAEd,MAAM;;CAGjB,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display constants for formatting output
|
|
3
|
+
*/
|
|
4
|
+
export const DISPLAY = {
|
|
5
|
+
/** Maximum number of files to show in preview list */
|
|
6
|
+
FILE_PREVIEW_LIMIT: 8,
|
|
7
|
+
/** Length of separator lines */
|
|
8
|
+
SEPARATOR_LENGTH: 50,
|
|
9
|
+
/** Character used for separator lines */
|
|
10
|
+
SEPARATOR_CHAR: '─',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Timestamp constants for date/time handling
|
|
14
|
+
*/
|
|
15
|
+
export const TIMESTAMP = {
|
|
16
|
+
/** Threshold for detecting seconds vs milliseconds (year 2100 in seconds) */
|
|
17
|
+
SECONDS_TO_MS_THRESHOLD: 10000000000,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* CLI command templates
|
|
21
|
+
*/
|
|
22
|
+
export const CLI_COMMANDS = {
|
|
23
|
+
login: (qa) => `npx @linktr.ee/linkapp login${qa ? ' --qa' : ''}`,
|
|
24
|
+
build: () => 'linkapp build',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* URL templates for deployment-related links
|
|
28
|
+
*/
|
|
29
|
+
export const URLS = {
|
|
30
|
+
/**
|
|
31
|
+
* Build status URL for LinkApp CI
|
|
32
|
+
*/
|
|
33
|
+
buildStatus: (linkTypeId, buildId) => `https://linkapp-ci.replit.app/?linkTypeId=${linkTypeId}&buildId=${buildId}`,
|
|
34
|
+
/**
|
|
35
|
+
* Admin URL for creating a link in production
|
|
36
|
+
*/
|
|
37
|
+
adminCreateLink: {
|
|
38
|
+
production: (linkTypeId) => `https://linktr.ee/admin?action=create-link&linkType=${linkTypeId}`,
|
|
39
|
+
qa: (linkTypeId) => `https://qa.linktr.ee/admin?action=create-link&linkType=${linkTypeId}`,
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,sDAAsD;IACtD,kBAAkB,EAAE,CAAC;IACrB,gCAAgC;IAChC,gBAAgB,EAAE,EAAE;IACpB,yCAAyC;IACzC,cAAc,EAAE,GAAG;CACX,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,6EAA6E;IAC7E,uBAAuB,EAAE,WAAW;CAC5B,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC,EAAW,EAAE,EAAE,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;IAC1E,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe;CACpB,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB;;OAEG;IACH,WAAW,EAAE,CAAC,UAAkB,EAAE,OAAe,EAAE,EAAE,CACnD,6CAA6C,UAAU,YAAY,OAAO,EAAE;IAE9E;;OAEG;IACH,eAAe,EAAE;QACf,UAAU,EAAE,CAAC,UAAkB,EAAE,EAAE,CACjC,uDAAuD,UAAU,EAAE;QACrE,EAAE,EAAE,CAAC,UAAkB,EAAE,EAAE,CACzB,0DAA0D,UAAU,EAAE;KACzE;CACO,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for deployment-related errors.
|
|
3
|
+
*/
|
|
4
|
+
export declare class DeploymentError extends Error {
|
|
5
|
+
readonly exitCode: number;
|
|
6
|
+
userMessage?: string;
|
|
7
|
+
constructor(message: string, exitCode?: number, userMessage?: string | undefined);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown when user is not authenticated.
|
|
11
|
+
*/
|
|
12
|
+
export declare class AuthenticationError extends DeploymentError {
|
|
13
|
+
readonly environment: 'production' | 'qa';
|
|
14
|
+
constructor(environment: 'production' | 'qa');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when project validation fails.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ValidationError extends DeploymentError {
|
|
20
|
+
constructor(message: string, details?: string[]);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when deployment is cancelled by user.
|
|
24
|
+
*/
|
|
25
|
+
export declare class DeploymentCancelledError extends DeploymentError {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Structured API error response from LinkTypes API.
|
|
30
|
+
*/
|
|
31
|
+
export interface APIError {
|
|
32
|
+
statusCode: number;
|
|
33
|
+
messages: string[];
|
|
34
|
+
responseData?: {
|
|
35
|
+
error?: string;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Type guard to check if an error is an API error.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isAPIError(error: unknown): error is APIError;
|
|
42
|
+
/**
|
|
43
|
+
* Error thrown when API request fails.
|
|
44
|
+
*/
|
|
45
|
+
export declare class APIRequestError extends DeploymentError {
|
|
46
|
+
readonly apiError: APIError;
|
|
47
|
+
constructor(apiError: APIError);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,QAAQ,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;gBAGzB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAU,EACpB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS;CASnC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;aAEpC,WAAW,EAAE,YAAY,GAAG,IAAI;gBAAhC,WAAW,EAAE,YAAY,GAAG,IAAI;CAUnD;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;CAOhD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,eAAe;;CAK5D;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAQ5D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;aAEhC,QAAQ,EAAE,QAAQ;gBAAlB,QAAQ,EAAE,QAAQ;CAKrC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base error class for deployment-related errors.
|
|
3
|
+
*/
|
|
4
|
+
export class DeploymentError extends Error {
|
|
5
|
+
exitCode;
|
|
6
|
+
userMessage;
|
|
7
|
+
constructor(message, exitCode = 1, userMessage) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'DeploymentError';
|
|
10
|
+
this.exitCode = exitCode;
|
|
11
|
+
if (userMessage !== undefined) {
|
|
12
|
+
this.userMessage = userMessage;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when user is not authenticated.
|
|
18
|
+
*/
|
|
19
|
+
export class AuthenticationError extends DeploymentError {
|
|
20
|
+
environment;
|
|
21
|
+
constructor(environment) {
|
|
22
|
+
const envFlag = environment === 'qa' ? ' --qa' : '';
|
|
23
|
+
super('Not authenticated', 1, `Run: npx @linktr.ee/linkapp login${envFlag}`);
|
|
24
|
+
this.environment = environment;
|
|
25
|
+
this.name = 'AuthenticationError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error thrown when project validation fails.
|
|
30
|
+
*/
|
|
31
|
+
export class ValidationError extends DeploymentError {
|
|
32
|
+
constructor(message, details) {
|
|
33
|
+
super(message, 1);
|
|
34
|
+
this.name = 'ValidationError';
|
|
35
|
+
if (details) {
|
|
36
|
+
this.userMessage = details.join('\n');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Error thrown when deployment is cancelled by user.
|
|
42
|
+
*/
|
|
43
|
+
export class DeploymentCancelledError extends DeploymentError {
|
|
44
|
+
constructor() {
|
|
45
|
+
super('Deployment cancelled by user', 0);
|
|
46
|
+
this.name = 'DeploymentCancelledError';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Type guard to check if an error is an API error.
|
|
51
|
+
*/
|
|
52
|
+
export function isAPIError(error) {
|
|
53
|
+
return (error !== null &&
|
|
54
|
+
typeof error === 'object' &&
|
|
55
|
+
'statusCode' in error &&
|
|
56
|
+
'messages' in error &&
|
|
57
|
+
Array.isArray(error.messages));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Error thrown when API request fails.
|
|
61
|
+
*/
|
|
62
|
+
export class APIRequestError extends DeploymentError {
|
|
63
|
+
apiError;
|
|
64
|
+
constructor(apiError) {
|
|
65
|
+
super(`API request failed with status ${apiError.statusCode}`, 1);
|
|
66
|
+
this.apiError = apiError;
|
|
67
|
+
this.name = 'APIRequestError';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/lib/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxB,QAAQ,CAAQ;IACzB,WAAW,CAAS;IAE3B,YACE,OAAe,EACf,WAAmB,CAAC,EACpB,WAAgC;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAChC,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAEpC;IADlB,YACkB,WAAgC;QAEhD,MAAM,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QACnD,KAAK,CACH,mBAAmB,EACnB,CAAC,EACD,oCAAoC,OAAO,EAAE,CAC9C,CAAA;QAPe,gBAAW,GAAX,WAAW,CAAqB;QAQhD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB;QAC7C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAC3D;QACE,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAaD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,YAAY,IAAI,KAAK;QACrB,UAAU,IAAI,KAAK;QACnB,KAAK,CAAC,OAAO,CAAE,KAAa,CAAC,QAAQ,CAAC,CACvC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,eAAe;IAEhC;IADlB,YACkB,QAAkB;QAElC,KAAK,CAAC,kCAAkC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;QAFjD,aAAQ,GAAR,QAAQ,CAAU;QAGlC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats a timestamp (in seconds or milliseconds) to a localized string.
|
|
3
|
+
* Automatically detects whether the timestamp is in seconds or milliseconds.
|
|
4
|
+
*
|
|
5
|
+
* @param timestamp - Timestamp in seconds or milliseconds
|
|
6
|
+
* @returns Formatted date string, or null if timestamp is undefined
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatTimestamp(timestamp: number | undefined): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Formats an elapsed time in milliseconds to a human-readable string.
|
|
11
|
+
*
|
|
12
|
+
* @param ms - Time in milliseconds
|
|
13
|
+
* @returns Formatted time string (e.g., "1.5s")
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatElapsedTime(ms: number): string;
|
|
16
|
+
/**
|
|
17
|
+
* Displays a list of files with a preview limit.
|
|
18
|
+
* Shows first N files and indicates how many more exist.
|
|
19
|
+
*
|
|
20
|
+
* @param files - Array of file paths
|
|
21
|
+
* @param title - Title to display above the list
|
|
22
|
+
* @param limit - Maximum number of files to show (default: from DISPLAY constant)
|
|
23
|
+
*/
|
|
24
|
+
export declare function displayFileList(files: string[], title: string, limit?: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* Pluralizes a word based on count.
|
|
27
|
+
*
|
|
28
|
+
* @param count - The count to check
|
|
29
|
+
* @param singular - Singular form of the word
|
|
30
|
+
* @param plural - Plural form of the word (optional, defaults to singular + 's')
|
|
31
|
+
* @returns Pluralized string with count
|
|
32
|
+
*/
|
|
33
|
+
export declare function pluralize(count: number, singular: string, plural?: string): string;
|
|
34
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/formatters.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAU5E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAmC,GACzC,IAAI,CAYN;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
import { TIMESTAMP, DISPLAY } from './constants.js';
|
|
3
|
+
import { writeLine, writeIndented } from './output.js';
|
|
4
|
+
/**
|
|
5
|
+
* Formats a timestamp (in seconds or milliseconds) to a localized string.
|
|
6
|
+
* Automatically detects whether the timestamp is in seconds or milliseconds.
|
|
7
|
+
*
|
|
8
|
+
* @param timestamp - Timestamp in seconds or milliseconds
|
|
9
|
+
* @returns Formatted date string, or null if timestamp is undefined
|
|
10
|
+
*/
|
|
11
|
+
export function formatTimestamp(timestamp) {
|
|
12
|
+
if (!timestamp) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
// Convert seconds to milliseconds if needed
|
|
16
|
+
const timestampMs = timestamp < TIMESTAMP.SECONDS_TO_MS_THRESHOLD ? timestamp * 1000 : timestamp;
|
|
17
|
+
return new Date(timestampMs).toLocaleString();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Formats an elapsed time in milliseconds to a human-readable string.
|
|
21
|
+
*
|
|
22
|
+
* @param ms - Time in milliseconds
|
|
23
|
+
* @returns Formatted time string (e.g., "1.5s")
|
|
24
|
+
*/
|
|
25
|
+
export function formatElapsedTime(ms) {
|
|
26
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Displays a list of files with a preview limit.
|
|
30
|
+
* Shows first N files and indicates how many more exist.
|
|
31
|
+
*
|
|
32
|
+
* @param files - Array of file paths
|
|
33
|
+
* @param title - Title to display above the list
|
|
34
|
+
* @param limit - Maximum number of files to show (default: from DISPLAY constant)
|
|
35
|
+
*/
|
|
36
|
+
export function displayFileList(files, title, limit = DISPLAY.FILE_PREVIEW_LIMIT) {
|
|
37
|
+
writeLine();
|
|
38
|
+
writeLine(pc.bold(title));
|
|
39
|
+
const filesToShow = files.slice(0, limit);
|
|
40
|
+
for (const file of filesToShow) {
|
|
41
|
+
writeIndented(`• ${file}`);
|
|
42
|
+
}
|
|
43
|
+
if (files.length > limit) {
|
|
44
|
+
writeIndented(`• ... and ${files.length - limit} more files`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Pluralizes a word based on count.
|
|
49
|
+
*
|
|
50
|
+
* @param count - The count to check
|
|
51
|
+
* @param singular - Singular form of the word
|
|
52
|
+
* @param plural - Plural form of the word (optional, defaults to singular + 's')
|
|
53
|
+
* @returns Pluralized string with count
|
|
54
|
+
*/
|
|
55
|
+
export function pluralize(count, singular, plural) {
|
|
56
|
+
const word = count === 1 ? singular : plural ?? `${singular}s`;
|
|
57
|
+
return `${count} ${word}`;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/lib/utils/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4CAA4C;IAC5C,MAAM,WAAW,GACf,SAAS,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAE9E,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAA;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAe,EACf,KAAa,EACb,QAAgB,OAAO,CAAC,kBAAkB;IAE1C,SAAS,EAAE,CAAA;IACX,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAEzB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACzB,aAAa,CAAC,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,aAAa,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,QAAgB,EAAE,MAAe;IACxE,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAA;IAC9D,OAAO,GAAG,KAAK,IAAI,IAAI,EAAE,CAAA;AAC3B,CAAC"}
|