@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.
Files changed (119) hide show
  1. package/bin/cli.js +6 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +52 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/add.d.ts +7 -0
  7. package/dist/commands/add.d.ts.map +1 -0
  8. package/dist/commands/add.js +141 -0
  9. package/dist/commands/add.js.map +1 -0
  10. package/dist/commands/build.d.ts +8 -0
  11. package/dist/commands/build.d.ts.map +1 -0
  12. package/dist/commands/build.js +84 -0
  13. package/dist/commands/build.js.map +1 -0
  14. package/dist/commands/deploy.d.ts +12 -0
  15. package/dist/commands/deploy.d.ts.map +1 -0
  16. package/dist/commands/deploy.js +158 -0
  17. package/dist/commands/deploy.js.map +1 -0
  18. package/dist/commands/dev.d.ts +7 -0
  19. package/dist/commands/dev.d.ts.map +1 -0
  20. package/dist/commands/dev.js +73 -0
  21. package/dist/commands/dev.js.map +1 -0
  22. package/dist/commands/login.d.ts +6 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +77 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +6 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +25 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/test-url-match-rules.d.ts +7 -0
  31. package/dist/commands/test-url-match-rules.d.ts.map +1 -0
  32. package/dist/commands/test-url-match-rules.js +55 -0
  33. package/dist/commands/test-url-match-rules.js.map +1 -0
  34. package/dist/lib/auth/config.d.ts +3 -0
  35. package/dist/lib/auth/config.d.ts.map +1 -0
  36. package/dist/lib/auth/config.js +5 -0
  37. package/dist/lib/auth/config.js.map +1 -0
  38. package/dist/lib/auth/device-flow.d.ts +15 -0
  39. package/dist/lib/auth/device-flow.d.ts.map +1 -0
  40. package/dist/lib/auth/device-flow.js +28 -0
  41. package/dist/lib/auth/device-flow.js.map +1 -0
  42. package/dist/lib/auth/fetch-config.d.ts +3 -0
  43. package/dist/lib/auth/fetch-config.d.ts.map +1 -0
  44. package/dist/lib/auth/fetch-config.js +15 -0
  45. package/dist/lib/auth/fetch-config.js.map +1 -0
  46. package/dist/lib/auth/token-storage.d.ts +10 -0
  47. package/dist/lib/auth/token-storage.d.ts.map +1 -0
  48. package/dist/lib/auth/token-storage.js +79 -0
  49. package/dist/lib/auth/token-storage.js.map +1 -0
  50. package/dist/lib/build/detect-layouts.d.ts +22 -0
  51. package/dist/lib/build/detect-layouts.d.ts.map +1 -0
  52. package/dist/lib/build/detect-layouts.js +58 -0
  53. package/dist/lib/build/detect-layouts.js.map +1 -0
  54. package/dist/lib/deploy/generate-manifest-files.d.ts +2 -0
  55. package/dist/lib/deploy/generate-manifest-files.d.ts.map +1 -0
  56. package/dist/lib/deploy/generate-manifest-files.js +81 -0
  57. package/dist/lib/deploy/generate-manifest-files.js.map +1 -0
  58. package/dist/lib/deploy/pack-project.d.ts +7 -0
  59. package/dist/lib/deploy/pack-project.d.ts.map +1 -0
  60. package/dist/lib/deploy/pack-project.js +76 -0
  61. package/dist/lib/deploy/pack-project.js.map +1 -0
  62. package/dist/lib/deploy/test-url-match-rules.d.ts +6 -0
  63. package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -0
  64. package/dist/lib/deploy/test-url-match-rules.js +21 -0
  65. package/dist/lib/deploy/test-url-match-rules.js.map +1 -0
  66. package/dist/lib/deploy/upload.d.ts +12 -0
  67. package/dist/lib/deploy/upload.d.ts.map +1 -0
  68. package/dist/lib/deploy/upload.js +90 -0
  69. package/dist/lib/deploy/upload.js.map +1 -0
  70. package/dist/lib/deploy/validation.d.ts +9 -0
  71. package/dist/lib/deploy/validation.d.ts.map +1 -0
  72. package/dist/lib/deploy/validation.js +160 -0
  73. package/dist/lib/deploy/validation.js.map +1 -0
  74. package/dist/lib/utils/create-project.d.ts +8 -0
  75. package/dist/lib/utils/create-project.d.ts.map +1 -0
  76. package/dist/lib/utils/create-project.js +48 -0
  77. package/dist/lib/utils/create-project.js.map +1 -0
  78. package/dist/lib/utils/init-git.d.ts +2 -0
  79. package/dist/lib/utils/init-git.d.ts.map +1 -0
  80. package/dist/lib/utils/init-git.js +34 -0
  81. package/dist/lib/utils/init-git.js.map +1 -0
  82. package/dist/lib/utils/install-dependencies.d.ts +2 -0
  83. package/dist/lib/utils/install-dependencies.d.ts.map +1 -0
  84. package/dist/lib/utils/install-dependencies.js +20 -0
  85. package/dist/lib/utils/install-dependencies.js.map +1 -0
  86. package/dist/lib/utils/setup-runtime.d.ts +6 -0
  87. package/dist/lib/utils/setup-runtime.d.ts.map +1 -0
  88. package/dist/lib/utils/setup-runtime.js +103 -0
  89. package/dist/lib/utils/setup-runtime.js.map +1 -0
  90. package/dist/lib/vite/config-factory.d.ts +12 -0
  91. package/dist/lib/vite/config-factory.d.ts.map +1 -0
  92. package/dist/lib/vite/config-factory.js +55 -0
  93. package/dist/lib/vite/config-factory.js.map +1 -0
  94. package/dist/lib/vite/plugins/asset-versioning.d.ts +11 -0
  95. package/dist/lib/vite/plugins/asset-versioning.d.ts.map +1 -0
  96. package/dist/lib/vite/plugins/asset-versioning.js +50 -0
  97. package/dist/lib/vite/plugins/asset-versioning.js.map +1 -0
  98. package/dist/lib/vite/plugins/route-handler.d.ts +16 -0
  99. package/dist/lib/vite/plugins/route-handler.d.ts.map +1 -0
  100. package/dist/lib/vite/plugins/route-handler.js +108 -0
  101. package/dist/lib/vite/plugins/route-handler.js.map +1 -0
  102. package/dist/lib/vite/plugins/window-context.d.ts +7 -0
  103. package/dist/lib/vite/plugins/window-context.d.ts.map +1 -0
  104. package/dist/lib/vite/plugins/window-context.js +68 -0
  105. package/dist/lib/vite/plugins/window-context.js.map +1 -0
  106. package/dist/schema/config.schema.d.ts +229 -0
  107. package/dist/schema/config.schema.d.ts.map +1 -0
  108. package/dist/schema/config.schema.js +116 -0
  109. package/dist/schema/config.schema.js.map +1 -0
  110. package/dist/schema/index.d.ts +8 -0
  111. package/dist/schema/index.d.ts.map +1 -0
  112. package/dist/schema/index.js +8 -0
  113. package/dist/schema/index.js.map +1 -0
  114. package/dist/types.d.ts +140 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +2 -0
  117. package/dist/types.js.map +1 -0
  118. package/package.json +70 -0
  119. package/runtime/index.html +12 -0
