UNPKG

191 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/constants.js","../src/utils/exec.js","../src/utils/k.js","../src/utils/try-catch.js","../src/packages/fs/utils/is-js-file.js","../src/packages/freezeable/constants.js","../src/utils/is-object.js","../src/packages/freezeable/utils/freeze.js","../src/packages/freezeable/utils/is-frozen.js","../src/packages/freezeable/map/index.js","../src/packages/freezeable/set/index.js","../src/packages/fs/watcher/initialize.js","../src/packages/fs/watcher/index.js","../src/packages/fs/utils/create-resolver.js","../src/packages/fs/utils/rmrf.js","../src/packages/fs/utils/exists.js","../src/utils/chain.js","../src/packages/fs/utils/parse-path.js","../src/packages/fs/index.js","../src/packages/template/utils/insert-values.js","../src/packages/template/index.js","../src/packages/compiler/utils/handle-warning.js","../src/packages/compiler/utils/is-external.js","../src/utils/underscore.js","../src/utils/compose.js","../src/packages/compiler/utils/format-name.js","../src/packages/compiler/utils/create-manifest.js","../src/packages/compiler/utils/create-boot-script.js","../src/packages/compiler/index.js","../src/packages/cli/commands/build.js","../src/packages/cli/utils/driver-for.js","../src/packages/cli/templates/application.js","../src/packages/cli/templates/config.js","../src/packages/cli/templates/routes.js","../src/packages/cli/utils/indent.js","../src/packages/cli/templates/database.js","../src/packages/cli/templates/seed.js","../src/packages/cli/templates/package-json.js","../src/packages/cli/templates/babelrc.js","../src/packages/cli/templates/eslintrc.js","../src/packages/cli/templates/readme.js","../src/packages/cli/templates/license.js","../src/packages/cli/templates/gitignore.js","../src/packages/cli/utils/create-prompt.js","../src/packages/cli/generator/constants.js","../src/packages/database/constants.js","../src/packages/logger/constants.js","../src/utils/entries.js","../src/utils/set-type.js","../src/utils/omit.js","../src/packages/logger/writer/constants.js","../src/utils/stringify.js","../src/packages/logger/writer/utils/format-message.js","../src/packages/logger/writer/index.js","../src/packages/logger/utils/line.js","../src/packages/logger/request-logger/templates.js","../src/packages/logger/request-logger/utils/filter-params.js","../src/packages/logger/request-logger/utils/log-text.js","../src/packages/logger/request-logger/utils/log-json.js","../src/packages/logger/request-logger/index.js","../src/packages/logger/utils/sql.js","../src/packages/logger/index.js","../src/packages/database/errors/invalid-driver-error.js","../src/packages/database/errors/model-missing-error.js","../src/packages/database/errors/migrations-pending-error.js","../src/packages/server/utils/create-server-error.js","../src/packages/server/request/parser/errors/malformed-request-error.js","../src/packages/jsonapi/constants.js","../src/packages/jsonapi/errors/not-acceptable-error.js","../src/packages/jsonapi/errors/unsupported-media-type-error.js","../src/packages/jsonapi/errors/invalid-content-type-error.js","../src/packages/database/errors/unique-constraint-error.js","../src/packages/database/errors/config-missing-error.js","../src/packages/database/query/errors/record-not-found-error.js","../src/packages/database/utils/connect.js","../src/packages/database/utils/create-migrations.js","../src/packages/database/utils/pending-migrations.js","../src/packages/database/initialize.js","../src/packages/database/utils/normalize-model-name.js","../src/packages/database/migration/utils/generate-timestamp.js","../src/packages/database/migration/index.js","../src/packages/database/index.js","../src/packages/cli/templates/model.js","../src/packages/cli/templates/serializer.js","../src/packages/cli/templates/controller.js","../src/packages/cli/templates/empty-migration.js","../src/packages/cli/templates/model-migration.js","../src/packages/cli/templates/middleware.js","../src/packages/cli/templates/util.js","../src/packages/cli/generator/utils/log.js","../src/packages/cli/generator/utils/create-generator.js","../src/packages/cli/generator/utils/migration-conflict.js","../src/packages/cli/generator/utils/generate-type.js","../src/packages/cli/generator/utils/generator-for.js","../src/packages/cli/generator/index.js","../src/packages/cli/commands/generate.js","../src/packages/cli/commands/create.js","../src/utils/github.js","../src/packages/cli/constants.js","../src/packages/config/index.js","../src/utils/merge.js","../src/packages/loader/utils/format-key.js","../src/packages/loader/utils/bundle-for.js","../src/packages/loader/index.js","../src/packages/cli/commands/dbcreate.js","../src/packages/cli/commands/dbdrop.js","../src/packages/cli/commands/dbmigrate.js","../src/packages/cli/commands/dbrollback.js","../src/packages/cli/commands/dbseed.js","../src/packages/cli/commands/destroy.js","../src/packages/cli/commands/repl.js","../src/utils/range.js","../src/packages/pm/cluster/index.js","../src/packages/pm/index.js","../src/packages/cli/commands/serve.js","../src/packages/cli/commands/test.js"],"sourcesContent":["// @flow\nimport { platform } from 'os';\nimport { worker, isWorker } from 'cluster';\n\nconst { env: ENV } = process;\n\nfunction getPID(): number {\n let { pid } = process;\n\n if (isWorker && typeof worker.pid === 'number') {\n pid = worker.pid;\n }\n\n return pid;\n}\n\nexport const CWD = process.cwd();\nexport const PID = getPID();\nexport const PORT = parseInt(ENV.PORT, 10) || 4000;\nexport const NODE_ENV = ENV.NODE_ENV || 'development';\nexport const DATABASE_URL = ENV.DATABASE_URL;\nexport const LUX_CONSOLE = ENV.LUX_CONSOLE || false;\nexport const PLATFORM = platform();\nexport const CIRCLECI = ENV.CIRCLECI;\nexport const APPVEYOR = ENV.APPVEYOR;\n","// @flow\nimport { exec as nativeExec } from 'child_process';\n\n/**\n * @private\n */\nexport default function exec(cmd: string, opts?: {\n cwd?: string;\n env?: Object;\n uid?: number;\n gid?: number;\n shell?: string;\n timeout?: number;\n encoding?: string;\n maxBuffer?: number;\n killSignal?: string;\n}): Promise<[string | Buffer, string | Buffer]> {\n return new Promise((resolve, reject) => {\n nativeExec(cmd, opts, (err, stdout, stderr) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve([stdout, stderr]);\n });\n });\n}\n","// @flow\n\n/**\n * A utility function that always returns `this` based on it's current\n * context.\n *\n * A common use case for the K function is a default parameter for optional\n * callback functions or general function arguments.\n *\n * @private\n */\nexport default function K(): any {\n return this;\n}\n","// @flow\nimport K from './k';\n\n/**\n * A utility function used for wrapping async code that would otherwise need a\n * try-catch block.\n *\n * V8 deoptimizes functions when running into try-catch catch due to the\n * unpredictable nature of the code. The `tryCatch` utility function is a way\n * to \"have your cake and eat it too\". Since the inner function (`fn`) will not\n * become deoptimized by V8 for including a standard try-catch block, we don't\n * have to sacrifice as much perf for error handling expensive computations.\n *\n * The `tryCatch` utility is also very useful when you want to perform a noop\n * when an error is thrown as the catch argument (`rescue`) is optional unlike\n * a traditional try-catch block.\n *\n * @example\n * tryCatch(() => {\n * const n = Math.floor(Math.random() * 6);\n *\n * if (n >= 4) {\n * throw new Error('You lose!');\n * } else {\n * return Promise.resolve(n);\n * }\n * }, err => {\n * console.error(err);\n * }).then(luckyNumber => {\n * console.log(`Your lucky number is ${luckyNumber}.`);\n * });\n *\n * @private\n */\nexport default async function tryCatch<T, F:() => Promise<T>>(\n fn: F,\n rescue: Function = K\n): Promise<void | T> {\n let result;\n\n try {\n result = await fn();\n } catch (err) {\n result = await rescue(err);\n }\n\n return result;\n}\n\n/**\n * A syncronous implementation of the `tryCatch` utility.\n *\n * @example\n * const luckyNumber = tryCatchSync(() => {\n * const n = Math.floor(Math.random() * 6);\n *\n * if (n >= 4) {\n * throw new Error('You lose!');\n * } else {\n * return n;\n * }\n * }, err => {\n * console.error(err);\n * });\n *\n * if (luckyNumber) {\n * console.log(`Your lucky number is ${luckyNumber}.`);\n * }\n *\n * @private\n */\nexport function tryCatchSync<T, F:() => T>(\n fn: F,\n rescue: Function = K\n): void | T {\n let result;\n\n try {\n result = fn();\n } catch (err) {\n result = rescue(err);\n }\n\n return result;\n}\n","// @flow\nimport { extname } from 'path';\n\n/**\n * @private\n */\nexport default function isJSFile(target: string): boolean {\n return extname(target) === '.js';\n}\n","// @flow\nexport const FREEZER = new WeakSet();\n","// @flow\n\n/**\n * Determine wether or not a value is an Object.\n *\n * @example\n * const a = null;\n * const b = [];\n * const c = {};\n *\n * console.log(typeof a, typeof b, typeof c);\n * // => 'object', 'object', 'object' 👎\n *\n * console.log(isObject(a), isObject(b), isObject(c));\n * // => false, false, true 👍\n *\n * @private\n */\nexport default function isObject(value: mixed): boolean {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n","// @flow\nimport { FREEZER } from '../constants';\nimport insert from '../../../utils/insert';\nimport isObject from '../../../utils/is-object';\n\n/**\n * @private\n */\nexport default function freeze<T>(value: T): T {\n FREEZER.add(value);\n return value;\n}\n\n/**\n * @private\n */\nexport function freezeArray<T>(target: Array<T>): Array<T> {\n const result = insert(new Array(target.length), target);\n\n return Object.freeze(result);\n}\n\n/**\n * @private\n */\nexport function freezeValue<T: any>(value: T): T {\n if (value && typeof value.freeze === 'function') {\n return Object.freeze(value).freeze(true);\n } else if (isObject(value)) {\n return Object.freeze(value);\n }\n\n return value;\n}\n\n/**\n * @private\n */\nexport function freezeProps<T>(\n target: T,\n makePublic: boolean,\n ...props: Array<string>\n): T {\n Object.defineProperties(target, props.reduce((obj, key) => ({\n ...obj,\n [key]: {\n value: Reflect.get(target, key),\n writable: false,\n enumerable: makePublic,\n configurable: false,\n }\n }), {}));\n\n return target;\n}\n\n/**\n * @private\n */\nexport function deepFreezeProps<T>(\n target: T,\n makePublic: boolean,\n ...props: Array<string>\n): T {\n Object.defineProperties(target, props.reduce((obj, key) => {\n let value = Reflect.get(target, key);\n\n if (Array.isArray(value)) {\n value = freezeArray(value);\n } else {\n value = freezeValue(value);\n }\n\n return {\n ...obj,\n [key]: {\n value,\n writable: false,\n enumerable: makePublic,\n configurable: false,\n }\n };\n }, {}));\n\n return target;\n}\n","// @flow\nimport { FREEZER } from '../constants';\n\n/**\n * @private\n */\nexport default function isFrozen<T>(value: T): boolean {\n return FREEZER.has(value);\n}\n","// @flow\nimport freeze from '../utils/freeze';\nimport isFrozen from '../utils/is-frozen';\n\n/**\n * @private\n */\nclass FreezeableMap<K, V> extends Map<K, V> {\n set(key: K, value: V): FreezeableMap<K, V> {\n if (!this.isFrozen()) {\n super.set(key, value);\n }\n\n return this;\n }\n\n clear(): void {\n if (!this.isFrozen()) {\n super.clear();\n }\n }\n\n delete(key: K): boolean {\n return this.isFrozen() ? false : super.delete(key);\n }\n\n freeze(deep?: boolean): FreezeableMap<K, V> {\n if (deep) {\n this.forEach(Object.freeze);\n }\n\n return freeze(this);\n }\n\n isFrozen(): boolean {\n return isFrozen(this);\n }\n}\n\nexport default FreezeableMap;\n","// @flow\nimport freeze from '../utils/freeze';\nimport isFrozen from '../utils/is-frozen';\n\n/**\n * @private\n */\nclass FreezeableSet<T> extends Set<T> {\n add(value: T): FreezeableSet<T> {\n if (!this.isFrozen()) {\n super.add(value);\n }\n\n return this;\n }\n\n clear(): void {\n if (!this.isFrozen()) {\n super.clear();\n }\n }\n\n delete(value: T): boolean {\n return this.isFrozen() ? false : super.delete(value);\n }\n\n freeze(deep?: boolean): FreezeableSet<T> {\n if (deep) {\n this.forEach(Object.freeze);\n }\n\n return freeze(this);\n }\n\n isFrozen(): boolean {\n return isFrozen(this);\n }\n}\n\nexport default FreezeableSet;\n","// @flow\nimport { join as joinPath } from 'path';\nimport { watch as nativeWatch } from 'fs';\nimport type { FSWatcher } from 'fs'; // eslint-disable-line no-duplicate-imports\n\nimport { Client } from 'fb-watchman';\n\nimport exec from '../../../utils/exec';\nimport tryCatch from '../../../utils/try-catch';\nimport isJSFile from '../utils/is-js-file';\nimport { freezeProps } from '../../freezeable';\n\nimport type { Watcher$Client } from './interfaces'; // eslint-disable-line max-len, no-unused-vars\n\nimport type Watcher from './index'; // eslint-disable-line no-unused-vars\n\nconst SUBSCRIPTION_NAME = 'lux-watcher';\n\n/**\n * @private\n */\nfunction fallback(instance: Watcher, path: string): FSWatcher {\n return nativeWatch(path, {\n recursive: true\n }, (type, name) => {\n if (isJSFile(name)) {\n instance.emit('change', [{ name, type }]);\n }\n });\n}\n\n/**\n * @private\n */\nfunction setupWatchmen(instance: Watcher, path: string): Promise<Client> {\n return new Promise((resolve, reject) => {\n const client = new Client();\n\n client.capabilityCheck({}, (capabilityErr) => {\n if (capabilityErr) {\n reject(capabilityErr);\n return;\n }\n\n client.command(['watch-project', path], (watchErr, {\n watch,\n relative_path: relativePath\n } = {}) => {\n if (watchErr) {\n reject(watchErr);\n return;\n }\n\n client.command(['clock', watch], (clockErr, { clock: since }) => {\n if (clockErr) {\n reject(clockErr);\n return;\n }\n\n client.command(['subscribe', watch, SUBSCRIPTION_NAME, {\n since,\n relative_root: relativePath, // eslint-disable-line camelcase\n\n fields: [\n 'name',\n 'size',\n 'exists',\n 'type'\n ],\n\n expression: [\n 'allof', [\n 'match',\n '*.js'\n ]\n ]\n }], (subscribeErr) => {\n if (subscribeErr) {\n reject(subscribeErr);\n return;\n }\n\n client.on('subscription', ({\n files,\n subscription\n }: {\n files: Array<string>,\n subscription: string\n }): void => {\n if (subscription === SUBSCRIPTION_NAME) {\n instance.emit('change', files);\n }\n });\n\n resolve(client);\n });\n });\n });\n });\n });\n}\n\n/**\n * @private\n */\nexport default async function initialize<T: Watcher>(\n instance: T,\n path: string,\n useWatchman: boolean\n): Promise<T> {\n const appPath = joinPath(path, 'app');\n let client;\n\n if (useWatchman) {\n await tryCatch(async () => {\n await exec('which watchman');\n client = await setupWatchmen(instance, appPath);\n });\n }\n\n Object.assign(instance, {\n path: appPath,\n client: client || fallback(instance, appPath)\n });\n\n freezeProps(instance, true,\n 'path',\n 'client'\n );\n\n return instance;\n}\n","// @flow\nimport EventEmitter from 'events';\nimport type { FSWatcher } from 'fs';\n\nimport { Client } from 'fb-watchman';\n\nimport initialize from './initialize';\n\n/**\n * @private\n */\nclass Watcher extends EventEmitter {\n path: string;\n\n client: Client | FSWatcher;\n\n constructor(path: string, useWatchman: boolean = true): Promise<Watcher> {\n super();\n return initialize(this, path, useWatchman);\n }\n\n destroy() {\n const { client } = this;\n\n if (client instanceof Client) {\n client.end();\n } else {\n client.close();\n }\n }\n}\n\nexport default Watcher;\n","// @flow\n\n/**\n * @private\n */\nexport default function createResolver(\n resolve: (data: any) => void,\n reject: (err: Error) => void\n): (err: ?Error, ...args: Array<any>) => void {\n return function fsResolver(err: ?Error, ...args: Array<any>) {\n const [data] = args;\n\n if (err) {\n reject(err);\n return;\n }\n\n resolve(args.length > 1 ? args : data);\n };\n}\n","// @flow\nimport path from 'path';\n\nimport { stat, rmdir, readdir, unlink } from '../index';\n\n/**\n * @private\n */\nfunction rmrf(target: string): Promise<boolean> {\n return stat(target)\n .then(stats => {\n if (stats && stats.isDirectory()) {\n return readdir(target);\n } else if (stats && stats.isFile()) {\n return unlink(target).then(() => []);\n }\n\n return [];\n })\n .then(files => (\n Promise.all(files.map(file => rmrf(path.join(target, file))))\n ))\n .then(() => rmdir(target))\n .catch(err => {\n if (err.code === 'ENOENT') {\n return Promise.resolve();\n }\n\n return Promise.reject(err);\n })\n .then(() => true);\n}\n\nexport default rmrf;\n","// @flow\nimport { stat, readdir } from '../index';\n\n/**\n * @private\n */\nexport default async function exists(\n path: string | RegExp,\n dir?: string\n): Promise<boolean> {\n if (path instanceof RegExp) {\n const pattern = path;\n let files = [];\n\n if (dir) {\n files = await readdir(dir);\n }\n\n return files.some(file => pattern.test(file));\n }\n\n return stat(path).then(\n () => true,\n () => false\n );\n}\n","// @flow\nimport type { Chain } from '../interfaces';\n\n/**\n * @private\n */\nexport default function chain<T>(source: T): Chain<T> {\n return {\n pipe<U>(handler: (value: T) => U): Chain<U> {\n return chain(handler(source));\n },\n\n value(): T {\n return source;\n },\n\n construct<U, V: Class<U>>(constructor: V): Chain<U> {\n return chain(Reflect.construct(constructor, [source]));\n }\n };\n}\n","// @flow\nimport path from 'path';\n\nimport { CWD } from '../../../constants';\nimport chain from '../../../utils/chain';\nimport type { fs$ParsedPath } from '../index';\n\n/**\n * @private\n */\nexport default function resolvePath(\n cwd?: string = CWD,\n dir?: string = '',\n name?: string = ''\n): fs$ParsedPath {\n return chain(name.split('/'))\n .pipe(parts => path.join(cwd, dir, ...parts))\n .pipe(path.parse)\n .pipe(({ base, ...etc }) => ({\n base,\n ...etc,\n relative: path.join(etc.dir.substr(etc.dir.indexOf(dir)), base),\n absolute: path.join(etc.dir, base)\n }))\n .value();\n}\n","// @flow\nimport fs from 'fs';\nimport { basename, join as joinPath, resolve as resolvePath } from 'path';\nimport type { Stats } from 'fs'; // eslint-disable-line no-duplicate-imports\n\nimport Watcher from './watcher';\nimport createResolver from './utils/create-resolver';\nimport type { fs$readOpts, fs$writeOpts } from './interfaces';\n\nexport { default as rmrf } from './utils/rmrf';\nexport { default as exists } from './utils/exists';\nexport { default as isJSFile } from './utils/is-js-file';\nexport { default as parsePath } from './utils/parse-path';\n\nexport type { fs$ParsedPath } from './interfaces';\n\n/**\n * @private\n */\nexport function watch(path: string): Promise<Watcher> {\n return new Watcher(path);\n}\n\n/**\n * @private\n */\nexport function stat(path: string): Promise<Stats> {\n return new Promise((resolve, reject) => {\n fs.stat(path, createResolver(resolve, reject));\n });\n}\n\n/**\n * @private\n */\nexport function mkdir(path: string, mode: number = 511) {\n return new Promise((resolve, reject) => {\n fs.mkdir(path, mode, createResolver(resolve, reject));\n });\n}\n\n/**\n * @private\n */\nexport function mkdirRec(path: string, mode: number = 511): Promise<void> {\n const parent = resolvePath(path, '..');\n\n return stat(parent)\n .catch(err => {\n if (err.code === 'ENOENT') {\n return mkdirRec(parent, mode);\n }\n\n return Promise.reject(err);\n })\n .then(() => mkdir(path, mode))\n .catch(err => {\n if (err.code !== 'EEXIST') {\n return Promise.reject(err);\n }\n\n return Promise.resolve();\n });\n}\n\n/**\n * @private\n */\nexport function rmdir(path: string): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.rmdir(path, createResolver(resolve, reject));\n });\n}\n\n/**\n * @private\n */\nexport function readdir(path: string): Promise<Array<string>> {\n return new Promise((resolve, reject) => {\n fs.readdir(path, createResolver(resolve, reject));\n });\n}\n\n/**\n * @private\n */\nexport function readdirRec(\n path: string,\n opts?: fs$readOpts\n): Promise<Array<string>> {\n return readdir(path, opts)\n .then(files => Promise.all(\n files.map(file => {\n const filePath = joinPath(path, file);\n\n return Promise.all([filePath, stat(filePath)]);\n })\n ))\n .then(files => Promise.all(\n files.map(([file, stats]) => Promise.all([\n file,\n stats.isDirectory() ? readdirRec(file) : []\n ]))\n ))\n .then(files => files.reduce((arr, [file, children]) => {\n const name = basename(file);\n\n // eslint-disable-next-line no-param-reassign\n arr[arr.length] = name;\n return arr.concat(\n children.map(child => joinPath(name, basename(child)))\n );\n }, []));\n}\n\n/**\n * @private\n */\nexport function readFile(\n path: string,\n opts?: fs$readOpts\n): Promise<string | Buffer> {\n return new Promise((resolve, reject) => {\n fs.readFile(\n path,\n typeof opts === 'object' ? opts : {},\n createResolver(resolve, reject)\n );\n });\n}\n\n/**\n * @private\n */\nexport function writeFile(\n path: string,\n data: string | Buffer,\n opts?: fs$writeOpts\n): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(path, data, opts, createResolver(resolve, reject));\n });\n}\n\n/**\n * @private\n */\nexport function appendFile(\n path: string,\n data: string | Buffer,\n opts?: fs$writeOpts\n) {\n return new Promise((resolve, reject) => {\n fs.appendFile(\n path,\n data,\n typeof opts === 'object' ? opts : {},\n createResolver(resolve, reject)\n );\n });\n}\n\n/**\n * @private\n */\nexport function unlink(path: string): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.unlink(path, createResolver(resolve, reject));\n });\n}\n","// @flow\n\n/**\n * @private\n */\nexport default function insertValues(\n strings: Array<string>,\n ...values: Array<mixed>\n) {\n if (values.length) {\n return strings.reduce((result, part, idx): string => {\n let value = values[idx];\n\n if (value && typeof value.toString === 'function') {\n value = value.toString();\n } else {\n value = '';\n }\n\n return result + part + value;\n }, '');\n }\n\n return strings.join('');\n}\n","// @flow\nimport insertValues from './utils/insert-values';\n\nconst bodyPattern = /^\\n([\\s\\S]+)\\s{2}$/gm;\nconst trailingWhitespace = /\\s+$/;\n\n/**\n * @private\n */\nexport default function template(\n strings: Array<string>,\n ...values: Array<mixed>\n): string {\n const compiled = insertValues(strings, ...values);\n let [body] = compiled.match(bodyPattern) || [];\n let indentLevel = /^\\s{0,4}(.+)$/g;\n\n if (!body) {\n body = compiled;\n indentLevel = /^\\s{0,2}(.+)$/g;\n }\n\n return body.split('\\n')\n .slice(1)\n .map(line => {\n let str = line.replace(indentLevel, '$1');\n\n if (trailingWhitespace.test(str)) {\n str = str.replace(trailingWhitespace, '');\n }\n\n return str;\n })\n .join('\\n');\n}\n\nexport { default as insertValues } from './utils/insert-values';\n","// @flow\n\n/**\n * @private\n */\ntype CompilerWarning = {\n code: string;\n message: string;\n};\n\n/**\n * @private\n */\nexport default function handleWarning(warning: CompilerWarning): void {\n if (warning.code === 'UNUSED_EXTERNAL_IMPORT') {\n return;\n }\n // eslint-disable-next-line no-console\n console.warn(warning.message);\n}\n","// @flow\nimport path from 'path';\n\n/**\n * @private\n */\nexport default function isExternal(dir: string): (id: string) => boolean {\n return (id: string): boolean => !(\n id.startsWith('.')\n || id.endsWith('lux-framework')\n || id.startsWith('/') // Absolute path on Unix\n || /^[A-Z]:[\\\\/]/.test(id) // Absolute path on Windows\n || id.startsWith('app')\n || id.startsWith(path.join(dir, 'app'))\n || id.startsWith(path.join(dir, 'dist'))\n || id === 'LUX_LOCAL'\n || id === 'babelHelpers'\n || id === '\\u0000babelHelpers'\n );\n}\n","// @flow\nimport { underscore as _ } from 'inflection';\n\n/**\n * @private\n */\nexport default function underscore(\n source: string = '',\n upper: boolean = false\n): string {\n return _(source, upper).replace(/-/g, '_');\n}\n","// @flow\n\n/**\n * @private\n */\nexport function tap<T>(input: T): T {\n console.log(input); // eslint-disable-line no-console\n return input;\n}\n\n/**\n * @private\n */\nexport function compose<T, U>(\n main: (input: any) => U,\n ...etc: Array<Function>\n): (input: T) => U {\n return input => main(etc.reduceRight(\n (value, fn) => fn(value),\n input\n ));\n}\n\n/**\n * @private\n */\nexport function composeAsync<T, U>(\n main: (input: any) => Promise<U>,\n ...etc: Array<Function>\n): (input: T | Promise<T>) => Promise<U> {\n return input => etc.reduceRight(\n (value, fn) => Promise.resolve(value).then(fn),\n Promise.resolve(input)\n ).then(main);\n}\n","// @flow\nimport { posix, dirname, basename } from 'path';\n\nimport { camelize } from 'inflection';\n\nimport underscore from '../../../utils/underscore';\nimport { compose } from '../../../utils/compose';\n\nconst DOUBLE_COLON = /::/g;\n\n/**\n * @private\n */\nconst formatName: (source: string) => string = compose(\n (name: string) => name.replace(DOUBLE_COLON, '$'),\n camelize,\n underscore,\n (name: string) => posix.join(\n dirname(name),\n basename(name, '.js')\n )\n);\n\nexport default formatName;\n","// @flow\nimport { sep, posix, basename, join as joinPath } from 'path';\n\nimport { camelize, capitalize, pluralize } from 'inflection';\n\nimport { mkdir, writeFile, appendFile } from '../../fs';\nimport chain from '../../../utils/chain';\nimport tryCatch from '../../../utils/try-catch';\nimport underscore from '../../../utils/underscore';\nimport { compose } from '../../../utils/compose';\n\nimport formatName from './format-name';\n\n/**\n * @private\n */\nfunction createExportStatement(\n name: string,\n path: string,\n isDefault: boolean = true\n): string {\n const normalized = posix.join(...path.split(sep));\n\n if (isDefault) {\n return `export {\\n default as ${name}\\n} from '../${normalized}';\\n\\n`;\n }\n\n return `export {\\n ${name}\\n} from '../${normalized}';\\n\\n`;\n}\n\n/**\n * @private\n */\nfunction createWriter(file: string) {\n const writerFor = (\n type: string,\n handleWrite: void | (value: string) => Promise<void>\n ) => (value: Array<string>) => {\n const formatSymbol = compose(str => str + capitalize(type), formatName);\n\n return Promise.all(\n value.map(item => {\n if (handleWrite) {\n return handleWrite(item);\n }\n\n const path = joinPath('app', pluralize(type), item);\n const symbol = formatSymbol(item);\n\n return appendFile(file, createExportStatement(symbol, path));\n })\n );\n };\n\n return {\n controllers: writerFor('controller'),\n serializers: writerFor('serializer'),\n\n models: writerFor('model', async item => {\n const path = joinPath('app', 'models', item);\n const name = formatName(item);\n\n return appendFile(file, createExportStatement(name, path));\n }),\n\n migrations: writerFor('migration', async (item) => {\n const path = joinPath('db', 'migrate', item);\n const name = chain(item)\n .pipe(str => basename(str, '.js'))\n .pipe(underscore)\n .pipe(str => str.substr(17))\n .pipe(str => camelize(str, true))\n .value();\n\n await appendFile(file, createExportStatement(\n `up as ${name}Up`,\n path,\n false\n ));\n\n await appendFile(file, createExportStatement(\n `down as ${name}Down`,\n path,\n false\n ));\n })\n };\n}\n\n/**\n * @private\n */\nexport default async function createManifest(\n dir: string,\n assets: Map<string, Array<string> | string>,\n { useStrict }: { useStrict: boolean }\n): Promise<void> {\n const dist = joinPath(dir, 'dist');\n const file = joinPath(dist, 'index.js');\n const writer = createWriter(file);\n\n await tryCatch(() => mkdir(dist));\n await writeFile(file, useStrict ? '\\'use strict\\';\\n\\n' : '');\n\n await Promise.all(\n Array\n .from(assets)\n .map(([key, value]) => {\n const write = Reflect.get(writer, key);\n\n if (write) {\n return write(value);\n } else if (!write && typeof value === 'string') {\n return appendFile(file, createExportStatement(key, value));\n }\n\n return Promise.resolve();\n })\n );\n}\n","// @flow\nimport path from 'path';\n\nimport template from '../../template';\nimport { writeFile } from '../../fs';\n\n/**\n * @private\n */\nexport default async function createBootScript(dir: string, {\n useStrict\n}: {\n useStrict: boolean;\n}): Promise<void> {\n let data = template`\n const CWD = process.cwd();\n const { env: { PORT } } = process;\n const { Application, config, database } = require('./bundle');\n\n module.exports = new Application(\n Object.assign(config, {\n database,\n path: CWD,\n port: PORT\n })\n ).catch(err => {\n process.send({\n error: err ? err.stack : void 0,\n message: 'error'\n });\n });\n `;\n\n if (useStrict) {\n data = `'use strict';\\n\\n${data}`;\n }\n\n await writeFile(path.join(dir, 'dist', 'boot.js'), data);\n}\n","// @flow\nimport os from 'os';\nimport path, { posix } from 'path';\n\nimport lux from 'rollup-plugin-lux';\nimport json from 'rollup-plugin-json';\nimport alias from 'rollup-plugin-alias';\nimport babel from 'rollup-plugin-babel';\nimport eslint from 'rollup-plugin-eslint';\nimport resolve from 'rollup-plugin-node-resolve';\nimport { rollup } from 'rollup';\n\nimport { rmrf, readdir, readdirRec, isJSFile } from '../fs';\nimport template from '../template';\n\nimport onwarn from './utils/handle-warning';\nimport isExternal from './utils/is-external';\nimport createManifest from './utils/create-manifest';\nimport createBootScript from './utils/create-boot-script';\n\n/**\n * @private\n */\ntype CompileOptions = {\n useStrict?: boolean;\n};\n\n/**\n * @private\n */\nexport async function compile(\n dir: string,\n env: string,\n opts: CompileOptions = {}\n): Promise<void> {\n const { useStrict = false } = opts;\n const local = path.join(__dirname, '..', 'src', 'index.js');\n const entry = path.join(dir, 'dist', 'index.js');\n const external = isExternal(dir);\n let banner;\n\n const assets = await Promise.all([\n readdir(path.join(dir, 'app', 'models')),\n readdir(path.join(dir, 'db', 'migrate')),\n readdirRec(path.join(dir, 'app', 'controllers')),\n readdirRec(path.join(dir, 'app', 'serializers'))\n ]).then(types => {\n let [\n models,\n migrations,\n controllers,\n serializers\n ] = types;\n\n models = models.filter(isJSFile);\n migrations = migrations.filter(isJSFile);\n controllers = controllers.filter(isJSFile);\n serializers = serializers.filter(isJSFile);\n\n return new Map([\n ['Application', path.join('app', 'index.js')],\n ['config', path.join('config', 'environments', `${env}.js`)],\n ['controllers', controllers],\n ['database', path.join('config', 'database.js')],\n ['migrations', migrations],\n ['models', models],\n ['routes', path.join('app', 'routes.js')],\n ['seed', path.join('db', 'seed.js')],\n ['serializers', serializers]\n ]);\n });\n\n await Promise.all([\n createManifest(dir, assets, {\n useStrict\n }),\n createBootScript(dir, {\n useStrict\n })\n ]);\n\n const aliases = {\n app: posix.join('/', ...dir.split(path.sep), 'app'),\n LUX_LOCAL: posix.join('/', ...local.split(path.sep))\n };\n\n if (os.platform() === 'win32') {\n const [volume] = dir;\n const prefix = `${volume}:/`;\n\n Object.assign(aliases, {\n app: aliases.app.replace(prefix, ''),\n LUX_LOCAL: aliases.LUX_LOCAL.replace(prefix, '')\n });\n }\n\n const bundle = await rollup({\n entry,\n onwarn,\n external,\n plugins: [\n alias({\n resolve: ['.js'],\n ...aliases\n }),\n json(),\n resolve(),\n eslint({\n cwd: dir,\n parser: 'babel-eslint',\n useEslintrc: false,\n include: [\n path.join(dir, 'app', '**'),\n ],\n exclude: [\n path.join(dir, 'package.json'),\n path.join(__dirname, '..', 'src', '**')\n ]\n }),\n babel(),\n lux(path.resolve(path.sep, dir, 'app'))\n ]\n });\n\n await rmrf(entry);\n\n banner = template`\n const srcmap = require('source-map-support').install({\n environment: 'node'\n });\n `;\n\n if (useStrict) {\n banner = `'use strict';\\n\\n${banner}`;\n }\n\n return bundle.write({\n banner,\n dest: path.join(dir, 'dist', 'bundle.js'),\n format: 'cjs',\n sourceMap: true,\n useStrict: false\n });\n}\n\nexport { default as onwarn } from './utils/handle-warning';\n","import Ora from 'ora';\n\nimport { CWD, NODE_ENV } from '../../../constants';\nimport { compile } from '../../compiler';\n\nexport async function build(useStrict: boolean = false): Promise<void> {\n const spinner = new Ora({\n text: 'Building your application...',\n spinner: 'dots'\n });\n\n spinner.start();\n\n await compile(CWD, NODE_ENV, {\n useStrict\n });\n\n spinner.stop();\n}\n","const drivers = new Map([\n ['postgres', 'pg'],\n ['sqlite', 'sqlite3'],\n ['mysql', 'mysql2'],\n ['mariadb', 'mariasql'],\n ['oracle', 'oracle']\n]);\n\nexport default function driverFor(database = 'sqlite') {\n return drivers.get(database) || 'sqlite3';\n}\n","// @flow\nimport { classify } from 'inflection';\n\nimport template from '../../template';\nimport chain from '../../../utils/chain';\nimport underscore from '../../../utils/underscore';\n\n/**\n * @private\n */\nexport default (name: string): string => {\n const normalized = chain(name)\n .pipe(underscore)\n .pipe(classify)\n .value();\n\n return template`\n import { Application } from 'lux-framework';\n\n class ${normalized} extends Application {\n\n }\n\n export default ${normalized};\n `;\n};\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (name: string, env: string): string => {\n const isTestENV = env === 'test';\n const isProdENV = env === 'production';\n\n return template`\n export default {\n logging: {\n level: ${isProdENV ? '\\'INFO\\'' : '\\'DEBUG\\''},\n format: ${isProdENV ? '\\'json\\'' : '\\'text\\''},\n enabled: ${(!isTestENV).toString()},\n\n filter: {\n params: []\n }\n }\n };\n `;\n};\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n export default function routes() {\n\n }\n`;\n","// @flow\nexport default function indent(amount: number = 1): string {\n return ' '.repeat(amount);\n}\n","// @flow\nimport indent from '../utils/indent';\nimport underscore from '../../../utils/underscore';\n\n/**\n * @private\n */\nexport default (name: string, driver: string): string => {\n const schemaName = underscore(name);\n let driverName = driver;\n let template = 'export default {\\n';\n let username;\n\n if (!driverName) {\n driverName = 'sqlite3';\n }\n\n if (driverName === 'pg') {\n username = 'postgres';\n } else if (driverName !== 'pg' && driverName !== 'sqlite3') {\n username = 'root';\n }\n\n ['development', 'test', 'production'].forEach(environment => {\n template += (`${indent(2)}${environment}: {\\n`);\n\n if (driverName !== 'sqlite3') {\n template += (`${indent(4)}pool: 5,\\n`);\n }\n\n template += (`${indent(4)}driver: '${driverName}',\\n`);\n\n if (username) {\n template += (`${indent(4)}username: '${username}',\\n`);\n }\n\n switch (environment) {\n case 'development':\n template += (`${indent(4)}database: '${schemaName}_dev'\\n`);\n break;\n\n case 'test':\n template += (`${indent(4)}database: '${schemaName}_test'\\n`);\n break;\n\n case 'production':\n template += (`${indent(4)}database: '${schemaName}_prod'\\n`);\n break;\n\n default:\n template += (`${indent(4)}database: '${schemaName}_${environment}'\\n`);\n break;\n }\n\n template += (`${indent(2)}}`);\n\n if (environment !== 'production') {\n template += ',\\n\\n';\n }\n });\n\n template += '\\n};\\n';\n\n return template;\n};\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n export default async function seed() {\n\n }\n`;\n","// @flow\nimport { version, devDependencies } from '../../../../package.json';\nimport template from '../../template';\n\nconst LUX_VERSION: string = version;\nconst BABEL_PRESET_VERSION: string = devDependencies['babel-preset-lux'];\n\n/**\n * @private\n */\nexport default (name: string): string => template`\n {\n \"name\": \"${name}\",\n \"version\": \"0.0.1\",\n \"description\": \"\",\n \"scripts\": {\n \"start\": \"lux serve\",\n \"test\": \"lux test\"\n },\n \"author\": \"\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"babel-core\": \"6.17.0\",\n \"babel-preset-lux\": \"${BABEL_PRESET_VERSION}\",\n \"knex\": \"0.12.6\",\n \"lux-framework\": \"${LUX_VERSION}\"\n },\n \"engines\": {\n \"node\": \">= 6.0\"\n }\n }\n`;\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n {\n \"presets\": [\"lux\"]\n }\n`;\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n {\n \"parser\": \"babel-eslint\",\n \"extends\": \"eslint:recommended\",\n \"env\": {\n \"node\": true\n },\n \"globals\": {\n \"Map\": true,\n \"Set\": true,\n \"Proxy\": true,\n \"Promise\": true,\n \"Reflect\": true,\n \"WeakMap\": true,\n \"WeakSet\": true,\n \"Iterable\": true\n }\n }\n`;\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (name: string): string => template`\n # ${name}\n\n ## Installation\n\n * \\`git clone https://github.com/<this-repository>\\`\n * \\`cd ${name}\\`\n * \\`npm install\\`\n\n ## Running / Development\n\n * \\`lux serve\\`\n\n ## Testing\n\n * \\`lux test\\`\n\n ## Further Reading / Useful Links\n * [Lux](https://github.com/postlight/lux/)\n * [Chai](http://chaijs.com/) / [Mocha](http://mochajs.org/)\n`;\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n The MIT License (MIT)\n\n Copyright (c) 2016\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n`;\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n # See http://help.github.com/ignore-files/ for more about ignoring files.\n\n # dependencies\n /node_modules\n\n # build\n /dist\n\n # logs\n /log\n npm-debug.log\n\n # misc\n *.DS_Store\n`;\n","// @flow\nimport { createInterface } from 'readline';\n\nconst YES = /^y(es)?$/i;\n\nexport default function createPrompt() {\n const prompt = createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n prompt.setPrompt('');\n\n return {\n question(text: string): Promise<boolean> {\n return new Promise(resolve => {\n prompt.question(text, answer => {\n resolve(YES.test(answer));\n });\n });\n },\n\n close(): void {\n prompt.close();\n }\n };\n}\n","// @flow\nimport { dim } from 'chalk';\n\nimport template from '../../template';\n\n/**\n * TODO: Update the 'routes.js' file when generating a resource within a\n * namespace.\n */\nexport const NAMESPACED_RESOURCE_MESSAGE = template`\n\n 🎉 It looks like the resource you generated is within a namespace!\n\n Lux will only update your 'routes.js' file if you generate a resource at the\\\n root namespace (i.e 'lux generate resource users').\n\n In order to access the resource you have created, remember to manually update\\\n your 'routes.js' file.\n\n Example:\n\n export default function routes() {\n ${dim('// this resource will be accessible at /users')}\n this.resource('users');\n\n this.namespace('admin', function () {\n ${dim('// this resource will be accessible at /admin/users')}\n this.resource('users');\n });\n }\n\n`;\n","// @flow\nexport const UNIQUE_CONSTRAINT = /UNIQUE\\sCONSTRAINT/ig;\n\nexport const VALID_DRIVERS = [\n 'pg',\n 'sqlite3',\n 'mssql',\n 'mysql',\n 'mysql2',\n 'mariasql',\n 'strong-oracle',\n 'oracle'\n];\n\nexport const TYPE_ALIASES = new Map([\n ['enu', 'array'],\n ['enum', 'array'],\n\n ['json', 'object'],\n ['jsonb', 'object'],\n\n ['binary', 'buffer'],\n\n ['bool', 'boolean'],\n ['boolean', 'boolean'],\n\n ['time', 'date'],\n ['date', 'date'],\n ['datetime', 'date'],\n\n ['text', 'string'],\n ['uuid', 'string'],\n ['string', 'string'],\n ['varchar', 'string'],\n\n ['int', 'number'],\n ['float', 'number'],\n ['integer', 'number'],\n ['decimal', 'number'],\n ['floating', 'number'],\n ['bigInteger', 'number']\n]);\n","// @flow\nimport { FreezeableMap, FreezeableSet } from '../freezeable';\n\nimport type { Logger$level, Logger$format } from './interfaces';\n\nexport const DEBUG = 'DEBUG';\nexport const INFO = 'INFO';\nexport const WARN = 'WARN';\nexport const ERROR = 'ERROR';\n\nexport const FORMATS: FreezeableSet<Logger$format> = new FreezeableSet([\n 'text',\n 'json'\n]);\n\nFORMATS.freeze();\n\nexport const LEVELS: FreezeableMap<Logger$level, number> = new FreezeableMap([\n [DEBUG, 0],\n [INFO, 1],\n [WARN, 2],\n [ERROR, 3],\n]);\n\nLEVELS.freeze();\n","// @flow\nconst HAS_OBJECT_ENTRIES = typeof Object.entries === 'function';\n\n/**\n * @private\n */\nexport default function entries(source: Object): Array<[string, any]> {\n if (HAS_OBJECT_ENTRIES) {\n return Object.entries(source);\n }\n\n return Object.keys(source).reduce((result, key) => {\n const value = Reflect.get(source, key);\n\n result.push([key, value]);\n\n return result;\n }, []);\n}\n","// @flow\n\n/**\n * Use this util as a brute force way of tricking flow into understanding intent\n * to extend or combine a type in a polymorphic function.\n *\n * In essence, this function allows you to declare your types for a high order\n * function that wraps the inner logic of this function without flow throwing\n * any type errors. This allows you to properly set the return value of the\n * high order function to whatever you like so consumers of the high order\n * function can still benifit from type inference and safety as long as the\n * return value type declaration is 100% accurate.\n *\n * WARNING:\n * This function should rarely be used as it requires a good understanding of\n * the flow type system to ensure that the function this util wraps is still\n * type safe.\n *\n * @private\n */\nexport default function setType(fn: () => any): any {\n return fn();\n}\n","// @flow\nimport entries from './entries';\nimport setType from './set-type';\n\n/**\n * @private\n */\nexport default function omit<T: Object>(src: T, ...omitted: Array<string>): T {\n return setType(() => entries(src)\n .filter(([key]) => omitted.indexOf(key) < 0)\n .reduce((result, [key, value]: [string, mixed]) => ({\n ...result,\n [key]: value\n }), {}));\n}\n","// @flow\nimport ansiRegex from 'ansi-regex';\n\nexport const ANSI = ansiRegex();\nexport const STDOUT = /^(DEBUG|INFO)$/;\nexport const STDERR = /^(WARN|ERROR)$/;\n","// @flow\nimport isObject from './is-object';\n\n/**\n * @private\n */\nexport default function stringify(value?: ?mixed, spaces?: number) {\n if (isObject(value) || Array.isArray(value)) {\n return JSON.stringify(value, null, spaces);\n }\n\n return String(value);\n}\n","// @flow\nimport { ANSI } from '../constants';\nimport stringify from '../../../../utils/stringify';\nimport type { Logger$format } from '../../interfaces';\n\nexport default function formatMessage(data?: ?mixed, format: Logger$format) {\n if (data instanceof Error) {\n return data.stack;\n } else if (format === 'json') {\n return stringify(data).replace(ANSI, '');\n }\n\n return stringify(data, 2);\n}\n","// @flow\nimport { WriteStream } from 'tty';\n\nimport { dim, red, yellow } from 'chalk';\n\nimport { WARN, ERROR } from '../constants';\nimport omit from '../../../utils/omit';\nimport type { Logger$format } from '../interfaces';\n\nimport { STDOUT, STDERR } from './constants';\nimport formatMessage from './utils/format-message';\nimport type { Logger$Writer } from './interfaces';\n\n/**\n * @private\n */\nexport function createWriter(format: Logger$format): Logger$Writer {\n return function write(data) {\n const { level, ...etc } = data;\n let { message, timestamp } = etc;\n let output;\n\n if (format === 'json') {\n output = {};\n\n if (message && typeof message === 'object' && message.message) {\n output = {\n timestamp,\n level,\n message: message.message,\n ...omit(message, 'message')\n };\n } else {\n output = {\n timestamp,\n level,\n message,\n ...etc\n };\n }\n\n output = formatMessage(output, 'json');\n } else {\n let columns = 0;\n\n if (process.stdout instanceof WriteStream) {\n columns = process.stdout.columns;\n }\n\n message = formatMessage(message, 'text');\n\n switch (level) {\n case WARN:\n timestamp = yellow(`[${timestamp}]`);\n break;\n\n case ERROR:\n timestamp = red(`[${timestamp}]`);\n break;\n\n default:\n timestamp = dim(`[${timestamp}]`);\n break;\n }\n\n output = `${timestamp} ${message}\\n\\n${dim('-').repeat(columns)}\\n`;\n }\n\n if (STDOUT.test(level)) {\n process.stdout.write(`${output}\\n`);\n } else if (STDERR.test(level)) {\n process.stderr.write(`${output}\\n`);\n }\n };\n}\n","// @flow\nimport { insertValues } from '../../template';\n\n/**\n * @private\n */\nexport default function line(\n strings: Array<string>,\n ...values: Array<mixed>\n): string {\n return insertValues(strings, ...values)\n .replace(/(\\r\\n|\\n|\\r|)/gm, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n","// @flow\nimport { blue, cyan, magenta, yellow } from 'chalk';\n\nimport line from '../utils/line';\n\nimport type { RequestLogger$templateData } from './interfaces';\n\n/**\n * @private\n */\nfunction countDigits(num: number) {\n const digits = Math.floor(Math.log10(num) + 1);\n\n return digits > 0 && Number.isFinite(digits) ? digits : 1;\n}\n\n/**\n * @private\n */\nfunction pad(startTime: number, endTime: number, duration: number) {\n const maxLength = countDigits(endTime - startTime);\n\n return ' '.repeat(maxLength - countDigits(duration)) + duration;\n}\n\n/**\n * @private\n */\nexport const debugTemplate = ({\n path,\n stats,\n route,\n method,\n params,\n colorStr,\n startTime,\n endTime,\n statusCode,\n statusMessage,\n remoteAddress\n}: RequestLogger$templateData) => `\\\n${line`\n Processed ${cyan(`${method}`)} \"${path}\" from ${remoteAddress}\n with ${Reflect.apply(colorStr, null, [`${statusCode}`])}\n ${Reflect.apply(colorStr, null, [`${statusMessage}`])} by ${\n route\n ? `${yellow(route.controller.constructor.name)}#${blue(route.action)}`\n : null\n }\n`}\n\n${magenta('Params')}\n\n${JSON.stringify(params, null, 2)}\n\n${magenta('Stats')}\n\n${stats.map(stat => {\n const { type, duration, controller } = stat;\n let { name } = stat;\n\n name = blue(name);\n\n if (type === 'action') {\n name = `${yellow(controller)}#${name}`;\n }\n\n return `${pad(startTime, endTime, duration)} ms ${name}`;\n}).join('\\n')}\n${pad(startTime,\n endTime,\n stats.reduce((total, { duration }) => total + duration, 0))} ms Total\n${(endTime - startTime).toString()} ms Actual\\\n`;\n\n/**\n * @private\n */\nexport const infoTemplate = ({\n path,\n route,\n method,\n params,\n colorStr,\n startTime,\n endTime,\n statusCode,\n statusMessage,\n remoteAddress\n}: RequestLogger$templateData) => line`\nProcessed ${cyan(`${method}`)} \"${path}\" ${magenta('Params')} ${\n JSON.stringify(params)} from ${remoteAddress\n} in ${(endTime - startTime).toString()} ms with ${\n Reflect.apply(colorStr, null, [`${statusCode}`])\n} ${\n Reflect.apply(colorStr, null, [`${statusMessage}`])\n} by ${\n route\n ? `${yellow(route.controller.constructor.name)}#${blue(route.action)}`\n : null\n}\n`;\n","// @flow\nimport entries from '../../../../utils/entries';\n\n/**\n * @private\n */\nexport default function filterParams(\n params: Object,\n ...filtered: Array<string>\n): Object {\n return entries(params)\n .map(([key, value]) => [\n key,\n filtered.indexOf(key) >= 0 ? '[FILTERED]' : value\n ])\n .reduce((result, [key, value]) => ({\n ...result,\n [key]: value && typeof value === 'object' && !Array.isArray(value)\n ? filterParams(value, ...filtered)\n : value\n }), {});\n}\n","// @flow\nimport chalk from 'chalk';\n\nimport { DEBUG } from '../../constants';\nimport { infoTemplate, debugTemplate } from '../templates';\nimport type Logger from '../../index';\nimport type { Request, Response } from '../../../server';\n\nimport filterParams from './filter-params';\n\n/**\n * @private\n */\nexport default function logText(logger: Logger, {\n startTime,\n request: req,\n response: res\n}: {\n request: Request;\n response: Response;\n startTime: number;\n}): void {\n res.once('finish', () => {\n const endTime = Date.now();\n\n const {\n route,\n method,\n\n url: {\n path\n },\n\n connection: {\n remoteAddress\n }\n } = req;\n\n const { stats, statusMessage } = res;\n\n let { params } = req;\n let { statusCode } = res;\n let statusColor;\n\n params = filterParams(params, ...logger.filter.params);\n\n if (statusCode >= 200 && statusCode < 400) {\n statusColor = 'green';\n } else {\n statusColor = 'red';\n }\n\n let colorStr = Reflect.get(chalk, statusColor);\n\n if (typeof colorStr === 'undefined') {\n colorStr = (str: string) => str;\n }\n\n statusCode = statusCode.toString();\n\n const templateData = {\n path,\n stats,\n route,\n method,\n params,\n colorStr,\n startTime,\n endTime,\n statusCode,\n statusMessage,\n remoteAddress\n };\n\n if (logger.level === DEBUG) {\n logger.debug(debugTemplate(templateData));\n } else {\n logger.info(infoTemplate(templateData));\n }\n });\n}\n","// @flow\nimport type Logger from '../../index';\nimport type { Request, Response } from '../../../server';\n\nimport filterParams from './filter-params';\n\nconst MESSAGE = 'Processed Request';\n\n/**\n * @private\n */\nexport default function logJSON(logger: Logger, {\n request: req,\n response: res\n}: {\n request: Request;\n response: Response;\n}): void {\n res.once('finish', () => {\n const {\n method,\n headers,\n httpVersion,\n\n url: {\n path\n },\n\n connection: {\n remoteAddress\n }\n } = req;\n\n const { statusCode: status } = res;\n const userAgent = headers.get('user-agent');\n const protocol = `HTTP/${httpVersion}`;\n\n let { params } = req;\n params = filterParams(params, ...logger.filter.params);\n\n logger.info({\n message: MESSAGE,\n\n method,\n path,\n params,\n status,\n protocol,\n userAgent,\n remoteAddress\n });\n });\n}\n","// @flow\nimport type Logger from '../index';\n\nimport logText from './utils/log-text';\nimport logJSON from './utils/log-json';\nimport type { Logger$RequestLogger } from './interfaces';\n\n/**\n * @private\n */\nexport function createRequestLogger(logger: Logger): Logger$RequestLogger {\n return function request(req, res, { startTime }: { startTime: number }) {\n if (logger.format === 'json') {\n logJSON(logger, {\n startTime,\n request: req,\n response: res\n });\n } else {\n logText(logger, {\n startTime,\n request: req,\n response: res\n });\n }\n };\n}\n","// @flow\nimport { insertValues } from '../../template';\n\nconst PATTERN = /(?:,?`|'|\").+(?:`|'|\"),?/;\n\n/**\n * @private\n */\nexport default function sql(\n strings: Array<string>,\n ...values: Array<mixed>\n): string {\n return insertValues(strings, ...values)\n .split(' ')\n .map(part => {\n if (PATTERN.test(part)) {\n return part;\n }\n\n return part.toUpperCase();\n })\n .join(' ');\n}\n","// @flow\nimport { LUX_CONSOLE } from '../../constants';\nimport K from '../../utils/k';\n\nimport { LEVELS } from './constants';\nimport { createWriter } from './writer';\nimport { createRequestLogger } from './request-logger';\nimport type { Logger$RequestLogger } from './request-logger/interfaces';\nimport type {\n Logger$config,\n Logger$format,\n Logger$level,\n Logger$logFn,\n Logger$filter\n} from './interfaces';\n\n/**\n * @class Logger\n * @public\n */\nclass Logger {\n /**\n * The level your application should log (DEBUG, INFO, WARN, or ERROR).\n *\n * @property level\n * @type {String}\n * @public\n */\n level: Logger$level;\n\n /**\n * The output format of log data (text or json).\n *\n * @property format\n * @type {String}\n * @public\n */\n format: Logger$format;\n\n /**\n * Hackers love logs. It's easy to get sensitive user information from log\n * data if your server has been breached. To prevent leaking sensitive\n * information in a potential attack, blacklist certain keys that should be\n * filtered out of the logs.\n *\n * ```javascript\n * // config/environments/development.js\n * export default {\n * logging: {\n * level: 'DEBUG',\n * format: 'text',\n * enabled: true,\n * filter: {\n * params: ['password']\n * }\n * }\n * };\n * ```\n *\n * Now that we've added password to the array of parameters we want to filter\n * out of the logs, let's try to create a new user.\n *\n * ```http\n * POST /users HTTP/1.1\n * Content-Type: application/vnd.api+json\n * Host: 127.0.0.1:4000\n * Connection: close\n * User-Agent: Paw/3.0.14 (Macintosh; OS X/10.12.1) GCDHTTPRequest\n * Content-Length: 188\n *\n * {\n * \"data\": {\n * \"type\": \"users\",\n * \"attributes\": {\n * \"name\": \"Zachary Golba\",\n * \"email\": \"zachary.golba@postlight.com\",\n * \"password\": \"vcZxniFYyfnFDcLn%nhe8Vrt\"\n * }\n * }\n * }\n * ```\n *\n * The request above will yield the following log message.\n *\n * ```text\n * [2016-12-10T18:28:04.610Z] Processed POST \"/users\" from ::ffff:127.0.0.1\n * with 201 Created by UsersController#create\n *\n * Params\n *\n * {\n * \"data\": {\n * \"type\": \"users\",\n * \"attributes\": {\n * \"name\": \"Zachary Golba\",\n * \"email\": \"zachary.golba@postlight.com\",\n * \"password\": \"[FILTERED]\"\n * }\n * }\n * }\n * ```\n *\n * It worked! The password value did not leak into the log message.\n *\n * @property filter\n * @type {Object}\n * @public\n */\n filter: Logger$filter;\n\n /**\n * A boolean flag that determines whether or not the logger is enabled.\n *\n * @property enabled\n * @type {Boolean}\n * @public\n */\n enabled: boolean;\n\n /**\n * Log a message at the DEBUG level.\n *\n * ```javascript\n * logger.debug('Hello World!');\n * // => [6/4/16 5:46:53 PM] Hello World!\n * ```\n *\n * @method debug\n * @param {any} data - The data you wish to log.\n * @return {void}\n * @public\n */\n debug: Logger$logFn;\n\n /**\n * Log a message at the INFO level.\n *\n * ```javascript\n * logger.info('Hello World!');\n * // => [6/4/16 5:46:53 PM] Hello World!\n * ```\n *\n * @method info\n * @param {any} data - The data you wish to log.\n * @return {void}\n * @public\n */\n info: Logger$logFn;\n\n /**\n * Log a message at the WARN level.\n *\n * ```javascript\n * logger.warn('Good Bye World!');\n * // => [6/4/16 5:46:53 PM] Good Bye World!\n * ```\n *\n * @method warn\n * @param {any} data - The data you wish to log.\n * @return {void}\n * @public\n */\n warn: Logger$logFn;\n\n /**\n * Log a message at the ERROR level.\n *\n * ```javascript\n * logger.warn('HELP!');\n * // => [6/4/16 5:46:53 PM] HELP!\n * ```\n *\n * @method error\n * @param {any} data - The data you wish to log.\n * @return {void}\n * @public\n */\n error: Logger$logFn;\n\n /**\n * Internal method used for logging requests.\n *\n * @method request\n * @param {Request} request\n * @param {Response} response\n * @param {Object} opts - An options object.\n * @param {Number} opts.startTime - The timestamp from when the request was\n * received.\n * @return {void}\n * @private\n */\n request: Logger$RequestLogger;\n\n constructor({ level, format, filter, enabled }: Logger$config) {\n let write = K;\n let request = K;\n\n if (!LUX_CONSOLE && enabled) {\n write = createWriter(format);\n request = createRequestLogger(this);\n }\n\n Object.defineProperties(this, {\n level: {\n value: level,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n format: {\n value: format,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n filter: {\n value: filter,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n enabled: {\n value: Boolean(enabled),\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n request: {\n value: request,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n const levelNum = LEVELS.get(level) || 0;\n\n LEVELS.forEach((val, key: Logger$level) => {\n Reflect.defineProperty(this, key.toLowerCase(), {\n writable: false,\n enumerable: false,\n configurable: false,\n\n value: val >= levelNum ? (message: void | ?mixed) => {\n write({\n message,\n level: key,\n timestamp: this.getTimestamp()\n });\n } : K\n });\n });\n }\n\n /**\n * @method getTimestamp\n * @return {String} The current time as an ISO8601 string.\n * @private\n */\n getTimestamp() {\n return new Date().toISOString();\n }\n}\n\nexport default Logger;\nexport { default as line } from './utils/line';\nexport { default as sql } from './utils/sql';\n\nexport type { Logger$config } from './interfaces';\n","// @flow\nimport { green, yellow } from 'chalk';\n\nimport { VALID_DRIVERS } from '../constants';\nimport { line } from '../../logger';\n\n/**\n * @private\n */\nclass InvalidDriverError extends Error {\n constructor(driver: string) {\n super(line`\n Invalid database driver ${yellow(driver)} in ./config/database.js.\n Please use one of the following database drivers:\n ${VALID_DRIVERS.map(str => green(str)).join(', ')}.\n `);\n }\n}\n\nexport default InvalidDriverError;\n","// @flow\n\n/**\n * @private\n */\nclass ModelMissingError extends Error {\n constructor(name: string) {\n super(`Could not resolve model by name '${name}'`);\n }\n}\n\nexport default ModelMissingError;\n","// @flow\nimport { green, yellow } from 'chalk';\n\nimport { line } from '../../logger';\n\n/**\n * @private\n */\nclass MigrationsPendingError extends Error {\n constructor(migrations?: Array<string> = []) {\n const pending = migrations\n .map(str => yellow(str.substr(0, str.length - 3)))\n .join(', ');\n\n super(line`\n The following migrations are pending ${pending}.\n Please run ${green('lux db:migrate')} before starting your application.\n `);\n }\n}\n\nexport default MigrationsPendingError;\n","// @flow\nimport setType from '../../../utils/set-type';\nimport type { Server$Error } from '../interfaces';\n\n/**\n * @private\n */\nexport default function createServerError<T: any>(\n Target: Class<T>,\n statusCode: number\n): Class<T> & Class<Server$Error> {\n return setType(() => {\n const ServerError = class extends Target {\n statusCode: number;\n\n constructor(...args: Array<mixed>) {\n super(...args);\n this.statusCode = statusCode;\n }\n };\n\n Reflect.defineProperty(ServerError, 'name', {\n value: Target.name\n });\n\n return ServerError;\n });\n}\n","// @flow\nimport createServerError from '../../../utils/create-server-error';\nimport { line } from '../../../../logger';\n\n/**\n * @private\n */\nclass MalformedRequestError extends SyntaxError {\n constructor() {\n super(line`\n There was an error parsing the request body. Please make sure that the\n request body is a valid JSON API document.\n `);\n }\n}\n\nexport default createServerError(MalformedRequestError, 400);\n","// @flow\nexport const VERSION = '1.0';\nexport const MIME_TYPE = 'application/vnd.api+json';\n","// @flow\nimport { MIME_TYPE } from '../constants';\nimport { line } from '../../logger';\nimport { createServerError } from '../../server';\n\n/**\n * @private\n */\nclass NotAcceptableError extends TypeError {\n constructor(contentType: string) {\n super(line`\n Media type parameters is not supported. Try your request again\n without specifying '${contentType.replace(MIME_TYPE, '')}'.\n `);\n }\n}\n\nexport default createServerError(NotAcceptableError, 406);\n","// @flow\nimport { MIME_TYPE } from '../constants';\nimport { line } from '../../logger';\nimport { createServerError } from '../../server';\n\n/**\n * @private\n */\nclass UnsupportedMediaTypeError extends TypeError {\n constructor(contentType: string) {\n super(line`\n Media type parameters is not supported. Try your request again\n without specifying '${contentType.replace(MIME_TYPE, '')}'.\n `);\n }\n}\n\nexport default createServerError(UnsupportedMediaTypeError, 415);\n","// @flow\nimport { MIME_TYPE } from '../constants';\nimport { line } from '../../logger';\nimport { createServerError } from '../../server';\n\n/**\n * @private\n */\nclass InvalidContentTypeError extends TypeError {\n constructor(contentType?: string = 'undefined') {\n super(line`\n Content-Type: '${contentType}' is not supported. Try your request again\n with Content-Type: '${MIME_TYPE}'.\n `);\n }\n}\n\nexport default createServerError(InvalidContentTypeError, 400);\n","// @flow\nimport { createServerError } from '../../server';\n\nclass UniqueConstraintError extends Error {\n\n}\n\nexport default createServerError(UniqueConstraintError, 409);\n","// @flow\nclass ConfigMissingError extends Error {\n constructor(environment: string) {\n super(`Database config not found for environment ${environment}.`);\n }\n}\n\nexport default ConfigMissingError;\n","// @flow\nimport { createServerError } from '../../../server';\nimport stringify from '../../../../utils/stringify';\nimport typeof { Model } from '../../../database';\n\nclass RecordNotFoundError extends Error {\n constructor({ name, primaryKey }: Model, primaryKeyValue: mixed) {\n super(\n `Could not find ${name} with ${primaryKey} ${stringify(primaryKeyValue)}.`\n );\n }\n}\n\nexport default createServerError(RecordNotFoundError, 404);\n","import { join as joinPath } from 'path';\n\nimport type Knex from 'knex';\n\nimport { NODE_ENV, DATABASE_URL } from '../../../constants';\nimport { VALID_DRIVERS } from '../constants';\nimport { InvalidDriverError } from '../errors';\n\n/**\n * @private\n */\nexport default function connect(path: string, config: Object = {}): Knex {\n let { pool } = config;\n\n const {\n host,\n socket,\n driver,\n database,\n username,\n password,\n port,\n ssl,\n url\n } = config;\n\n if (VALID_DRIVERS.indexOf(driver) < 0) {\n throw new InvalidDriverError(driver);\n }\n\n if (pool && typeof pool === 'number') {\n pool = {\n min: pool > 1 ? 2 : 1,\n max: pool\n };\n }\n\n const knex: Class<Knex> = require(joinPath(path, 'node_modules', 'knex'));\n const usingSQLite = driver === 'sqlite3';\n\n const connection = DATABASE_URL || url || {\n host,\n database,\n password,\n port,\n ssl,\n user: username,\n socketPath: socket,\n filename: usingSQLite ?\n joinPath(path, 'db', `${database || 'default'}_${NODE_ENV}.sqlite`)\n : undefined\n };\n\n return knex({\n pool,\n connection,\n debug: false,\n client: driver,\n useNullAsDefault: usingSQLite\n });\n}\n","// @flow\nimport type Database from '../index';\n\n/**\n * @private\n */\nexport default async function createMigrations(\n schema: $PropertyType<Database, 'schema'>\n): Promise<boolean> {\n const hasTable: boolean = await schema().hasTable('migrations');\n\n if (!hasTable) {\n await schema().createTable('migrations', table => {\n table.string('version', 16).primary();\n });\n }\n\n return true;\n}\n","// @flow\nimport { readdir } from '../../fs';\n\n/**\n * @private\n */\nexport default async function pendingMigrations(\n appPath: string,\n table: () => Object\n): Promise<Array<string>> {\n const migrations: Array<string> = await readdir(`${appPath}/db/migrate`);\n const versions: Array<string> = await table()\n .select()\n .then(data => data.map(({ version }) => version));\n\n return migrations.filter(migration => versions.indexOf(\n migration.replace(/^(\\d{16})-.+$/g, '$1')\n ) < 0);\n}\n","// @flow\nimport { worker, isMaster } from 'cluster';\n\nimport { NODE_ENV } from '../../constants';\n\nimport { ConfigMissingError, MigrationsPendingError } from './errors';\nimport connect from './utils/connect';\nimport createMigrations from './utils/create-migrations';\nimport pendingMigrations from './utils/pending-migrations';\n\nimport type Database, { Database$opts } from './index'; // eslint-disable-line no-unused-vars, max-len\n\n/**\n * @private\n */\nexport default async function initialize<T: Database>(\n instance: T,\n opts: Database$opts\n): Promise<T> {\n const { path, models, logger, checkMigrations } = opts;\n let { config } = opts;\n\n config = Reflect.get(config, NODE_ENV);\n\n if (!config) {\n throw new ConfigMissingError(NODE_ENV);\n }\n\n const {\n debug = (NODE_ENV === 'development')\n }: {\n debug: boolean\n } = config;\n\n Object.defineProperties(instance, {\n path: {\n value: path,\n writable: false,\n enumerable: false,\n configurable: false\n },\n\n debug: {\n value: debug,\n writable: false,\n enumerable: false,\n configurable: false\n },\n\n models: {\n value: models,\n writable: false,\n enumerable: false,\n configurable: false\n },\n\n logger: {\n value: logger,\n writable: false,\n enumerable: false,\n configurable: false\n },\n\n config: {\n value: config,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n schema: {\n value: () => instance.connection.schema,\n writable: false,\n enumerable: false,\n configurable: false\n },\n\n connection: {\n value: connect(path, config),\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n if (isMaster || (worker && worker.id === 1)) {\n await createMigrations(instance.schema);\n\n if (checkMigrations) {\n const pending = await pendingMigrations(path, () => (\n instance.connection('migrations')\n ));\n\n if (pending.length) {\n throw new MigrationsPendingError(pending);\n }\n }\n }\n\n await Promise.all(\n Array\n .from(models.values())\n .map(model => (\n model.initialize(instance, () => instance.connection(model.tableName))\n ))\n );\n\n return instance;\n}\n","// @flow\nimport { dasherize, singularize } from 'inflection';\n\nimport { compose } from '../../../utils/compose';\nimport underscore from '../../../utils/underscore';\n\n/**\n * @private\n */\nexport default compose(singularize, dasherize, underscore);\n","// @flow\nfunction formatInt(int: number): string {\n return (int / 10).toString().replace('.', '').substr(0, 2);\n}\n\nexport function* padding(\n char: string,\n amount: number\n): Generator<string, void, void> {\n for (let i = 0; i < amount; i += 1) {\n yield char;\n }\n}\n\nexport default function generateTimestamp(): string {\n const now = new Date();\n const timestamp = now.toISOString()\n .substr(0, 10)\n .split('-')\n .join('')\n + formatInt(now.getHours())\n + formatInt(now.getMinutes())\n + formatInt(now.getSeconds())\n + formatInt(now.getMilliseconds());\n\n return timestamp + Array.from(padding('0', 16 - timestamp.length)).join('');\n}\n","// @flow\nimport type { Migration$Fn } from './interfaces';\n\n/**\n * @private\n */\nclass Migration<T: Object> {\n fn: Migration$Fn<T>;\n\n constructor(fn: Migration$Fn<T>) {\n this.fn = fn;\n }\n\n run(schema: T): T {\n return this.fn(schema);\n }\n}\n\nexport default Migration;\nexport { default as generateTimestamp } from './utils/generate-timestamp';\nexport type { Migration$Fn } from './interfaces';\n","// @flow\nimport type Knex from 'knex';\n\nimport type Logger from '../logger';\n\nimport { ModelMissingError } from './errors';\nimport Model from './model';\nimport initialize from './initialize';\nimport normalizeModelName from './utils/normalize-model-name';\nimport type { Database$opts } from './interfaces';\n\n/**\n * @private\n */\nclass Database {\n path: string;\n\n debug: boolean;\n\n logger: Logger;\n\n config: Object;\n\n schema: () => $PropertyType<Knex, 'schema'>;\n\n connection: Knex;\n\n models: Map<string, Class<Model>>;\n\n constructor({\n path,\n models,\n config,\n logger,\n checkMigrations\n }: Database$opts): Promise<Database> {\n return initialize(this, {\n path,\n models,\n config,\n logger,\n checkMigrations\n });\n }\n\n modelFor(type: string): Class<Model> {\n const model = this.models.get(normalizeModelName(type));\n\n if (!model) {\n throw new ModelMissingError(type);\n }\n\n return model;\n }\n}\n\nexport default Database;\nexport { default as Model } from './model';\nexport { default as Query } from './query';\nexport { default as Migration, generateTimestamp } from './migration';\nexport { default as connect } from './utils/connect';\nexport { default as typeForColumn } from './utils/type-for-column';\nexport { default as createMigrations } from './utils/create-migrations';\nexport { default as pendingMigrations } from './utils/pending-migrations';\n\nexport type { Database$opts, Database$config } from './interfaces';\n","// @flow\nimport { EOL } from 'os';\n\nimport { classify, camelize } from 'inflection';\n\nimport template from '../../template';\nimport indent from '../utils/indent';\nimport chain from '../../../utils/chain';\nimport entries from '../../../utils/entries';\nimport underscore from '../../../utils/underscore';\n\nconst VALID_ATTR = /^(\\w|-)+:(\\w|-)+$/;\nconst RELATIONSHIP = /^belongs-to|has-(one|many)$/;\n\n/**\n * @private\n */\nexport default (name: string, attrs: Array<string>) => {\n const normalized = chain(name)\n .pipe(underscore)\n .pipe(classify)\n .value();\n\n return template`\n import { Model } from 'lux-framework';\n\n class ${normalized} extends Model {\n ${entries((attrs || [])\n .filter(attr => VALID_ATTR.test(attr))\n .map(attr => attr.split(':'))\n .filter(([, type]) => RELATIONSHIP.test(type))\n .reduce((types, [related, type]) => {\n const key = chain(type)\n .pipe(underscore)\n .pipe(str => camelize(str, true))\n .value();\n\n const value = Reflect.get(types, key);\n\n if (value) {\n const inverse = camelize(normalized, true);\n const relatedKey = chain(related)\n .pipe(underscore)\n .pipe(str => camelize(str, true))\n .value();\n\n return {\n ...types,\n [key]: [\n ...value,\n `${indent(8)}${relatedKey}: {${EOL}`\n + `${indent(10)}inverse: '${inverse}'${EOL}`\n + `${indent(8)}}`\n ]\n };\n }\n\n return types;\n }, {\n hasOne: [],\n hasMany: [],\n belongsTo: []\n }))\n .filter(([, value]) => value.length)\n .reduce((result, [key, value], index) => (\n chain(result)\n .pipe(str => {\n if (index && str.length) {\n return `${str}${EOL.repeat(2)}`;\n }\n\n return str;\n })\n .pipe(str => (\n str // eslint-disable-line prefer-template\n + `${indent(index === 0 ? 2 : 6)}static ${key} = {${EOL}`\n + `${value.join(`,${EOL.repeat(2)}`)}${EOL}` // eslint-disable-line max-len, comma-spacing\n + `${indent(6)}};`\n ))\n .value()\n ), '')}\n }\n\n export default ${normalized};\n `;\n};\n","// @flow\nimport { classify, camelize, pluralize } from 'inflection';\n\nimport chain from '../../../utils/chain';\nimport entries from '../../../utils/entries';\nimport underscore from '../../../utils/underscore';\nimport template from '../../template';\nimport indent from '../utils/indent';\n\n/**\n * @private\n */\nexport default (name: string, attrs: Array<string>): string => {\n let normalized = chain(name)\n .pipe(underscore)\n .pipe(classify)\n .value();\n\n if (!normalized.endsWith('Application')) {\n normalized = pluralize(normalized);\n }\n\n const body = entries(\n attrs\n .filter(attr => /^(\\w|-)+:(\\w|-)+$/g.test(attr))\n .map(attr => attr.split(':'))\n .reduce((obj, parts) => {\n const [, type] = parts;\n let [attr] = parts;\n let {\n hasOne,\n hasMany,\n attributes\n } = obj;\n\n attr = `${indent(8)}'${camelize(underscore(attr), true)}'`;\n\n switch (type) {\n case 'belongs-to':\n case 'has-one':\n hasOne = [...hasOne, attr];\n break;\n\n case 'has-many':\n hasMany = [...hasMany, attr];\n break;\n\n default:\n attributes = [...attributes, attr];\n }\n\n return {\n attributes,\n hasOne,\n hasMany\n };\n }, {\n attributes: [],\n belongsTo: [],\n hasOne: [],\n hasMany: []\n })\n ).reduce((result, group, index) => {\n const [key] = group;\n let [, value] = group;\n let str = result;\n\n if (value.length) {\n value = value.join(',\\n');\n\n if (index && str.length) {\n str += '\\n\\n';\n }\n\n str += `${indent(index === 0 ? 2 : 6)}${key} = ` +\n `[\\n${value}\\n${indent(6)}];`;\n }\n\n return str;\n }, '');\n\n return template`\n import { Serializer } from 'lux-framework';\n\n class ${normalized}Serializer extends Serializer {\n ${body}\n }\n\n export default ${normalized}Serializer;\n `;\n};\n","// @flow\nimport { classify, camelize, pluralize } from 'inflection';\n\nimport template from '../../template';\nimport entries from '../../../utils/entries';\nimport indent from '../utils/indent';\nimport chain from '../../../utils/chain';\nimport underscore from '../../../utils/underscore';\n\n/**\n * @private\n */\nexport default (name: string, attrs: Array<string>): string => {\n let normalized = chain(name)\n .pipe(underscore)\n .pipe(classify)\n .value();\n\n if (!normalized.endsWith('Application')) {\n normalized = pluralize(normalized);\n }\n\n const body = entries(\n attrs\n .filter(attr => /^(\\w|-)+:(\\w|-)+$/g.test(attr))\n .map(attr => attr.split(':')[0])\n .reduce((obj, attr) => ({\n ...obj,\n params: [\n ...obj.params,\n `${indent(8)}'${camelize(underscore(attr), true)}'`\n ]\n }), { params: [] })\n ).reduce((result, group, index) => {\n const [key] = group;\n let [, value] = group;\n let str = result;\n\n if (value.length) {\n value = value.join(',\\n');\n\n if (index && str.length) {\n str += '\\n\\n';\n }\n\n str += `${indent(index === 0 ? 2 : 6)}${key} = ` +\n `[\\n${value}\\n${indent(6)}];`;\n }\n\n return str;\n }, '');\n\n return template`\n import { Controller } from 'lux-framework';\n\n class ${normalized}Controller extends Controller {\n ${body}\n }\n\n export default ${normalized}Controller;\n `;\n};\n","// @flow\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (): string => template`\n export function up(schema) {\n\n }\n\n export function down(schema) {\n\n }\n`;\n","// @flow\nimport { pluralize } from 'inflection';\n\nimport template from '../../template';\nimport chain from '../../../utils/chain';\nimport indent from '../utils/indent';\nimport underscore from '../../../utils/underscore';\n\n/**\n * @private\n */\nexport default (name: string, attrs: Array<string> | string): string => {\n const indices = ['id'];\n const table = chain(name)\n .pipe(str => str.substr(24))\n .pipe(underscore)\n .pipe(pluralize)\n .value();\n\n let body = '';\n\n if (Array.isArray(attrs)) {\n body = attrs\n .filter(attr => /^(\\w|-)+:(\\w|-)+$/g.test(attr))\n .map(attr => attr.split(':'))\n .filter(([, type]) => !/^has-(one|many)$/g.test(type))\n .map(attr => {\n let [column, type] = attr;\n\n column = underscore(column);\n\n if (type === 'belongs-to') {\n type = 'integer';\n column = `${column}_id`;\n\n if (Array.isArray(indices)) {\n indices.push(column);\n }\n }\n\n return [column, type];\n })\n .map((attr, index) => {\n let [column] = attr;\n const [, type] = attr;\n const shouldIndex = indices.indexOf(column) >= 0;\n\n column = `${indent(index > 0 ? 8 : 0)}table.${type}('${column}')`;\n return shouldIndex ? `${column}.index();` : `${column};`;\n })\n .join('\\n');\n }\n\n return template`\n export function up(schema) {\n return schema.createTable('${table}', table => {\n table.increments('id');\n ${body}\n table.timestamps();\n\n table.index('created_at');\n table.index('updated_at');\n });\n }\n\n export function down(schema) {\n return schema.dropTable('${table}');\n }\n `;\n};\n","// @flow\nimport { camelize } from 'inflection';\n\nimport chain from '../../../utils/chain';\nimport underscore from '../../../utils/underscore';\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (name: string): string => {\n const normalized = chain(name)\n .pipe(underscore)\n .pipe(str => camelize(str, true))\n .value();\n\n return template`\n export default function ${normalized}(/*request, response*/) {\n\n }\n `;\n};\n","// @flow\nimport { camelize } from 'inflection';\n\nimport chain from '../../../utils/chain';\nimport underscore from '../../../utils/underscore';\nimport template from '../../template';\n\n/**\n * @private\n */\nexport default (name: string): string => {\n const normalized = chain(name)\n .pipe(underscore)\n .pipe(str => camelize(str, true))\n .value();\n\n return template`\n export default function ${normalized}() {\n\n }\n `;\n};\n","// @flow\n\n/**\n * @private\n */\nexport default function log(data: string | Error): void {\n if (data instanceof Error) {\n process.stdout.write(`${data.stack || data.message}\\n`);\n } else {\n process.stderr.write(`${data}\\n`);\n }\n}\n","// @flow\nimport { join as joinPath } from 'path';\n\nimport { red, green, yellow } from 'chalk';\n\nimport { rmrf, exists, mkdirRec, writeFile, parsePath } from '../../../fs';\nimport type { Generator, Generator$template } from '../index';\n\nimport log from './log';\n\nconst FORWARD_SLASH = /\\//g;\n\n/**\n * @private\n */\nexport default function createGenerator({\n dir,\n template,\n hasConflict = exists\n}: {\n dir: string;\n template: Generator$template;\n hasConflict?: (path: string) => Promise<boolean>;\n}): Generator {\n return async ({ cwd, attrs, onConflict, ...opts }) => {\n const path = parsePath(cwd, dir, `${opts.name}.js`);\n const name = opts.name.replace(FORWARD_SLASH, '-');\n let action = green('create');\n\n await mkdirRec(path.dir);\n\n if (await hasConflict(path.absolute)) {\n const shouldContinue = await onConflict(path.relative);\n\n if (shouldContinue && typeof shouldContinue === 'string') {\n await rmrf(joinPath(path.dir, shouldContinue));\n log(`${red('remove')} ${joinPath(dir, shouldContinue)}`);\n } else if (shouldContinue && typeof shouldContinue === 'boolean') {\n action = yellow('overwrite');\n await rmrf(path.absolute);\n } else {\n log(`${yellow('skip')} ${path.relative}`);\n return;\n }\n }\n\n await writeFile(path.absolute, template(name, attrs));\n log(`${action} ${path.relative}`);\n };\n}\n","// @flow\nimport { exists, readdir, parsePath } from '../../../fs';\nimport type { Generator$opts } from '../index';\n\nexport function detectConflict(path: string): Promise<boolean> {\n const { dir, base } = parsePath(path);\n const pattern = new RegExp(`^\\\\d+-${base.substr(17)}$`);\n\n return exists(pattern, dir);\n}\n\nexport function createConflictResolver({ cwd, onConflict }: {\n cwd: $PropertyType<Generator$opts, 'cwd'>;\n onConflict: $PropertyType<Generator$opts, 'onConflict'>;\n}): $PropertyType<Generator$opts, 'onConflict'> {\n return async path => {\n if (await onConflict(path)) {\n const parsed = parsePath(cwd, path);\n const migrations = await readdir(parsed.dir);\n\n return migrations.find(\n file => file.substr(17) === parsed.base.substr(17)\n ) || false;\n }\n\n return false;\n };\n}\n","// @flow\nimport { posix, join as joinPath } from 'path';\n\nimport { green } from 'chalk';\nimport { pluralize, singularize } from 'inflection';\n\nimport { NAMESPACED_RESOURCE_MESSAGE } from '../constants';\nimport { generateTimestamp } from '../../../database';\nimport { exists, readFile, writeFile } from '../../../fs';\nimport modelTemplate from '../../templates/model';\nimport serializerTemplate from '../../templates/serializer';\nimport controllerTemplate from '../../templates/controller';\nimport emptyMigrationTemplate from '../../templates/empty-migration';\nimport modelMigrationTemplate from '../../templates/model-migration';\nimport middlewareTemplate from '../../templates/middleware';\nimport utilTemplate from '../../templates/util';\nimport chain from '../../../../utils/chain';\nimport type { Generator$opts } from '../index';\n\nimport log from './log';\nimport createGenerator from './create-generator';\nimport { createConflictResolver, detectConflict } from './migration-conflict';\n\n/**\n * @private\n */\nexport async function controller(opts: Generator$opts): Promise<void> {\n const { cwd } = opts;\n let { name } = opts;\n\n const dir = joinPath('app', 'controllers');\n const generate = createGenerator({\n dir,\n template: controllerTemplate\n });\n\n if (!name.endsWith('application')) {\n name = pluralize(name);\n }\n\n await generate({\n ...opts,\n cwd,\n name\n });\n\n const namespace = posix.dirname(name);\n\n if (namespace !== '.') {\n const hasParent = await exists(\n joinPath(cwd, dir, ...[...namespace.split('/'), 'application.js'])\n );\n\n if (!hasParent) {\n await controller({\n ...opts,\n cwd,\n name: `${namespace}/application`,\n attrs: []\n });\n }\n }\n}\n\n/**\n * @private\n */\nexport async function serializer(opts: Generator$opts): Promise<void> {\n const { cwd } = opts;\n let { name } = opts;\n\n const dir = joinPath('app', 'serializers');\n const generate = createGenerator({\n dir,\n template: serializerTemplate\n });\n\n if (!name.endsWith('application')) {\n name = pluralize(name);\n }\n\n await generate({\n ...opts,\n cwd,\n name\n });\n\n const namespace = posix.dirname(name);\n\n if (namespace !== '.') {\n const hasParent = await exists(\n joinPath(cwd, dir, ...[...namespace.split('/'), 'application.js'])\n );\n\n if (!hasParent) {\n await serializer({\n ...opts,\n cwd,\n name: `${namespace}/application`,\n attrs: []\n });\n }\n }\n}\n\n/**\n * @private\n */\nexport function migration(opts: Generator$opts) {\n const { cwd, onConflict } = opts;\n let { name } = opts;\n\n const dir = joinPath('db', 'migrate');\n const generate = createGenerator({\n dir,\n template: emptyMigrationTemplate,\n hasConflict: detectConflict\n });\n\n name = chain(name)\n .pipe(posix.basename)\n .pipe(str => `${generateTimestamp()}-${str}`)\n .value();\n\n return generate({\n ...opts,\n cwd,\n name,\n onConflict: createConflictResolver({\n cwd,\n onConflict\n })\n });\n}\n\n/**\n * @private\n */\nexport function modelMigration(opts: Generator$opts) {\n const { cwd, onConflict } = opts;\n let { name } = opts;\n\n const dir = joinPath('db', 'migrate');\n const generate = createGenerator({\n dir,\n template: modelMigrationTemplate,\n hasConflict: detectConflict\n });\n\n name = chain(name)\n .pipe(posix.basename)\n .pipe(pluralize)\n .pipe(str => `${generateTimestamp()}-create-${str}`)\n .value();\n\n return generate({\n ...opts,\n cwd,\n name,\n onConflict: createConflictResolver({\n cwd,\n onConflict\n })\n });\n}\n\n/**\n * @private\n */\nexport async function model(opts: Generator$opts): Promise<void> {\n let { name } = opts;\n const generate = createGenerator({\n dir: joinPath('app', 'models'),\n template: modelTemplate\n });\n\n await modelMigration({ name, ...opts });\n\n name = chain(name)\n .pipe(posix.basename)\n .pipe(singularize)\n .value();\n\n return generate({\n ...opts,\n name\n });\n}\n\n/**\n * @private\n */\nexport function middleware(opts: Generator$opts) {\n let { name } = opts;\n const parts = name.split('/');\n\n name = parts.pop() || name;\n\n const generate = createGenerator({\n dir: joinPath('app', 'middleware', ...parts),\n template: middlewareTemplate\n });\n\n return generate({\n ...opts,\n name\n });\n}\n\n/**\n * @private\n */\nexport function util(opts: Generator$opts) {\n let { name } = opts;\n const parts = name.split('/');\n\n name = parts.pop() || name;\n\n const generate = createGenerator({\n dir: joinPath('app', 'utils', ...parts),\n template: utilTemplate\n });\n\n return generate({\n ...opts,\n name\n });\n}\n\n/**\n * @private\n */\nexport async function resource(opts: Generator$opts) {\n await model(opts);\n await controller(opts);\n await serializer(opts);\n\n if (posix.dirname(opts.name) !== '.') {\n log(NAMESPACED_RESOURCE_MESSAGE);\n return;\n }\n\n const path = joinPath(opts.cwd, 'app', 'routes.js');\n const routes = chain(await readFile(path))\n .pipe(buf => buf.toString('utf8'))\n .pipe(str => str.split('\\n'))\n .pipe(lines => lines.reduce((result, line, index, arr) => {\n const closeIndex = arr.lastIndexOf('}');\n let str = result;\n\n if (line && index <= closeIndex) {\n str += `${line}\\n`;\n }\n\n if (index + 1 === closeIndex) {\n str += ` this.resource('${pluralize(opts.name)}');\\n`;\n }\n\n return str;\n }, ''))\n .value();\n\n await writeFile(path, routes);\n log(`${green('update')} app/routes.js`);\n}\n","// @flow\nimport type { Generator } from '../index';\n\nimport * as generators from './generate-type';\n\nexport default function generatorFor(type: string): Generator {\n const normalized = type.toLowerCase();\n const generator: void | Generator = Reflect.get(generators, normalized);\n\n if (!generator) {\n throw new Error(`Could not find a generator for '${type}'.`);\n }\n\n return generator;\n}\n","// @flow\nimport { red, green } from 'chalk';\n\nimport createPrompt from '../utils/create-prompt';\n\nimport generatorFor from './utils/generator-for';\nimport type { Generator$opts } from './interfaces';\n\n/**\n * @private\n */\nexport async function runGenerator({ cwd, type, name, attrs }: {\n cwd: $PropertyType<Generator$opts, 'cwd'>;\n type: $PropertyType<Generator$opts, 'type'>;\n name: $PropertyType<Generator$opts, 'name'>;\n attrs: $PropertyType<Generator$opts, 'attrs'>;\n}): Promise<void> {\n const generator = generatorFor(type);\n const prompt = createPrompt();\n\n await generator({\n cwd,\n type,\n name,\n attrs,\n onConflict: path => prompt.question(\n `${green('?')} ${red('Overwrite')} ${path}? (Y/n)\\r`\n )\n });\n\n prompt.close();\n}\n\nexport type {\n Generator,\n Generator$opts,\n Generator$template\n} from './interfaces';\n","// @flow\nimport { CWD } from '../../../constants';\nimport { runGenerator } from '../generator';\nimport type { Generator$opts } from '../generator'; // eslint-disable-line max-len, no-duplicate-imports\n\n/**\n * @private\n */\nexport function generate({\n cwd = CWD,\n name,\n type,\n attrs = []\n}: Generator$opts): Promise<void> {\n return runGenerator({\n cwd,\n name,\n type,\n attrs\n });\n}\n","import { EOL } from 'os';\n\nimport Ora from 'ora';\nimport { green } from 'chalk';\n\nimport { CWD } from '../../../constants';\nimport { mkdir, writeFile } from '../../fs';\nimport template from '../../template';\nimport exec from '../../../utils/exec';\nimport driverFor from '../utils/driver-for';\nimport appTemplate from '../templates/application';\nimport configTemplate from '../templates/config';\nimport routesTemplate from '../templates/routes';\nimport dbTemplate from '../templates/database';\nimport seedTemplate from '../templates/seed';\nimport pkgJSONTemplate from '../templates/package-json';\nimport babelrcTemplate from '../templates/babelrc';\nimport eslintrcTemplate from '../templates/eslintrc';\nimport readmeTemplate from '../templates/readme';\nimport licenseTemplate from '../templates/license';\nimport gitignoreTemplate from '../templates/gitignore';\n\nimport { generate } from './generate';\n\n/**\n * @private\n */\nexport async function create(name, database) {\n const driver = driverFor(database);\n const project = `${CWD}/${name}`;\n\n await mkdir(project);\n\n await Promise.all([\n mkdir(`${project}/app`),\n mkdir(`${project}/config`),\n mkdir(`${project}/db`)\n ]);\n\n await Promise.all([\n mkdir(`${project}/app/models`),\n mkdir(`${project}/app/serializers`),\n mkdir(`${project}/app/controllers`),\n mkdir(`${project}/app/middleware`),\n mkdir(`${project}/app/utils`),\n mkdir(`${project}/config/environments`),\n mkdir(`${project}/db/migrate`)\n ]);\n\n await Promise.all([\n writeFile(\n `${project}/app/index.js`,\n appTemplate(name)\n ),\n\n writeFile(\n `${project}/app/routes.js`,\n routesTemplate()\n ),\n\n writeFile(\n `${project}/config/environments/development.js`,\n configTemplate(name, 'development')\n ),\n\n writeFile(\n `${project}/config/environments/test.js`,\n configTemplate(name, 'test')\n ),\n\n writeFile(\n `${project}/config/environments/production.js`,\n configTemplate(name, 'production')\n ),\n\n writeFile(\n `${project}/config/database.js`,\n dbTemplate(name, driver)\n ),\n\n writeFile(\n `${project}/db/seed.js`,\n seedTemplate()\n ),\n\n writeFile(\n `${project}/README.md`,\n readmeTemplate(name)\n ),\n\n writeFile(\n `${project}/LICENSE`,\n licenseTemplate()\n ),\n\n writeFile(\n `${project}/package.json`,\n pkgJSONTemplate(name, database)\n ),\n\n writeFile(\n `${project}/.babelrc`,\n babelrcTemplate()\n ),\n\n writeFile(\n `${project}/.eslintrc.json`,\n eslintrcTemplate()\n ),\n\n writeFile(\n `${project}/.gitignore`,\n gitignoreTemplate()\n )\n ]);\n\n const logOutput = template`\n ${green('create')} app/index.js\n ${green('create')} app/routes.js\n ${green('create')} bin/app.js\n ${green('create')} config/environments/development.js\n ${green('create')} config/environments/test.js\n ${green('create')} config/environments/production.js\n ${green('create')} config/database.js\n ${green('create')} db/migrate\n ${green('create')} db/seed.js\n ${green('create')} README.md\n ${green('create')} LICENSE\n ${green('create')} package.json\n ${green('create')} .babelrc\n ${green('create')} .eslintrc.json\n ${green('create')} .gitignore\n `;\n\n process.stdout.write(logOutput.substr(0, logOutput.length - 1));\n process.stdout.write(EOL);\n\n await Promise.all([\n generate({\n cwd: project,\n type: 'serializer',\n name: 'application'\n }),\n\n generate({\n cwd: project,\n type: 'controller',\n name: 'application'\n })\n ]);\n\n await exec('git init && git add .', {\n cwd: project\n });\n\n process.stdout.write(`${green('initialize')} git`);\n process.stdout.write(EOL);\n\n const spinner = new Ora({\n text: 'Installing dependencies from npm...',\n spinner: 'dots'\n });\n\n spinner.start();\n\n await exec('npm install', {\n cwd: project\n });\n\n await exec(`npm install --save --save-exact ${driver}`, {\n cwd: project\n });\n\n spinner.stop();\n}\n","// @flow\nconst GITHUB_URL = 'https://github.com/postlight/lux';\n\n/**\n * @private\n */\nexport function fileLink(path: string, {\n line,\n branch = 'master'\n}: {\n line?: number;\n branch?: string;\n} = {}): string {\n let link = `${GITHUB_URL}/blob/${branch}/${path}`;\n\n if (typeof line === 'number' && line >= 0) {\n link += `#${line}`;\n }\n\n return link;\n}\n","// @flow\nimport template from '../template';\nimport { fileLink } from '../../utils/github';\n\nexport const VALID_DATABASES = [\n 'postgres',\n 'sqlite',\n 'mysql',\n 'mariadb',\n 'oracle'\n];\n\nconst DB_INTERFACE_URL = fileLink('src/packages/database/interfaces.js', {\n line: 17\n});\n\nexport const CONNECTION_STRING_MESSAGE = template`\n\n You're using a URL in your database config (config/database.js).\n\n In that case, Lux assumes you don't need to create or drop your database.\n If you'd like to create or drop a database, set up your database config\n without the url.\n\n For guidance, see:\n ${DB_INTERFACE_URL}\n`;\n","// @flow\nimport { NODE_ENV } from '../../constants';\n\nimport type { Config } from './interfaces';\n\nexport function createDefaultConfig(): Config {\n const isTestENV = NODE_ENV === 'test';\n const isProdENV = NODE_ENV === 'production';\n\n return {\n server: {\n cors: {\n enabled: false\n }\n },\n logging: {\n level: isProdENV ? 'INFO' : 'DEBUG',\n format: isProdENV ? 'json' : 'text',\n enabled: !isTestENV,\n\n filter: {\n params: []\n }\n }\n };\n}\n\nexport type { Config } from './interfaces';\n","// @flow\nimport entries from './entries';\nimport setType from './set-type';\nimport isObject from './is-object';\n\nfunction hasOwnProperty(target: Object, key: string): boolean {\n return Reflect.apply(Object.prototype.hasOwnProperty, target, [key]);\n}\n\n/**\n * @private\n */\nexport default function merge<T: Object, U: Object>(dest: T, source: U): T & U {\n return setType(() => entries(source).reduce((result, [key, value]) => {\n if (hasOwnProperty(result, key) && isObject(value)) {\n const currentValue = Reflect.get(result, key);\n\n if (isObject(currentValue)) {\n return {\n ...result,\n [key]: merge(currentValue, value)\n };\n }\n }\n\n return {\n ...result,\n [key]: value\n };\n }, {\n ...dest\n }));\n}\n","// @flow\nimport { dasherize } from 'inflection';\n\nimport chain from '../../../utils/chain';\nimport underscore from '../../../utils/underscore';\n\nconst NAMESPACE_DELIMITER = /\\$-/g;\n\n/**\n * @private\n */\nexport default function formatKey(\n key: string,\n formatter?: (source: string) => string\n) {\n return chain(key)\n .pipe(str => {\n if (formatter) {\n return formatter(str);\n }\n\n return str;\n })\n .pipe(underscore)\n .pipe(dasherize)\n .pipe(str => str.replace(NAMESPACE_DELIMITER, '/'))\n .value();\n}\n","// @flow\nimport { join as joinPath } from 'path';\n\nimport { Migration } from '../../database';\nimport { FreezeableMap } from '../../freezeable';\nimport { createDefaultConfig } from '../../config';\nimport merge from '../../../utils/merge';\nimport chain from '../../../utils/chain';\nimport entries from '../../../utils/entries';\n\nimport formatKey from './format-key';\n\nconst SUFFIX_PATTERN = /^.+(Controller|Down|Serializer|Up)/;\n\n/**\n * @private\n */\nfunction normalize(manifest: Object) {\n return entries(manifest).reduce((obj, [key, value]) => {\n if (SUFFIX_PATTERN.test(key)) {\n const suffix = key.replace(SUFFIX_PATTERN, '$1');\n const stripSuffix = source => source.replace(suffix, '');\n\n switch (suffix) {\n case 'Controller':\n obj.controllers.set(formatKey(key, stripSuffix), value);\n break;\n\n case 'Serializer':\n obj.serializers.set(formatKey(key, stripSuffix), value);\n break;\n\n case 'Up':\n case 'Down':\n obj.migrations.set(\n formatKey(key),\n Reflect.construct(Migration, [value])\n );\n break;\n\n default:\n break;\n }\n } else {\n switch (key) {\n case 'Application':\n case 'routes':\n case 'seed':\n Reflect.set(obj, formatKey(key), value);\n break;\n\n case 'config':\n Reflect.set(obj, 'config', {\n ...merge(createDefaultConfig(), {\n ...obj.config,\n ...value\n })\n });\n break;\n\n case 'database':\n Reflect.set(obj, 'config', {\n ...obj.config,\n database: value\n });\n break;\n\n default:\n obj.models.set(formatKey(key), value);\n break;\n }\n }\n\n return obj;\n }, {\n config: {},\n controllers: new FreezeableMap(),\n migrations: new FreezeableMap(),\n models: new FreezeableMap(),\n serializers: new FreezeableMap()\n });\n}\n\n/**\n * @private\n */\nexport default function bundleFor(path: string): FreezeableMap<string, any> {\n const manifest: Object = Reflect.apply(require, null, [\n joinPath(path, 'dist', 'bundle')\n ]);\n\n return chain(manifest)\n .pipe(normalize)\n .pipe(entries)\n .construct(FreezeableMap)\n .value()\n .freeze();\n}\n","// @flow\nimport bundleFor from './utils/bundle-for';\nimport type { Loader } from './interfaces';\n\n/**\n * @private\n */\nexport function createLoader(path: string): Loader {\n let bundle;\n\n return function load(type) {\n if (!bundle) {\n bundle = bundleFor(path);\n }\n\n return bundle.get(type);\n };\n}\n\nexport { build } from './builder';\nexport { closestAncestor, closestChild } from './resolver';\n\nexport type {\n Loader,\n Bundle$Namespace,\n Bundle$NamespaceGroup\n} from './interfaces';\n","import { EOL } from 'os';\n\nimport { CWD, NODE_ENV, DATABASE_URL } from '../../../constants';\nimport { CONNECTION_STRING_MESSAGE } from '../constants';\nimport { connect } from '../../database';\nimport { writeFile } from '../../fs';\nimport { createLoader } from '../../loader';\n\n/**\n * @private\n */\nexport async function dbcreate() {\n const load = createLoader(CWD);\n let cfg = load('config');\n\n cfg = Reflect.get(cfg.database, NODE_ENV);\n\n const {\n url,\n driver,\n database,\n ...config\n } = cfg;\n\n if (driver === 'sqlite3') {\n await writeFile(`${CWD}/db/${database}_${NODE_ENV}.sqlite`, '');\n } else {\n if (DATABASE_URL || url) {\n process.stderr.write(CONNECTION_STRING_MESSAGE);\n process.stderr.write(EOL);\n return;\n }\n\n const { schema } = connect(CWD, { ...config, driver });\n const query = schema.raw(`CREATE DATABASE ${database}`);\n\n query.on('query', () => {\n process.stdout.write(query.toString());\n process.stdout.write(EOL);\n });\n\n await query;\n }\n}\n","import { EOL } from 'os';\n\nimport { CWD, NODE_ENV, DATABASE_URL } from '../../../constants';\nimport { CONNECTION_STRING_MESSAGE } from '../constants';\nimport { rmrf } from '../../fs';\nimport { connect } from '../../database';\nimport { createLoader } from '../../loader';\n\n/**\n * @private\n */\nexport async function dbdrop() {\n const load = createLoader(CWD);\n let cfg = load('config');\n\n cfg = Reflect.get(cfg.database, NODE_ENV);\n\n const {\n url,\n driver,\n database,\n ...config\n } = cfg;\n\n if (driver === 'sqlite3') {\n await rmrf(`${CWD}/db/${database}_${NODE_ENV}.sqlite`);\n } else {\n if (DATABASE_URL || url) {\n process.stderr.write(CONNECTION_STRING_MESSAGE);\n process.stderr.write(EOL);\n return;\n }\n\n const { schema } = connect(CWD, { ...config, driver });\n const query = schema.raw(`DROP DATABASE IF EXISTS ${database}`);\n\n query.on('query', () => {\n process.stdout.write(query.toString());\n process.stdout.write(EOL);\n });\n\n await query;\n }\n}\n","import { EOL } from 'os';\n\nimport { CWD } from '../../../constants';\nimport Database, { pendingMigrations } from '../../database';\nimport Logger, { sql } from '../../logger';\nimport { createLoader } from '../../loader';\nimport { composeAsync } from '../../../utils/compose';\n\n/**\n * @private\n */\nexport async function dbmigrate() {\n const load = createLoader(CWD);\n\n const { database: config } = load('config');\n const models = load('models');\n const migrations = load('migrations');\n\n const { connection, schema } = await new Database({\n config,\n models,\n path: CWD,\n checkMigrations: false,\n\n logger: new Logger({\n enabled: false\n })\n });\n\n const pending = await pendingMigrations(CWD, () => connection('migrations'));\n\n if (pending.length) {\n const runners = pending\n .map(name => {\n const version = name.replace(/^(\\d{16})-.+$/g, '$1');\n const key = name.replace(new RegExp(`${version}-(.+)\\\\.js`), '$1');\n\n return [version, migrations.get(`${key}-up`)];\n })\n .filter(([, migration]) => Boolean(migration))\n .reverse()\n .map(([version, migration]) => () => {\n const query = migration.run(schema());\n\n return query\n .on('query', () => {\n process.stdout.write(sql`${query.toString()}`);\n process.stdout.write(EOL);\n })\n .then(() => (\n connection('migrations').insert({\n version\n })\n ));\n });\n\n await composeAsync(...runners)();\n }\n\n return true;\n}\n","import { EOL } from 'os';\n\nimport { CWD } from '../../../constants';\nimport Database from '../../database';\nimport Logger, { sql } from '../../logger';\nimport { readdir } from '../../fs';\nimport { createLoader } from '../../loader';\n\n/**\n * @private\n */\nexport async function dbrollback() {\n const load = createLoader(CWD);\n\n const { database: config } = load('config');\n const models = load('models');\n const migrations = load('migrations');\n\n const { connection, schema } = await new Database({\n config,\n models,\n path: CWD,\n checkMigrations: false,\n\n logger: new Logger({\n enabled: false\n })\n });\n\n const migrationFiles = await readdir(`${CWD}/db/migrate`);\n\n if (migrationFiles.length) {\n let migration;\n let version = await connection('migrations')\n .orderBy('version', 'desc')\n .first();\n\n if (version && version.version) {\n version = version.version;\n }\n\n const target = migrationFiles.find(m => m.indexOf(version) === 0);\n\n if (target) {\n migration = target.replace(new RegExp(`${version}-(.+)\\\\.js`), '$1');\n migration = migrations.get(`${migration}-down`);\n\n if (migration) {\n const query = migration.run(schema());\n\n await query.on('query', () => {\n process.stdout.write(sql`${query.toString()}`);\n process.stdout.write(EOL);\n });\n\n await connection('migrations').where({\n version\n }).del();\n }\n }\n }\n}\n","import { CWD } from '../../../constants';\nimport Logger from '../../logger';\nimport Database from '../../database';\nimport { createLoader } from '../../loader';\n\n/**\n * @private\n */\nexport function dbseed() {\n const load = createLoader(CWD);\n const { database: config } = load('config');\n const seed = load('seed');\n const models = load('models');\n\n return new Database({\n config,\n models,\n path: CWD,\n logger: new Logger({\n enabled: false\n })\n }).then(store => (\n store.connection.transaction(seed)\n ));\n}\n","import { EOL } from 'os';\n\nimport { red, green } from 'chalk';\nimport { pluralize, singularize } from 'inflection';\n\nimport { CWD } from '../../../constants';\nimport { rmrf, exists, readdir, readFile, writeFile } from '../../fs';\n\n/**\n * @private\n */\nexport async function destroyType(type, name) {\n const normalizedType = type.toLowerCase();\n let normalizedName = name;\n let path;\n let migrations;\n\n switch (normalizedType) {\n case 'model':\n normalizedName = singularize(normalizedName);\n path = `app/${pluralize(normalizedType)}/${normalizedName}.js`;\n break;\n\n case 'migration':\n migrations = await readdir(`${CWD}/db/migrate`);\n\n normalizedName = migrations.find(\n file => `${normalizedName}.js` === file.substr(17)\n );\n\n path = `db/migrate/${normalizedName}`;\n break;\n\n case 'controller':\n case 'serializer':\n normalizedName = pluralize(normalizedName);\n path = `app/${pluralize(normalizedType)}/${normalizedName}.js`;\n break;\n\n case 'middleware':\n path = `app/${normalizedType}/${normalizedName}.js`;\n break;\n\n case 'util':\n path = `app/${pluralize(normalizedType)}/${normalizedName}.js`;\n break;\n\n default:\n return;\n }\n\n if (await exists(`${CWD}/${path}`)) {\n await rmrf(`${CWD}/${path}`);\n\n process.stdout.write(`${red('remove')} ${path}`);\n process.stdout.write(EOL);\n }\n}\n\n/**\n * @private\n */\nexport async function destroy({ type, name }: {\n type: string;\n name: string;\n}) {\n if (type === 'resource') {\n const routes = (await readFile(`${CWD}/app/routes.js`))\n .toString('utf8')\n .split('\\n')\n .reduce((lines, line) => {\n const pattern = new RegExp(\n `\\\\s*this.resource\\\\(('|\"|\\`)${pluralize(name)}('|\"|\\`)\\\\);?`\n );\n\n return pattern.test(line) ? lines : [...lines, line];\n }, '')\n .join('\\n');\n\n await Promise.all([\n destroyType('model', name),\n destroyType('migration', `create-${pluralize(name)}`),\n destroyType('serializer', name),\n destroyType('controller', name)\n ]);\n\n await writeFile(`${CWD}/app/routes.js`, routes);\n\n process.stdout.write(`${green('update')} app/routes.js`);\n process.stdout.write(EOL);\n } else if (type === 'model') {\n await Promise.all([\n destroyType(type, name),\n destroyType('migration', `create-${pluralize(name)}`)\n ]);\n } else {\n await destroyType(type, name);\n }\n}\n","// @flow\nimport path from 'path';\nimport { start as startRepl } from 'repl';\n\nimport { CWD } from '../../../constants';\nimport type Application from '../../application';\n\nexport function repl(): Promise<void> {\n return new Promise(async (resolve) => {\n const app: Application = await Reflect.apply(require, null, [\n path.join(CWD, 'dist', 'boot')\n ]);\n\n const instance = startRepl({\n prompt: '> '\n });\n\n instance.once('exit', resolve);\n\n Object.assign(instance.context, {\n app,\n logger: app.logger,\n routes: app.router,\n [app.constructor.name]: app,\n\n ...Array\n .from(app.models)\n .reduce((context, [, model]) => ({\n ...context,\n [model.name]: model\n }), {}),\n\n ...Array\n .from(app.controllers)\n .reduce((context, [, controller]) => ({\n ...context,\n [controller.constructor.name]: controller\n }), {}),\n\n ...Array\n .from(app.serializers)\n .reduce((context, [, serializer]) => ({\n ...context,\n [serializer.constructor.name]: serializer\n }), {})\n });\n });\n}\n","// @flow\n\n/**\n * @private\n */\nexport default function* range(\n start: number,\n end: number\n): Generator<number, void, void> {\n for (let i = start; i <= end; i += 1) {\n yield i;\n }\n}\n","// @flow\nimport EventEmitter from 'events';\nimport os from 'os';\nimport cluster from 'cluster';\nimport { join as joinPath } from 'path';\nimport type { Worker } from 'cluster'; // eslint-disable-line max-len, no-duplicate-imports\n\nimport { red, green } from 'chalk';\n\nimport { NODE_ENV } from '../../../constants';\nimport { line } from '../../logger';\nimport omit from '../../../utils/omit';\nimport range from '../../../utils/range';\nimport { composeAsync } from '../../../utils/compose';\nimport type Logger from '../../logger'; // eslint-disable-line max-len, no-duplicate-imports\n\nimport type { Cluster$opts } from './interfaces';\n\n/**\n * @private\n */\nclass Cluster extends EventEmitter {\n path: string;\n\n port: number;\n\n logger: Logger;\n\n workers: Set<Worker>;\n\n maxWorkers: number;\n\n constructor({ path, port, logger, maxWorkers }: Cluster$opts) {\n super();\n\n Object.defineProperties(this, {\n path: {\n value: path,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n port: {\n value: port,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n logger: {\n value: logger,\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n workers: {\n value: new Set(),\n writable: false,\n enumerable: true,\n configurable: false\n },\n\n maxWorkers: {\n value: maxWorkers || os.cpus().length,\n writable: false,\n enumerable: true,\n configurable: false\n }\n });\n\n cluster.setupMaster({\n exec: joinPath(path, 'dist', 'boot.js')\n });\n\n process.on('update', (changed) => {\n changed.forEach(({ name: filename }) => {\n logger.info(`${green('update')} ${filename}`);\n });\n\n this.reload();\n });\n\n this.forkAll().then(() => this.emit('ready'));\n }\n\n fork(retry: boolean = true) {\n return new Promise(resolve => {\n if (this.workers.size < this.maxWorkers) {\n const worker = cluster.fork({\n NODE_ENV,\n PORT: this.port\n });\n\n const timeout = setTimeout(() => {\n this.logger.info(line`\n Removing worker process: ${red(`${worker.process.pid}`)}\n `);\n\n clearTimeout(timeout);\n\n worker.removeAllListeners();\n worker.kill();\n\n this.workers.delete(worker);\n\n resolve(worker);\n\n if (retry) {\n this.fork(false);\n }\n }, 30000);\n\n const handleError = (err?: string) => {\n if (err) {\n this.logger.error(err);\n }\n\n this.logger.info(line`\n Removing worker process: ${red(`${worker.process.pid}`)}\n `);\n\n clearTimeout(timeout);\n\n worker.removeAllListeners();\n worker.kill();\n\n this.workers.delete(worker);\n\n resolve(worker);\n };\n\n worker.on('message', (msg: string | Object) => {\n let data = {};\n let message = msg;\n\n if (typeof message === 'object') {\n data = omit(message, 'message');\n message = message.message;\n }\n\n switch (message) {\n case 'ready':\n this.logger.info(line`\n Adding worker process: ${green(`${worker.process.pid}`)}\n `);\n\n this.workers.add(worker);\n\n clearTimeout(timeout);\n worker.removeListener('error', handleError);\n\n resolve(worker);\n break;\n\n case 'error':\n handleError(data.error);\n break;\n\n default:\n break;\n }\n });\n\n worker.once('error', handleError);\n worker.once('exit', (code: ?number) => {\n const { process: { pid } } = worker;\n\n if (typeof code === 'number') {\n this.logger.info(line`\n Worker process: ${red(`${pid}`)} exited with code ${code}\n `);\n }\n\n this.logger.info(`Removing worker process: ${red(`${pid}`)}`);\n\n clearTimeout(timeout);\n\n worker.removeAllListeners();\n this.workers.delete(worker);\n\n this.fork();\n });\n }\n });\n }\n\n shutdown<T: Worker>(worker: T): Promise<T> {\n return new Promise(resolve => {\n this.workers.delete(worker);\n\n worker.send('shutdown');\n worker.disconnect();\n\n const timeout = setTimeout(() => worker.kill(), 5000);\n\n worker.once('exit', () => {\n resolve(worker);\n clearTimeout(timeout);\n });\n });\n }\n\n reload() {\n if (this.workers.size) {\n const groups = Array\n .from(this.workers)\n .reduce((arr, item, idx, src) => {\n if ((idx + 1) % 2) {\n const group = src.slice(idx, idx + 2);\n\n return [\n ...arr,\n () => Promise.all(group.map(worker => this.shutdown(worker)))\n ];\n }\n\n return arr;\n }, []);\n\n return composeAsync(...groups)();\n }\n\n return this.fork();\n }\n\n forkAll() {\n return Promise.race(\n Array.from(range(1, this.maxWorkers)).map(() => this.fork())\n );\n }\n}\n\nexport default Cluster;\n\nexport type { Cluster$opts } from './interfaces';\n","// @flow\nimport Cluster from './cluster';\nimport type { Cluster$opts } from './cluster'; // eslint-disable-line max-len, no-duplicate-imports\n\n/**\n * @private\n */\nexport function createCluster({\n path,\n port,\n logger,\n maxWorkers\n}: Cluster$opts) {\n return new Cluster({\n path,\n port,\n logger,\n maxWorkers\n });\n}\n","// @flow\nimport { cyan } from 'chalk';\n\nimport { CWD, PORT, NODE_ENV } from '../../../constants';\nimport Logger from '../../logger';\nimport { createLoader } from '../../loader';\nimport { createCluster } from '../../pm';\nimport { watch } from '../../fs';\n\nimport { build } from './build';\n\n/**\n * @private\n */\nexport async function serve({\n hot = (NODE_ENV === 'development'),\n cluster = false,\n useStrict = false\n}: {\n hot: boolean;\n cluster: boolean;\n useStrict: boolean;\n}): Promise<void> {\n const load = createLoader(CWD);\n const { logging } = load('config');\n const logger = new Logger(logging);\n\n if (hot) {\n const watcher = await watch(CWD);\n\n watcher.on('change', async (changed) => {\n await build(useStrict);\n process.emit('update', changed);\n });\n }\n\n createCluster({\n logger,\n path: CWD,\n port: PORT,\n maxWorkers: cluster ? undefined : 1\n }).once('ready', () => {\n logger.info(`Lux Server listening on port: ${cyan(`${PORT}`)}`);\n });\n}\n","// @flow\nimport { EOL } from 'os';\n\n/**\n * @private\n */\nexport function test(): Promise<void> {\n process.stdout.write('Coming Soon!');\n process.stdout.write(EOL);\n\n return Promise.resolve();\n}\n"],"names":["env","ENV","process","pid","isWorker","worker","cwd","getPID","parseInt","PORT","NODE_ENV","DATABASE_URL","LUX_CONSOLE","platform","cmd","opts","resolve","reject","nativeExec","err","stdout","stderr","fn","rescue","K","result","target","value","Array","isArray","FREEZER","add","makePublic","props","Object","defineProperties","reduce","obj","key","Reflect","get","writable","enumerable","configurable","has","set","isFrozen","clear","delete","freeze","deep","forEach","instance","path","recursive","type","name","isJSFile","emit","client","capabilityCheck","capabilityErr","command","watchErr","watch","relative_path","relativePath","clockErr","clock","since","SUBSCRIPTION_NAME","relative_root","fields","expression","subscribeErr","on","files","subscription","useWatchman","joinPath","appPath","assign","fallback","freezeProps","constructor","destroy","end","close","args","data","length","then","stats","isDirectory","isFile","Promise","all","map","file","rmrf","join","rmdir","catch","code","dir","some","test","source","pipe","handler","construct","CWD","split","parts","parse","base","etc","relative","substr","indexOf","absolute","fs","stat","createResolver","mode","mkdir","resolvePath","parent","readdir","filePath","readdirRec","arr","children","basename","concat","child","readFile","writeFile","appendFile","unlink","strings","values","part","idx","toString","insertValues","body","compiled","match","bodyPattern","indentLevel","slice","line","replace","trailingWhitespace","str","warning","console","warn","message","id","startsWith","endsWith","upper","main","reduceRight","input","compose","DOUBLE_COLON","camelize","underscore","posix","dirname","isDefault","sep","normalized","handleWrite","capitalize","formatName","item","pluralize","formatSymbol","createExportStatement","symbol","controllers","writerFor","serializers","models","migrations","chain","assets","useStrict","dist","createWriter","from","writer","write","template","__dirname","isExternal","types","filter","createManifest","createBootScript","app","LUX_LOCAL","local","os","volume","aliases","prefix","entry","onwarn","external","plugins","alias","json","eslint","parser","useEslintrc","include","exclude","babel","lux","banner","dest","format","sourceMap","text","spinner","start","stop","database","classify","isProdENV","isTestENV","amount","repeat","driver","driverName","username","environment","indent","schemaName","version","devDependencies","BABEL_PRESET_VERSION","LUX_VERSION","createInterface","stdin","output","prompt","setPrompt","question","answer","YES","dim","FORMATS","DEBUG","INFO","WARN","ERROR","LEVELS","entries","HAS_OBJECT_ENTRIES","keys","push","src","omitted","ansiRegex","spaces","isObject","stringify","stack","ANSI","level","timestamp","omit","formatMessage","columns","yellow","red","STDOUT","STDERR","trim","num","Math","floor","log10","Number","isFinite","digits","startTime","endTime","duration","countDigits","maxLength","route","method","params","colorStr","statusCode","statusMessage","remoteAddress","cyan","apply","controller","blue","action","magenta","JSON","pad","total","filtered","filterParams","logger","request","req","response","res","once","Date","now","url","connection","statusColor","chalk","debug","debugTemplate","templateData","info","infoTemplate","headers","httpVersion","status","MESSAGE","protocol","userAgent","logJSON","logText","PATTERN","toUpperCase","enabled","createRequestLogger","Boolean","val","defineProperty","toLowerCase","levelNum","getTimestamp","toISOString","VALID_DRIVERS","green","pending","Target","ServerError","MalformedRequestError","contentType","MIME_TYPE","NotAcceptableError","UnsupportedMediaTypeError","InvalidContentTypeError","UniqueConstraintError","primaryKey","primaryKeyValue","RecordNotFoundError","config","pool","host","socket","password","port","ssl","min","max","require","user","socketPath","filename","usingSQLite","undefined","useNullAsDefault","schema","hasTable","createTable","table","string","primary","select","migration","checkMigrations","connect","isMaster","initialize","model","tableName","singularize","dasherize","int","padding","char","i","formatInt","getHours","getMinutes","getSeconds","getMilliseconds","run","modelFor","normalizeModelName","attrs","attr","VALID_ATTR","RELATIONSHIP","related","relatedKey","EOL","inverse","hasOne","hasMany","belongsTo","index","attributes","group","column","indices","hasConflict","exists","onConflict","parsePath","FORWARD_SLASH","shouldContinue","log","pattern","parsed","find","createGenerator","controllerTemplate","namespace","hasParent","serializerTemplate","emptyMigrationTemplate","detectConflict","generateTimestamp","createConflictResolver","modelMigrationTemplate","modelTemplate","pop","middlewareTemplate","utilTemplate","NAMESPACED_RESOURCE_MESSAGE","lastIndexOf","closeIndex","routes","generators","generator","generatorFor","createPrompt","driverFor","project","appTemplate","routesTemplate","configTemplate","dbTemplate","seedTemplate","readmeTemplate","licenseTemplate","pkgJSONTemplate","babelrcTemplate","eslintrcTemplate","gitignoreTemplate","logOutput","generate","branch","GITHUB_URL","link","fileLink","DB_INTERFACE_URL","server","cors","logging","prototype","hasOwnProperty","currentValue","merge","formatter","NAMESPACE_DELIMITER","manifest","SUFFIX_PATTERN","suffix","formatKey","stripSuffix","Migration","createDefaultConfig","normalize","FreezeableMap","bundle","bundleFor","createLoader","load","cfg","CONNECTION_STRING_MESSAGE","raw","query","reverse","sql","insert","runners","migrationFiles","orderBy","first","where","del","store","transaction","seed","normalizedType","normalizedName","lines","destroyType","startRepl","context","router","serializer","range","maxWorkers","workers","cpus","cluster","setupMaster","exec","changed","reload","forkAll","fork","retry","size","setTimeout","clearTimeout","timeout","removeAllListeners","kill","error","msg","removeListener","handleError","shutdown","send","disconnect","groups","race","hot","watcher","createCluster"],"mappings":"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"}
\No newline at end of file