-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen-types.ts
52 lines (41 loc) · 1.34 KB
/
gen-types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env node
/**
* Generate `*.less.d.ts` for `*.less` file.
*/
/* eslint-disable no-console */
import path from 'path'
import fs from 'fs'
import {parse} from './parse'
function main(): void {
if (process.argv.length < 3) {
console.error(`
Generate \`*.less.d.ts\` for \`*.less\` file.
Usage:
node "${__filename}" <less-file> [output-dir]
<less-file> The source \`*.less\` file to extract variables from;
Variables should be defined in sections \`#less-vars {...}\`;
Variable names should be kebab-case, and will be converted into camelCase;
[output-dir] The directory to output the generated file \`*.less.d.ts\`;
Will use the same directory as the source file by default;
`)
return
}
const sourceFile = process.argv[2]
let outDir = path.dirname(sourceFile)
if (process.argv.length >= 4) {
outDir = process.argv[3] // eslint-disable-line prefer-destructuring
fs.mkdirSync(outDir, {recursive: true})
}
const outFile = path.join(outDir, `${path.basename(sourceFile)}.d.ts`)
const source = fs.readFileSync(sourceFile, {encoding: 'utf-8'})
const vars = parse(source)
const types: string[] = Object.keys(vars).map((k) => `\t'${k}': string`)
const content = `const lessVars: {
${types.join('\n')}
}
export default lessVars
`
fs.writeFileSync(outFile, content, {encoding: 'utf-8'})
console.info(`Generated \`${outFile}\``)
}
main()