From a4501eebe1e518c713abd694967b9a7960f036d6 Mon Sep 17 00:00:00 2001 From: Harminder virk Date: Sun, 6 Oct 2019 14:12:47 +0530 Subject: [PATCH] refactor: get rid of lodash it drops the number of types generated by 20,000 --- package.json | 3 +-- src/Orm/BaseModel/index.ts | 4 ++-- src/Orm/Relations/BelongsTo/QueryBuilder.ts | 4 ++-- src/Orm/Relations/BelongsTo/index.ts | 3 ++- src/Orm/Relations/HasMany/QueryBuilder.ts | 4 ++-- src/Orm/Relations/HasManyThrough/QueryBuilder.ts | 4 ++-- src/Orm/Relations/HasManyThrough/index.ts | 3 ++- src/Orm/Relations/HasOne/QueryBuilder.ts | 4 ++-- src/Orm/Relations/HasOneOrMany.ts | 3 ++- src/Orm/Relations/ManyToMany/QueryBuilder.ts | 6 +++--- src/Orm/Relations/ManyToMany/index.ts | 4 ++-- src/utils/index.ts | 15 +++++++++++++++ 12 files changed, 37 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index ea6a7767..2bffcd61 100644 --- a/package.json +++ b/package.json @@ -43,9 +43,9 @@ "@adonisjs/profiler": "^1.2.4", "@poppinss/traits": "^1.0.0", "@poppinss/utils": "^2.0.0", + "camelcase": "^5.3.1", "knex": "^0.19.4", "knex-dynamic-connection": "^1.0.0", - "lodash": "^4.17.15", "pluralize": "^8.0.0", "snake-case": "^2.1.0", "ts-essentials": "^3.0.2" @@ -59,7 +59,6 @@ "@adonisjs/sink": "^2.2.1", "@poppinss/dev-utils": "^1.0.1", "@types/dotenv": "^6.1.1", - "@types/lodash": "^4.14.141", "@types/node": "^12.7.11", "@types/pluralize": "0.0.29", "clone": "^2.1.2", diff --git a/src/Orm/BaseModel/index.ts b/src/Orm/BaseModel/index.ts index 7bfec1c0..c9ae5c04 100644 --- a/src/Orm/BaseModel/index.ts +++ b/src/Orm/BaseModel/index.ts @@ -10,7 +10,7 @@ /// import pluralize from 'pluralize' -import { isObject, snakeCase } from 'lodash' +import snakeCase from 'snake-case' import { Exception } from '@poppinss/utils' import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database' @@ -32,11 +32,11 @@ import { import { Preloader } from '../Preloader' import { HasOne } from '../Relations/HasOne' -import { ensureRelation } from '../../utils' import { proxyHandler } from './proxyHandler' import { HasMany } from '../Relations/HasMany' import { BelongsTo } from '../Relations/BelongsTo' import { ManyToMany } from '../Relations/ManyToMany' +import { ensureRelation, isObject } from '../../utils' import { HasManyThrough } from '../Relations/HasManyThrough' function StaticImplements () { diff --git a/src/Orm/Relations/BelongsTo/QueryBuilder.ts b/src/Orm/Relations/BelongsTo/QueryBuilder.ts index efed422d..fda92b8c 100644 --- a/src/Orm/Relations/BelongsTo/QueryBuilder.ts +++ b/src/Orm/Relations/BelongsTo/QueryBuilder.ts @@ -10,13 +10,13 @@ /// import knex from 'knex' -import { uniq } from 'lodash' import { Exception } from '@poppinss/utils' import { ModelContract, BelongsToQueryBuilderContract } from '@ioc:Adonis/Lucid/Model' import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database' import { BelongsTo } from './index' +import { unique } from '../../../utils' import { BaseRelationQueryBuilder } from '../Base/QueryBuilder' /** @@ -58,7 +58,7 @@ export class BelongsToQueryBuilder * Constraint for multiple parents */ if (Array.isArray(this._parent)) { - const values = uniq(this._parent.map((parentInstance) => { + const values = unique(this._parent.map((parentInstance) => { return this.$getRelatedValue(parentInstance, this._relation.foreignKey) })) return this.whereIn(this._relation.localAdapterKey, values) diff --git a/src/Orm/Relations/BelongsTo/index.ts b/src/Orm/Relations/BelongsTo/index.ts index 0c490353..d68beca9 100644 --- a/src/Orm/Relations/BelongsTo/index.ts +++ b/src/Orm/Relations/BelongsTo/index.ts @@ -10,7 +10,8 @@ /// import { Exception } from '@poppinss/utils' -import { camelCase, snakeCase } from 'lodash' +import snakeCase from 'snake-case' +import camelCase from 'camelcase' import { ModelContract, diff --git a/src/Orm/Relations/HasMany/QueryBuilder.ts b/src/Orm/Relations/HasMany/QueryBuilder.ts index 12e4b8f1..c9cf7728 100644 --- a/src/Orm/Relations/HasMany/QueryBuilder.ts +++ b/src/Orm/Relations/HasMany/QueryBuilder.ts @@ -10,11 +10,11 @@ /// import knex from 'knex' -import { uniq } from 'lodash' import { HasManyQueryBuilderContract, ModelContract } from '@ioc:Adonis/Lucid/Model' import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database' import { HasMany } from './index' +import { unique } from '../../../utils' import { BaseRelationQueryBuilder } from '../Base/QueryBuilder' /** @@ -56,7 +56,7 @@ export class HasManyQueryBuilder * Constraint for multiple parents */ if (Array.isArray(this._parent)) { - const values = uniq(this._parent.map((parentInstance) => { + const values = unique(this._parent.map((parentInstance) => { return this.$getRelatedValue(parentInstance, this._relation.localKey) })) return this.whereIn(this._relation.foreignAdapterKey, values) diff --git a/src/Orm/Relations/HasManyThrough/QueryBuilder.ts b/src/Orm/Relations/HasManyThrough/QueryBuilder.ts index e809644e..06abe4c2 100644 --- a/src/Orm/Relations/HasManyThrough/QueryBuilder.ts +++ b/src/Orm/Relations/HasManyThrough/QueryBuilder.ts @@ -10,12 +10,12 @@ /// import knex from 'knex' -import { uniq } from 'lodash' import { Exception } from '@poppinss/utils' import { HasManyThroughQueryBuilderContract, ModelContract } from '@ioc:Adonis/Lucid/Model' import { QueryClientContract } from '@ioc:Adonis/Lucid/Database' import { HasManyThrough } from './index' +import { unique } from '../../../utils' import { BaseRelationQueryBuilder } from '../Base/QueryBuilder' /** @@ -76,7 +76,7 @@ export class HasManyThroughQueryBuilder * Constraint for multiple parents */ if (Array.isArray(this._parent)) { - const values = uniq(this._parent.map((parentInstance) => { + const values = unique(this._parent.map((parentInstance) => { return this.$getRelatedValue(parentInstance, this._relation.localKey) })) return this.whereIn(`${throughTable}.${this._relation.foreignAdapterKey}`, values) diff --git a/src/Orm/Relations/HasManyThrough/index.ts b/src/Orm/Relations/HasManyThrough/index.ts index d6653947..8e38aed2 100644 --- a/src/Orm/Relations/HasManyThrough/index.ts +++ b/src/Orm/Relations/HasManyThrough/index.ts @@ -10,7 +10,8 @@ /// import { Exception } from '@poppinss/utils' -import { camelCase, snakeCase } from 'lodash' +import snakeCase from 'snake-case' +import camelCase from 'camelcase' import { ModelContract, diff --git a/src/Orm/Relations/HasOne/QueryBuilder.ts b/src/Orm/Relations/HasOne/QueryBuilder.ts index d966cb8d..238ddfa0 100644 --- a/src/Orm/Relations/HasOne/QueryBuilder.ts +++ b/src/Orm/Relations/HasOne/QueryBuilder.ts @@ -10,12 +10,12 @@ /// import knex from 'knex' -import { uniq } from 'lodash' import { Exception } from '@poppinss/utils' import { HasOneQueryBuilderContract, ModelContract } from '@ioc:Adonis/Lucid/Model' import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database' import { HasOne } from './index' +import { unique } from '../../../utils' import { BaseRelationQueryBuilder } from '../Base/QueryBuilder' /** @@ -54,7 +54,7 @@ export class HasOneQueryBuilder extends BaseRelationQueryBuilder implements HasO * Constraint for multiple parents */ if (Array.isArray(this._parent)) { - const values = uniq(this._parent.map((parentInstance) => { + const values = unique(this._parent.map((parentInstance) => { return this.$getRelatedValue(parentInstance, this._relation.localKey) })) return this.whereIn(this._relation.foreignAdapterKey, values) diff --git a/src/Orm/Relations/HasOneOrMany.ts b/src/Orm/Relations/HasOneOrMany.ts index d7c87e17..b5172a8d 100644 --- a/src/Orm/Relations/HasOneOrMany.ts +++ b/src/Orm/Relations/HasOneOrMany.ts @@ -10,7 +10,8 @@ /// import { Exception } from '@poppinss/utils' -import { camelCase, snakeCase } from 'lodash' +import snakeCase from 'snake-case' +import camelCase from 'camelcase' import { ModelContract, diff --git a/src/Orm/Relations/ManyToMany/QueryBuilder.ts b/src/Orm/Relations/ManyToMany/QueryBuilder.ts index ecad0349..6d2e1dce 100644 --- a/src/Orm/Relations/ManyToMany/QueryBuilder.ts +++ b/src/Orm/Relations/ManyToMany/QueryBuilder.ts @@ -10,11 +10,11 @@ /// import knex from 'knex' -import { uniq, difference } from 'lodash' import { ModelContract, ManyToManyQueryBuilderContract } from '@ioc:Adonis/Lucid/Model' import { QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database' import { ManyToMany } from './index' +import { unique, difference } from '../../../utils' import { BaseRelationQueryBuilder } from '../Base/QueryBuilder' /** @@ -249,7 +249,7 @@ export class ManyToManyQueryBuilder * Constraint for multiple parents */ if (Array.isArray(this._parent)) { - const values = uniq(this._parent.map((parentInstance) => { + const values = unique(this._parent.map((parentInstance) => { return this.$getRelatedValue(parentInstance, this._relation.localKey) })) return this.whereInPivot(this._relation.pivotForeignKey, values) @@ -348,7 +348,7 @@ export class ManyToManyQueryBuilder ids: (string | number)[] | { [key: string]: any }, checkExisting: boolean, ) { - let idsList = uniq(Array.isArray(ids) ? ids : Object.keys(ids)) + let idsList = unique(Array.isArray(ids) ? ids : Object.keys(ids)) const hasAttributes = !Array.isArray(ids) /** diff --git a/src/Orm/Relations/ManyToMany/index.ts b/src/Orm/Relations/ManyToMany/index.ts index ae20dc40..d364fa5f 100644 --- a/src/Orm/Relations/ManyToMany/index.ts +++ b/src/Orm/Relations/ManyToMany/index.ts @@ -10,7 +10,7 @@ /// import { Exception } from '@poppinss/utils' -import { snakeCase, sortBy } from 'lodash' +import snakeCase from 'snake-case' import { ModelContract, @@ -156,7 +156,7 @@ export class ManyToMany implements RelationContract { } this.pivotTable = this._options.pivotTable || snakeCase( - sortBy([this.relatedModel().name, this.model.name]).join('_'), + [this.relatedModel().name, this.model.name].sort().join('_'), ) /** diff --git a/src/utils/index.ts b/src/utils/index.ts index 13147e42..c15e1922 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -47,3 +47,18 @@ export function getValue ( return value } + +export function isObject (value: any): boolean { + return value !== null && typeof (value) === 'object' && !Array.isArray(value) +} + +export function unique (value: any[]) { + if (!Array.isArray(value)) { + return [] + } + return [...new Set(value)] +} + +export function difference (main: any[], other: []) { + return [main, other].reduce((a, b) => a.filter(c => !b.includes(c))) +}