Socket
Socket
Sign inDemoInstall

feathers-knex-modeler

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

feathers-knex-modeler - npm Package Compare versions

Comparing version 1.4.6 to 1.5.0

2

package.json
{
"name": "feathers-knex-modeler",
"version": "1.4.6",
"version": "1.5.0",
"description": "This package allows you to easily extend a table while you are developing it without requiring you to drop tables.",

@@ -5,0 +5,0 @@ "main": "src/index.js",

@@ -22,5 +22,7 @@ # Feathers Knex modeler

name: tableName,
depends: [],
depends: ['organizations'],
columns: [
{ name: 'id', type: 'increments' },
{ name:'organization_id',type:'integer',options:[{ type: 'references', argument: 'organizations.id' }]} ,
{ name: 'value', type: 'integer', options: [{ type: 'notNullable' }] },
{ name: 'name', type: 'text', options: [{ type: 'notNullable' }] },

@@ -27,0 +29,0 @@ { name: 'schema_type', type: 'text', options: [{ type: 'notNullable' }] },

@@ -11,15 +11,32 @@ /* eslint-disable no-console */

constructor (options) {
_.defaultsDeep(options, { name: '', depends: [], columns: [], db: {}, retries: MAX_RETRIES })
_.defaults(options, { name: '', depends: [], columns: [], db: {}, retries: MAX_RETRIES })
super(options)
const self = this
Object.defineProperty(self, '_', { enumerable: false, value: {} })
Object.defineProperty(self._, 'depends', { enumerable: false, value: options.depends })
Object.defineProperty(self._, 'columns', { enumerable: false, value: options.columns })
Object.defineProperty(self._, 'name', { enumerable: false, value: options.name })
Object.defineProperty(self._, 'db', { enumerable: false, value: options.db })
Object.defineProperty(self._, 'default', { enumerable: false, value: options.default })
Object.defineProperty(self._, 'retries', { enumerable: false, value: options.retries })
const tableName = _.get(self, '_.name')
self.debug = debug(`feathers-knex-modeler:${tableName}`)
self.debug(`Finished construction of model for table: ${tableName}`)
_.set(self, '_.depends', _.defaultTo(_.get(options, 'depends'), []))
_.set(self, '_.columns', _.defaultTo(_.get(options, 'columns'), []))
_.set(self, '_.name', _.defaultTo(_.get(options, 'name'), ''))
_.set(self, '_.db', _.defaultTo(_.get(options, 'db'), false))
_.set(self, '_.default', _.defaultTo(_.get(options, 'default'), ''))
_.set(self, '_.retries', _.defaultTo(_.get(options, 'retries'), 5))
if (self._.name === '') {
throw new Error('No table name was provided.')
}
if (self._.columns.length === 0) {
throw new Error('No table columns present')
}
if (_.isArray(self._.columns) === false) {
throw new Error(`Expected columns to be an array. ${self._.columns}`)
}
_.forEach(self._.columns, (column) => {
column.type = _.toLower(column.type)
if (column.type === 'int') {
column.type = 'integer'
}
return column
})
self.debug = debug(`feathers-knex-modeler:${self._.name}`)
self.debug(`Finished construction of model for table: ${self._.name}`)
}

@@ -51,8 +68,7 @@

const tableName = self.name
const errors = []
try {
self.debug(`Starting initialization of model for table: ${tableName}`)
let encounteredErrors = false
let errors
try {
self.emit({ source: 'initialization', type: 'database', value: { message: `Initializing database: ${self.name}. Waiting on dbs: ${self.depends.join(', ')}` } })
self.emit('init', { source: 'initialization', type: 'database', value: { message: `Initializing database: ${self.name}. Waiting on dbs: ${self.depends.join(', ')}` } })
self.debug(`Waiting for dependent tables for table: ${tableName}`)

@@ -65,9 +81,8 @@ await self.waitForTables()

} catch (err) {
errors = err
encounteredErrors = true
self.emit({ source: 'initialization', type: 'error', value: err })
errors.push(err)
self.emit('initialization', { source: 'initialization', message: `Encountered error during the initalization process. Table: ${tableName}. ${err || ''}`, error: err })
}
if (encounteredErrors === true) {
self.debug(`Failed initialization of model for table: ${tableName}`)
throw new Error(errors)
if (errors.length > 0) {
self.debug(`Failed initialization of model for table: ${tableName}. ${errors || ''}`)
throw new Error(`Failed initialization of model for table: ${tableName}. ${errors || ''}`)
} else {

@@ -77,3 +92,3 @@ self.debug(`Finished initialization of model for table: ${tableName}`)

} catch (err) {
self.debug(err)
self.debug(`Failed during the initialization process retry: ${retries}. ${err || ''}`)
retries++

@@ -83,3 +98,3 @@ if (retries < self._.retries) {

} else {
throw err
throw new Error(`Failed to finish initialization after: ${retries} of ${self._.retries}. ${err || ''}`)
}

@@ -90,10 +105,2 @@ }

emit (...args) {
if (args.length === 1) {
super.emit('message', args[0])
} else {
super.emit(...args)
}
}
async hasColumn (tableName, columnName, retries = 0) {

@@ -167,27 +174,27 @@ const self = this

case 'references' : {
const referenceArray = argument.split('.')
const referenceTable =referenceArray[0]
const referenceColumn =referenceArray[1]
const referenceArray = argument.split('.')
const referenceTable = referenceArray[0]
const referenceColumn = referenceArray[1]
const constraintName = `${self.name}_${referenceTable}_${referenceColumn}_fkey`
try{
debug(`Table: ${self.name} `)
let alterTableRaw = `alter table "${self.name}" add constraint ${constraintName} foreign key ("${column.name}") references "${referenceTable}" ("${referenceColumn}")`
if(hasOnDelete !==false){
alterTableRaw += ` ON DELETE ${hasOnDelete.argument}`
try {
debug(`Table: ${self.name} `)
let alterTableRaw = `alter table "${self.name}" add constraint ${constraintName} foreign key ("${column.name}") references "${referenceTable}" ("${referenceColumn}")`
if (hasOnDelete !== false) {
alterTableRaw += ` ON DELETE ${hasOnDelete.argument}`
}
if (hasOnUpdate !== false) {
alterTableRaw += ` ON UPDATE ${hasOnUpdate.argument}`
}
debug(`Table: ${self.name} constraint creation: ${alterTableRaw}`)
await db.raw(alterTableRaw)
await columnToAlter.references(referenceColumn).on(referenceTable)
} catch (err) {
const errorMessage = _.defaultTo(_.get(err, 'message'), '')
if (errorMessage.indexOf('already exists') !== -1) {
debug(`Failed to create constraint because it already exists. ${err || ''}`)
} else {
throw new Error(`Failed to create constraint. ${err || ''}`)
}
}
if(hasOnUpdate !==false){
alterTableRaw += ` ON UPDATE ${hasOnUpdate.argument}`
}
debug(`Table: ${self.name} constraint creation: ${alterTableRaw}`)
await db.raw(alterTableRaw)
await columnToAlter.references(referenceColumn).on(referenceTable)
}catch(err){
const errorMessage = _.defaultTo(_.get(err,'message'),'')
if(errorMessage.indexOf('already exists')!==-1){
debug(`Failed to create constraint because it already exists. ${err || ''}`)
}else{
throw new Error(`Failed to create constraint. ${err||''}`)
}
}
break

@@ -194,0 +201,0 @@ }

@@ -21,4 +21,4 @@ /* eslint-disable no-undef */

describe('Feathers-Knex-Modeller', () => {
let testOne = fixtures.testOne
let testTwo = fixtures.testTwo
const testOne = fixtures.testOne
const testTwo = fixtures.testTwo
testOne.db = db

@@ -33,9 +33,9 @@ testTwo.db = db

await Promise.all([modelTwo.init(), modelOne.init()])
let tableOne = await modelOne.hasTable('test')
let hasTable = tableOne
const tableOne = await modelOne.hasTable('test')
const hasTable = tableOne
expect(hasTable).to.equal(true)
})
it('Has the table(s) after init', async function () {
let hasTableOne = await db.schema.hasTable(fixtures.testOne.name)
let hasTableTwo = await db.schema.hasTable(fixtures.testTwo.name)
const hasTableOne = await db.schema.hasTable(fixtures.testOne.name)
const hasTableTwo = await db.schema.hasTable(fixtures.testTwo.name)
expect(hasTableOne).to.equal(true)

@@ -45,4 +45,4 @@ expect(hasTableTwo).to.equal(true)

it('Has the columns(s) after init', async function () {
let hasTableOneColumnOne = await db.schema.hasColumn(fixtures.testOne.name, fixtures.testOne.columns[0].name)
let hasTableTwoDependentColumn = await db.schema.hasColumn(fixtures.testTwo.name, 'test_id')
const hasTableOneColumnOne = await db.schema.hasColumn(fixtures.testOne.name, fixtures.testOne.columns[0].name)
const hasTableTwoDependentColumn = await db.schema.hasColumn(fixtures.testTwo.name, 'test_id')
expect(hasTableOneColumnOne).to.equal(true)

@@ -52,15 +52,15 @@ expect(hasTableTwoDependentColumn).to.equal(true)

it('Specific type should create a column of the requested type', async function () {
let tableName = fixtures.data.specificType.textArray.table
let columnName = fixtures.data.specificType.textArray.name
let columnData = fixtures.data.specificType.textArray.data
const tableName = fixtures.data.specificType.textArray.table
const columnName = fixtures.data.specificType.textArray.name
const columnData = fixtures.data.specificType.textArray.data
await db(tableName).delete()
let dataToInsert = {
'name': 'name',
'schema_type': 'specificTypeTest',
'status': 'TBD',
'shared': true
const dataToInsert = {
name: 'name',
schema_type: 'specificTypeTest',
status: 'TBD',
shared: true
}
dataToInsert[columnName] = columnData
await db.insert(dataToInsert).into(tableName)
let returnedData = (await db.select().from(tableName))[0]
const returnedData = (await db.select().from(tableName))[0]
expect(returnedData[columnName]).to.be.an('array')

@@ -67,0 +67,0 @@ expect(returnedData[columnName][0]).to.be.an('string')

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc