Skip to content

Commit

Permalink
feat: add configure instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
thetutlage committed Sep 19, 2023
1 parent 3a219a6 commit 1417942
Show file tree
Hide file tree
Showing 12 changed files with 339 additions and 215 deletions.
24 changes: 0 additions & 24 deletions commands/index.ts

This file was deleted.

File renamed without changes.
2 changes: 1 addition & 1 deletion commands/migration/rollback.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import { flags } from '@adonisjs/core/ace'

import MigrationsBase from './base.js'
import MigrationsBase from './_base.js'
import { MigrationRunner } from '../../src/migration/runner.js'

/**
Expand Down
2 changes: 1 addition & 1 deletion commands/migration/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

import { flags } from '@adonisjs/core/ace'
import MigrationsBase from './base.js'
import MigrationsBase from './_base.js'
import { MigrationRunner } from '../../src/migration/runner.js'

/**
Expand Down
131 changes: 131 additions & 0 deletions configure.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/*
* @adonisjs/lucid
*
* (c) AdonisJS
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

import type Configure from '@adonisjs/core/commands/configure'

/**
* We only allow configuring the one's thoroughly tested
* inside the Lucid codebase. Knex supports more and one
* can reference knex docs to configure additional
* dialects.
*/
const DIALECTS = ['sqlite', 'mysql', 'postgres', 'mssql'] as const
const DIALECTS_INFO: {
[K in (typeof DIALECTS)[number]]: {
envVars?: Record<string, number | string>
envValidations?: Record<string, string>
pkg: string
}
} = {
sqlite: {
pkg: 'sqlite3',
},
mysql: {
pkg: 'mysql2',
envVars: {
DB_HOST: '127.0.0.1',
DB_PORT: 3306,
DB_USER: 'root',
DB_PASSWORD: '',
DB_DATABASE: '',
},
envValidations: {
DB_HOST: `Env.schema.string({ format: 'host' })`,
DB_PORT: `Env.schema.number()`,
DB_USER: 'Env.schema.string()',
DB_PASSWORD: 'Env.schema.string()',
DB_DATABASE: 'Env.schema.string()',
},
},
postgres: {
envVars: {
DB_HOST: '127.0.0.1',
DB_PORT: 5432,
DB_USER: 'postgres',
DB_PASSWORD: '',
DB_DATABASE: '',
},
envValidations: {
DB_HOST: `Env.schema.string({ format: 'host' })`,
DB_PORT: `Env.schema.number()`,
DB_USER: 'Env.schema.string()',
DB_PASSWORD: 'Env.schema.string()',
DB_DATABASE: 'Env.schema.string()',
},
pkg: 'pg',
},
mssql: {
envVars: {
DB_HOST: '127.0.0.1',
DB_PORT: 1433,
DB_USER: 'sa',
DB_PASSWORD: '',
DB_DATABASE: '',
},
envValidations: {
DB_HOST: `Env.schema.string({ format: 'host' })`,
DB_PORT: `Env.schema.number()`,
DB_USER: 'Env.schema.string()',
DB_PASSWORD: 'Env.schema.string()',
DB_DATABASE: 'Env.schema.string()',
},
pkg: 'tedious',
},
}

/**
* Configures the package
*/
export async function configure(command: Configure) {
const codemods = await command.createCodemods()
await codemods.updateRcFile((rcFile) => {
rcFile.addProvider('@adonisjs/lucid/database_provider')
})

/**
* Prompt to select the dialect to use
*/
const dialect =
(await command.prompt.choice('Select the database you want to use', DIALECTS, {
hint: 'You can always change it later',
})) || 'postgres'

const { pkg, envVars, envValidations } = DIALECTS_INFO[dialect]

/**
* Define environment variables
*/
if (envVars) {
codemods.defineEnvVariables(envVars)
}

/**
* Define environment validations
*/
if (envValidations) {
codemods.defineEnvValidations({
variables: envValidations,
leadingComment: 'Variables for configuring ally package',
})
}

/**
* Publish config
*/
await command.publishStub('config.stub', { dialect: dialect })

/**
* Prompt to install package
*/
if (await command.prompt.confirm(`Do you want to install npm package "${pkg}"?`)) {
await command.installPackages([{ name: pkg, isDevDependency: false }])
} else {
command.listPackagesToInstall([{ name: pkg, isDevDependency: false }])
}
}
2 changes: 2 additions & 0 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
* file that was distributed with this source code.
*/

