@oaysus/cli 0.1.0
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/README.md +166 -0
- package/bin/oaysus.js +6 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +75 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +44 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/components/App.d.ts +43 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +63 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/BuildProgress.d.ts +16 -0
- package/dist/components/BuildProgress.d.ts.map +1 -0
- package/dist/components/BuildProgress.js +42 -0
- package/dist/components/BuildProgress.js.map +1 -0
- package/dist/components/ErrorMessage.d.ts +13 -0
- package/dist/components/ErrorMessage.d.ts.map +1 -0
- package/dist/components/ErrorMessage.js +29 -0
- package/dist/components/ErrorMessage.js.map +1 -0
- package/dist/components/FileList.d.ts +13 -0
- package/dist/components/FileList.d.ts.map +1 -0
- package/dist/components/FileList.js +25 -0
- package/dist/components/FileList.js.map +1 -0
- package/dist/components/Header.d.ts +12 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +18 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/LastCommand.d.ts +9 -0
- package/dist/components/LastCommand.d.ts.map +1 -0
- package/dist/components/LastCommand.js +39 -0
- package/dist/components/LastCommand.js.map +1 -0
- package/dist/components/Logo.d.ts +14 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Logo.js +44 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +13 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +20 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/SlashCommands.d.ts +17 -0
- package/dist/components/SlashCommands.d.ts.map +1 -0
- package/dist/components/SlashCommands.js +59 -0
- package/dist/components/SlashCommands.js.map +1 -0
- package/dist/components/Spinner.d.ts +13 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +16 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/StatusCard.d.ts +14 -0
- package/dist/components/StatusCard.d.ts.map +1 -0
- package/dist/components/StatusCard.js +40 -0
- package/dist/components/StatusCard.js.map +1 -0
- package/dist/components/SuccessMessage.d.ts +12 -0
- package/dist/components/SuccessMessage.d.ts.map +1 -0
- package/dist/components/SuccessMessage.js +18 -0
- package/dist/components/SuccessMessage.js.map +1 -0
- package/dist/components/UploadProgress.d.ts +13 -0
- package/dist/components/UploadProgress.d.ts.map +1 -0
- package/dist/components/UploadProgress.js +40 -0
- package/dist/components/UploadProgress.js.map +1 -0
- package/dist/components/ValidationProgress.d.ts +12 -0
- package/dist/components/ValidationProgress.d.ts.map +1 -0
- package/dist/components/ValidationProgress.js +44 -0
- package/dist/components/ValidationProgress.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/core/framework-registry.d.ts +27 -0
- package/dist/lib/core/framework-registry.d.ts.map +1 -0
- package/dist/lib/core/framework-registry.js +67 -0
- package/dist/lib/core/framework-registry.js.map +1 -0
- package/dist/lib/core/types.d.ts +124 -0
- package/dist/lib/core/types.d.ts.map +1 -0
- package/dist/lib/core/types.js +6 -0
- package/dist/lib/core/types.js.map +1 -0
- package/dist/lib/project-generator.d.ts +15 -0
- package/dist/lib/project-generator.d.ts.map +1 -0
- package/dist/lib/project-generator.js +286 -0
- package/dist/lib/project-generator.js.map +1 -0
- package/dist/lib/push.d.ts +20 -0
- package/dist/lib/push.d.ts.map +1 -0
- package/dist/lib/push.js +222 -0
- package/dist/lib/push.js.map +1 -0
- package/dist/lib/react/builder.d.ts +45 -0
- package/dist/lib/react/builder.d.ts.map +1 -0
- package/dist/lib/react/builder.js +381 -0
- package/dist/lib/react/builder.js.map +1 -0
- package/dist/lib/react/bundler.d.ts +104 -0
- package/dist/lib/react/bundler.d.ts.map +1 -0
- package/dist/lib/react/bundler.js +654 -0
- package/dist/lib/react/bundler.js.map +1 -0
- package/dist/lib/react/config.d.ts +34 -0
- package/dist/lib/react/config.d.ts.map +1 -0
- package/dist/lib/react/config.js +64 -0
- package/dist/lib/react/config.js.map +1 -0
- package/dist/lib/react/import-map.d.ts +54 -0
- package/dist/lib/react/import-map.d.ts.map +1 -0
- package/dist/lib/react/import-map.js +187 -0
- package/dist/lib/react/import-map.js.map +1 -0
- package/dist/lib/shared/auth-middleware.d.ts +29 -0
- package/dist/lib/shared/auth-middleware.d.ts.map +1 -0
- package/dist/lib/shared/auth-middleware.js +48 -0
- package/dist/lib/shared/auth-middleware.js.map +1 -0
- package/dist/lib/shared/auth.d.ts +50 -0
- package/dist/lib/shared/auth.d.ts.map +1 -0
- package/dist/lib/shared/auth.js +243 -0
- package/dist/lib/shared/auth.js.map +1 -0
- package/dist/lib/shared/cdn-downloader.d.ts +30 -0
- package/dist/lib/shared/cdn-downloader.d.ts.map +1 -0
- package/dist/lib/shared/cdn-downloader.js +126 -0
- package/dist/lib/shared/cdn-downloader.js.map +1 -0
- package/dist/lib/shared/command-history.d.ts +29 -0
- package/dist/lib/shared/command-history.d.ts.map +1 -0
- package/dist/lib/shared/command-history.js +73 -0
- package/dist/lib/shared/command-history.js.map +1 -0
- package/dist/lib/shared/commands.d.ts +24 -0
- package/dist/lib/shared/commands.d.ts.map +1 -0
- package/dist/lib/shared/commands.js +63 -0
- package/dist/lib/shared/commands.js.map +1 -0
- package/dist/lib/shared/config.d.ts +40 -0
- package/dist/lib/shared/config.d.ts.map +1 -0
- package/dist/lib/shared/config.js +69 -0
- package/dist/lib/shared/config.js.map +1 -0
- package/dist/lib/shared/file-utils.d.ts +45 -0
- package/dist/lib/shared/file-utils.d.ts.map +1 -0
- package/dist/lib/shared/file-utils.js +88 -0
- package/dist/lib/shared/file-utils.js.map +1 -0
- package/dist/lib/shared/import-analyzer.d.ts +49 -0
- package/dist/lib/shared/import-analyzer.d.ts.map +1 -0
- package/dist/lib/shared/import-analyzer.js +268 -0
- package/dist/lib/shared/import-analyzer.js.map +1 -0
- package/dist/lib/shared/path-builder.d.ts +55 -0
- package/dist/lib/shared/path-builder.d.ts.map +1 -0
- package/dist/lib/shared/path-builder.js +66 -0
- package/dist/lib/shared/path-builder.js.map +1 -0
- package/dist/lib/shared/uploader.d.ts +79 -0
- package/dist/lib/shared/uploader.d.ts.map +1 -0
- package/dist/lib/shared/uploader.js +340 -0
- package/dist/lib/shared/uploader.js.map +1 -0
- package/dist/lib/shared/zip-creator.d.ts +18 -0
- package/dist/lib/shared/zip-creator.d.ts.map +1 -0
- package/dist/lib/shared/zip-creator.js +131 -0
- package/dist/lib/shared/zip-creator.js.map +1 -0
- package/dist/lib/svelte/builder.d.ts +37 -0
- package/dist/lib/svelte/builder.d.ts.map +1 -0
- package/dist/lib/svelte/builder.js +364 -0
- package/dist/lib/svelte/builder.js.map +1 -0
- package/dist/lib/svelte/bundler.d.ts +92 -0
- package/dist/lib/svelte/bundler.d.ts.map +1 -0
- package/dist/lib/svelte/bundler.js +499 -0
- package/dist/lib/svelte/bundler.js.map +1 -0
- package/dist/lib/svelte/config.d.ts +22 -0
- package/dist/lib/svelte/config.d.ts.map +1 -0
- package/dist/lib/svelte/config.js +65 -0
- package/dist/lib/svelte/config.js.map +1 -0
- package/dist/lib/svelte/import-map.d.ts +42 -0
- package/dist/lib/svelte/import-map.d.ts.map +1 -0
- package/dist/lib/svelte/import-map.js +197 -0
- package/dist/lib/svelte/import-map.js.map +1 -0
- package/dist/lib/template-manager.d.ts +33 -0
- package/dist/lib/template-manager.d.ts.map +1 -0
- package/dist/lib/template-manager.js +69 -0
- package/dist/lib/template-manager.js.map +1 -0
- package/dist/lib/validator.d.ts +10 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +343 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/lib/vue/builder.d.ts +37 -0
- package/dist/lib/vue/builder.d.ts.map +1 -0
- package/dist/lib/vue/builder.js +366 -0
- package/dist/lib/vue/builder.js.map +1 -0
- package/dist/lib/vue/bundler.d.ts +78 -0
- package/dist/lib/vue/bundler.d.ts.map +1 -0
- package/dist/lib/vue/bundler.js +208 -0
- package/dist/lib/vue/bundler.js.map +1 -0
- package/dist/lib/vue/config.d.ts +18 -0
- package/dist/lib/vue/config.d.ts.map +1 -0
- package/dist/lib/vue/config.js +42 -0
- package/dist/lib/vue/config.js.map +1 -0
- package/dist/lib/vue/import-map.d.ts +42 -0
- package/dist/lib/vue/import-map.d.ts.map +1 -0
- package/dist/lib/vue/import-map.js +156 -0
- package/dist/lib/vue/import-map.js.map +1 -0
- package/dist/screens/BuildScreen.d.ts +8 -0
- package/dist/screens/BuildScreen.d.ts.map +1 -0
- package/dist/screens/BuildScreen.js +158 -0
- package/dist/screens/BuildScreen.js.map +1 -0
- package/dist/screens/CreateScreen.d.ts +12 -0
- package/dist/screens/CreateScreen.d.ts.map +1 -0
- package/dist/screens/CreateScreen.js +305 -0
- package/dist/screens/CreateScreen.js.map +1 -0
- package/dist/screens/InitScreen.d.ts +11 -0
- package/dist/screens/InitScreen.d.ts.map +1 -0
- package/dist/screens/InitScreen.js +339 -0
- package/dist/screens/InitScreen.js.map +1 -0
- package/dist/screens/LoginScreen.d.ts +15 -0
- package/dist/screens/LoginScreen.d.ts.map +1 -0
- package/dist/screens/LoginScreen.js +427 -0
- package/dist/screens/LoginScreen.js.map +1 -0
- package/dist/screens/LogoutScreen.d.ts +15 -0
- package/dist/screens/LogoutScreen.d.ts.map +1 -0
- package/dist/screens/LogoutScreen.js +187 -0
- package/dist/screens/LogoutScreen.js.map +1 -0
- package/dist/screens/PushScreen.d.ts +12 -0
- package/dist/screens/PushScreen.d.ts.map +1 -0
- package/dist/screens/PushScreen.js +546 -0
- package/dist/screens/PushScreen.js.map +1 -0
- package/dist/screens/ValidateScreen.d.ts +12 -0
- package/dist/screens/ValidateScreen.d.ts.map +1 -0
- package/dist/screens/ValidateScreen.js +193 -0
- package/dist/screens/ValidateScreen.js.map +1 -0
- package/dist/screens/WelcomeScreen.d.ts +39 -0
- package/dist/screens/WelcomeScreen.d.ts.map +1 -0
- package/dist/screens/WelcomeScreen.js +297 -0
- package/dist/screens/WelcomeScreen.js.map +1 -0
- package/dist/screens/WhoamiScreen.d.ts +14 -0
- package/dist/screens/WhoamiScreen.d.ts.map +1 -0
- package/dist/screens/WhoamiScreen.js +180 -0
- package/dist/screens/WhoamiScreen.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/templates.d.ts +55 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +6 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/validation.d.ts +108 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +6 -0
- package/dist/types/validation.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import crypto from 'crypto';
|
|
6
|
+
import { SSO_BASE_URL, ADMIN_URL, CREDENTIALS_PATH, debug as log, debugError as logError } from './config.js';
|
|
7
|
+
/**
|
|
8
|
+
* Request magic link for email authentication with device code
|
|
9
|
+
*/
|
|
10
|
+
export async function requestMagicLink(email, deviceCode) {
|
|
11
|
+
const url = `${SSO_BASE_URL}/sso/customer/auth/magic-link`;
|
|
12
|
+
const redirectUrl = `${ADMIN_URL}/device?code=${deviceCode}`;
|
|
13
|
+
log('[DEBUG] Requesting magic link');
|
|
14
|
+
log('[DEBUG] API URL:', url);
|
|
15
|
+
log('[DEBUG] Email:', email);
|
|
16
|
+
log('[DEBUG] Redirect URL:', redirectUrl);
|
|
17
|
+
try {
|
|
18
|
+
const response = await axios.post(url, {
|
|
19
|
+
email,
|
|
20
|
+
redirectUrl
|
|
21
|
+
});
|
|
22
|
+
log('[DEBUG] Magic link response:', response.data);
|
|
23
|
+
// Magic link is sent via email (not returned in response for security)
|
|
24
|
+
if (response.data.success) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
throw new Error(response.data.message || 'Failed to send magic link');
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (axios.isAxiosError(error)) {
|
|
31
|
+
logError('[ERROR] Magic link request failed');
|
|
32
|
+
logError('[ERROR] Status:', error.response?.status);
|
|
33
|
+
logError('[ERROR] Response:', error.response?.data);
|
|
34
|
+
throw new Error(error.response?.data?.message || 'Failed to send magic link');
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Generate random device code for polling
|
|
41
|
+
*/
|
|
42
|
+
export function generateDeviceCode() {
|
|
43
|
+
return crypto.randomBytes(16).toString('hex');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generate human-readable user code (ABCD-1234 format)
|
|
47
|
+
*/
|
|
48
|
+
export function generateUserCode() {
|
|
49
|
+
const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // Exclude confusing chars
|
|
50
|
+
const part1 = Array.from({ length: 4 }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
|
|
51
|
+
const part2 = Array.from({ length: 4 }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
|
|
52
|
+
return `${part1}-${part2}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Initialize device authorization request
|
|
56
|
+
*/
|
|
57
|
+
export async function initializeDevice() {
|
|
58
|
+
const deviceCode = generateDeviceCode();
|
|
59
|
+
const userCode = generateUserCode();
|
|
60
|
+
const url = `${SSO_BASE_URL}/sso/cli/device/init`;
|
|
61
|
+
log('[DEBUG] Initializing device authorization');
|
|
62
|
+
log('[DEBUG] API URL:', url);
|
|
63
|
+
log('[DEBUG] Device Code:', deviceCode);
|
|
64
|
+
log('[DEBUG] User Code:', userCode);
|
|
65
|
+
try {
|
|
66
|
+
const response = await axios.post(url, {
|
|
67
|
+
deviceCode,
|
|
68
|
+
userCode,
|
|
69
|
+
clientInfo: {
|
|
70
|
+
version: '0.1.0',
|
|
71
|
+
os: os.platform(),
|
|
72
|
+
hostname: os.hostname()
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
log('[DEBUG] Response status:', response.status);
|
|
76
|
+
log('[DEBUG] Response data:', response.data);
|
|
77
|
+
return response.data;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (axios.isAxiosError(error)) {
|
|
81
|
+
logError('[ERROR] Request failed');
|
|
82
|
+
logError('[ERROR] URL:', url);
|
|
83
|
+
logError('[ERROR] Status:', error.response?.status);
|
|
84
|
+
logError('[ERROR] Response:', error.response?.data);
|
|
85
|
+
logError('[ERROR] Message:', error.message);
|
|
86
|
+
}
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Select website for device authorization
|
|
92
|
+
*/
|
|
93
|
+
export async function selectWebsite(deviceCode, websiteId) {
|
|
94
|
+
const url = `${SSO_BASE_URL}/sso/cli/device/select-website`;
|
|
95
|
+
log('[DEBUG] Selecting website');
|
|
96
|
+
log('[DEBUG] API URL:', url);
|
|
97
|
+
log('[DEBUG] Device Code:', deviceCode);
|
|
98
|
+
log('[DEBUG] Website ID:', websiteId);
|
|
99
|
+
try {
|
|
100
|
+
const response = await axios.post(url, {
|
|
101
|
+
deviceCode,
|
|
102
|
+
websiteId
|
|
103
|
+
});
|
|
104
|
+
log('[DEBUG] Select website response:', response.data);
|
|
105
|
+
if (response.data.success) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
throw new Error(response.data.message || 'Failed to select website');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (axios.isAxiosError(error)) {
|
|
112
|
+
logError('[ERROR] Select website failed');
|
|
113
|
+
logError('[ERROR] Status:', error.response?.status);
|
|
114
|
+
logError('[ERROR] Response:', error.response?.data);
|
|
115
|
+
throw new Error(error.response?.data?.error || 'Failed to select website');
|
|
116
|
+
}
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Poll for device authorization status
|
|
122
|
+
* Returns DeviceStatusResponse which may include needsWebsiteSelection flag
|
|
123
|
+
*/
|
|
124
|
+
export async function pollForAuth(deviceCode, options) {
|
|
125
|
+
const startTime = Date.now();
|
|
126
|
+
while (true) {
|
|
127
|
+
// Check timeout
|
|
128
|
+
if (Date.now() - startTime > options.timeout) {
|
|
129
|
+
throw new Error('Authentication timeout - please try again');
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const response = await axios.get(`${SSO_BASE_URL}/sso/cli/device/status`, { params: { deviceCode } });
|
|
133
|
+
const data = response.data;
|
|
134
|
+
// Device approved but needs website selection
|
|
135
|
+
if (data.status === 'approved' && data.needsWebsiteSelection && data.websites) {
|
|
136
|
+
log('[DEBUG] Device approved - needs website selection');
|
|
137
|
+
log('[DEBUG] Available websites:', data.websites);
|
|
138
|
+
return data; // Return response with websites list
|
|
139
|
+
}
|
|
140
|
+
// Device approved with JWT - authentication complete
|
|
141
|
+
if (data.status === 'approved' && data.jwt) {
|
|
142
|
+
log('[DEBUG] Device approved - JWT received');
|
|
143
|
+
// Calculate expiry
|
|
144
|
+
const expiresAt = new Date(Date.now() + (data.expiresIn || 604800) * 1000).toISOString();
|
|
145
|
+
return {
|
|
146
|
+
jwt: data.jwt,
|
|
147
|
+
userId: data.userId,
|
|
148
|
+
email: data.email,
|
|
149
|
+
websiteId: data.websiteId,
|
|
150
|
+
websiteName: data.websiteName,
|
|
151
|
+
subdomain: data.subdomain,
|
|
152
|
+
platforms: data.platforms || ['oaysus', 'hosting'],
|
|
153
|
+
expiresAt
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (data.status === 'denied') {
|
|
157
|
+
throw new Error('Authorization denied by user');
|
|
158
|
+
}
|
|
159
|
+
if (data.status === 'expired') {
|
|
160
|
+
throw new Error('Authorization code expired');
|
|
161
|
+
}
|
|
162
|
+
// Wait before next poll
|
|
163
|
+
await new Promise(resolve => setTimeout(resolve, options.interval));
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
|
167
|
+
throw new Error('Authorization request not found or expired');
|
|
168
|
+
}
|
|
169
|
+
if (error instanceof Error && error.message.includes('denied')) {
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
if (error instanceof Error && error.message.includes('expired')) {
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
// Continue polling on other errors
|
|
176
|
+
await new Promise(resolve => setTimeout(resolve, options.interval));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Save credentials to local file
|
|
182
|
+
*/
|
|
183
|
+
export async function saveCredentials(credentials) {
|
|
184
|
+
const credentialsDir = path.dirname(CREDENTIALS_PATH);
|
|
185
|
+
// Create .oaysus directory if it doesn't exist
|
|
186
|
+
await fs.mkdir(credentialsDir, { recursive: true });
|
|
187
|
+
// Write credentials
|
|
188
|
+
await fs.writeFile(CREDENTIALS_PATH, JSON.stringify(credentials, null, 2), { mode: 0o600 } // Owner read/write only
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Load credentials from local file
|
|
193
|
+
*/
|
|
194
|
+
export async function loadCredentials() {
|
|
195
|
+
try {
|
|
196
|
+
const data = await fs.readFile(CREDENTIALS_PATH, 'utf-8');
|
|
197
|
+
return JSON.parse(data);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Clear credentials file
|
|
205
|
+
*/
|
|
206
|
+
export async function clearCredentials() {
|
|
207
|
+
try {
|
|
208
|
+
await fs.unlink(CREDENTIALS_PATH);
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
// Ignore if file doesn't exist
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Check if user is authenticated with valid token
|
|
216
|
+
*/
|
|
217
|
+
export async function isAuthenticated() {
|
|
218
|
+
const credentials = await loadCredentials();
|
|
219
|
+
if (!credentials) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
// Check if token expired
|
|
223
|
+
const expiresAt = new Date(credentials.expiresAt);
|
|
224
|
+
const now = new Date();
|
|
225
|
+
return expiresAt > now;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get credentials or throw error if not authenticated
|
|
229
|
+
*/
|
|
230
|
+
export async function requireAuth() {
|
|
231
|
+
const credentials = await loadCredentials();
|
|
232
|
+
if (!credentials) {
|
|
233
|
+
throw new Error('Not authenticated. Run: oaysus login');
|
|
234
|
+
}
|
|
235
|
+
// Check expiry
|
|
236
|
+
const expiresAt = new Date(credentials.expiresAt);
|
|
237
|
+
const now = new Date();
|
|
238
|
+
if (expiresAt <= now) {
|
|
239
|
+
throw new Error('Token expired. Run: oaysus login');
|
|
240
|
+
}
|
|
241
|
+
return credentials;
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/shared/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDN Downloader
|
|
3
|
+
* Downloads framework dependencies from esm.sh CDN for production upload to R2
|
|
4
|
+
*/
|
|
5
|
+
export interface DownloadedDependency {
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
files: {
|
|
9
|
+
path: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Download framework dependency from esm.sh CDN
|
|
15
|
+
* Downloads main export and all sub-exports
|
|
16
|
+
*/
|
|
17
|
+
export declare function downloadFrameworkDependency(packageName: string, version: string, subExports?: string[]): Promise<DownloadedDependency>;
|
|
18
|
+
/**
|
|
19
|
+
* Save downloaded dependency to disk
|
|
20
|
+
*/
|
|
21
|
+
export declare function saveDownloadedDependency(dependency: DownloadedDependency, outputDir: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get list of framework dependencies to download based on framework type
|
|
24
|
+
*/
|
|
25
|
+
export declare function getFrameworkDependencies(framework: string, version: string): Array<{
|
|
26
|
+
packageName: string;
|
|
27
|
+
version: string;
|
|
28
|
+
subExports: string[];
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=cdn-downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdn-downloader.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/cdn-downloader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;CACL;AAmBD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAM,EAAO,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAyC/B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,GAChB,IAAI,CAsBN;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqCvE"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDN Downloader
|
|
3
|
+
* Downloads framework dependencies from esm.sh CDN for production upload to R2
|
|
4
|
+
*/
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* Download a single file from esm.sh
|
|
10
|
+
*/
|
|
11
|
+
async function downloadFile(url) {
|
|
12
|
+
try {
|
|
13
|
+
const response = await axios.get(url, {
|
|
14
|
+
responseType: 'text',
|
|
15
|
+
headers: {
|
|
16
|
+
'User-Agent': 'oaysus-cli'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return response.data;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
throw new Error(`Failed to download ${url}: ${error}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Download framework dependency from esm.sh CDN
|
|
27
|
+
* Downloads main export and all sub-exports
|
|
28
|
+
*/
|
|
29
|
+
export async function downloadFrameworkDependency(packageName, version, subExports = []) {
|
|
30
|
+
const baseUrl = `https://esm.sh/${packageName}@${version}`;
|
|
31
|
+
const files = [];
|
|
32
|
+
console.log(`Downloading ${packageName}@${version} from esm.sh...`);
|
|
33
|
+
// Download main export
|
|
34
|
+
try {
|
|
35
|
+
const mainContent = await downloadFile(baseUrl);
|
|
36
|
+
files.push({
|
|
37
|
+
path: 'index.js',
|
|
38
|
+
content: mainContent
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error(`Failed to download main export for ${packageName}:`, error);
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
// Download sub-exports
|
|
46
|
+
for (const exportName of subExports) {
|
|
47
|
+
try {
|
|
48
|
+
const exportUrl = `${baseUrl}/${exportName}`;
|
|
49
|
+
const exportContent = await downloadFile(exportUrl);
|
|
50
|
+
// Convert slash paths to files with dashes for consistency
|
|
51
|
+
const fileName = exportName.replace(/\//g, '-') + '.js';
|
|
52
|
+
files.push({
|
|
53
|
+
path: fileName,
|
|
54
|
+
content: exportContent
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.warn(`Could not download ${packageName}/${exportName}, skipping...`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
name: packageName,
|
|
63
|
+
version,
|
|
64
|
+
files
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Save downloaded dependency to disk
|
|
69
|
+
*/
|
|
70
|
+
export function saveDownloadedDependency(dependency, outputDir) {
|
|
71
|
+
const depDir = path.join(outputDir, `${dependency.name}@${dependency.version}`);
|
|
72
|
+
// Create directory
|
|
73
|
+
if (!fs.existsSync(depDir)) {
|
|
74
|
+
fs.mkdirSync(depDir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
// Save all files
|
|
77
|
+
for (const file of dependency.files) {
|
|
78
|
+
const filePath = path.join(depDir, file.path);
|
|
79
|
+
// Create parent directory if needed (for nested paths)
|
|
80
|
+
const fileDir = path.dirname(filePath);
|
|
81
|
+
if (!fs.existsSync(fileDir)) {
|
|
82
|
+
fs.mkdirSync(fileDir, { recursive: true });
|
|
83
|
+
}
|
|
84
|
+
fs.writeFileSync(filePath, file.content);
|
|
85
|
+
}
|
|
86
|
+
console.log(`Saved ${dependency.name}@${dependency.version} (${dependency.files.length} files)`);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get list of framework dependencies to download based on framework type
|
|
90
|
+
*/
|
|
91
|
+
export function getFrameworkDependencies(framework, version) {
|
|
92
|
+
switch (framework) {
|
|
93
|
+
case 'react':
|
|
94
|
+
return [
|
|
95
|
+
{
|
|
96
|
+
packageName: 'react',
|
|
97
|
+
version,
|
|
98
|
+
subExports: ['jsx-runtime', 'jsx-dev-runtime']
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
packageName: 'react-dom',
|
|
102
|
+
version,
|
|
103
|
+
subExports: ['client']
|
|
104
|
+
}
|
|
105
|
+
];
|
|
106
|
+
case 'svelte':
|
|
107
|
+
return [
|
|
108
|
+
{
|
|
109
|
+
packageName: 'svelte',
|
|
110
|
+
version,
|
|
111
|
+
subExports: ['internal', 'store', 'motion', 'transition', 'animate', 'easing', 'legacy']
|
|
112
|
+
}
|
|
113
|
+
];
|
|
114
|
+
case 'vue':
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
packageName: 'vue',
|
|
118
|
+
version,
|
|
119
|
+
subExports: []
|
|
120
|
+
}
|
|
121
|
+
];
|
|
122
|
+
default:
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=cdn-downloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdn-downloader.js","sourceRoot":"","sources":["../../../src/lib/shared/cdn-downloader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface CommandHistoryEntry {
|
|
2
|
+
command: string;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
success: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CommandHistory {
|
|
7
|
+
commands: CommandHistoryEntry[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Load command history from local file
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadCommandHistory(): Promise<CommandHistory>;
|
|
13
|
+
/**
|
|
14
|
+
* Save command to history
|
|
15
|
+
*/
|
|
16
|
+
export declare function saveCommandToHistory(command: string, success?: boolean): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Get the last executed command
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLastCommand(): Promise<CommandHistoryEntry | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Clear command history
|
|
23
|
+
*/
|
|
24
|
+
export declare function clearCommandHistory(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Format relative time (e.g., "3 mins ago", "2 hours ago")
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatRelativeTime(timestamp: number): string;
|
|
29
|
+
//# sourceMappingURL=command-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-history.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/command-history.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAG1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa5D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const HISTORY_PATH = path.join(os.homedir(), '.oaysus', 'history.json');
|
|
5
|
+
const MAX_HISTORY_SIZE = 10;
|
|
6
|
+
/**
|
|
7
|
+
* Load command history from local file
|
|
8
|
+
*/
|
|
9
|
+
export async function loadCommandHistory() {
|
|
10
|
+
try {
|
|
11
|
+
const data = await fs.readFile(HISTORY_PATH, 'utf-8');
|
|
12
|
+
return JSON.parse(data);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return { commands: [] };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Save command to history
|
|
20
|
+
*/
|
|
21
|
+
export async function saveCommandToHistory(command, success = true) {
|
|
22
|
+
const history = await loadCommandHistory();
|
|
23
|
+
// Add new command to beginning
|
|
24
|
+
history.commands.unshift({
|
|
25
|
+
command,
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
success,
|
|
28
|
+
});
|
|
29
|
+
// Keep only last MAX_HISTORY_SIZE commands
|
|
30
|
+
history.commands = history.commands.slice(0, MAX_HISTORY_SIZE);
|
|
31
|
+
// Ensure directory exists
|
|
32
|
+
const historyDir = path.dirname(HISTORY_PATH);
|
|
33
|
+
await fs.mkdir(historyDir, { recursive: true });
|
|
34
|
+
// Write history
|
|
35
|
+
await fs.writeFile(HISTORY_PATH, JSON.stringify(history, null, 2));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the last executed command
|
|
39
|
+
*/
|
|
40
|
+
export async function getLastCommand() {
|
|
41
|
+
const history = await loadCommandHistory();
|
|
42
|
+
return history.commands[0] || null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Clear command history
|
|
46
|
+
*/
|
|
47
|
+
export async function clearCommandHistory() {
|
|
48
|
+
try {
|
|
49
|
+
await fs.unlink(HISTORY_PATH);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore if file doesn't exist
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format relative time (e.g., "3 mins ago", "2 hours ago")
|
|
57
|
+
*/
|
|
58
|
+
export function formatRelativeTime(timestamp) {
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const diff = now - timestamp;
|
|
61
|
+
const seconds = Math.floor(diff / 1000);
|
|
62
|
+
const minutes = Math.floor(seconds / 60);
|
|
63
|
+
const hours = Math.floor(minutes / 60);
|
|
64
|
+
const days = Math.floor(hours / 24);
|
|
65
|
+
if (days > 0)
|
|
66
|
+
return `${days} day${days > 1 ? 's' : ''} ago`;
|
|
67
|
+
if (hours > 0)
|
|
68
|
+
return `${hours} hour${hours > 1 ? 's' : ''} ago`;
|
|
69
|
+
if (minutes > 0)
|
|
70
|
+
return `${minutes} min${minutes > 1 ? 's' : ''} ago`;
|
|
71
|
+
return 'just now';
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=command-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-history.js","sourceRoot":"","sources":["../../../src/lib/shared/command-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Registry
|
|
3
|
+
* Central definition of all available Oaysus CLI commands
|
|
4
|
+
* Used for slash command autocomplete and help text generation
|
|
5
|
+
*/
|
|
6
|
+
export interface Command {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
args?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* All available CLI commands
|
|
13
|
+
* Ordered by importance/usage frequency
|
|
14
|
+
*/
|
|
15
|
+
export declare const COMMANDS: Command[];
|
|
16
|
+
/**
|
|
17
|
+
* Get command by name
|
|
18
|
+
*/
|
|
19
|
+
export declare function getCommand(name: string): Command | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Filter commands by search query (command name only)
|
|
22
|
+
*/
|
|
23
|
+
export declare function filterCommands(query: string): Command[];
|
|
24
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,OAAO,EAoC7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAUvD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Registry
|
|
3
|
+
* Central definition of all available Oaysus CLI commands
|
|
4
|
+
* Used for slash command autocomplete and help text generation
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* All available CLI commands
|
|
8
|
+
* Ordered by importance/usage frequency
|
|
9
|
+
*/
|
|
10
|
+
export const COMMANDS = [
|
|
11
|
+
// Project workflow
|
|
12
|
+
{
|
|
13
|
+
name: 'init',
|
|
14
|
+
description: 'Create a new component project',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'create',
|
|
18
|
+
description: 'Add a component to your project',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'validate',
|
|
22
|
+
description: 'Validate component package structure',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'push',
|
|
26
|
+
description: 'Upload component package to Oaysus',
|
|
27
|
+
},
|
|
28
|
+
// Authentication
|
|
29
|
+
{
|
|
30
|
+
name: 'login',
|
|
31
|
+
description: 'Authenticate with your Oaysus account',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'status',
|
|
35
|
+
description: 'Display current user information',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'logout',
|
|
39
|
+
description: 'Clear authentication tokens',
|
|
40
|
+
},
|
|
41
|
+
// System
|
|
42
|
+
{
|
|
43
|
+
name: 'exit',
|
|
44
|
+
description: 'Exit the CLI',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Get command by name
|
|
49
|
+
*/
|
|
50
|
+
export function getCommand(name) {
|
|
51
|
+
return COMMANDS.find(cmd => cmd.name === name);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Filter commands by search query (command name only)
|
|
55
|
+
*/
|
|
56
|
+
export function filterCommands(query) {
|
|
57
|
+
const normalized = query.toLowerCase().trim();
|
|
58
|
+
if (!normalized) {
|
|
59
|
+
return COMMANDS;
|
|
60
|
+
}
|
|
61
|
+
return COMMANDS.filter(cmd => cmd.name.toLowerCase().includes(normalized));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/lib/shared/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,mBAAmB;IACnB;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gCAAgC;KAC9C;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,iCAAiC;KAC/C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sCAAsC;KACpD;IACD;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oCAAoC;KAClD;IACD,iBAAiB;IACjB;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,uCAAuC;KACrD;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kCAAkC;KAChD;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6BAA6B;KAC3C;IACD,SAAS;IACT;QACE,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,cAAc;KAC5B;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC3B,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC5C,CAAC;AACJ,CAAC"}
|