diff --git a/scripts/material-ui/generate.js b/scripts/material-ui/generate.js
deleted file mode 100644
index 06e6983a44..0000000000
--- a/scripts/material-ui/generate.js
+++ /dev/null
@@ -1,147 +0,0 @@
-const {get} = require('https')
-const {readdir, readFile, writeFile} = require('fs')
-const {join, extname, basename, dirname, relative} = require('path')
-
-const token = process.env.GITHUB_ACCESS_TOKEN || ''
-
-const toMixedCase = (name) => {
- let dist = name[0].toUpperCase()
- for (let i = 1; i < name.length; i++) {
- const c = name[i]
- if (c !== '-') {
- dist += c
- continue
- }
- i++
- dist += name[i].toUpperCase()
- }
- return dist
-}
-
-const github = (path) => new Promise((resolve, reject) => {
- get({
- headers: {'user-agent': 'DefinitelyTyped/material-ui/generate'},
- host: 'api.github.com',
- path,
- }, (res) => {
- if ((res.statusCode / 100 >> 0) != 2) {
- reject(`GitHub response: ${res.statusCode} ${res.statusMessage}`)
- return
- }
- let data = '';
- res
- .on('data', (chunk) => data += chunk)
- .on('end', () => resolve(JSON.parse(data)))
- }).on('error', reject)
-})
-
-const categories = () => github(`/repos/callemall/material-ui/contents/src/svg-icons?ref=master&access_token=${token}`)
-
-const contents = (path) => github(`/repos/callemall/material-ui/contents/${path}?ref=master&access_token=${token}`)
-
-const collator = new Intl.Collator()
-
-const resolvePath = (filename) => join(__dirname, '../../types/material-ui', filename)
-
-const readText = (filename) => new Promise((resolve, reject) => {
- readFile(resolvePath(filename), 'utf8', (err, data) => {
- if (err != null) {
- reject(err)
- return
- }
- resolve(data)
- })
-})
-
-const writeText = (filename, text) => new Promise((resolve, reject) => {
- writeFile(resolvePath(filename), text, 'utf8', (err) => {
- if (err != null) {
- reject(err)
- return
- }
- resolve()
- })
-})
-
-const inject = (content) => {
- content.category = this.name
- return content
-}
-
-const rMark = /(\/{2} \{{3})[\s\S]*?(\/{2} \}{3})/g
-
-categories()
- .then((cats) => Promise.all(Array.prototype.map.call(cats, (cat) => contents(cat.path)
- .then((cons) => Array.prototype.map.call(cons, (con) => {
- con.category = cat.name
- return con
- }))
- )))
- .then((contentsList) => Array.prototype.concat.apply([], contentsList)
- .map((content) => {
- const {path} = content
- const name = basename(path, extname(path))
- content.id = join(relative('src', dirname(path)), name)
- content.className = toMixedCase(content.category) + toMixedCase(name)
- return content
- })
- .sort((a, b) => collator.compare(a.id, b.id))
- .reduce((prev, content) => {
- const {dts, test} = prev
- dts.individuals.push(`declare module 'material-ui/${content.id}' {
- export import ${content.className} = __MaterialUI.SvgIcon;
- export default ${content.className};
-}`)
- dts.summarizeds.push(` export import ${content.className} = __MaterialUI.SvgIcon; // require('material-ui/${content.id}');`)
-
- test.individuals.push(`import _${content.className} from 'material-ui/${content.id}';`)
- test.summarizeds.push(` ${content.className},`)
- return prev
- }, {
- dts: {individuals: [], summarizeds: []},
- test: {individuals: [], summarizeds: []},
- })
-)
- .then(({dts, test}) => {
- return Promise.all([
- (() => {
- const {individuals, summarizeds} = dts
- const file = 'index.d.ts'
- let index = 0
- return readText(file)
- .then((script) => writeText(file, script.replace(rMark, (_, p1, p2) => {
- let text = ''
- switch (index) {
- case 0:
- text = individuals.join('\n\n')
- break
- case 1:
- text = summarizeds.join('\n')
- break
- }
- index++
- return p1 + '\n' + text + '\n' + p2
- })))
- })(),
- (() => {
- const {individuals, summarizeds} = test
- const file = join('material-ui-tests.tsx')
- let index = 0
- return readText(file)
- .then((script) => writeText(file, script.replace(rMark, (_, p1, p2) => {
- let text = ''
- switch (index) {
- case 0:
- text = individuals.join('\n')
- break
- case 1:
- text = summarizeds.join('\n')
- break
- }
- index++
- return p1 + '\n' + text + '\n' + p2
- })))
- })(),
- ])
- })
- .catch((err) => console.error(err))
diff --git a/scripts/material-ui/README.md b/types/material-ui/scripts/README.md
similarity index 100%
rename from scripts/material-ui/README.md
rename to types/material-ui/scripts/README.md
diff --git a/types/material-ui/scripts/generate.ts b/types/material-ui/scripts/generate.ts
new file mode 100644
index 0000000000..f8024d5805
--- /dev/null
+++ b/types/material-ui/scripts/generate.ts
@@ -0,0 +1,151 @@
+// Usage: ts-node generate.ts
+
+///
+
+import {get} from 'https';
+import {readdir, readFile, writeFile} from 'fs';
+import {join, extname, basename, dirname, relative} from 'path';
+
+const token = process.env.GITHUB_ACCESS_TOKEN || ''
+
+const toMixedCase = (name) => {
+ let dist = name[0].toUpperCase()
+ for (let i = 1; i < name.length; i++) {
+ const c = name[i]
+ if (c !== '-') {
+ dist += c
+ continue
+ }
+ i++
+ dist += name[i].toUpperCase()
+ }
+ return dist
+}
+
+const github = (path) => new Promise((resolve, reject) => {
+ get({
+ headers: {'user-agent': 'DefinitelyTyped/material-ui/generate'},
+ host: 'api.github.com',
+ path,
+ }, (res) => {
+ if ((res.statusCode / 100 >> 0) != 2) {
+ reject(`GitHub response: ${res.statusCode} ${res.statusMessage}`)
+ return
+ }
+ let data = '';
+ res
+ .on('data', (chunk) => data += chunk)
+ .on('end', () => resolve(JSON.parse(data)))
+ }).on('error', reject)
+})
+
+const categories = () => github(`/repos/callemall/material-ui/contents/src/svg-icons?ref=master&access_token=${token}`)
+
+const contents = (path) => github(`/repos/callemall/material-ui/contents/${path}?ref=master&access_token=${token}`)
+
+const collator = new Intl.Collator()
+
+const resolvePath = (filename) => join(__dirname, '..', filename)
+
+const readText = (filename) => new Promise((resolve, reject) => {
+ readFile(resolvePath(filename), 'utf8', (err, data) => {
+ if (err != null) {
+ reject(err)
+ return
+ }
+ resolve(data)
+ })
+})
+
+const writeText = (filename, text) => new Promise((resolve, reject) => {
+ writeFile(resolvePath(filename), text, 'utf8', (err) => {
+ if (err != null) {
+ reject(err)
+ return
+ }
+ resolve()
+ })
+})
+
+const inject = (content) => {
+ content.category = this.name
+ return content
+}
+
+const rMark = /(\/{2} \{{3})[\s\S]*?(\/{2} \}{3})/g
+
+main().catch((err) => console.error(err));
+
+async function main() {
+ const cats = await categories();
+ const contentsList = await Promise.all(Array.prototype.map.call(cats, (cat) => contents(cat.path)
+ .then((cons) => Array.prototype.map.call(cons, (con) => {
+ con.category = cat.name
+ return con
+ }))
+ ));
+ const { dts, test } = await Array.prototype.concat.apply([], contentsList)
+ .map((content) => {
+ const {path} = content
+ const name = basename(path, extname(path))
+ content.id = join(relative('src', dirname(path)), name)
+ content.className = toMixedCase(content.category) + toMixedCase(name)
+ return content
+ })
+ .sort((a, b) => collator.compare(a.id, b.id))
+ .reduce((prev, content) => {
+ const {dts, test} = prev
+ dts.individuals.push(`declare module 'material-ui/${content.id}' {
+ export import ${content.className} = __MaterialUI.SvgIcon;
+ export default ${content.className};
+}`)
+ dts.summarizeds.push(` export import ${content.className} = __MaterialUI.SvgIcon; // require('material-ui/${content.id}');`)
+
+ test.individuals.push(`import _${content.className} from 'material-ui/${content.id}';`)
+ test.summarizeds.push(` ${content.className},`)
+ return prev
+ }, {
+ dts: {individuals: [], summarizeds: []},
+ test: {individuals: [], summarizeds: []},
+ });
+
+ {
+ const {individuals, summarizeds} = dts
+ const file = 'index.d.ts'
+ let index = 0
+ const script = await readText(file)
+ await writeText(file, script.replace(rMark, (_, p1, p2) => {
+ let text = ''
+ switch (index) {
+ case 0:
+ text = individuals.join('\n\n')
+ break
+ case 1:
+ text = summarizeds.join('\n')
+ break
+ }
+ index++
+ return p1 + '\n' + text + '\n' + p2
+ }))
+ }
+
+ {
+ const {individuals, summarizeds} = test
+ const file = 'material-ui-tests.tsx'
+ let index = 0
+ const script = await readText(file)
+ await writeText(file, script.replace(rMark, (_, p1, p2) => {
+ let text = ''
+ switch (index) {
+ case 0:
+ text = individuals.join('\n')
+ break
+ case 1:
+ text = summarizeds.join('\n')
+ break
+ }
+ index++
+ return p1 + '\n' + text + '\n' + p2
+ }))
+ }
+}
diff --git a/types/material-ui/scripts/tsconfig.json b/types/material-ui/scripts/tsconfig.json
new file mode 100644
index 0000000000..a06b8ed24f
--- /dev/null
+++ b/types/material-ui/scripts/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "target": "es6",
+ "baseUrl": "../..",
+ "typeRoots": [
+ "../../"
+ ],
+ "types": []
+ }
+}
\ No newline at end of file