export { configure } from './configure.js'
export { stubsRoot } from './stubs/main.js'
export { defineConfig } from './src/define_config.js'
24 changes: 20 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,28 @@
"engines": {
"node": ">=18.16.0"
},
"files": [
"build/commands",
"build/providers",
"build/services",
"build/src",
"build/stubs",
"build/index.d.ts",
"build/index.js",
"build/configure.d.ts",
"build/configure.js"
],
"type": "module",
"exports": {
"./schema": "./build/src/schema/main.js",
"./commands": "./build/commands/main.js",
"./factories": "./build/src/factories/main.js",
"./database": "./build/src/database/main.js",
"./orm": "./build/src/orm/main.js",
"./seeders": "./build/src/seeders/main.js",
"./services/*": "./build/services/*.js",
"./types/*": "./build/types/*.js"
"./types/*": "./build/types/*.js",
"./database_provider": "./build/providers/database_provider.js"
},
"scripts": {
"pretest": "npm run lint",
Expand All @@ -26,16 +39,18 @@
"test:docker": "npm run test:mysql && npm run test:mysql_legacy && npm run test:pg && npm run test:mssql",
"lint": "eslint . --ext=.ts",
"clean": "del-cli build",
"compile": "npm run lint && npm run clean && tsc && npm run copyfiles",
"copyfiles": "copyfiles \"templates/**/*.txt\" \"instructions.md\" build",
"compile": "npm run lint && npm run clean && tsc",
"postcompile": "npm run copy:templates && npm run index:commands",
"copy:templates": "copyfiles \"stubs/**/**/*.stub\" build",
"build": "npm run compile",
"release": "np",
"version": "npm run build",
"typecheck": "tsc --noEmit",
"sync-labels": "github-label-sync --labels ./node_modules/@adonisjs/mrm-preset/gh-labels.json adonisjs/lucid",
"format": "prettier --write .",
"prepublishOnly": "npm run build",
"test": "c8 npm run test:docker"
"test": "c8 npm run test:docker",
"index:commands": "adonis-kit index build/commands"
},
"dependencies": {
"@faker-js/faker": "^8.0.1",
Expand All @@ -53,6 +68,7 @@
"tarn": "^3.0.2"
},
"devDependencies": {
"@adonisjs/assembler": "^6.1.3-22",
"@adonisjs/core": "^6.1.5-26",
"@adonisjs/eslint-config": "^1.1.8",
"@adonisjs/prettier-config": "^1.1.8",
Expand Down
71 changes: 71 additions & 0 deletions stubs/config.stub
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
to: {{ app.configPath('database.ts') }}
---
import env from '#start/env'
import app from '@adonisjs/core/services/app'
import { defineConfig } from '@adonisjs/lucid'

const allyConfig = defineConfig({
connection: '{{ dialect }}',

connections: {
{{#if dialect === 'sqlite'}}
sqlite: {
client: 'sqlite',
connection: {
filename: app.tmpPath('db.sqlite3')
},
useNullAsDefault: true,
migrations: {
naturalSort: true,
paths: ['database/migrations'],
},
}
{{#elif dialect === 'postgres'}}
postgres: {
client: 'pg',
connection: {
host: env.get('DB_HOST'),
port: env.get('DB_PORT'),
user: env.get('DB_USER'),
password: env.get('DB_PASSWORD'),
database: env.get('DB_DATABASE'),
},
migrations: {
naturalSort: true,
paths: ['database/migrations'],
}
}
{{#elif dialect === 'mysql'}}
mysql: {
client: 'mysql2',
connection: {
host: env.get('DB_HOST'),
port: env.get('DB_PORT'),
user: env.get('DB_USER'),
password: env.get('DB_PASSWORD'),
database: env.get('DB_DATABASE'),
},
migrations: {
naturalSort: true,
paths: ['database/migrations'],
}
}
{{#elif dialect === 'mssql'}}
mssql: {
client: 'tedious',
connection: {
server: env.get('DB_HOST'),
port: env.get('DB_PORT'),
user: env.get('DB_USER'),
password: env.get('DB_PASSWORD'),
database: env.get('DB_DATABASE'),
},
migrations: {
naturalSort: true,
paths: ['database/migrations'],
}
}
{{/if}}
}
})

0 comments on commit 1417942

Please sign in to comment.