@linktr.ee/linkapp 0.0.1
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/bin/cli.js +6 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +141 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/build.d.ts +8 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +84 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/deploy.d.ts +12 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +158 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +73 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +77 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +6 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +25 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/test-url-match-rules.d.ts +7 -0
- package/dist/commands/test-url-match-rules.d.ts.map +1 -0
- package/dist/commands/test-url-match-rules.js +55 -0
- package/dist/commands/test-url-match-rules.js.map +1 -0
- package/dist/lib/auth/config.d.ts +3 -0
- package/dist/lib/auth/config.d.ts.map +1 -0
- package/dist/lib/auth/config.js +5 -0
- package/dist/lib/auth/config.js.map +1 -0
- package/dist/lib/auth/device-flow.d.ts +15 -0
- package/dist/lib/auth/device-flow.d.ts.map +1 -0
- package/dist/lib/auth/device-flow.js +28 -0
- package/dist/lib/auth/device-flow.js.map +1 -0
- package/dist/lib/auth/fetch-config.d.ts +3 -0
- package/dist/lib/auth/fetch-config.d.ts.map +1 -0
- package/dist/lib/auth/fetch-config.js +15 -0
- package/dist/lib/auth/fetch-config.js.map +1 -0
- package/dist/lib/auth/token-storage.d.ts +10 -0
- package/dist/lib/auth/token-storage.d.ts.map +1 -0
- package/dist/lib/auth/token-storage.js +79 -0
- package/dist/lib/auth/token-storage.js.map +1 -0
- package/dist/lib/build/detect-layouts.d.ts +22 -0
- package/dist/lib/build/detect-layouts.d.ts.map +1 -0
- package/dist/lib/build/detect-layouts.js +58 -0
- package/dist/lib/build/detect-layouts.js.map +1 -0
- package/dist/lib/deploy/generate-manifest-files.d.ts +2 -0
- package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -0
- package/dist/lib/deploy/generate-manifest-files.js +81 -0
- package/dist/lib/deploy/generate-manifest-files.js.map +1 -0
- package/dist/lib/deploy/pack-project.d.ts +7 -0
- package/dist/lib/deploy/pack-project.d.ts.map +1 -0
- package/dist/lib/deploy/pack-project.js +76 -0
- package/dist/lib/deploy/pack-project.js.map +1 -0
- package/dist/lib/deploy/test-url-match-rules.d.ts +6 -0
- package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -0
- package/dist/lib/deploy/test-url-match-rules.js +21 -0
- package/dist/lib/deploy/test-url-match-rules.js.map +1 -0
- package/dist/lib/deploy/upload.d.ts +12 -0
- package/dist/lib/deploy/upload.d.ts.map +1 -0
- package/dist/lib/deploy/upload.js +90 -0
- package/dist/lib/deploy/upload.js.map +1 -0
- package/dist/lib/deploy/validation.d.ts +9 -0
- package/dist/lib/deploy/validation.d.ts.map +1 -0
- package/dist/lib/deploy/validation.js +160 -0
- package/dist/lib/deploy/validation.js.map +1 -0
- package/dist/lib/utils/create-project.d.ts +8 -0
- package/dist/lib/utils/create-project.d.ts.map +1 -0
- package/dist/lib/utils/create-project.js +48 -0
- package/dist/lib/utils/create-project.js.map +1 -0
- package/dist/lib/utils/init-git.d.ts +2 -0
- package/dist/lib/utils/init-git.d.ts.map +1 -0
- package/dist/lib/utils/init-git.js +34 -0
- package/dist/lib/utils/init-git.js.map +1 -0
- package/dist/lib/utils/install-dependencies.d.ts +2 -0
- package/dist/lib/utils/install-dependencies.d.ts.map +1 -0
- package/dist/lib/utils/install-dependencies.js +20 -0
- package/dist/lib/utils/install-dependencies.js.map +1 -0
- package/dist/lib/utils/setup-runtime.d.ts +6 -0
- package/dist/lib/utils/setup-runtime.d.ts.map +1 -0
- package/dist/lib/utils/setup-runtime.js +103 -0
- package/dist/lib/utils/setup-runtime.js.map +1 -0
- package/dist/lib/vite/config-factory.d.ts +12 -0
- package/dist/lib/vite/config-factory.d.ts.map +1 -0
- package/dist/lib/vite/config-factory.js +55 -0
- package/dist/lib/vite/config-factory.js.map +1 -0
- package/dist/lib/vite/plugins/asset-versioning.d.ts +11 -0
- package/dist/lib/vite/plugins/asset-versioning.d.ts.map +1 -0
- package/dist/lib/vite/plugins/asset-versioning.js +50 -0
- package/dist/lib/vite/plugins/asset-versioning.js.map +1 -0
- package/dist/lib/vite/plugins/route-handler.d.ts +16 -0
- package/dist/lib/vite/plugins/route-handler.d.ts.map +1 -0
- package/dist/lib/vite/plugins/route-handler.js +108 -0
- package/dist/lib/vite/plugins/route-handler.js.map +1 -0
- package/dist/lib/vite/plugins/window-context.d.ts +7 -0
- package/dist/lib/vite/plugins/window-context.d.ts.map +1 -0
- package/dist/lib/vite/plugins/window-context.js +68 -0
- package/dist/lib/vite/plugins/window-context.js.map +1 -0
- package/dist/schema/config.schema.d.ts +229 -0
- package/dist/schema/config.schema.d.ts.map +1 -0
- package/dist/schema/config.schema.js +116 -0
- package/dist/schema/config.schema.js.map +1 -0
- package/dist/schema/index.d.ts +8 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
- package/runtime/index.html +12 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import archiver from 'archiver';
|
|
2
|
+
import { createWriteStream, existsSync, statSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
export async function packProject(options = {}) {
|
|
5
|
+
const projectPath = options.projectPath || process.cwd();
|
|
6
|
+
const outputPath = options.outputPath || join(projectPath, 'package.tgz');
|
|
7
|
+
// Check for config file in both locations (root first, then .config for backward compatibility)
|
|
8
|
+
const rootConfigPath = join(projectPath, 'linkapp.config.ts');
|
|
9
|
+
const configPath = existsSync(rootConfigPath) ? 'linkapp.config.ts' : '.config/linkapp.config.ts';
|
|
10
|
+
const requiredFiles = [configPath];
|
|
11
|
+
const optionalFiles = ['package.json', 'package-lock.json', 'README.md'];
|
|
12
|
+
const requiredDirs = ['dist'];
|
|
13
|
+
const packedFiles = [];
|
|
14
|
+
// Validate required files exist
|
|
15
|
+
for (const file of requiredFiles) {
|
|
16
|
+
const filePath = join(projectPath, file);
|
|
17
|
+
if (!existsSync(filePath)) {
|
|
18
|
+
throw new Error(`Required file missing: ${file}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// Validate dist directory exists
|
|
22
|
+
for (const dir of requiredDirs) {
|
|
23
|
+
const dirPath = join(projectPath, dir);
|
|
24
|
+
if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {
|
|
25
|
+
throw new Error(`Required directory missing: ${dir}. Run 'linkapp build' first.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const output = createWriteStream(outputPath);
|
|
30
|
+
const archive = archiver('tar', {
|
|
31
|
+
gzip: true,
|
|
32
|
+
gzipOptions: { level: 9 },
|
|
33
|
+
});
|
|
34
|
+
output.on('close', () => {
|
|
35
|
+
resolve(packedFiles);
|
|
36
|
+
});
|
|
37
|
+
archive.on('error', (err) => {
|
|
38
|
+
reject(err);
|
|
39
|
+
});
|
|
40
|
+
archive.on('warning', (err) => {
|
|
41
|
+
if (err.code === 'ENOENT') {
|
|
42
|
+
console.warn('Warning:', err.message);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
reject(err);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
archive.pipe(output);
|
|
49
|
+
// Add required files
|
|
50
|
+
for (const file of requiredFiles) {
|
|
51
|
+
const filePath = join(projectPath, file);
|
|
52
|
+
if (existsSync(filePath)) {
|
|
53
|
+
archive.file(filePath, { name: file });
|
|
54
|
+
packedFiles.push(file);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Add optional files
|
|
58
|
+
for (const file of optionalFiles) {
|
|
59
|
+
const filePath = join(projectPath, file);
|
|
60
|
+
if (existsSync(filePath)) {
|
|
61
|
+
archive.file(filePath, { name: file });
|
|
62
|
+
packedFiles.push(file);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Add directories
|
|
66
|
+
for (const dir of requiredDirs) {
|
|
67
|
+
const dirPath = join(projectPath, dir);
|
|
68
|
+
if (existsSync(dirPath)) {
|
|
69
|
+
archive.directory(dirPath, dir);
|
|
70
|
+
packedFiles.push(`${dir}/`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
archive.finalize();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=pack-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-project.js","sourceRoot":"","sources":["../../../src/lib/deploy/pack-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface TestUrlMatchRulesResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
export declare function testUrlMatchRules(endpoint: string, url: string, rules: any, accessToken: string): Promise<TestUrlMatchRulesResult>;
|
|
6
|
+
//# sourceMappingURL=test-url-match-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-url-match-rules.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAsBlC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
export async function testUrlMatchRules(endpoint, url, rules, accessToken) {
|
|
3
|
+
try {
|
|
4
|
+
const response = await axios.post(`${endpoint}/test-url-match-rules`, {
|
|
5
|
+
url,
|
|
6
|
+
rules,
|
|
7
|
+
}, {
|
|
8
|
+
headers: {
|
|
9
|
+
Authorization: `Bearer ${accessToken}`,
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
if (axios.isAxiosError(err) && err.response) {
|
|
16
|
+
return err.response.data;
|
|
17
|
+
}
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=test-url-match-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-url-match-rules.js","sourceRoot":"","sources":["../../../src/lib/deploy/test-url-match-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,GAAW,EACX,KAAU,EACV,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,QAAQ,uBAAuB,EAClC;YACE,GAAG;YACH,KAAK;SACN,EACD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CACF,CAAA;QAED,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAA;QAC1B,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DeployResponse } from '../../types.js';
|
|
2
|
+
interface UploadOptions {
|
|
3
|
+
projectPath?: string | undefined;
|
|
4
|
+
apiUrl: string;
|
|
5
|
+
accessToken: string;
|
|
6
|
+
isUpdate?: boolean | undefined;
|
|
7
|
+
forceUpdate?: boolean | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare function uploadAssets(options: UploadOptions): Promise<DeployResponse>;
|
|
10
|
+
export declare function checkLinkAppExists(apiUrl: string, linkAppId: string, accessToken: string): Promise<boolean>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/lib/deploy/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,UAAU,aAAa;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9B,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAClC;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA6ElF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcjH"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import FormData from 'form-data';
|
|
3
|
+
import { createReadStream, existsSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
export async function uploadAssets(options) {
|
|
6
|
+
const projectPath = options.projectPath || process.cwd();
|
|
7
|
+
const linkappDir = join(projectPath, '.linkapp');
|
|
8
|
+
const packagePath = join(projectPath, 'package.tgz');
|
|
9
|
+
const manifestPath = join(linkappDir, 'manifest.json');
|
|
10
|
+
const settingsPath = join(linkappDir, 'settings.json');
|
|
11
|
+
const urlMatchRulesPath = join(linkappDir, 'url_match_rules.json');
|
|
12
|
+
const iconPath = join(projectPath, 'icon.svg');
|
|
13
|
+
// Required files
|
|
14
|
+
if (!existsSync(packagePath)) {
|
|
15
|
+
throw new Error('Package file not found. Run pack step first.');
|
|
16
|
+
}
|
|
17
|
+
if (!existsSync(manifestPath)) {
|
|
18
|
+
throw new Error('Manifest file not found. Generate manifest.json from config.');
|
|
19
|
+
}
|
|
20
|
+
const form = new FormData();
|
|
21
|
+
// Add required files with correct content types
|
|
22
|
+
form.append('package', createReadStream(packagePath), {
|
|
23
|
+
contentType: 'application/gzip',
|
|
24
|
+
filename: 'package.tgz'
|
|
25
|
+
});
|
|
26
|
+
form.append('manifest', createReadStream(manifestPath), {
|
|
27
|
+
contentType: 'application/json',
|
|
28
|
+
filename: 'manifest.json'
|
|
29
|
+
});
|
|
30
|
+
// Add optional files
|
|
31
|
+
if (existsSync(settingsPath)) {
|
|
32
|
+
form.append('settings', createReadStream(settingsPath), {
|
|
33
|
+
contentType: 'application/json',
|
|
34
|
+
filename: 'settings.json'
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (existsSync(urlMatchRulesPath)) {
|
|
38
|
+
form.append('url_match_rules', createReadStream(urlMatchRulesPath), {
|
|
39
|
+
contentType: 'application/json',
|
|
40
|
+
filename: 'url_match_rules.json'
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (existsSync(iconPath)) {
|
|
44
|
+
form.append('icon', createReadStream(iconPath), {
|
|
45
|
+
contentType: 'image/svg+xml',
|
|
46
|
+
filename: 'icon.svg'
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const headers = {
|
|
50
|
+
...form.getHeaders(),
|
|
51
|
+
Authorization: `Bearer ${options.accessToken}`,
|
|
52
|
+
};
|
|
53
|
+
if (options.isUpdate && options.forceUpdate) {
|
|
54
|
+
headers['force-update'] = 'true';
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const method = options.isUpdate ? 'put' : 'post';
|
|
58
|
+
const response = await axios[method](options.apiUrl, form, { headers });
|
|
59
|
+
return response.data;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (axios.isAxiosError(error) && error.response?.data) {
|
|
63
|
+
const errorData = error.response.data;
|
|
64
|
+
// Create a more detailed error message
|
|
65
|
+
const detailedError = new Error('API request failed');
|
|
66
|
+
detailedError.statusCode = error.response.status;
|
|
67
|
+
detailedError.responseData = errorData;
|
|
68
|
+
detailedError.messages = errorData.message || [];
|
|
69
|
+
throw detailedError;
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function checkLinkAppExists(apiUrl, linkAppId, accessToken) {
|
|
75
|
+
try {
|
|
76
|
+
await axios.get(`${apiUrl}/${linkAppId}`, {
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: `Bearer ${accessToken}`,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/lib/deploy/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWhC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAsB;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IACtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAA;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAE9C,iBAAiB;IACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;IAE3B,gDAAgD;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE;QACpD,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAAE;QACtD,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAA;IAEF,qBAAqB;IACrB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAAE;YACtD,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,EAAE;YAClE,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,sBAAsB;SACjC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE;YAC9C,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,GAAG,IAAI,CAAC,UAAU,EAAE;QACpB,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE;KAC/C,CAAA;IAED,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAA;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;QAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAiB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QACvF,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAA;YACrC,uCAAuC;YACvC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAEpD;YAAC,aAAqB,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CACzD;YAAC,aAAqB,CAAC,YAAY,GAAG,SAAS,CAC/C;YAAC,aAAqB,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,IAAI,EAAE,CAAA;YAC1D,MAAM,aAAa,CAAA;QACrB,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,SAAiB,EAAE,WAAmB;IAC7F,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,EAAE;YACxC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAChE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface ValidationResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
errors: string[];
|
|
4
|
+
warnings: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function validateProject(projectPath?: string): Promise<ValidationResult>;
|
|
7
|
+
export declare function printValidationResults(result: ValidationResult): void;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,CA2DpG;AAgGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAkBrE"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { existsSync, statSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import pc from 'picocolors';
|
|
5
|
+
import { ZodError } from 'zod';
|
|
6
|
+
export async function validateProject(projectPath = process.cwd()) {
|
|
7
|
+
const result = {
|
|
8
|
+
success: true,
|
|
9
|
+
errors: [],
|
|
10
|
+
warnings: [],
|
|
11
|
+
};
|
|
12
|
+
// Check config file exists (check root first, then .config for backward compatibility)
|
|
13
|
+
const rootConfigPath = join(projectPath, 'linkapp.config.ts');
|
|
14
|
+
const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
|
|
15
|
+
const configPath = existsSync(rootConfigPath) ? rootConfigPath : nestedConfigPath;
|
|
16
|
+
if (!existsSync(configPath)) {
|
|
17
|
+
result.errors.push('Config file missing: linkapp.config.ts');
|
|
18
|
+
result.success = false;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
// Validate config schema
|
|
22
|
+
const configValidation = await validateConfigSchema(projectPath);
|
|
23
|
+
if (!configValidation.success) {
|
|
24
|
+
result.errors.push(...configValidation.errors);
|
|
25
|
+
result.success = false;
|
|
26
|
+
}
|
|
27
|
+
if (configValidation.warnings.length > 0) {
|
|
28
|
+
result.warnings.push(...configValidation.warnings);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Check dist directory exists
|
|
32
|
+
const distPath = join(projectPath, 'dist');
|
|
33
|
+
if (!existsSync(distPath)) {
|
|
34
|
+
result.errors.push('Build output missing. Run "linkapp build" first.');
|
|
35
|
+
result.success = false;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Check dist has files
|
|
39
|
+
const distSize = getDirSize(distPath);
|
|
40
|
+
if (distSize === 0) {
|
|
41
|
+
result.errors.push('Build output is empty. Run "linkapp build" first.');
|
|
42
|
+
result.success = false;
|
|
43
|
+
}
|
|
44
|
+
else if (distSize > 5 * 1024 * 1024) {
|
|
45
|
+
// Warn if over 5MB
|
|
46
|
+
const sizeMB = (distSize / (1024 * 1024)).toFixed(2);
|
|
47
|
+
result.warnings.push(`Bundle size is large: ${sizeMB}MB. Consider optimizing.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Check package.json exists
|
|
51
|
+
const packageJsonPath = join(projectPath, 'package.json');
|
|
52
|
+
if (!existsSync(packageJsonPath)) {
|
|
53
|
+
result.warnings.push('package.json not found');
|
|
54
|
+
}
|
|
55
|
+
// Run TypeScript type check
|
|
56
|
+
const typeCheckResult = await runTypeCheck(projectPath);
|
|
57
|
+
if (!typeCheckResult.success) {
|
|
58
|
+
result.errors.push('TypeScript type check failed. Fix type errors before deploying.');
|
|
59
|
+
result.success = false;
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validates the linkapp.config.ts schema
|
|
65
|
+
* Similar to how Next.js validates next.config.js and Tailwind validates tailwind.config.js
|
|
66
|
+
*/
|
|
67
|
+
async function validateConfigSchema(projectPath) {
|
|
68
|
+
const result = {
|
|
69
|
+
success: true,
|
|
70
|
+
errors: [],
|
|
71
|
+
warnings: [],
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
// Use tsx or ts-node to load the TypeScript config
|
|
75
|
+
// For now, we'll import the schema and validate the built config
|
|
76
|
+
const { validateLinkAppConfig } = await import('../../schema/config.schema.js');
|
|
77
|
+
// Try to import the config from the built dist (check root first, then .config)
|
|
78
|
+
const rootDistConfigPath = join(projectPath, 'dist', 'linkapp.config.js');
|
|
79
|
+
const nestedDistConfigPath = join(projectPath, 'dist', '.config', 'linkapp.config.js');
|
|
80
|
+
const distConfigPath = existsSync(rootDistConfigPath) ? rootDistConfigPath : nestedDistConfigPath;
|
|
81
|
+
if (!existsSync(distConfigPath)) {
|
|
82
|
+
result.warnings.push('Config validation skipped: Build output not found. Schema validation will occur during build.');
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
const configModule = await import(distConfigPath);
|
|
86
|
+
const config = configModule.default;
|
|
87
|
+
// Validate using Zod schema
|
|
88
|
+
validateLinkAppConfig(config);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error instanceof ZodError) {
|
|
92
|
+
result.success = false;
|
|
93
|
+
result.errors.push('Config schema validation failed:');
|
|
94
|
+
// Format Zod errors in a user-friendly way (like Next.js does)
|
|
95
|
+
for (const issue of error.issues) {
|
|
96
|
+
const path = issue.path.join('.');
|
|
97
|
+
result.errors.push(` • ${path}: ${issue.message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (error instanceof Error) {
|
|
101
|
+
// Other errors (import errors, etc.)
|
|
102
|
+
result.warnings.push(`Config validation warning: ${error.message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
async function runTypeCheck(projectPath) {
|
|
108
|
+
return new Promise((resolve) => {
|
|
109
|
+
const child = spawn('npm', ['run', 'type-check'], {
|
|
110
|
+
cwd: projectPath,
|
|
111
|
+
stdio: 'pipe',
|
|
112
|
+
shell: true,
|
|
113
|
+
});
|
|
114
|
+
child.on('close', (code) => {
|
|
115
|
+
resolve({ success: code === 0 });
|
|
116
|
+
});
|
|
117
|
+
child.on('error', () => {
|
|
118
|
+
// If type-check script doesn't exist, pass validation
|
|
119
|
+
resolve({ success: true });
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function getDirSize(dirPath) {
|
|
124
|
+
let totalSize = 0;
|
|
125
|
+
try {
|
|
126
|
+
const files = readdirSync(dirPath);
|
|
127
|
+
for (const file of files) {
|
|
128
|
+
const filePath = join(dirPath, file);
|
|
129
|
+
const stats = statSync(filePath);
|
|
130
|
+
if (stats.isDirectory()) {
|
|
131
|
+
totalSize += getDirSize(filePath);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
totalSize += stats.size;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Ignore errors
|
|
140
|
+
}
|
|
141
|
+
return totalSize;
|
|
142
|
+
}
|
|
143
|
+
export function printValidationResults(result) {
|
|
144
|
+
if (result.errors.length > 0) {
|
|
145
|
+
console.log(pc.red('\n✗ Validation errors:'));
|
|
146
|
+
for (const error of result.errors) {
|
|
147
|
+
console.log(pc.red(` • ${error}`));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (result.warnings.length > 0) {
|
|
151
|
+
console.log(pc.yellow('\n⚠ Warnings:'));
|
|
152
|
+
for (const warning of result.warnings) {
|
|
153
|
+
console.log(pc.yellow(` • ${warning}`));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (result.success && result.errors.length === 0) {
|
|
157
|
+
console.log(pc.green('\n✓ Pre-deployment validation passed'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/lib/deploy/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/create-project.ts"],"names":[],"mappings":"AAOA,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AASD,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
function toTitleCase(str) {
|
|
7
|
+
return str
|
|
8
|
+
.split('-')
|
|
9
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
10
|
+
.join(' ');
|
|
11
|
+
}
|
|
12
|
+
export async function createProject(options) {
|
|
13
|
+
const { projectName, projectPath, template } = options;
|
|
14
|
+
const templatesDir = join(__dirname, '..', '..', '..', 'templates');
|
|
15
|
+
const templatePath = join(templatesDir, template);
|
|
16
|
+
const sharedPath = join(templatesDir, 'shared');
|
|
17
|
+
if (!existsSync(templatePath)) {
|
|
18
|
+
throw new Error(`Template ${template} not found`);
|
|
19
|
+
}
|
|
20
|
+
// Create project directory
|
|
21
|
+
mkdirSync(projectPath, { recursive: true });
|
|
22
|
+
// Copy template files
|
|
23
|
+
cpSync(templatePath, projectPath, { recursive: true });
|
|
24
|
+
// Copy shared files
|
|
25
|
+
if (existsSync(sharedPath)) {
|
|
26
|
+
cpSync(sharedPath, projectPath, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
// Replace placeholders
|
|
29
|
+
const projectTitle = toTitleCase(projectName);
|
|
30
|
+
const placeholders = {
|
|
31
|
+
'{{PROJECT_NAME}}': projectName,
|
|
32
|
+
'{{PROJECT_TITLE}}': projectTitle,
|
|
33
|
+
'{{AUTHOR_NAME}}': 'Your Name',
|
|
34
|
+
};
|
|
35
|
+
replaceInFile(join(projectPath, 'package.json'), placeholders);
|
|
36
|
+
replaceInFile(join(projectPath, 'linkapp.config.ts'), placeholders);
|
|
37
|
+
replaceInFile(join(projectPath, 'README.md'), placeholders);
|
|
38
|
+
}
|
|
39
|
+
function replaceInFile(filePath, placeholders) {
|
|
40
|
+
if (!existsSync(filePath))
|
|
41
|
+
return;
|
|
42
|
+
let content = readFileSync(filePath, 'utf-8');
|
|
43
|
+
for (const [placeholder, value] of Object.entries(placeholders)) {
|
|
44
|
+
content = content.replaceAll(placeholder, value);
|
|
45
|
+
}
|
|
46
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=create-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../../src/lib/utils/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAQrC,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEtD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAE/C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,YAAY,CAAC,CAAA;IACnD,CAAC;IAED,2BAA2B;IAC3B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3C,sBAAsB;IACtB,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEtD,oBAAoB;IACpB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,YAAY,GAAG;QACnB,kBAAkB,EAAE,WAAW;QAC/B,mBAAmB,EAAE,YAAY;QACjC,iBAAiB,EAAE,WAAW;KAC/B,CAAA;IAED,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,CAAA;IAC9D,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,YAAY,CAAC,CAAA;IACnE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,YAAoC;IAC3E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAM;IAEjC,IAAI,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAE7C,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAClD,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-git.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/init-git.ts"],"names":[],"mappings":"AAmBA,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
async function runGitCommand(args, cwd) {
|
|
3
|
+
return new Promise((resolve) => {
|
|
4
|
+
const child = spawn('git', args, {
|
|
5
|
+
cwd,
|
|
6
|
+
stdio: 'pipe',
|
|
7
|
+
});
|
|
8
|
+
child.on('close', (code) => {
|
|
9
|
+
resolve(code === 0);
|
|
10
|
+
});
|
|
11
|
+
child.on('error', () => {
|
|
12
|
+
resolve(false);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export async function initGit(projectPath) {
|
|
17
|
+
// Initialize git repository
|
|
18
|
+
const initSuccess = await runGitCommand(['init'], projectPath);
|
|
19
|
+
if (!initSuccess) {
|
|
20
|
+
throw new Error('Failed to initialize git repository');
|
|
21
|
+
}
|
|
22
|
+
// Stage all files
|
|
23
|
+
const addSuccess = await runGitCommand(['add', '-A'], projectPath);
|
|
24
|
+
if (!addSuccess) {
|
|
25
|
+
// Just skip commit if add fails
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Try to create initial commit (optional - may fail if git user not configured)
|
|
29
|
+
const commitSuccess = await runGitCommand(['commit', '-m', 'Initial commit from Create LinkApp'], projectPath);
|
|
30
|
+
if (!commitSuccess) {
|
|
31
|
+
throw new Error('Failed to create initial commit');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=init-git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-git.js","sourceRoot":"","sources":["../../../src/lib/utils/init-git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,GAAW;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/B,GAAG;YACH,KAAK,EAAE,MAAM;SACd,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,WAAmB;IAC/C,4BAA4B;IAC5B,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAA;IAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAA;IAClE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,gCAAgC;QAChC,OAAM;IACR,CAAC;IAED,gFAAgF;IAChF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,oCAAoC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC9G,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-dependencies.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/install-dependencies.ts"],"names":[],"mappings":"AAEA,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB5E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export async function installDependencies(projectPath) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const child = spawn('npm', ['install'], {
|
|
5
|
+
cwd: projectPath,
|
|
6
|
+
stdio: 'ignore',
|
|
7
|
+
shell: true,
|
|
8
|
+
});
|
|
9
|
+
child.on('close', (code) => {
|
|
10
|
+
if (code === 0) {
|
|
11
|
+
resolve();
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
reject(new Error(`npm install failed with code ${code}`));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
child.on('error', reject);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=install-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-dependencies.js","sourceRoot":"","sources":["../../../src/lib/utils/install-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;YACtC,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAA;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC3D,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-runtime.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/setup-runtime.ts"],"names":[],"mappings":"AAgFA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyBtD"}
|