amaran-light-cli 1.4.0 → 1.6.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 +48 -18
- package/dist/__tests__/autoCct.test.js +2 -2
- package/dist/__tests__/autoCct.test.js.map +1 -1
- package/dist/__tests__/autostart.test.js +1 -1
- package/dist/__tests__/autostart.test.js.map +1 -1
- package/dist/__tests__/cctUtil.test.js +19 -2
- package/dist/__tests__/cctUtil.test.js.map +1 -1
- package/dist/__tests__/intensityApi.test.js +4 -1
- package/dist/__tests__/intensityApi.test.js.map +1 -1
- package/dist/__tests__/lightControl.test.js +260 -1
- package/dist/__tests__/lightControl.test.js.map +1 -1
- package/dist/__tests__/simulateSchedule.test.js +2 -2
- package/dist/__tests__/simulateSchedule.test.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/integration.test.js +1 -1
- package/dist/commands/__tests__/integration.test.js.map +1 -1
- package/dist/commands/__tests__/newCommands.test.d.ts +2 -0
- package/dist/commands/__tests__/newCommands.test.d.ts.map +1 -0
- package/dist/commands/__tests__/newCommands.test.js +195 -0
- package/dist/commands/__tests__/newCommands.test.js.map +1 -0
- package/dist/commands/cmdUtils.d.ts +23 -0
- package/dist/commands/cmdUtils.d.ts.map +1 -0
- package/dist/commands/cmdUtils.js +43 -0
- package/dist/commands/cmdUtils.js.map +1 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
- package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
- package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
- package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
- package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
- package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
- package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/printSchedule.js +65 -0
- package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
- package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
- package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
- package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
- package/dist/commands/daylightSimulation/service.js.map +1 -0
- package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
- package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
- package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
- package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
- package/dist/commands/deviceControl/cct.d.ts.map +1 -0
- package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
- package/dist/commands/deviceControl/cct.js.map +1 -0
- package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
- package/dist/commands/deviceControl/color.d.ts.map +1 -0
- package/dist/commands/deviceControl/color.js +52 -0
- package/dist/commands/deviceControl/color.js.map +1 -0
- package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
- package/dist/commands/deviceControl/config.d.ts.map +1 -0
- package/dist/commands/{config.js → deviceControl/config.js} +11 -7
- package/dist/commands/deviceControl/config.js.map +1 -0
- package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
- package/dist/commands/deviceControl/discover.d.ts.map +1 -0
- package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
- package/dist/commands/deviceControl/discover.js.map +1 -0
- package/dist/commands/deviceControl/effect.d.ts +5 -0
- package/dist/commands/deviceControl/effect.d.ts.map +1 -0
- package/dist/commands/deviceControl/effect.js +172 -0
- package/dist/commands/deviceControl/effect.js.map +1 -0
- package/dist/commands/deviceControl/fan.d.ts +5 -0
- package/dist/commands/deviceControl/fan.d.ts.map +1 -0
- package/dist/commands/deviceControl/fan.js +105 -0
- package/dist/commands/deviceControl/fan.js.map +1 -0
- package/dist/commands/deviceControl/firmware.d.ts +5 -0
- package/dist/commands/deviceControl/firmware.d.ts.map +1 -0
- package/dist/commands/deviceControl/firmware.js +68 -0
- package/dist/commands/deviceControl/firmware.js.map +1 -0
- package/dist/commands/deviceControl/group.d.ts +5 -0
- package/dist/commands/deviceControl/group.d.ts.map +1 -0
- package/dist/commands/deviceControl/group.js +101 -0
- package/dist/commands/deviceControl/group.js.map +1 -0
- package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
- package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
- package/dist/commands/deviceControl/hsi.js +50 -0
- package/dist/commands/deviceControl/hsi.js.map +1 -0
- package/dist/commands/deviceControl/info.d.ts +5 -0
- package/dist/commands/deviceControl/info.d.ts.map +1 -0
- package/dist/commands/deviceControl/info.js +57 -0
- package/dist/commands/deviceControl/info.js.map +1 -0
- package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
- package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
- package/dist/commands/deviceControl/intensity.js +41 -0
- package/dist/commands/deviceControl/intensity.js.map +1 -0
- package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
- package/dist/commands/deviceControl/list.d.ts.map +1 -0
- package/dist/commands/{list.js → deviceControl/list.js} +7 -3
- package/dist/commands/deviceControl/list.js.map +1 -0
- package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
- package/dist/commands/deviceControl/power.d.ts.map +1 -0
- package/dist/commands/deviceControl/power.js +78 -0
- package/dist/commands/deviceControl/power.js.map +1 -0
- package/dist/commands/deviceControl/preset.d.ts +5 -0
- package/dist/commands/deviceControl/preset.d.ts.map +1 -0
- package/dist/commands/deviceControl/preset.js +55 -0
- package/dist/commands/deviceControl/preset.js.map +1 -0
- package/dist/commands/deviceControl/quickshot.d.ts +5 -0
- package/dist/commands/deviceControl/quickshot.d.ts.map +1 -0
- package/dist/commands/deviceControl/quickshot.js +51 -0
- package/dist/commands/deviceControl/quickshot.js.map +1 -0
- package/dist/commands/deviceControl/scene.d.ts +5 -0
- package/dist/commands/deviceControl/scene.d.ts.map +1 -0
- package/dist/commands/deviceControl/scene.js +101 -0
- package/dist/commands/deviceControl/scene.js.map +1 -0
- package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
- package/dist/commands/deviceControl/status.d.ts.map +1 -0
- package/dist/commands/deviceControl/status.js +48 -0
- package/dist/commands/deviceControl/status.js.map +1 -0
- package/dist/commands.d.ts +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +34 -43
- package/dist/commands.js.map +1 -1
- package/dist/daylightSimulation/cctUtil.d.ts +5 -0
- package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/cctUtil.js +191 -0
- package/dist/daylightSimulation/cctUtil.js.map +1 -0
- package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +1 -18
- package/dist/daylightSimulation/constants.d.ts.map +1 -0
- package/dist/{constants.js → daylightSimulation/constants.js} +1 -13
- package/dist/daylightSimulation/constants.js.map +1 -0
- package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
- package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/approximations.js +27 -0
- package/dist/daylightSimulation/curves/approximations.js.map +1 -0
- package/dist/daylightSimulation/curves/index.d.ts +15 -0
- package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/index.js +56 -0
- package/dist/daylightSimulation/curves/index.js.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
- package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/mathematical.js +33 -0
- package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
- package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
- package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
- package/dist/daylightSimulation/curves/realistic.js +259 -0
- package/dist/daylightSimulation/curves/realistic.js.map +1 -0
- package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
- package/dist/daylightSimulation/geoipUtil.js.map +1 -0
- package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
- package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/graphSchedule.js +116 -0
- package/dist/daylightSimulation/graphSchedule.js.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts +33 -0
- package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
- package/dist/daylightSimulation/scheduleMaker.js +192 -0
- package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
- package/dist/daylightSimulation/textSchedule.d.ts +9 -0
- package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
- package/dist/daylightSimulation/textSchedule.js +172 -0
- package/dist/daylightSimulation/textSchedule.js.map +1 -0
- package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +7 -5
- package/dist/daylightSimulation/types.d.ts.map +1 -0
- package/dist/daylightSimulation/types.js +16 -0
- package/dist/daylightSimulation/types.js.map +1 -0
- package/dist/deviceControl/autostart.d.ts.map +1 -0
- package/dist/deviceControl/autostart.js.map +1 -0
- package/dist/deviceControl/constants.d.ts +23 -0
- package/dist/deviceControl/constants.d.ts.map +1 -0
- package/dist/deviceControl/constants.js +20 -0
- package/dist/deviceControl/constants.js.map +1 -0
- package/dist/deviceControl/discovery.d.ts.map +1 -0
- package/dist/{discovery.js → deviceControl/discovery.js} +0 -2
- package/dist/deviceControl/discovery.js.map +1 -0
- package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +67 -78
- package/dist/deviceControl/lightControl.d.ts.map +1 -0
- package/dist/{lightControl.js → deviceControl/lightControl.js} +292 -203
- package/dist/deviceControl/lightControl.js.map +1 -0
- package/dist/deviceControl/types.d.ts +59 -0
- package/dist/deviceControl/types.d.ts.map +1 -0
- package/dist/deviceControl/types.js.map +1 -0
- package/dist/test/MockLightServer.d.ts.map +1 -1
- package/dist/test/MockLightServer.js +134 -12
- package/dist/test/MockLightServer.js.map +1 -1
- package/package.json +11 -7
- package/scripts/extract-api.ts +158 -0
- package/scripts/extract-usage.ts +199 -0
- package/scripts/release.js +11 -11
- package/CHANGELOG.md +0 -67
- package/dist/autostart.d.ts.map +0 -1
- package/dist/autostart.js.map +0 -1
- package/dist/cctUtil.d.ts.map +0 -1
- package/dist/cctUtil.js +0 -435
- package/dist/cctUtil.js.map +0 -1
- package/dist/commands/autoCct.d.ts +0 -5
- package/dist/commands/autoCct.d.ts.map +0 -1
- package/dist/commands/autoCct.js.map +0 -1
- package/dist/commands/cct.d.ts.map +0 -1
- package/dist/commands/cct.js.map +0 -1
- package/dist/commands/color.d.ts.map +0 -1
- package/dist/commands/color.js +0 -57
- package/dist/commands/color.js.map +0 -1
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/discover.d.ts.map +0 -1
- package/dist/commands/discover.js.map +0 -1
- package/dist/commands/graphSchedule.d.ts.map +0 -1
- package/dist/commands/graphSchedule.js +0 -293
- package/dist/commands/graphSchedule.js.map +0 -1
- package/dist/commands/hsi.d.ts.map +0 -1
- package/dist/commands/hsi.js +0 -59
- package/dist/commands/hsi.js.map +0 -1
- package/dist/commands/intensity.d.ts.map +0 -1
- package/dist/commands/intensity.js +0 -50
- package/dist/commands/intensity.js.map +0 -1
- package/dist/commands/list.d.ts.map +0 -1
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/power.d.ts.map +0 -1
- package/dist/commands/power.js +0 -120
- package/dist/commands/power.js.map +0 -1
- package/dist/commands/printSchedule.d.ts +0 -5
- package/dist/commands/printSchedule.d.ts.map +0 -1
- package/dist/commands/printSchedule.js +0 -452
- package/dist/commands/printSchedule.js.map +0 -1
- package/dist/commands/service.d.ts.map +0 -1
- package/dist/commands/service.js.map +0 -1
- package/dist/commands/simulateSchedule.d.ts.map +0 -1
- package/dist/commands/simulateSchedule.js +0 -199
- package/dist/commands/simulateSchedule.js.map +0 -1
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -48
- package/dist/commands/status.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/discovery.d.ts.map +0 -1
- package/dist/discovery.js.map +0 -1
- package/dist/geoipUtil.d.ts.map +0 -1
- package/dist/geoipUtil.js.map +0 -1
- package/dist/lightControl.d.ts.map +0 -1
- package/dist/lightControl.js.map +0 -1
- package/dist/types.d.ts +0 -41
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
- /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
- /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
- /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
- /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
- /package/dist/{types.js → deviceControl/types.js} +0 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as cheerio from 'cheerio';
|
|
4
|
+
|
|
5
|
+
const HTML_PATH = path.resolve('docs/howto-extract.html');
|
|
6
|
+
const OUTPUT_PATH = path.resolve('docs/USAGE_GUIDE.md');
|
|
7
|
+
|
|
8
|
+
function extractCode(
|
|
9
|
+
$: cheerio.CheerioAPI,
|
|
10
|
+
codeContainer: cheerio.Cheerio<any>
|
|
11
|
+
): { lang: string; code: string; title?: string } {
|
|
12
|
+
let lang = 'text';
|
|
13
|
+
const classes = codeContainer.attr('class') || '';
|
|
14
|
+
const langMatch = classes.match(/language-(\w+)/);
|
|
15
|
+
if (langMatch) {
|
|
16
|
+
lang = langMatch[1];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const title = codeContainer.find('.codeBlockTitle_Ktv7').text().trim();
|
|
20
|
+
|
|
21
|
+
let codeText = '';
|
|
22
|
+
// Check if it's structured with token-lines (Docusaurus)
|
|
23
|
+
const lines = codeContainer.find('.token-line');
|
|
24
|
+
if (lines.length) {
|
|
25
|
+
lines.each((_i, el) => {
|
|
26
|
+
codeText += `${$(el as any)
|
|
27
|
+
.text()
|
|
28
|
+
.trim()}\n`;
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
codeText = codeContainer.find('code').text().trim() || codeContainer.text().trim();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (lang === 'json') {
|
|
35
|
+
try {
|
|
36
|
+
codeText = JSON.stringify(JSON.parse(codeText), null, 2);
|
|
37
|
+
} catch (_e) {
|
|
38
|
+
// Keep as is
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return { lang, code: codeText.trim(), title: title || undefined };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function extractTable($: cheerio.CheerioAPI, table: cheerio.Cheerio<any>): string {
|
|
46
|
+
const headers: string[] = [];
|
|
47
|
+
table.find('thead th').each((_i, el) => {
|
|
48
|
+
headers.push(
|
|
49
|
+
$(el as any)
|
|
50
|
+
.text()
|
|
51
|
+
.trim()
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const rows: string[][] = [];
|
|
56
|
+
table.find('tbody tr').each((_i, tr) => {
|
|
57
|
+
const row: string[] = [];
|
|
58
|
+
$(tr as any)
|
|
59
|
+
.find('td')
|
|
60
|
+
.each((_j, td) => {
|
|
61
|
+
row.push(
|
|
62
|
+
$(td as any)
|
|
63
|
+
.text()
|
|
64
|
+
.trim()
|
|
65
|
+
.replace(/\n/g, ' ')
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
rows.push(row);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
if (headers.length === 0 && rows.length > 0) {
|
|
72
|
+
// Handle cases where there might not be <thead> but just <tr> in <tbody> as headers
|
|
73
|
+
// Not common in Docusaurus but good to have
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
if (headers.length === 0) return '';
|
|
77
|
+
|
|
78
|
+
let md = `| ${headers.join(' | ')} |\n`;
|
|
79
|
+
md += `| ${headers.map(() => '---').join(' | ')} |\n`;
|
|
80
|
+
rows.forEach((row) => {
|
|
81
|
+
md += `| ${row.join(' | ')} |\n`;
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
return md;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async function run() {
|
|
88
|
+
if (!fs.existsSync(HTML_PATH)) {
|
|
89
|
+
console.error(`Error: ${HTML_PATH} not found.`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const html = fs.readFileSync(HTML_PATH, 'utf-8');
|
|
94
|
+
const $ = cheerio.load(html);
|
|
95
|
+
|
|
96
|
+
let markdown = '';
|
|
97
|
+
const seenContent = new Set<string>();
|
|
98
|
+
|
|
99
|
+
// Extract H1
|
|
100
|
+
const h1 = $('h1').first().text().trim();
|
|
101
|
+
if (h1) {
|
|
102
|
+
markdown += `# ${h1}\n\n`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Find the main article or content area
|
|
106
|
+
const content = $('article');
|
|
107
|
+
|
|
108
|
+
// We want to iterate through the content children
|
|
109
|
+
content
|
|
110
|
+
.find('.theme-doc-markdown')
|
|
111
|
+
.children()
|
|
112
|
+
.each((_i, el) => {
|
|
113
|
+
const $el = $(el as any);
|
|
114
|
+
const tagName = (el as any).tagName ? (el as any).tagName.toLowerCase() : '';
|
|
115
|
+
|
|
116
|
+
if (/^h[1-6]$/.test(tagName)) {
|
|
117
|
+
const level = tagName[1];
|
|
118
|
+
const text = $el.text().replace('', '').trim(); // Remove zero-width spaces
|
|
119
|
+
if (text && !seenContent.has(`H${level}:${text}`)) {
|
|
120
|
+
markdown += `${'#'.repeat(parseInt(level, 10))} ${text}\n\n`;
|
|
121
|
+
seenContent.add(`H${level}:${text}`);
|
|
122
|
+
}
|
|
123
|
+
} else if (tagName === 'p' || tagName === 'blockquote' || tagName === 'b' || tagName === 'i') {
|
|
124
|
+
const text = $el.text().trim();
|
|
125
|
+
if (text && !seenContent.has(text)) {
|
|
126
|
+
if (tagName === 'blockquote' || tagName === 'b') {
|
|
127
|
+
markdown += `> ${text}\n\n`;
|
|
128
|
+
} else {
|
|
129
|
+
markdown += `${text}\n\n`;
|
|
130
|
+
}
|
|
131
|
+
seenContent.add(text);
|
|
132
|
+
}
|
|
133
|
+
} else if (tagName === 'ul' || tagName === 'ol') {
|
|
134
|
+
let listMd = '';
|
|
135
|
+
$el.children('li').each((j, li) => {
|
|
136
|
+
const prefix = tagName === 'ul' ? '*' : `${j + 1}.`;
|
|
137
|
+
const $li = $(li);
|
|
138
|
+
// Handle content of LI, which might contain nested ULs
|
|
139
|
+
let liText = '';
|
|
140
|
+
$li.contents().each((_k, node) => {
|
|
141
|
+
if ((node as any).type === 'text') {
|
|
142
|
+
liText += $(node as any)
|
|
143
|
+
.text()
|
|
144
|
+
.trim();
|
|
145
|
+
} else if (
|
|
146
|
+
(node as any).type === 'tag' &&
|
|
147
|
+
((node as any).tagName === 'ul' || (node as any).tagName === 'ol')
|
|
148
|
+
) {
|
|
149
|
+
// Skip nested lists here, we will handle them if we want deep nesting,
|
|
150
|
+
// but for now let's just avoid double printing.
|
|
151
|
+
// Actually, let's just get the text of the LI but excluding nested UL/OL for the prefix line
|
|
152
|
+
} else {
|
|
153
|
+
liText += $(node as any)
|
|
154
|
+
.text()
|
|
155
|
+
.trim();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
listMd += `${prefix} ${liText.trim()}\n`;
|
|
159
|
+
|
|
160
|
+
// If there's a nested list, let's indent it
|
|
161
|
+
$li.children('ul, ol').each((_k, nested) => {
|
|
162
|
+
const $nested = $(nested as any);
|
|
163
|
+
const nestedTag = (nested as any).tagName ? (nested as any).tagName.toLowerCase() : '';
|
|
164
|
+
$nested.children('li').each((l, nli) => {
|
|
165
|
+
const nPrefix = nestedTag === 'ul' ? ' *' : ` ${l + 1}.`;
|
|
166
|
+
listMd += `${nPrefix} ${$(nli as any)
|
|
167
|
+
.text()
|
|
168
|
+
.trim()}\n`;
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
if (listMd && !seenContent.has(listMd)) {
|
|
173
|
+
markdown += `${listMd}\n`;
|
|
174
|
+
seenContent.add(listMd);
|
|
175
|
+
}
|
|
176
|
+
} else if (tagName === 'table') {
|
|
177
|
+
const tableMd = extractTable($, $el);
|
|
178
|
+
if (tableMd && !seenContent.has(tableMd)) {
|
|
179
|
+
markdown += `${tableMd}\n\n`;
|
|
180
|
+
seenContent.add(tableMd);
|
|
181
|
+
}
|
|
182
|
+
} else if ($el.hasClass('codeBlockContainer_Ckt0')) {
|
|
183
|
+
const { lang, code, title } = extractCode($, $el);
|
|
184
|
+
const codeBlock = `${title ? `**${title}**\n` : ''}\`\`\`${lang}\n${code}\n\`\`\`\n\n`;
|
|
185
|
+
if (code && !seenContent.has(codeBlock)) {
|
|
186
|
+
markdown += codeBlock;
|
|
187
|
+
seenContent.add(codeBlock);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
fs.writeFileSync(OUTPUT_PATH, `${markdown.trim()}\n`);
|
|
193
|
+
console.log(`Successfully extracted Usage Guide to ${OUTPUT_PATH}`);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
run().catch((err) => {
|
|
197
|
+
console.error(err);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
});
|
package/scripts/release.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { execSync } from 'node:child_process';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
|
-
import readline from 'node:readline';
|
|
5
4
|
import path from 'node:path';
|
|
5
|
+
import readline from 'node:readline';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
|
|
8
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -10,7 +10,7 @@ const __dirname = path.dirname(__filename);
|
|
|
10
10
|
|
|
11
11
|
const rl = readline.createInterface({
|
|
12
12
|
input: process.stdin,
|
|
13
|
-
output: process.stdout
|
|
13
|
+
output: process.stdout,
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
const askQuestion = (question) => {
|
|
@@ -21,25 +21,25 @@ const runCommand = (command) => {
|
|
|
21
21
|
console.log(`Running: ${command}`);
|
|
22
22
|
try {
|
|
23
23
|
execSync(command, { stdio: 'inherit' });
|
|
24
|
-
} catch (
|
|
24
|
+
} catch (_error) {
|
|
25
25
|
console.error(`Error executing command: ${command}`);
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
const updateChangelog = async (version, releaseNotes) => {
|
|
31
|
-
const changelogPath = path.join(__dirname, '../CHANGELOG.md');
|
|
31
|
+
const changelogPath = path.join(__dirname, '../docs/CHANGELOG.md');
|
|
32
32
|
let changelog = '';
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
try {
|
|
35
35
|
changelog = fs.readFileSync(changelogPath, 'utf8');
|
|
36
|
-
} catch (
|
|
36
|
+
} catch (_error) {
|
|
37
37
|
console.log('No existing CHANGELOG.md found, creating a new one.');
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const today = new Date().toISOString().split('T')[0];
|
|
41
41
|
const newEntry = `## [${version}] - ${today}\n\n${releaseNotes}\n\n`;
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
fs.writeFileSync(changelogPath, newEntry + changelog);
|
|
44
44
|
console.log('CHANGELOG.md has been updated');
|
|
45
45
|
};
|
|
@@ -63,7 +63,7 @@ const main = async () => {
|
|
|
63
63
|
// Ask for release notes
|
|
64
64
|
console.log('\nEnter release notes (press Enter then Ctrl+D when done):');
|
|
65
65
|
let releaseNotes = '';
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
const lines = [];
|
|
68
68
|
for await (const line of rl) {
|
|
69
69
|
lines.push(line);
|
|
@@ -76,14 +76,14 @@ const main = async () => {
|
|
|
76
76
|
|
|
77
77
|
// Update package.json version
|
|
78
78
|
packageJson.version = newVersion;
|
|
79
|
-
fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2)
|
|
79
|
+
fs.writeFileSync('package.json', `${JSON.stringify(packageJson, null, 2)}\n`);
|
|
80
80
|
console.log('Updated package.json version');
|
|
81
81
|
|
|
82
82
|
// Update CHANGELOG.md
|
|
83
83
|
await updateChangelog(newVersion, releaseNotes);
|
|
84
84
|
|
|
85
85
|
// Commit changes
|
|
86
|
-
runCommand('git add package.json CHANGELOG.md');
|
|
86
|
+
runCommand('git add package.json docs/CHANGELOG.md');
|
|
87
87
|
runCommand(`git commit -m "chore(release): v${newVersion}"`);
|
|
88
88
|
runCommand(`git tag -a v${newVersion} -m "v${newVersion}"`);
|
|
89
89
|
|
|
@@ -94,7 +94,7 @@ const main = async () => {
|
|
|
94
94
|
try {
|
|
95
95
|
runCommand(`gh release create v${newVersion} --notes "${releaseNotes}"`);
|
|
96
96
|
console.log(`\n🎉 Successfully created release v${newVersion} on GitHub!`);
|
|
97
|
-
} catch (
|
|
97
|
+
} catch (_error) {
|
|
98
98
|
console.warn('\nGitHub CLI not found or failed to create release.');
|
|
99
99
|
console.log('Please create the release manually at: https://github.com/theontho/amaran-cli/releases/new');
|
|
100
100
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
## [1.4.0] - 2025-12-15
|
|
2
|
-
|
|
3
|
-
- **Feature**: Added `graph-schedule` command to generate visual graphs of the lighting schedule.
|
|
4
|
-
|
|
5
|
-
## [1.3.6] - 2025-12-14
|
|
6
|
-
|
|
7
|
-
- **Fix**: Updated workflow to use latest `npm` version for better OIDC support.
|
|
8
|
-
|
|
9
|
-
## [1.3.5] - 2025-12-14
|
|
10
|
-
|
|
11
|
-
- **Fix**: Re-applied `registry-url` configuration fix (previous attempt in v1.3.4 failed to update workflow).
|
|
12
|
-
|
|
13
|
-
## [1.3.4] - 2025-12-14
|
|
14
|
-
|
|
15
|
-
- **Fix**: Restored `registry-url` configuration (required for OIDC `ENEEDAUTH` fix).
|
|
16
|
-
|
|
17
|
-
## [1.3.3] - 2025-12-14
|
|
18
|
-
|
|
19
|
-
- **Fix**: Removed conflicting `registry-url` configuration to enable OIDC authentication.
|
|
20
|
-
|
|
21
|
-
## [1.3.2] - 2025-12-14
|
|
22
|
-
|
|
23
|
-
- **Fix**: Updated release workflow to use NPM Trusted Publishing (OIDC) instead of auth tokens.
|
|
24
|
-
|
|
25
|
-
## [1.3.1] - 2025-12-14
|
|
26
|
-
|
|
27
|
-
- **Fix**: Resolved timezone issue in integration tests causing CI failures.
|
|
28
|
-
|
|
29
|
-
## [1.3.0] - 2025-12-14
|
|
30
|
-
|
|
31
|
-
- **Breaking**: Migrated project to ESM (`type: module`).
|
|
32
|
-
- **Breaking**: Migrated testing framework from Jest to Vitest.
|
|
33
|
-
- **Feature**: Added `intensityMultiplier` support to `auto-cct`.
|
|
34
|
-
- **Feature**: `auto-cct` command now accepts a device argument (defaults to 'all').
|
|
35
|
-
- **Refactor**: Renamed `schedule` command to `print-schedule`.
|
|
36
|
-
- **Fix**: Resolved `suncalc` import issues.
|
|
37
|
-
- **Fix**: Improved CLI output styling for light mode terminals.
|
|
38
|
-
- **Chore**: Comprehensive linting and formatting fixes.
|
|
39
|
-
|
|
40
|
-
## [1.1.4] - 2025-11-02
|
|
41
|
-
|
|
42
|
-
- test token config
|
|
43
|
-
|
|
44
|
-
## [1.1.3] - 2025-11-02
|
|
45
|
-
|
|
46
|
-
- curve config and refactors
|
|
47
|
-
|
|
48
|
-
## [1.1.2] - 2025-11-01
|
|
49
|
-
|
|
50
|
-
- Enhanced CLI help output and documentation
|
|
51
|
-
|
|
52
|
-
## [1.1.0] - 2025-10-31
|
|
53
|
-
|
|
54
|
-
- Added more curves for auto-cct
|
|
55
|
-
- Improved schedule table display with all curves
|
|
56
|
-
- Better range for start/stop times for curves
|
|
57
|
-
- Added simulation of full day curve in seconds
|
|
58
|
-
- Added auto-start for the desktop app if closed
|
|
59
|
-
- Added more special times in schedule (e.g., Nautical Dawn)
|
|
60
|
-
- Various tests and refactoring
|
|
61
|
-
|
|
62
|
-
## [1.0.3] - 2025-10-30
|
|
63
|
-
|
|
64
|
-
- Initial stable release with full CLI functionality
|
|
65
|
-
- WebSocket control for Aputure Amaran lights
|
|
66
|
-
- Auto-CCT circadian lighting feature
|
|
67
|
-
- Service automation for continuous lighting adjustment
|
package/dist/autostart.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAkCD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAkE7E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC9E"}
|
package/dist/autostart.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autostart.js","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"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"}
|
package/dist/cctUtil.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cctUtil.d.ts","sourceRoot":"","sources":["../src/cctUtil.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;CAClC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,OAAO,SAAS,CAuBpE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAwbD,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,IAAiB,EACvB,IAAI,CAAC,EAAE,UAAU,EACjB,SAAS,GAAE,SAA0B,GACpC,SAAS,CAgBX"}
|