package/bin/cli.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+ import('../dist/cli.js').catch((error) => {
4
+ console.error('Failed to load CLI:', error)
5
+ process.exit(1)
6
+ })
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { cac } from 'cac';
3
+ import { devCommand } from './commands/dev.js';
4
+ import { buildCommand } from './commands/build.js';
5
+ import { deployCommand } from './commands/deploy.js';
6
+ import { addCommand } from './commands/add.js';
7
+ import { loginCommand } from './commands/login.js';
8
+ import { logoutCommand } from './commands/logout.js';
9
+ import { testUrlMatchRulesCommand } from './commands/test-url-match-rules.js';
10
+ const cli = cac('linkapp');
11
+ // Package info
12
+ const version = '0.0.1';
13
+ cli
14
+ .version(version)
15
+ .help();
16
+ // Dev command
17
+ cli
18
+ .command('dev', 'Start development server with preview')
19
+ .option('--port <port>', 'Preview server port (default: 3000)', { default: 3000 })
20
+ .option('--no-open', 'Do not open browser automatically')
21
+ .action(devCommand);
22
+ // Build command
23
+ cli
24
+ .command('build', 'Build LinkApp for production')
25
+ .option('--analyze', 'Generate bundle analysis report (deprecated, use --profile)')
26
+ .option('--profile', 'Enable build profiling and bundle analysis')
27
+ .option('--sourcemap', 'Generate sourcemaps for production build')
28
+ .action(buildCommand);
29
+ // Deploy command
30
+ cli
31
+ .command('deploy', 'Deploy LinkApp to Linktree')
32
+ .option('--env <environment>', 'Deployment environment (production or qa)', { default: 'production' })
33
+ .action(deployCommand);
34
+ // Add command
35
+ cli
36
+ .command('add [component]', 'Add a component from the registry')
37
+ .action(addCommand);
38
+ // Login command
39
+ cli
40
+ .command('login', 'Authenticate with Linktree')
41
+ .action(loginCommand);
42
+ // Logout command
43
+ cli
44
+ .command('logout', 'Sign out of Linktree')
45
+ .action(logoutCommand);
46
+ // Test URL match rules
47
+ cli
48
+ .command('test-url-match-rules <url>', 'Test URL match rules against a URL')
49
+ .action(testUrlMatchRulesCommand);
50
+ // Parse and run
51
+ cli.parse();
52
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;AAE1B,eAAe;AACf,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,GAAG;KACA,OAAO,CAAC,OAAO,CAAC;KAChB,IAAI,EAAE,CAAA;AAET,cAAc;AACd,GAAG;KACA,OAAO,CAAC,KAAK,EAAE,uCAAuC,CAAC;KACvD,MAAM,CAAC,eAAe,EAAE,qCAAqC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,8BAA8B,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,6DAA6D,CAAC;KAClF,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC;KACjE,MAAM,CAAC,aAAa,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,2CAA2C,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;KACrG,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,cAAc;AACd,GAAG;KACA,OAAO,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC/D,MAAM,CAAC,UAAU,CAAC,CAAA;AAErB,gBAAgB;AAChB,GAAG;KACA,OAAO,CAAC,OAAO,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,YAAY,CAAC,CAAA;AAEvB,iBAAiB;AACjB,GAAG;KACA,OAAO,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,uBAAuB;AACvB,GAAG;KACA,OAAO,CAAC,4BAA4B,EAAE,oCAAoC,CAAC;KAC3E,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEnC,gBAAgB;AAChB,GAAG,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ interface AddOptions {
2
+ overwrite?: boolean;
3
+ yes?: boolean;
4
+ }
5
+ export declare function addCommand(components: string[], options: AddOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAkBD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,iBA6IzE"}
@@ -0,0 +1,141 @@
1
+ import pc from 'picocolors';
2
+ import * as p from '@clack/prompts';
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { join, dirname } from 'node:path';
5
+ import { spawn } from 'node:child_process';
6
+ export async function addCommand(components, options) {
7
+ console.log(pc.cyan('📦 Adding components...\n'));
8
+ try {
9
+ // Load registry
10
+ const registryPath = join(__dirname, '../../registry/registry.json');
11
+ if (!existsSync(registryPath)) {
12
+ console.log(pc.red('✗ Component registry not found'));
13
+ process.exit(1);
14
+ }
15
+ const registry = JSON.parse(readFileSync(registryPath, 'utf-8'));
16
+ // If no components specified, show selection
17
+ let selectedComponents = components;
18
+ if (selectedComponents.length === 0) {
19
+ const choices = registry.components.map((c) => ({
20
+ value: c.name,
21
+ label: c.name,
22
+ hint: c.description,
23
+ }));
24
+ const selected = await p.multiselect({
25
+ message: 'Which components would you like to add?',
26
+ options: choices,
27
+ required: true,
28
+ });
29
+ if (p.isCancel(selected)) {
30
+ console.log(pc.dim('\\nCancelled'));
31
+ return;
32
+ }
33
+ selectedComponents = selected;
34
+ }
35
+ // Validate all components exist
36
+ const invalidComponents = selectedComponents.filter((name) => !registry.components.find((c) => c.name === name));
37
+ if (invalidComponents.length > 0) {
38
+ console.log(pc.red(`\\n✗ Unknown components: ${invalidComponents.join(', ')}`));
39
+ console.log(pc.dim('\\nAvailable components:'));
40
+ for (const component of registry.components) {
41
+ console.log(pc.dim(` • ${component.name} - ${component.description}`));
42
+ }
43
+ process.exit(1);
44
+ }
45
+ // Ensure components directory exists
46
+ const projectPath = process.cwd();
47
+ const componentsDir = join(projectPath, 'src', 'components', 'ui');
48
+ if (!existsSync(componentsDir)) {
49
+ mkdirSync(componentsDir, { recursive: true });
50
+ }
51
+ // Track dependencies to install
52
+ const allDependencies = new Set();
53
+ // Install each component
54
+ const s = p.spinner();
55
+ for (const componentName of selectedComponents) {
56
+ const component = registry.components.find((c) => c.name === componentName);
57
+ s.start(`Installing ${componentName}`);
58
+ // Copy component files
59
+ for (const file of component.files) {
60
+ const sourcePath = join(__dirname, '../../registry', file.path);
61
+ const targetPath = join(projectPath, 'src', file.path);
62
+ // Check if file exists
63
+ if (existsSync(targetPath) && !options.overwrite) {
64
+ const shouldOverwrite = options.yes ||
65
+ (await p.confirm({
66
+ message: `${file.path} already exists. Overwrite?`,
67
+ initialValue: false,
68
+ }));
69
+ if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {
70
+ s.stop(`Skipped ${componentName}`);
71
+ continue;
72
+ }
73
+ }
74
+ // Ensure target directory exists
75
+ const targetDir = dirname(targetPath);
76
+ if (!existsSync(targetDir)) {
77
+ mkdirSync(targetDir, { recursive: true });
78
+ }
79
+ // Copy file
80
+ const content = readFileSync(sourcePath, 'utf-8');
81
+ writeFileSync(targetPath, content, 'utf-8');
82
+ }
83
+ // Collect dependencies
84
+ for (const dep of component.dependencies) {
85
+ allDependencies.add(dep);
86
+ }
87
+ s.stop(`Installed ${componentName}`);
88
+ }
89
+ // Install dependencies
90
+ if (allDependencies.size > 0) {
91
+ const shouldInstall = options.yes ||
92
+ (await p.confirm({
93
+ message: `Install dependencies (${Array.from(allDependencies).join(', ')})?`,
94
+ initialValue: true,
95
+ }));
96
+ if (!p.isCancel(shouldInstall) && shouldInstall) {
97
+ s.start('Installing dependencies with npm');
98
+ await installDependencies(Array.from(allDependencies));
99
+ s.stop('Dependencies installed');
100
+ }
101
+ }
102
+ // Success message
103
+ console.log(pc.green('\\n✓ Components added successfully!\\n'));
104
+ console.log(pc.dim('Components installed:'));
105
+ for (const name of selectedComponents) {
106
+ console.log(pc.dim(` • ${name} - src/components/ui/${name}.tsx`));
107
+ }
108
+ if (allDependencies.size > 0) {
109
+ console.log(pc.dim('\\nDependencies:'));
110
+ for (const dep of allDependencies) {
111
+ console.log(pc.dim(` • ${dep}`));
112
+ }
113
+ }
114
+ console.log();
115
+ }
116
+ catch (error) {
117
+ console.error(pc.red('\\n✗ Failed to add components:'), error);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ async function installDependencies(dependencies) {
122
+ return new Promise((resolve, reject) => {
123
+ const child = spawn('npm', ['install', ...dependencies], {
124
+ cwd: process.cwd(),
125
+ stdio: 'pipe',
126
+ shell: true,
127
+ });
128
+ child.on('close', (code) => {
129
+ if (code === 0) {
130
+ resolve();
131
+ }
132
+ else {
133
+ reject(new Error(`npm install failed with code ${code}`));
134
+ }
135
+ });
136
+ child.on('error', (error) => {
137
+ reject(error);
138
+ });
139
+ });
140
+ }
141
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface BuildOptions {
2
+ analyze?: boolean;
3
+ profile?: boolean;
4
+ sourcemap?: boolean;
5
+ }
6
+ export declare function buildCommand(options: BuildOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBAqDvD"}
@@ -0,0 +1,84 @@
1
+ import pc from 'picocolors';
2
+ import { build as viteBuild } from 'vite';
3
+ import { createViteConfig } from '../lib/vite/config-factory.js';
4
+ import { existsSync, statSync, readdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ export async function buildCommand(options) {
7
+ console.log(pc.cyan('🏗️ Building for production...\n'));
8
+ const startTime = Date.now();
9
+ try {
10
+ // Use profile flag, fall back to analyze for backward compatibility
11
+ const enableProfiling = options.profile || options.analyze || false;
12
+ const config = createViteConfig({
13
+ mode: 'production',
14
+ sourcemap: options.sourcemap || false,
15
+ profile: enableProfiling,
16
+ });
17
+ // Run Vite build
18
+ const result = await viteBuild(config);
19
+ const endTime = Date.now();
20
+ const duration = ((endTime - startTime) / 1000).toFixed(2);
21
+ console.log(pc.green(`\n✓ Build completed in ${duration}s\n`));
22
+ // Show bundle info
23
+ if (Array.isArray(result)) {
24
+ // Multiple builds
25
+ for (const output of result) {
26
+ if ('output' in output) {
27
+ showBundleInfo(output.output);
28
+ }
29
+ }
30
+ }
31
+ else if (result && 'output' in result) {
32
+ showBundleInfo(result.output);
33
+ }
34
+ // Show dist directory size
35
+ const distPath = join(process.cwd(), 'dist');
36
+ if (existsSync(distPath)) {
37
+ const totalSize = getDirSize(distPath);
38
+ const sizeKB = (totalSize / 1024).toFixed(1);
39
+ console.log(pc.dim(`Total dist size: ${sizeKB} KB\n`));
40
+ }
41
+ if (enableProfiling) {
42
+ console.log(pc.cyan('\n📊 Bundle analysis files generated:'));
43
+ console.log(pc.cyan(' 📄 Bundle report: dist/stats.html'));
44
+ console.log(pc.cyan(' 💡 Open stats.html in your browser to analyze bundle size'));
45
+ console.log(pc.cyan('\n🔍 Detailed profiling enabled - check build output above for timing breakdown\n'));
46
+ }
47
+ }
48
+ catch (error) {
49
+ console.error(pc.red('Build failed:'), error);
50
+ process.exit(1);
51
+ }
52
+ }
53
+ function showBundleInfo(output) {
54
+ if (!Array.isArray(output))
55
+ return;
56
+ console.log(pc.bold('Build output:'));
57
+ for (const chunk of output) {
58
+ if (chunk.type === 'chunk') {
59
+ const sizeKB = (chunk.code.length / 1024).toFixed(1);
60
+ console.log(pc.dim(` ${chunk.fileName} ${sizeKB} KB`));
61
+ }
62
+ else if (chunk.type === 'asset') {
63
+ const size = typeof chunk.source === 'string' ? chunk.source.length : chunk.source.byteLength;
64
+ const sizeKB = (size / 1024).toFixed(1);
65
+ console.log(pc.dim(` ${chunk.fileName} ${sizeKB} KB`));
66
+ }
67
+ }
68
+ }
69
+ function getDirSize(dirPath) {
70
+ let totalSize = 0;
71
+ const files = readdirSync(dirPath);
72
+ for (const file of files) {
73
+ const filePath = join(dirPath, file);
74
+ const stats = statSync(filePath);
75
+ if (stats.isDirectory()) {
76
+ totalSize += getDirSize(filePath);
77
+ }
78
+ else {
79
+ totalSize += stats.size;
80
+ }
81
+ }
82
+ return totalSize;
83
+ }
84
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface DeployOptions {
2
+ path?: string;
3
+ endpoint?: string;
4
+ qa?: boolean;
5
+ skipBuild?: boolean;
6
+ skipChecks?: boolean;
7
+ force?: boolean;
8
+ skipConfirm?: boolean;
9
+ }
10
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAYA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBAgJzD"}
@@ -0,0 +1,158 @@
1
+ import pc from 'picocolors';
2
+ import * as p from '@clack/prompts';
3
+ import { existsSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { getAppConfig } from '../lib/auth/config.js';
6
+ import { getToken } from '../lib/auth/token-storage.js';
7
+ import { validateProject, printValidationResults } from '../lib/deploy/validation.js';
8
+ import { packProject } from '../lib/deploy/pack-project.js';
9
+ import { uploadAssets, checkLinkAppExists } from '../lib/deploy/upload.js';
10
+ import { generateManifestFiles } from '../lib/deploy/generate-manifest-files.js';
11
+ import { buildCommand } from './build.js';
12
+ export async function deployCommand(options) {
13
+ const env = options.qa ? 'QA' : 'Production';
14
+ console.log(pc.cyan(`🚀 Deploying to ${env}...\n`));
15
+ try {
16
+ const config = await getAppConfig(options.qa ? 'qa' : 'production');
17
+ const projectPath = options.path ?? process.cwd();
18
+ // Check authentication
19
+ const accessToken = getToken(config.auth.audience);
20
+ if (!accessToken) {
21
+ console.log(pc.red('✗ Not authenticated'));
22
+ console.log(pc.dim(` Run: linkapp login${options.qa ? ' --qa' : ''}\n`));
23
+ process.exit(1);
24
+ }
25
+ // Run build if needed
26
+ if (!options.skipBuild) {
27
+ const distPath = join(projectPath, 'dist');
28
+ if (!existsSync(distPath)) {
29
+ console.log(pc.cyan('📦 Building project...\n'));
30
+ await buildCommand({ sourcemap: false });
31
+ console.log();
32
+ }
33
+ }
34
+ // Pre-deployment validation
35
+ if (!options.skipChecks) {
36
+ console.log(pc.cyan('🔍 Running pre-deployment checks...\n'));
37
+ const validationResult = await validateProject();
38
+ printValidationResults(validationResult);
39
+ if (!validationResult.success) {
40
+ console.log(pc.red('\n✗ Pre-deployment validation failed\n'));
41
+ process.exit(1);
42
+ }
43
+ console.log();
44
+ }
45
+ const s = p.spinner();
46
+ // Generate manifest files from config
47
+ s.start('Generating manifest files');
48
+ await generateManifestFiles(projectPath);
49
+ s.stop('Manifest files generated');
50
+ // Get LinkApp ID from config (check root first, then .config for backward compatibility)
51
+ const rootConfigPath = join(projectPath, 'linkapp.config.ts');
52
+ const nestedConfigPath = join(projectPath, '.config', 'linkapp.config.ts');
53
+ const configPath = existsSync(rootConfigPath) ? rootConfigPath : nestedConfigPath;
54
+ const linkAppId = await getLinkAppId(configPath);
55
+ // Check if LinkApp exists
56
+ s.start('Checking LinkApp status');
57
+ const apiUrl = options.endpoint ?? `${config.link_types_url}/link-types`;
58
+ const exists = await checkLinkAppExists(apiUrl, linkAppId, accessToken);
59
+ s.stop(exists ? 'LinkApp exists, updating' : 'Creating new LinkApp');
60
+ // Pack project
61
+ s.start('Packing project files');
62
+ const packedFiles = await packProject({ projectPath });
63
+ s.stop(`Packed ${packedFiles.length} items`);
64
+ // Show files to upload
65
+ console.log(pc.dim('\nFiles to upload:'));
66
+ for (const file of packedFiles.slice(0, 10)) {
67
+ console.log(pc.dim(` • ${file}`));
68
+ }
69
+ if (packedFiles.length > 10) {
70
+ console.log(pc.dim(` ... and ${packedFiles.length - 10} more`));
71
+ }
72
+ // Confirm deployment
73
+ if (!options.skipConfirm) {
74
+ const shouldDeploy = await p.confirm({
75
+ message: `Deploy to ${env}?`,
76
+ initialValue: true,
77
+ });
78
+ if (p.isCancel(shouldDeploy) || !shouldDeploy) {
79
+ console.log(pc.dim('\nDeployment cancelled'));
80
+ return;
81
+ }
82
+ }
83
+ // Upload
84
+ s.start('Uploading assets');
85
+ const result = await uploadAssets({
86
+ projectPath,
87
+ apiUrl,
88
+ accessToken,
89
+ isUpdate: exists,
90
+ forceUpdate: options.force,
91
+ });
92
+ s.stop('Assets uploaded');
93
+ // Show success
94
+ console.log(pc.green('\n✓ Deployment successful!\n'));
95
+ console.log(pc.bold('LinkApp Details:'));
96
+ console.log(pc.dim(` ID: ${result.linkType.linkTypeId}`));
97
+ console.log(pc.dim(` Status: ${result.linkType.status}`));
98
+ console.log(pc.dim(` Updated: ${new Date(result.linkType.updatedTimestamp * 1000).toLocaleString()}`));
99
+ if (result.build?.id) {
100
+ const buildUrl = options.qa
101
+ ? `https://buildkite.com/linktree/link-types-ci-service/builds/${result.build.id}`
102
+ : `https://linkapp-ci.replit.app/?linkTypeId=${result.linkType.linkTypeId}&buildId=${result.build.id}`;
103
+ console.log(pc.dim(` Build: ${buildUrl}`));
104
+ }
105
+ const createUrl = options.qa
106
+ ? `https://qa.linktr.ee/admin?action=create-link&linkType=${result.linkType.linkTypeId}`
107
+ : `https://linktr.ee/admin?action=create-link&linkType=${result.linkType.linkTypeId}`;
108
+ console.log(pc.cyan(`\n🔗 Test LinkApp: ${createUrl}\n`));
109
+ }
110
+ catch (error) {
111
+ console.log(pc.red('\n✗ Deployment failed\n'));
112
+ // Check if this is our structured error with API details
113
+ if (error && typeof error === 'object' && 'statusCode' in error && 'messages' in error) {
114
+ const structuredError = error;
115
+ console.log(pc.bold('Error Details:'));
116
+ console.log(pc.dim(` Status Code: ${structuredError.statusCode}`));
117
+ if (Array.isArray(structuredError.messages) && structuredError.messages.length > 0) {
118
+ console.log(pc.dim('\n Validation Errors:'));
119
+ for (const msg of structuredError.messages) {
120
+ console.log(pc.dim(` • ${msg}`));
121
+ }
122
+ }
123
+ if (structuredError.responseData?.error) {
124
+ console.log(pc.dim(`\n Error Type: ${structuredError.responseData.error}`));
125
+ }
126
+ }
127
+ else if (error instanceof Error) {
128
+ console.log(pc.dim(` ${error.message}`));
129
+ }
130
+ else {
131
+ console.log(pc.dim(` ${String(error)}`));
132
+ }
133
+ console.log(); // Empty line
134
+ process.exit(1);
135
+ }
136
+ }
137
+ async function getLinkAppId(configPath) {
138
+ // Load the TypeScript config using jiti to get the explicit linkAppId
139
+ const { createJiti } = await import('jiti');
140
+ const jiti = createJiti(import.meta.url, {
141
+ interopDefault: true,
142
+ moduleCache: false,
143
+ });
144
+ try {
145
+ const config = jiti(configPath);
146
+ if (!config?.id) {
147
+ throw new Error('id is required in configuration');
148
+ }
149
+ return config.id;
150
+ }
151
+ catch (error) {
152
+ if (error instanceof Error && error.message.includes('id is required')) {
153
+ throw error;
154
+ }
155
+ throw new Error(`Failed to load id from config: ${error instanceof Error ? error.message : error}`);
156
+ }
157
+ }
158
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface DevOptions {
2
+ port?: number;
3
+ noOpen?: boolean;
4
+ }
5
+ export declare function devCommand(options: DevOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAWA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBAyEnD"}
@@ -0,0 +1,73 @@
1
+ import pc from 'picocolors';
2
+ import * as p from '@clack/prompts';
3
+ import { createServer as createViteServer } from 'vite';
4
+ import open from 'open';
5
+ import { dirname, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { validateLayouts } from '../lib/build/detect-layouts.js';
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ export async function devCommand(options) {
11
+ const userProjectPath = process.cwd();
12
+ const s = p.spinner();
13
+ try {
14
+ const startTime = Date.now();
15
+ // Validate layouts exist
16
+ s.start('Validating project structure');
17
+ const validation = validateLayouts(userProjectPath);
18
+ if (!validation.valid) {
19
+ s.stop(pc.red('✗ Invalid project structure'));
20
+ for (const error of validation.errors) {
21
+ console.log(pc.red(` ${error}`));
22
+ }
23
+ process.exit(1);
24
+ }
25
+ s.stop();
26
+ const port = options.port || 3000;
27
+ const devServerPath = resolve(__dirname, '../../dev-server');
28
+ // Create Vite server - just like server.ts, but override @ alias to user's project root
29
+ const viteServer = await createViteServer({
30
+ configFile: resolve(devServerPath, 'vite.config.ts'),
31
+ root: devServerPath,
32
+ resolve: {
33
+ alias: {
34
+ '@': userProjectPath,
35
+ },
36
+ },
37
+ server: {
38
+ port,
39
+ host: 'localhost',
40
+ open: false,
41
+ strictPort: false,
42
+ },
43
+ logLevel: 'error',
44
+ });
45
+ await viteServer.listen();
46
+ s.stop();
47
+ const readyTime = ((Date.now() - startTime) / 1000).toFixed(1);
48
+ console.log();
49
+ console.log(pc.bold(pc.cyan(' LinkApp')) + pc.dim(' ready'));
50
+ console.log();
51
+ console.log(pc.green(' ➜') + pc.bold(' Local: ') + pc.cyan(`http://localhost:${port}`));
52
+ console.log();
53
+ if (!options.noOpen) {
54
+ open(`http://localhost:${port}`);
55
+ }
56
+ viteServer.bindCLIShortcuts({ print: true });
57
+ console.log(pc.dim(` ✓ Ready in ${readyTime}s`));
58
+ // Handle Ctrl+C
59
+ process.on('SIGINT', async () => {
60
+ console.log('\n');
61
+ await viteServer.close();
62
+ process.exit(0);
63
+ });
64
+ // Keep alive
65
+ await new Promise(() => { });
66
+ }
67
+ catch (error) {
68
+ s.stop(pc.red('✗ Failed to start server'));
69
+ console.error(pc.red('\n✗ Error:'), error);
70
+ process.exit(1);
71
+ }
72
+ }
73
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface LoginOptions {
2
+ qa?: boolean;
3
+ }
4
+ export declare function loginCommand(options: LoginOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAA;CACb;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBA8EvD"}