/ clis / uiverse / code.js
code.js
 1  import { cli, Strategy } from '@jackwener/opencli/registry';
 2  import {
 3    getPostDetails,
 4    getRawCode,
 5    extractExportCode,
 6    inferLanguage,
 7    getCodeLength,
 8  } from './_shared.js';
 9  
10  cli({
11    site: 'uiverse',
12    name: 'code',
13    description: 'Export Uiverse component code (HTML, CSS, React, or Vue)',
14    domain: 'uiverse.io',
15    strategy: Strategy.PUBLIC,
16    browser: true,
17    args: [
18      { name: 'input', type: 'str', required: true, positional: true, help: 'Uiverse URL or author/slug identifier' },
19      { name: 'target', type: 'str', required: true, choices: ['html', 'css', 'react', 'vue'], help: 'Code target to export' },
20    ],
21    columns: ['target', 'username', 'slug', 'language', 'length'],
22    func: async (page, kwargs) => {
23      const detail = await getPostDetails(page, kwargs.input);
24      const target = String(kwargs.target).toLowerCase();
25      let code = '';
26  
27      if (target === 'react' || target === 'vue') {
28        code = await extractExportCode(page, target);
29      } else {
30        const payload = await getRawCode(page, detail.post.id);
31        code = target === 'html' ? payload.html : payload.css;
32      }
33  
34      return {
35        target,
36        username: detail.username,
37        slug: detail.slug,
38        url: detail.url,
39        language: inferLanguage(target, detail.post),
40        length: getCodeLength(code),
41        code,
42        postId: detail.post.id,
43        type: detail.post.type,
44        isTailwind: Boolean(detail.post.isTailwind),
45      };
46    },
47  });