@demoscript/cli 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.cjs +43573 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +109 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/push.d.ts +9 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +146 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/index.js +3 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +12 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +39 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/loader.d.ts.map +1 -1
- package/dist/lib/loader.js +53 -6
- package/dist/lib/loader.js.map +1 -1
- package/dist/lib/openapi.d.ts +11 -1
- package/dist/lib/openapi.d.ts.map +1 -1
- package/dist/lib/openapi.js +106 -0
- package/dist/lib/openapi.js.map +1 -1
- package/dist/lib/openapi.test.js +95 -3
- package/dist/lib/openapi.test.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui-dist/dist/assets/index-DZpZVgB7.js +177 -0
- package/dist/ui-dist/dist/assets/index-DZpZVgB7.js.map +1 -0
- package/dist/ui-dist/dist/assets/index-OFqwkvWn.css +1 -0
- package/dist/ui-dist/dist/assets/index-Uvktqp4J.js +177 -0
- package/dist/ui-dist/dist/assets/index-Uvktqp4J.js.map +1 -0
- package/dist/ui-dist/dist/assets/index-pTz7wI27.css +1 -0
- package/dist/ui-dist/dist/assets/index.css +1 -0
- package/dist/ui-dist/dist/assets/index.js +177 -0
- package/dist/ui-dist/dist/assets/index.js.map +1 -0
- package/dist/ui-dist/dist/demo.yaml +120 -0
- package/dist/ui-dist/dist/favicon.svg +10 -0
- package/dist/ui-dist/dist/index.html +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AA0DA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD3C;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAG5C;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAc5C"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import readline from 'readline';
|
|
3
|
+
import { loadConfig, saveConfig, getApiUrl, clearConfig } from '../lib/config.js';
|
|
4
|
+
function prompt(question, hidden = false) {
|
|
5
|
+
const rl = readline.createInterface({
|
|
6
|
+
input: process.stdin,
|
|
7
|
+
output: process.stdout,
|
|
8
|
+
});
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
if (hidden) {
|
|
11
|
+
// For password input, we need to handle it differently
|
|
12
|
+
process.stdout.write(question);
|
|
13
|
+
let password = '';
|
|
14
|
+
process.stdin.setRawMode(true);
|
|
15
|
+
process.stdin.resume();
|
|
16
|
+
process.stdin.setEncoding('utf-8');
|
|
17
|
+
const handler = (char) => {
|
|
18
|
+
if (char === '\n' || char === '\r' || char === '\u0004') {
|
|
19
|
+
process.stdin.setRawMode(false);
|
|
20
|
+
process.stdin.removeListener('data', handler);
|
|
21
|
+
console.log();
|
|
22
|
+
rl.close();
|
|
23
|
+
resolve(password);
|
|
24
|
+
}
|
|
25
|
+
else if (char === '\u0003') {
|
|
26
|
+
// Ctrl+C
|
|
27
|
+
process.exit();
|
|
28
|
+
}
|
|
29
|
+
else if (char === '\u007f' || char === '\b') {
|
|
30
|
+
// Backspace
|
|
31
|
+
if (password.length > 0) {
|
|
32
|
+
password = password.slice(0, -1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
password += char;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
process.stdin.on('data', handler);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
rl.question(question, (answer) => {
|
|
43
|
+
rl.close();
|
|
44
|
+
resolve(answer);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export async function login() {
|
|
50
|
+
const apiUrl = getApiUrl();
|
|
51
|
+
console.log(chalk.blue('Login to DemoScript Cloud'));
|
|
52
|
+
console.log(chalk.gray(`API: ${apiUrl}`));
|
|
53
|
+
console.log();
|
|
54
|
+
const email = await prompt('Email: ');
|
|
55
|
+
const password = await prompt('Password: ', true);
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(chalk.gray('Authenticating...'));
|
|
58
|
+
try {
|
|
59
|
+
const response = await fetch(`${apiUrl}/api/auth/login`, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: {
|
|
62
|
+
'Content-Type': 'application/json',
|
|
63
|
+
},
|
|
64
|
+
body: JSON.stringify({ email, password }),
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const error = await response.json();
|
|
68
|
+
throw new Error(error.error || `Login failed with status ${response.status}`);
|
|
69
|
+
}
|
|
70
|
+
const data = await response.json();
|
|
71
|
+
// Save token and user info to config
|
|
72
|
+
const config = loadConfig();
|
|
73
|
+
config.token = data.token;
|
|
74
|
+
config.username = data.user.username;
|
|
75
|
+
config.email = data.user.email;
|
|
76
|
+
saveConfig(config);
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(chalk.green.bold('Login successful!'));
|
|
79
|
+
console.log(chalk.gray(`Logged in as ${data.user.username} (${data.user.email})`));
|
|
80
|
+
console.log();
|
|
81
|
+
console.log('You can now use:');
|
|
82
|
+
console.log(chalk.cyan(' demoscript push <demo>') + ' - Push a demo to the cloud');
|
|
83
|
+
console.log(chalk.cyan(' demoscript whoami') + ' - Show current user');
|
|
84
|
+
console.log(chalk.cyan(' demoscript logout') + ' - Log out');
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.log();
|
|
88
|
+
console.log(chalk.red('Login failed:'), err instanceof Error ? err.message : 'Unknown error');
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function logout() {
|
|
93
|
+
clearConfig();
|
|
94
|
+
console.log(chalk.green('Logged out successfully.'));
|
|
95
|
+
}
|
|
96
|
+
export async function whoami() {
|
|
97
|
+
const config = loadConfig();
|
|
98
|
+
if (!config.token || !config.username) {
|
|
99
|
+
console.log(chalk.yellow('Not logged in.'));
|
|
100
|
+
console.log(chalk.gray('Run: demoscript login'));
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
console.log(chalk.green(`Logged in as ${config.username}`));
|
|
104
|
+
if (config.email) {
|
|
105
|
+
console.log(chalk.gray(`Email: ${config.email}`));
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk.gray(`API: ${getApiUrl()}`));
|
|
108
|
+
}
|
|
109
|
+
//# 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":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JhF"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { resolve, dirname, basename } from 'path';
|
|
2
|
+
import { existsSync, readFileSync } from 'fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { loadConfig, getApiUrl } from '../lib/config.js';
|
|
5
|
+
export async function push(demoPath, options) {
|
|
6
|
+
const config = loadConfig();
|
|
7
|
+
const apiUrl = getApiUrl();
|
|
8
|
+
// Check authentication
|
|
9
|
+
if (!config.token) {
|
|
10
|
+
console.log(chalk.red('Not logged in.'));
|
|
11
|
+
console.log(chalk.gray('Run: demoscript login'));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
// Resolve paths
|
|
15
|
+
const resolvedPath = resolve(process.cwd(), demoPath);
|
|
16
|
+
const demoDir = resolvedPath.endsWith('.yaml') ? dirname(resolvedPath) : resolvedPath;
|
|
17
|
+
const demoFile = resolvedPath.endsWith('.yaml') ? resolvedPath : resolve(resolvedPath, 'demo.yaml');
|
|
18
|
+
// Check if demo file exists
|
|
19
|
+
if (!existsSync(demoFile)) {
|
|
20
|
+
console.log(chalk.red(`Demo not found: ${demoFile}`));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
// Read demo YAML
|
|
24
|
+
const yamlContent = readFileSync(demoFile, 'utf-8');
|
|
25
|
+
// Try to parse YAML to get title
|
|
26
|
+
let demoTitle = options.title;
|
|
27
|
+
try {
|
|
28
|
+
const yaml = await import('js-yaml');
|
|
29
|
+
const parsed = yaml.load(yamlContent);
|
|
30
|
+
if (!demoTitle && parsed.title) {
|
|
31
|
+
demoTitle = parsed.title;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Ignore YAML parsing errors - the server will validate
|
|
36
|
+
}
|
|
37
|
+
// Read recordings if they exist
|
|
38
|
+
const recordingsPath = resolve(demoDir, 'recordings.json');
|
|
39
|
+
let recordingsJson;
|
|
40
|
+
if (existsSync(recordingsPath)) {
|
|
41
|
+
recordingsJson = readFileSync(recordingsPath, 'utf-8');
|
|
42
|
+
console.log(chalk.gray('Found recordings.json'));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(chalk.yellow('No recordings.json found. Demo will use recorded mode without data.'));
|
|
46
|
+
console.log(chalk.gray('Run: demoscript record <demo>'));
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
// Determine slug
|
|
50
|
+
const slug = options.slug || basename(demoDir).toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
51
|
+
// Determine visibility
|
|
52
|
+
const isPublic = options.private ? false : (options.public !== undefined ? options.public : true);
|
|
53
|
+
console.log(chalk.blue('Pushing demo to DemoScript Cloud...'));
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(chalk.gray(` Slug: ${slug}`));
|
|
56
|
+
console.log(chalk.gray(` Title: ${demoTitle || '(untitled)'}`));
|
|
57
|
+
console.log(chalk.gray(` Visibility: ${isPublic ? 'public' : 'private'}`));
|
|
58
|
+
console.log(chalk.gray(` Recordings: ${recordingsJson ? 'yes' : 'no'}`));
|
|
59
|
+
console.log();
|
|
60
|
+
try {
|
|
61
|
+
// Check if demo already exists
|
|
62
|
+
const listResponse = await fetch(`${apiUrl}/api/demos`, {
|
|
63
|
+
headers: {
|
|
64
|
+
'Authorization': `Bearer ${config.token}`,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (!listResponse.ok) {
|
|
68
|
+
if (listResponse.status === 401) {
|
|
69
|
+
console.log(chalk.red('Authentication expired. Please login again.'));
|
|
70
|
+
console.log(chalk.gray('Run: demoscript login'));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Failed to fetch demos: ${listResponse.status}`);
|
|
74
|
+
}
|
|
75
|
+
const demosData = await listResponse.json();
|
|
76
|
+
const existingDemo = demosData.demos.find(d => d.slug === slug);
|
|
77
|
+
let response;
|
|
78
|
+
let method;
|
|
79
|
+
if (existingDemo) {
|
|
80
|
+
// Update existing demo
|
|
81
|
+
console.log(chalk.gray(`Updating existing demo (${existingDemo.id})...`));
|
|
82
|
+
method = 'PUT';
|
|
83
|
+
response = await fetch(`${apiUrl}/api/demos/${existingDemo.id}`, {
|
|
84
|
+
method: 'PUT',
|
|
85
|
+
headers: {
|
|
86
|
+
'Authorization': `Bearer ${config.token}`,
|
|
87
|
+
'Content-Type': 'application/json',
|
|
88
|
+
},
|
|
89
|
+
body: JSON.stringify({
|
|
90
|
+
slug,
|
|
91
|
+
title: demoTitle,
|
|
92
|
+
yaml_content: yamlContent,
|
|
93
|
+
recordings_json: recordingsJson,
|
|
94
|
+
is_public: isPublic,
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Create new demo
|
|
100
|
+
console.log(chalk.gray('Creating new demo...'));
|
|
101
|
+
method = 'POST';
|
|
102
|
+
response = await fetch(`${apiUrl}/api/demos`, {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
headers: {
|
|
105
|
+
'Authorization': `Bearer ${config.token}`,
|
|
106
|
+
'Content-Type': 'application/json',
|
|
107
|
+
},
|
|
108
|
+
body: JSON.stringify({
|
|
109
|
+
slug,
|
|
110
|
+
title: demoTitle,
|
|
111
|
+
yaml_content: yamlContent,
|
|
112
|
+
recordings_json: recordingsJson,
|
|
113
|
+
is_public: isPublic,
|
|
114
|
+
}),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
const error = await response.json();
|
|
119
|
+
throw new Error(error.error || `Push failed with status ${response.status}`);
|
|
120
|
+
}
|
|
121
|
+
const data = await response.json();
|
|
122
|
+
console.log();
|
|
123
|
+
console.log(chalk.green.bold('Push successful!'));
|
|
124
|
+
console.log();
|
|
125
|
+
if (data.url) {
|
|
126
|
+
console.log('Your demo is live at:');
|
|
127
|
+
console.log(chalk.cyan(` ${data.url}`));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log('Your demo is live at:');
|
|
131
|
+
console.log(chalk.cyan(` ${apiUrl}/u/${config.username}/${slug}`));
|
|
132
|
+
}
|
|
133
|
+
console.log();
|
|
134
|
+
if (!recordingsJson) {
|
|
135
|
+
console.log(chalk.yellow('Note: Demo has no recordings. Viewers will see empty responses.'));
|
|
136
|
+
console.log(chalk.gray('To add recordings:'));
|
|
137
|
+
console.log(chalk.gray(' 1. Run: demoscript record <demo>'));
|
|
138
|
+
console.log(chalk.gray(' 2. Run: demoscript push <demo>'));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
console.log(chalk.red('Push failed:'), err instanceof Error ? err.message : 'Unknown error');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
program
|
|
6
|
-
.name('demoscript')
|
|
7
|
-
.description('Framework for creating scripted, shareable product demonstrations')
|
|
8
|
-
.version('0.1.0');
|
|
9
|
-
program
|
|
10
|
-
.command('serve <demo>')
|
|
11
|
-
.description('Start dev server for live demo presentation')
|
|
12
|
-
.option('-p, --port <port>', 'Port to run server on', '3000')
|
|
13
|
-
.option('-H, --host [host]', 'Host to bind to (use --host for 0.0.0.0)')
|
|
14
|
-
.option('--no-open', 'Do not open browser automatically')
|
|
15
|
-
.option('-w, --watch', 'Watch demo files for changes and reload')
|
|
16
|
-
.action(async (demo, options) => {
|
|
17
|
-
const host = options.host === true ? '0.0.0.0' : (typeof options.host === 'string' ? options.host : undefined);
|
|
18
|
-
await serve(demo, { port: parseInt(options.port, 10), host, open: options.open, watch: options.watch });
|
|
19
|
-
});
|
|
20
|
-
program.parse();
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
require('./bundle.cjs');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,eAAe,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,CAAC;KAC5D,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAkF,EAAE,EAAE;IACjH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/G,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1G,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,qCAAqC,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,UAAU,EAAE,4BAA4B,CAAC;KAChD,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC;KACxC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA+E,EAAE,EAAE;IAC9G,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface CliConfig {
|
|
2
|
+
token?: string;
|
|
3
|
+
username?: string;
|
|
4
|
+
email?: string;
|
|
5
|
+
apiUrl?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadConfig(): CliConfig;
|
|
8
|
+
export declare function saveConfig(config: CliConfig): void;
|
|
9
|
+
export declare function getToken(): string | undefined;
|
|
10
|
+
export declare function getApiUrl(): string;
|
|
11
|
+
export declare function clearConfig(): void;
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,UAAU,IAAI,SAAS,CAUtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
const CONFIG_DIR = join(homedir(), '.demoscript');
|
|
5
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
6
|
+
const DEFAULT_API_URL = 'https://demoscript.app';
|
|
7
|
+
function ensureConfigDir() {
|
|
8
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
9
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function loadConfig() {
|
|
13
|
+
try {
|
|
14
|
+
if (existsSync(CONFIG_FILE)) {
|
|
15
|
+
const content = readFileSync(CONFIG_FILE, 'utf-8');
|
|
16
|
+
return JSON.parse(content);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Ignore errors, return empty config
|
|
21
|
+
}
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
export function saveConfig(config) {
|
|
25
|
+
ensureConfigDir();
|
|
26
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
27
|
+
}
|
|
28
|
+
export function getToken() {
|
|
29
|
+
return loadConfig().token;
|
|
30
|
+
}
|
|
31
|
+
export function getApiUrl() {
|
|
32
|
+
return loadConfig().apiUrl || DEFAULT_API_URL;
|
|
33
|
+
}
|
|
34
|
+
export function clearConfig() {
|
|
35
|
+
if (existsSync(CONFIG_FILE)) {
|
|
36
|
+
writeFileSync(CONFIG_FILE, JSON.stringify({}, null, 2));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AASpD,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,eAAe,EAAE,CAAC;IAClB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,EAAE,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC,MAAM,IAAI,eAAe,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
package/dist/lib/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAA8D,MAAM,aAAa,CAAC;AAG1H,OAAO,EAAyD,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAsCvG,UAAU,UAAU;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CACjC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,UAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CA+C5F"}
|
package/dist/lib/loader.js
CHANGED
|
@@ -4,6 +4,36 @@ import yaml from 'js-yaml';
|
|
|
4
4
|
import { isRestStep, isStepGroup } from '../types.js';
|
|
5
5
|
import { validateDemoConfig, formatValidationErrors } from './validator.js';
|
|
6
6
|
import { fetchOpenApiSpec, generateFormFields, mergeFormFields } from './openapi.js';
|
|
7
|
+
/**
|
|
8
|
+
* Convert camelCase variable name to human-readable label
|
|
9
|
+
* e.g. "accessToken" -> "Access Token", "adminUserId" -> "Admin User Id"
|
|
10
|
+
*/
|
|
11
|
+
function formatSaveLabel(varName) {
|
|
12
|
+
return varName
|
|
13
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
14
|
+
.replace(/^./, str => str.toUpperCase());
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Infer result display type from variable name and json path
|
|
18
|
+
*/
|
|
19
|
+
function inferResultType(varName, jsonPath) {
|
|
20
|
+
const nameLower = varName.toLowerCase();
|
|
21
|
+
const pathLower = jsonPath.toLowerCase();
|
|
22
|
+
// Token/ID fields -> mono (monospace)
|
|
23
|
+
if (nameLower.includes('token') || nameLower.includes('id') ||
|
|
24
|
+
pathLower.includes('token') || pathLower.includes('id')) {
|
|
25
|
+
return 'mono';
|
|
26
|
+
}
|
|
27
|
+
// Address/wallet fields
|
|
28
|
+
if (nameLower.includes('address') || nameLower.includes('wallet')) {
|
|
29
|
+
return 'address';
|
|
30
|
+
}
|
|
31
|
+
// URL fields
|
|
32
|
+
if (nameLower.includes('url') || nameLower.includes('link')) {
|
|
33
|
+
return 'link';
|
|
34
|
+
}
|
|
35
|
+
return 'text';
|
|
36
|
+
}
|
|
7
37
|
export async function loadDemo(demoFile, skipValidation = false) {
|
|
8
38
|
if (!existsSync(demoFile)) {
|
|
9
39
|
throw new Error(`Demo file not found: ${demoFile}`);
|
|
@@ -73,7 +103,7 @@ function processStepsArray(steps, spec, baseUrl) {
|
|
|
73
103
|
});
|
|
74
104
|
}
|
|
75
105
|
/**
|
|
76
|
-
* Process a single REST step to generate form fields from OpenAPI
|
|
106
|
+
* Process a single REST step to generate form fields and result fields from OpenAPI
|
|
77
107
|
*/
|
|
78
108
|
function processRestStepWithOpenApi(step, spec, baseUrl) {
|
|
79
109
|
// Get method and path from step
|
|
@@ -94,16 +124,33 @@ function processRestStepWithOpenApi(step, spec, baseUrl) {
|
|
|
94
124
|
method = step.method;
|
|
95
125
|
path = step.path;
|
|
96
126
|
}
|
|
97
|
-
// Generate form fields from OpenAPI
|
|
127
|
+
// Generate form fields from OpenAPI request body schema
|
|
98
128
|
const openapiFields = generateFormFields(spec, method, path);
|
|
99
|
-
|
|
129
|
+
// Generate result fields from save mappings (only if results not specified)
|
|
130
|
+
// This shows what variables were captured from the response
|
|
131
|
+
let results = step.results;
|
|
132
|
+
if (!results || results.length === 0) {
|
|
133
|
+
if (step.save && Object.keys(step.save).length > 0) {
|
|
134
|
+
// Generate results from save mappings
|
|
135
|
+
results = Object.entries(step.save).map(([varName, jsonPath]) => ({
|
|
136
|
+
key: jsonPath,
|
|
137
|
+
label: formatSaveLabel(varName),
|
|
138
|
+
type: inferResultType(varName, jsonPath)
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// If no OpenAPI data found, return step unchanged
|
|
143
|
+
if (openapiFields.length === 0 && !results) {
|
|
100
144
|
return step;
|
|
101
145
|
}
|
|
102
|
-
// Merge with defaults and manual
|
|
103
|
-
const mergedFields =
|
|
146
|
+
// Merge form fields with defaults and manual overrides
|
|
147
|
+
const mergedFields = openapiFields.length > 0
|
|
148
|
+
? mergeFormFields(openapiFields, step.defaults, step.form)
|
|
149
|
+
: step.form;
|
|
104
150
|
return {
|
|
105
151
|
...step,
|
|
106
|
-
form: mergedFields
|
|
152
|
+
form: mergedFields || step.form,
|
|
153
|
+
results: results || step.results
|
|
107
154
|
};
|
|
108
155
|
}
|
|
109
156
|
//# sourceMappingURL=loader.js.map
|
package/dist/lib/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lib/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/openapi.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FormField } from '../types.js';
|
|
1
|
+
import type { FormField, ResultField } from '../types.js';
|
|
2
2
|
export interface OpenApiSpec {
|
|
3
3
|
openapi: string;
|
|
4
4
|
info: {
|
|
@@ -32,6 +32,9 @@ export interface OpenApiOperation {
|
|
|
32
32
|
};
|
|
33
33
|
responses: Record<string, {
|
|
34
34
|
description: string;
|
|
35
|
+
content?: Record<string, {
|
|
36
|
+
schema: JsonSchema;
|
|
37
|
+
}>;
|
|
35
38
|
}>;
|
|
36
39
|
}
|
|
37
40
|
export interface OpenApiParameter {
|
|
@@ -95,4 +98,11 @@ export declare function getEndpointInfo(spec: OpenApiSpec, method: string, path:
|
|
|
95
98
|
summary?: string;
|
|
96
99
|
description?: string;
|
|
97
100
|
} | null;
|
|
101
|
+
/**
|
|
102
|
+
* Generate ResultField[] from an OpenAPI operation's response schema
|
|
103
|
+
*
|
|
104
|
+
* When a REST step doesn't specify `results:`, this function can auto-generate
|
|
105
|
+
* result fields from the OpenAPI response schema.
|
|
106
|
+
*/
|
|
107
|
+
export declare function generateResultFields(spec: OpenApiSpec, method: string, path: string): ResultField[];
|
|
98
108
|
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/lib/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/lib/openapi.ts"],"names":[],"mappings":"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"}
|