@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
package/README.md
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# @oaysus/cli
|
|
2
|
+
|
|
3
|
+
Official CLI for building and uploading frontend components to Oaysus.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### npm (recommended)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @oaysus/cli
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Homebrew (macOS/Linux)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
brew tap oaysus/tap
|
|
17
|
+
brew install oaysus
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Verify installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
oaysus --version
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Authenticate with Oaysus
|
|
30
|
+
oaysus login
|
|
31
|
+
|
|
32
|
+
# Create a new theme pack project
|
|
33
|
+
oaysus init my-theme
|
|
34
|
+
|
|
35
|
+
# Navigate to project
|
|
36
|
+
cd my-theme
|
|
37
|
+
|
|
38
|
+
# Add a component
|
|
39
|
+
oaysus create
|
|
40
|
+
|
|
41
|
+
# Build and upload
|
|
42
|
+
oaysus push
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Commands
|
|
46
|
+
|
|
47
|
+
| Command | Description |
|
|
48
|
+
|---------|-------------|
|
|
49
|
+
| `oaysus init [name]` | Create a new theme pack project |
|
|
50
|
+
| `oaysus create` | Add a component to your project |
|
|
51
|
+
| `oaysus validate` | Validate package structure |
|
|
52
|
+
| `oaysus build` | Build components locally (no upload) |
|
|
53
|
+
| `oaysus push` | Build and upload to Oaysus |
|
|
54
|
+
| `oaysus login` | Authenticate with Oaysus |
|
|
55
|
+
| `oaysus logout` | Clear authentication |
|
|
56
|
+
| `oaysus whoami` | Display current user |
|
|
57
|
+
|
|
58
|
+
## Framework Support
|
|
59
|
+
|
|
60
|
+
The CLI supports multiple frontend frameworks:
|
|
61
|
+
|
|
62
|
+
- **React** - Full support with JSX/TSX components
|
|
63
|
+
- **Vue** - Single File Components (.vue)
|
|
64
|
+
- **Svelte** - Svelte components (.svelte)
|
|
65
|
+
|
|
66
|
+
Framework is automatically detected from your `package.json` dependencies.
|
|
67
|
+
|
|
68
|
+
## Project Structure
|
|
69
|
+
|
|
70
|
+
### Single Component
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
my-component/
|
|
74
|
+
├── package.json
|
|
75
|
+
├── index.tsx # Main component file
|
|
76
|
+
└── schema.json # Component props schema
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Theme Pack (Multiple Components)
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
my-theme/
|
|
83
|
+
├── package.json
|
|
84
|
+
└── components/
|
|
85
|
+
├── Button/
|
|
86
|
+
│ ├── index.tsx
|
|
87
|
+
│ └── schema.json
|
|
88
|
+
├── Card/
|
|
89
|
+
│ ├── index.tsx
|
|
90
|
+
│ └── schema.json
|
|
91
|
+
└── Header/
|
|
92
|
+
├── index.tsx
|
|
93
|
+
└── schema.json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Configuration
|
|
97
|
+
|
|
98
|
+
### package.json
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"name": "my-theme",
|
|
103
|
+
"version": "1.0.0",
|
|
104
|
+
"dependencies": {
|
|
105
|
+
"react": "^18.0.0"
|
|
106
|
+
},
|
|
107
|
+
"oaysus": {
|
|
108
|
+
"theme": {
|
|
109
|
+
"name": "my-theme",
|
|
110
|
+
"displayName": "My Theme",
|
|
111
|
+
"category": "ui",
|
|
112
|
+
"tags": ["react", "components"]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### schema.json
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"type": "component",
|
|
123
|
+
"displayName": "My Component",
|
|
124
|
+
"description": "A reusable UI component",
|
|
125
|
+
"props": {
|
|
126
|
+
"title": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"default": "Hello",
|
|
129
|
+
"description": "The title text"
|
|
130
|
+
},
|
|
131
|
+
"variant": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"default": "primary",
|
|
134
|
+
"description": "Button variant"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Requirements
|
|
141
|
+
|
|
142
|
+
- Node.js 20 or higher
|
|
143
|
+
- Oaysus account
|
|
144
|
+
|
|
145
|
+
## Authentication
|
|
146
|
+
|
|
147
|
+
The CLI uses device authorization flow for secure authentication:
|
|
148
|
+
|
|
149
|
+
1. Run `oaysus login`
|
|
150
|
+
2. A browser window opens for authentication
|
|
151
|
+
3. Log in with your Oaysus account
|
|
152
|
+
4. The CLI automatically receives your credentials
|
|
153
|
+
|
|
154
|
+
Credentials are stored securely in `~/.oaysus/credentials.json` with restricted file permissions.
|
|
155
|
+
|
|
156
|
+
## Documentation
|
|
157
|
+
|
|
158
|
+
For full documentation, visit [docs.oaysus.com](https://docs.oaysus.com)
|
|
159
|
+
|
|
160
|
+
## Contributing
|
|
161
|
+
|
|
162
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
163
|
+
|
|
164
|
+
## License
|
|
165
|
+
|
|
166
|
+
MIT
|
package/bin/oaysus.js
ADDED
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI Entry Point
|
|
4
|
+
* Parses command-line arguments and renders appropriate Ink screens
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Main CLI Router
|
|
8
|
+
* Routes commands to appropriate Ink screens
|
|
9
|
+
*/
|
|
10
|
+
export declare function runCli(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAkCA;;;GAGG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,kBAmJ3B"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render } from 'ink';
|
|
4
|
+
import { readFile } from 'fs/promises';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { LoginScreen } from './screens/LoginScreen.js';
|
|
8
|
+
import { WhoamiScreen } from './screens/WhoamiScreen.js';
|
|
9
|
+
import { LogoutScreen } from './screens/LogoutScreen.js';
|
|
10
|
+
import { ValidateScreen } from './screens/ValidateScreen.js';
|
|
11
|
+
import { InitScreen } from './screens/InitScreen.js';
|
|
12
|
+
import { CreateScreen } from './screens/CreateScreen.js';
|
|
13
|
+
import { PushScreen } from './screens/PushScreen.js';
|
|
14
|
+
import { BuildScreen } from './screens/BuildScreen.js';
|
|
15
|
+
import { App } from './components/App.js';
|
|
16
|
+
import { saveCommandToHistory } from './lib/shared/command-history.js';
|
|
17
|
+
import { push } from './lib/push.js';
|
|
18
|
+
import { checkAuthForCommand } from './lib/shared/auth-middleware.js';
|
|
19
|
+
// Get package version function
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = path.dirname(__filename);
|
|
22
|
+
async function getVersion() {
|
|
23
|
+
try {
|
|
24
|
+
const pkgData = await readFile(path.join(__dirname, '../package.json'), 'utf-8');
|
|
25
|
+
const pkg = JSON.parse(pkgData);
|
|
26
|
+
return pkg.version;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return '0.1.0';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* CLI Entry Point
|
|
34
|
+
* Parses command-line arguments and renders appropriate Ink screens
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Main CLI Router
|
|
38
|
+
* Routes commands to appropriate Ink screens
|
|
39
|
+
*/
|
|
40
|
+
export async function runCli() {
|
|
41
|
+
const args = process.argv.slice(2);
|
|
42
|
+
const command = args[0];
|
|
43
|
+
// Handle exit callback
|
|
44
|
+
const handleExit = () => {
|
|
45
|
+
process.exit(0);
|
|
46
|
+
};
|
|
47
|
+
// Handle version flag
|
|
48
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
49
|
+
const version = await getVersion();
|
|
50
|
+
console.log(`oaysus-cli v${version}`);
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
// Show welcome screen when no command provided
|
|
54
|
+
if (!command) {
|
|
55
|
+
render(React.createElement(App, { onExit: handleExit }));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Handle help flag
|
|
59
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
60
|
+
console.log(`
|
|
61
|
+
Oaysus CLI - Professional developer tool for component uploads
|
|
62
|
+
|
|
63
|
+
Usage
|
|
64
|
+
$ oaysus <command> [options]
|
|
65
|
+
|
|
66
|
+
Commands
|
|
67
|
+
init [name] Create a new component project (theme pack structure)
|
|
68
|
+
create Add a component to your project
|
|
69
|
+
validate Validate component package and create ZIP
|
|
70
|
+
build Build components locally (no upload to R2)
|
|
71
|
+
push Build and upload component package to Oaysus
|
|
72
|
+
login Authenticate with your Oaysus account
|
|
73
|
+
logout Clear authentication tokens and log out
|
|
74
|
+
whoami Display current authenticated user information
|
|
75
|
+
|
|
76
|
+
Options
|
|
77
|
+
--help, -h Show this help message
|
|
78
|
+
--version, -v Show version number
|
|
79
|
+
--dry-run Validate without creating ZIP (validate command only)
|
|
80
|
+
|
|
81
|
+
Examples
|
|
82
|
+
$ oaysus init my-project # Create new project with components/ structure
|
|
83
|
+
$ oaysus create component Pricing # Add a new component
|
|
84
|
+
$ oaysus validate # Validate and create ZIP (no upload)
|
|
85
|
+
$ oaysus build # Build components to .oaysus-build/ (no upload)
|
|
86
|
+
$ oaysus push # Build and upload to Oaysus
|
|
87
|
+
$ oaysus login # Authenticate with Oaysus
|
|
88
|
+
$ oaysus whoami # Show current user
|
|
89
|
+
$ oaysus logout # Sign out
|
|
90
|
+
|
|
91
|
+
Project Structure
|
|
92
|
+
All projects use a consistent theme pack structure:
|
|
93
|
+
my-project/
|
|
94
|
+
├── components/ # Your components live here
|
|
95
|
+
│ └── Hero/ # One Hero component created by default
|
|
96
|
+
├── shared/ # Shared utilities and types
|
|
97
|
+
├── package.json
|
|
98
|
+
└── README.md
|
|
99
|
+
|
|
100
|
+
Use "oaysus create component" to add more components to your project.
|
|
101
|
+
`);
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
// Track command in history
|
|
105
|
+
const commandString = `oaysus ${args.join(' ')}`;
|
|
106
|
+
saveCommandToHistory(commandString).catch(() => {
|
|
107
|
+
// Silently ignore history save errors
|
|
108
|
+
});
|
|
109
|
+
// Check authentication for commands that require it
|
|
110
|
+
const authResult = await checkAuthForCommand(command);
|
|
111
|
+
if (!authResult.valid) {
|
|
112
|
+
console.error(`\n✗ ${authResult.error}`);
|
|
113
|
+
if (authResult.suggestion) {
|
|
114
|
+
console.log(`💡 ${authResult.suggestion}`);
|
|
115
|
+
}
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
switch (command) {
|
|
119
|
+
case 'init':
|
|
120
|
+
render(React.createElement(InitScreen, {
|
|
121
|
+
projectName: args[1],
|
|
122
|
+
onExit: handleExit
|
|
123
|
+
}));
|
|
124
|
+
break;
|
|
125
|
+
case 'create':
|
|
126
|
+
render(React.createElement(CreateScreen, {
|
|
127
|
+
componentName: args[1],
|
|
128
|
+
projectPath: args[2] || '.',
|
|
129
|
+
onExit: handleExit
|
|
130
|
+
}));
|
|
131
|
+
break;
|
|
132
|
+
case 'login':
|
|
133
|
+
render(React.createElement(LoginScreen, { onExit: handleExit }));
|
|
134
|
+
break;
|
|
135
|
+
case 'whoami':
|
|
136
|
+
render(React.createElement(WhoamiScreen, { onExit: handleExit }));
|
|
137
|
+
break;
|
|
138
|
+
case 'logout':
|
|
139
|
+
render(React.createElement(LogoutScreen, { onExit: handleExit }));
|
|
140
|
+
break;
|
|
141
|
+
case 'validate':
|
|
142
|
+
render(React.createElement(ValidateScreen, {
|
|
143
|
+
projectPath: args[1] || '.',
|
|
144
|
+
dryRun: args.includes('--dry-run'),
|
|
145
|
+
onExit: handleExit
|
|
146
|
+
}));
|
|
147
|
+
break;
|
|
148
|
+
case 'build':
|
|
149
|
+
render(React.createElement(BuildScreen, {
|
|
150
|
+
projectPath: args[1] || '.',
|
|
151
|
+
onExit: handleExit
|
|
152
|
+
}));
|
|
153
|
+
break;
|
|
154
|
+
case 'push':
|
|
155
|
+
// Use non-interactive mode if no TTY (e.g., running from script/IDE)
|
|
156
|
+
if (!process.stdin.isTTY) {
|
|
157
|
+
push({ projectPath: args[1] || '.' }).then(result => {
|
|
158
|
+
process.exit(result.success ? 0 : 1);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
render(React.createElement(PushScreen, {
|
|
163
|
+
projectPath: args[1] || '.',
|
|
164
|
+
onExit: handleExit
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
default:
|
|
169
|
+
console.error(`Unknown command: ${command}`);
|
|
170
|
+
console.log('Run "oaysus --help" for usage information');
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,kBA+EjC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { requestMagicLink, initializeDevice, pollForAuth, saveCredentials } from '../lib/shared/auth';
|
|
5
|
+
export async function loginCommand() {
|
|
6
|
+
try {
|
|
7
|
+
// Step 1: Prompt for email
|
|
8
|
+
const { email } = await inquirer.prompt([
|
|
9
|
+
{
|
|
10
|
+
type: 'input',
|
|
11
|
+
name: 'email',
|
|
12
|
+
message: 'Email:',
|
|
13
|
+
validate: (input) => {
|
|
14
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
15
|
+
if (!emailRegex.test(input)) {
|
|
16
|
+
return 'Please enter a valid email address';
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
]);
|
|
22
|
+
// Step 2: Request magic link
|
|
23
|
+
const spinner = ora('Sending magic link...').start();
|
|
24
|
+
await requestMagicLink(email, '/device');
|
|
25
|
+
spinner.succeed('Magic link sent to your email');
|
|
26
|
+
// Step 3: Initialize device authorization (for later polling)
|
|
27
|
+
const deviceSpinner = ora('Initializing device authorization...').start();
|
|
28
|
+
const deviceResponse = await initializeDevice();
|
|
29
|
+
deviceSpinner.succeed('Device code generated');
|
|
30
|
+
// Display instructions
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(chalk.bold.cyan('═══════════════════════════════════════'));
|
|
33
|
+
console.log(chalk.bold.white(' 📧 Check your email and click the link'));
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(chalk.gray(' Then enter code:'), chalk.bold.yellow(deviceResponse.userCode));
|
|
36
|
+
console.log(chalk.bold.cyan('═══════════════════════════════════════'));
|
|
37
|
+
console.log('');
|
|
38
|
+
// Step 4: Poll for device authorization
|
|
39
|
+
const pollSpinner = ora('Waiting for you to click the magic link and approve the device...').start();
|
|
40
|
+
const result = await pollForAuth(deviceResponse.deviceCode, {
|
|
41
|
+
interval: 2000, // Poll every 2 seconds
|
|
42
|
+
timeout: 600000 // 10 minute timeout
|
|
43
|
+
});
|
|
44
|
+
// Handle two-phase auth (this old command doesn't support it properly)
|
|
45
|
+
if ('needsWebsiteSelection' in result) {
|
|
46
|
+
pollSpinner.fail('This command does not support website selection yet. Please use /login in the main menu.');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
const credentials = result;
|
|
50
|
+
pollSpinner.succeed('Authorization complete!');
|
|
51
|
+
// Save credentials
|
|
52
|
+
await saveCredentials(credentials);
|
|
53
|
+
// Display success
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(chalk.green.bold('✓ Authenticated successfully!'));
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log(chalk.gray('Email: '), chalk.white(credentials.email));
|
|
58
|
+
console.log(chalk.gray('Website: '), chalk.white(credentials.websiteId));
|
|
59
|
+
console.log(chalk.gray('User ID: '), chalk.white(credentials.userId));
|
|
60
|
+
console.log('');
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error('');
|
|
64
|
+
console.error(chalk.red('✗ Authentication failed'));
|
|
65
|
+
console.error('');
|
|
66
|
+
if (error instanceof Error) {
|
|
67
|
+
console.error(chalk.red(error.message));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.error(chalk.red('An unknown error occurred'));
|
|
71
|
+
}
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,kBAsBlC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { clearCredentials, loadCredentials } from '../lib/shared/auth';
|
|
3
|
+
export async function logoutCommand() {
|
|
4
|
+
try {
|
|
5
|
+
const credentials = await loadCredentials();
|
|
6
|
+
if (!credentials) {
|
|
7
|
+
console.log(chalk.yellow('⚠ Not currently logged in'));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
// Clear credentials file
|
|
11
|
+
await clearCredentials();
|
|
12
|
+
console.log(chalk.green('✓ Logged out successfully'));
|
|
13
|
+
console.log(chalk.gray(` Cleared credentials for ${credentials.email}`));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error(chalk.red('Failed to logout'));
|
|
17
|
+
if (error instanceof Error) {
|
|
18
|
+
console.error(chalk.red(error.message));
|
|
19
|
+
}
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,gBAAgB,EAAE,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,kBA8ClC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadCredentials } from '../lib/shared/auth';
|
|
3
|
+
export async function whoamiCommand() {
|
|
4
|
+
try {
|
|
5
|
+
const credentials = await loadCredentials();
|
|
6
|
+
if (!credentials) {
|
|
7
|
+
console.log(chalk.red('✗ Not authenticated'));
|
|
8
|
+
console.log(chalk.gray(' Run: oaysus login'));
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
// Check if token expired
|
|
12
|
+
const expiresAt = new Date(credentials.expiresAt);
|
|
13
|
+
const now = new Date();
|
|
14
|
+
const isExpired = expiresAt <= now;
|
|
15
|
+
if (isExpired) {
|
|
16
|
+
console.log(chalk.yellow('⚠ Token expired'));
|
|
17
|
+
console.log(chalk.gray(' Run: oaysus login'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// Display user info
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log(chalk.bold.white('Current User:'));
|
|
23
|
+
console.log('');
|
|
24
|
+
console.log(chalk.gray('Email: '), chalk.white(credentials.email));
|
|
25
|
+
console.log(chalk.gray('User ID: '), chalk.white(credentials.userId));
|
|
26
|
+
console.log(chalk.gray('Website ID: '), chalk.white(credentials.websiteId));
|
|
27
|
+
console.log(chalk.gray('Platforms: '), chalk.white(credentials.platforms.join(', ')));
|
|
28
|
+
console.log('');
|
|
29
|
+
// Display expiry info
|
|
30
|
+
const timeUntilExpiry = expiresAt.getTime() - now.getTime();
|
|
31
|
+
const daysUntilExpiry = Math.floor(timeUntilExpiry / (1000 * 60 * 60 * 24));
|
|
32
|
+
const hoursUntilExpiry = Math.floor((timeUntilExpiry % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
33
|
+
console.log(chalk.gray('Token expires in:'), chalk.white(`${daysUntilExpiry}d ${hoursUntilExpiry}h`));
|
|
34
|
+
console.log('');
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error(chalk.red('Failed to get user info'));
|
|
38
|
+
if (error instanceof Error) {
|
|
39
|
+
console.error(chalk.red(error.message));
|
|
40
|
+
}
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Screen = {
|
|
3
|
+
type: 'welcome';
|
|
4
|
+
} | {
|
|
5
|
+
type: 'init';
|
|
6
|
+
projectName?: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'create';
|
|
9
|
+
componentName?: string;
|
|
10
|
+
projectPath?: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: 'login';
|
|
13
|
+
} | {
|
|
14
|
+
type: 'status';
|
|
15
|
+
} | {
|
|
16
|
+
type: 'logout';
|
|
17
|
+
} | {
|
|
18
|
+
type: 'validate';
|
|
19
|
+
projectPath?: string;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'push';
|
|
23
|
+
projectPath?: string;
|
|
24
|
+
};
|
|
25
|
+
export interface HistoryEntry {
|
|
26
|
+
type: 'prompt' | 'response' | 'info' | 'success' | 'error' | 'progress' | 'spinner';
|
|
27
|
+
content: string;
|
|
28
|
+
timestamp?: number;
|
|
29
|
+
color?: 'green' | 'cyan' | 'yellow' | 'red' | 'dim';
|
|
30
|
+
spinnerId?: string;
|
|
31
|
+
}
|
|
32
|
+
interface AppProps {
|
|
33
|
+
initialScreen?: Screen;
|
|
34
|
+
onExit: () => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* App Component
|
|
38
|
+
* Main router for the CLI application
|
|
39
|
+
* Manages navigation between different screens and persistent history
|
|
40
|
+
*/
|
|
41
|
+
export declare const App: React.FC<AppProps>;
|
|
42
|
+
export default App;
|
|
43
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/components/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAUxC,KAAK,MAAM,GACP;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,QAAQ;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CA4HlC,CAAC;AAEF,eAAe,GAAG,CAAC"}
|