Skip to content

Commit

Permalink
Modify scripts/build/typings.js to build global flow typings
Browse files Browse the repository at this point in the history
  • Loading branch information
leshakoss authored and kossnocorp committed Sep 14, 2017
1 parent 9f1e4e7 commit 4fefe87
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 3 deletions.
2 changes: 1 addition & 1 deletion scripts/_lib/listFPFns.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const fs = require('fs')

module.exports = listFPFns

const ignoredFiles = ['index.js', 'test.js']
const ignoredFiles = ['index.js', 'test.js', 'index.js.flow']

function listFPFns () {
const files = fs.readdirSync(path.join(process.cwd(), 'src', 'fp'))
Expand Down
2 changes: 1 addition & 1 deletion scripts/_lib/listFns.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const fs = require('fs')

module.exports = listFns

const ignoredFiles = ['locale', 'esm', 'fp', 'index.js', 'test.js']
const ignoredFiles = ['locale', 'esm', 'fp', 'index.js', 'test.js', 'index.js.flow']

function listFns () {
const files = fs.readdirSync(path.join(process.cwd(), 'src'))
Expand Down
2 changes: 1 addition & 1 deletion scripts/_lib/listLocales.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const path = require('path')
const fs = require('fs')

const ignoredFiles = ['index.js', 'test.js']
const ignoredFiles = ['index.js', 'test.js', 'index.js.flow']

module.exports = listLocales

Expand Down
66 changes: 66 additions & 0 deletions scripts/build/typings.js
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,28 @@ function generateFlowFnTyping (fn, aliasDeclarations) {
fs.writeFileSync(filename, typingString)
}

function generateFlowFnIndexTyping (fns, aliasDeclarations) {
const filename = `./src/index.js.flow`

const fnsDeclarations = fns.map(({title, args, content}) => {
const params = getParams(args, {indent: 1, leftBorder: '(', rightBorder: ')'})
const returns = getType(content.returns[0].type.names)
return ` ${title}: ${params} => ${returns}`
})

const typingString = ['// @flow']
.concat(generatedAutomaticallyMessage)
.concat('')
.concat(aliasDeclarations.join('\n\n'))
.concat('')
.concat(`declare module.exports: {`)
.concat(fnsDeclarations.join(',\n\n'))
.concat(`}\n`)
.join('\n')

fs.writeFileSync(filename, typingString)
}

function generateFlowFPFnTyping (fn, aliasDeclarations) {
const {title, args, content} = fn
const filename = `./src/fp/${title}/index.js.flow`
Expand All @@ -400,6 +422,30 @@ function generateFlowFPFnTyping (fn, aliasDeclarations) {
fs.writeFileSync(filename, typingString)
}

function generateFlowFPFnIndexTyping (fns, aliasDeclarations) {
const filename = `./src/fp/index.js.flow`

const fnsDeclarations = fns.map(({title, args, content}) => {
const params = getParams(args, {indent: 1, leftBorder: '(', rightBorder: ')'})
const returns = getType(content.returns[0].type.names)
return ` ${title}: ${getFPFnType(args, content.returns[0].type.names)}`
})

const typingString = ['// @flow']
.concat(generatedAutomaticallyMessage)
.concat('')
.concat(aliasDeclarations.join('\n\n'))
.concat('')
.concat(flowFPAliases)
.concat('')
.concat(`declare module.exports: {`)
.concat(fnsDeclarations.join(',\n'))
.concat(`}\n`)
.join('\n')

fs.writeFileSync(filename, typingString)
}

function generateFlowLocaleTyping (locale, localeAliasDeclaration) {
const {fullPath} = locale
const filename = `${fullPath}.flow`
Expand All @@ -415,6 +461,22 @@ function generateFlowLocaleTyping (locale, localeAliasDeclaration) {
fs.writeFileSync(filename, typingString)
}

function generateFlowLocaleIndexTyping (locales, localeAliasDeclaration) {
const filename = './src/locale/index.js.flow'

const typingString = ['// @flow']
.concat(generatedAutomaticallyMessage)
.concat('')
.concat(localeAliasDeclaration)
.concat('')
.concat(`declare module.exports: {`)
.concat(locales.map(({name}) => ` ${name}: Locale`).join(',\n'))
.concat(`}\n`)
.join('\n')

fs.writeFileSync(filename, typingString)
}

function generateFlowTypings (fns, aliases, locales) {
const aliasDeclarations = aliases.map(getFlowTypeAlias)
const localeAliasDeclaration = getFlowTypeAlias(aliases.find((alias) => alias.title === 'Locale'))
Expand All @@ -430,4 +492,8 @@ function generateFlowTypings (fns, aliases, locales) {
locales.forEach((locale) => {
generateFlowLocaleTyping(locale, localeAliasDeclaration)
})

generateFlowFnIndexTyping(fns.filter(({isFPFn}) => !isFPFn), aliasDeclarations)
generateFlowFPFnIndexTyping(fns.filter(({isFPFn}) => isFPFn), aliasDeclarations)
generateFlowLocaleIndexTyping(locales, localeAliasDeclaration)
}

0 comments on commit 4fefe87

Please sign in to comment.