Skip to content

Commit

Permalink
plop
Browse files Browse the repository at this point in the history
  • Loading branch information
ernestofreyreg committed Nov 23, 2020
1 parent 960d79a commit a379782
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 1 deletion.
28 changes: 28 additions & 0 deletions .plop/actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { ActionConfig, NodePlopAPI } from 'plop'
import globby from 'globby'
import fse from 'fs-extra'
import replaceInFiles from 'replace-in-files'

export const copyFiles = async (answers: object, config: ActionConfig, plop: NodePlopAPI) => {
const configData = config.data as any

const allFiles = await globby([configData.source], {
gitignore: true,
dot: true
})
for (let fileName of allFiles) {
const destFileName = fileName.replace(configData.source, configData.dest)
console.log(`- ${destFileName}`)
await fse.copy(fileName, destFileName)
}

for (let key in configData.replaceInFiles) {
await replaceInFiles({
files: [`${configData.dest}/**/*`, `${configData.dest}/*`],
from: new RegExp(key, 'g'),
to: configData.replaceInFiles[key]
})
}

return await Promise.resolve('success')
}
50 changes: 50 additions & 0 deletions .plop/app-generator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { NodePlopAPI } from 'plop'

export const appGenerator = (plop: NodePlopAPI) => {
const prompts = [
{
type: 'input',
name: 'appName',
message: 'App name'
},
{
type: 'input',
name: 'description',
message: 'App description'
},
{
type: 'input',
name: 'port',
message: 'Port for dev mode (ex: 3045, Check available ports)'
},
{
type: 'input',
name: 'appPath',
message: 'App path (ex: /my-app)'
}
]
const actions = ({ appName, description, port, appPath }) => {
return [
{
type: 'copy-files',
data: {
source: 'packages/app/template',
dest: `packages/app/${appName}`,
replaceInFiles: {
'@outsrc/template': `@outsrc/${appName}`,
'3010': port,
'Frontend App Template': description,
'/template': appPath,
template: appName
}
}
}
]
}

return {
description: 'App Generator',
prompts,
actions
}
}
37 changes: 37 additions & 0 deletions .plop/lib-generator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { NodePlopAPI } from 'plop'

export const libGenerator = (plop: NodePlopAPI) => {
const prompts = [
{
type: 'input',
name: 'libName',
message: 'Library name'
},
{
type: 'input',
name: 'description',
message: 'Library description'
}
]
const actions = ({ libName, description }) => {
return [
{
type: 'copy-files',
data: {
source: 'packages/shared/functions',
dest: `packages/shared/${libName}`,
replaceInFiles: {
'@outsrc/functions': `@outsrc/${libName}`,
'Templated shared functions': description
}
}
}
]
}

return {
description: 'Shared Module Generator',
prompts,
actions
}
}
11 changes: 11 additions & 0 deletions .plop/plopfile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { appGenerator } from './app-generator'
import { libGenerator } from './lib-generator'
import { NodePlopAPI } from 'plop'
import { copyFiles } from './actions'

module.exports = function (plop: NodePlopAPI) {
plop.setActionType('copy-files', copyFiles)

plop.setGenerator('app', appGenerator(plop))
plop.setGenerator('lib', libGenerator(plop))
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"scripts": {
"test": "jest --coverage",
"storybook": "start-storybook -p 6006",
"lint": "eslint --ext .ts,.tsx,.js packages"
"lint": "eslint --ext .ts,.tsx,.js packages",
"generate": "plop --plopfile .plop/plopfile.ts"
},
"keywords": [],
"author": "",
Expand Down

0 comments on commit a379782

Please sign in to comment.