Skip to content

Commit

Permalink
fix: scoped names confuses mkdir (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
YassinEldeeb committed Jan 10, 2022
1 parent ba42594 commit 0ec31e2
Show file tree
Hide file tree
Showing 5 changed files with 764 additions and 151 deletions.
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
{
"answers": {
"generatorName": "prisma-generator-data-graph-some-uniqueness",
"generatorName": "@org/prisma-generator-data-graph-some-uniqueness",
"typescript": false,
"packageManager": "npm",
"githubActions": false,
"usageTemplate": true
},
"pathSep": "\\",
"fsSnapshot": {
"prisma-generator-data-graph-some-uniqueness\\.prettierrc": "",
"prisma-generator-data-graph-some-uniqueness\\README.md": "",
"prisma-generator-data-graph-some-uniqueness\\.gitignore": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\usage\\package.json": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\usage\\prisma\\schema.prisma": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\.babelrc": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\.npmignore": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\jest.config.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\package.json": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\bin.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\constants.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\generator.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\helpers\\genEnum.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\utils\\formatFile.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\utils\\writeFileSafely.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\genEnum.test.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__fixtures__\\getSampleDMMF.js": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__fixtures__\\sample.prisma": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__snapshots__\\genEnum.test.js.snap": "",
"prisma-generator-data-graph-some-uniqueness\\packages\\generator\\dist\\bin.js": "",
"prisma-generator-data-graph-some-uniqueness\\package.json": ""
"org-prisma-generator-data-graph-some-uniqueness\\.prettierrc": "",
"org-prisma-generator-data-graph-some-uniqueness\\README.md": "",
"org-prisma-generator-data-graph-some-uniqueness\\.gitignore": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\usage\\package.json": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\usage\\prisma\\schema.prisma": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\.babelrc": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\.npmignore": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\jest.config.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\package.json": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\bin.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\constants.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\generator.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\helpers\\genEnum.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\utils\\formatFile.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\utils\\writeFileSafely.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\genEnum.test.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__fixtures__\\getSampleDMMF.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__fixtures__\\sample.prisma": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\src\\__tests__\\__snapshots__\\genEnum.test.js.snap": "",
"org-prisma-generator-data-graph-some-uniqueness\\packages\\generator\\dist\\bin.js": "",
"org-prisma-generator-data-graph-some-uniqueness\\package.json": ""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { MockedFS } from './types/MockedFS'
import child_process from 'child_process'
import { getInstallCommand } from '../utils/getInstallCommands'
import { validGenName } from './constants/valid-prisma-gen-name'
import { transformScopedName } from '../utils/transformScopedName'

const mockedFS: MockedFS = fs as any

Expand Down Expand Up @@ -128,6 +129,7 @@ jest.spyOn(child_process, 'spawnSync')
// It has to be named uniquely cause some operations
// are depending on splitting a path using this name
const genName = validGenName + '-some-uniqueness'
const scopedGenName = '@org/' + validGenName + '-some-uniqueness'

const sampleAnswers = {
async sample1() {
Expand Down Expand Up @@ -162,7 +164,7 @@ const sampleAnswers = {
},
async sample4() {
// LINK ..\utils\promptQuestions.ts#Q1-generatorName
await answer(io, { text: genName })
await answer(io, { text: scopedGenName })

// LINK ..\utils\promptQuestions.ts#Q2-usingTypescript
await answer(io, { text: 'No' })
Expand Down Expand Up @@ -208,17 +210,19 @@ Object.keys(sampleAnswers).map((sample) => {
5,
)

const answers = await main()
const answers = (await main())!

const dirName = transformScopedName(answers.generatorName)

const fsSnapshot = mockedFS.toJSON()
const newSnapshot = Object.keys(fsSnapshot)
.filter((key) => {
const condition = path.join(process.cwd(), genName)
const condition = path.join(process.cwd(), dirName)
return path.resolve(key).includes(condition)
})
.reduce((cur, key) => {
return Object.assign(cur, {
[path.join(genName, key.split(genName)[1])]: '',
[path.join(dirName, key.split(dirName)[1])]: '',
})
}, {})

Expand Down Expand Up @@ -284,7 +288,7 @@ Object.keys(sampleAnswers).map((sample) => {
)
// Check deps installtion
expect(child_process.spawnSync).toHaveBeenCalledWith(installCommand, {
cwd: path.join(process.cwd(), genName),
cwd: path.join(process.cwd(), dirName),
shell: true,
stdio: 'inherit',
})
Expand Down
32 changes: 18 additions & 14 deletions packages/create-prisma-generator/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,26 @@ import { pnpmWorkspaceYML } from './config/pnpm-workspace'
import { huskyCommitMsgHook } from './config/husky-commit-msg-hook'
import { CLIs } from './tinyClis'
import { getInstallCommand } from './utils/getInstallCommands'
import { transformScopedName } from './utils/transformScopedName'

export const main = async () => {
const answers = await promptQuestions()

const pkgName = answers.generatorName.toLowerCase()
const pkgName = answers.generatorName
const dirName = transformScopedName(pkgName)

// Reused variables
const projectWorkdir = path.join(process.cwd(), pkgName)
const projectWorkdir = path.join(process.cwd(), dirName)
const pkgManager = answers.packageManager
const usingWorkspaces = answers.usageTemplate
const workingDir = `cd ${pkgName}`
const workingDir = `cd ${dirName}`
const generatorLocation = usingWorkspaces
? `${workingDir}/packages/generator`
: workingDir

// Validate if folder with the same name doesn't exist
if (fs.existsSync(projectWorkdir)) {
console.log(chalk.red(`${pkgName} directory already exists!`))
console.log(chalk.red(`${dirName} directory already exists!`))
return
}

Expand All @@ -45,34 +47,34 @@ export const main = async () => {

// Adding default root configs
const templateName = 'root default configs'
runBlockingCommand(templateName, CLIs.rootConfigs(pkgName))
runBlockingCommand(templateName, CLIs.rootConfigs(dirName))

if (answers.usageTemplate) {
const templateName = 'Usage Template'
runBlockingCommand(templateName, CLIs.usageTemplate(`${pkgName}/packages`))
runBlockingCommand(templateName, CLIs.usageTemplate(`${dirName}/packages`))
}

if (answers.typescript) {
const templateName = 'Typescript Template'
const outputLocation = usingWorkspaces
? `${pkgName}/packages/generator`
: pkgName
? `${dirName}/packages/generator`
: dirName
runBlockingCommand(templateName, CLIs.typescriptTemplate(outputLocation))
}

// AKA: Javascript
if (!answers.typescript) {
const templateName = 'Javascript Template'
const outputLocation = usingWorkspaces
? `${pkgName}/packages/generator`
: pkgName
? `${dirName}/packages/generator`
: dirName

runBlockingCommand(templateName, CLIs.javascriptTemplate(outputLocation))
}

if (answers.githubActions) {
const templateName = 'Github actions Template'
runBlockingCommand(templateName, CLIs.githubActionsTemplate(pkgName))
runBlockingCommand(templateName, CLIs.githubActionsTemplate(dirName))

// Replace placeholders
const workflowPath = path.join(projectWorkdir, '.github/workflows/CI.yml')
Expand All @@ -99,7 +101,7 @@ export const main = async () => {

// Replace placeholders like $PACKAGE_NAME with actual pkgName
// In places where It's needed
replacePlaceholders(answers, pkgName)
replacePlaceholders(answers, dirName)

// Setup Workspaces based on pkg manager
if (usingWorkspaces) {
Expand Down Expand Up @@ -134,7 +136,7 @@ export const main = async () => {
const workspaceFlag = usingWorkspaces ? 'workspace' : ''
runBlockingCommand(
templateName,
CLIs.setupSemanticRelease(pkgName, workspaceFlag),
CLIs.setupSemanticRelease(dirName, workspaceFlag),
'Configuring',
)
}
Expand Down Expand Up @@ -185,10 +187,12 @@ export const main = async () => {
// Success Messages
console.log(chalk.green(`Success!`), `Created ${projectWorkdir}`)
console.log(`We suggest that you begin by typing:\n`)
console.log(chalk.cyan('cd'), pkgName)
console.log(chalk.cyan('cd'), dirName)
console.log(chalk.cyan('code .'))
console.log(`\nStart Generating ;)`)

// return answers cause It's useful for tests
// to verify the behavior based on the answers
return answers
}
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export const transformScopedName = (pkgName: string) => {
return pkgName.startsWith('@')
? pkgName.replace('@', '').replace('/', '-')
: pkgName
}

0 comments on commit 0ec31e2

Please sign in to comment.