Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(core): refactor internal dependencies to support Yarn PnP #645

Merged
merged 35 commits into from
Jul 10, 2020
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
09ee15f
fix(sqlite): add missing dependency fs-extra
merceyz Jul 7, 2020
8022357
fix(mariadb): add missing dependency @mikro-orm/core
merceyz Jul 7, 2020
7a83cf8
fix(mariadb): add missing dependency @mikro-orm/knex
merceyz Jul 7, 2020
38caf5f
fix(core): add missing dependency @mikro-orm/entity-generator
merceyz Jul 7, 2020
105826a
fix(core): add missing dependency @mikro-orm/knex
merceyz Jul 7, 2020
9fdf194
fix(core): add missing dependency @mikro-orm/migrations
merceyz Jul 7, 2020
a13ca12
feat(knex): export knex
merceyz Jul 7, 2020
6f86bcc
feat(knex): add requireModule helper
merceyz Jul 7, 2020
eece806
fix(sqlite): get knex from @mikro-orm/knex
merceyz Jul 7, 2020
0e9ab3a
fix(postgresql): get knex from @mikro-orm/knex
merceyz Jul 7, 2020
a31f848
fix(mysql-base): get knex from @mikro-orm/knex
merceyz Jul 7, 2020
1371840
fix(mariadb): get knex from @mikro-orm/knex
merceyz Jul 7, 2020
2ee6c27
chore: change root package name to avoid conflict
merceyz Jul 7, 2020
2a6ee90
fix(cli): node_modules isn't guaranteed to exist
merceyz Jul 7, 2020
1033eaf
fix(core): add missing dependency tsconfig-paths
merceyz Jul 7, 2020
302b0c4
fix(core): add missing optional peer dependency ts-node
merceyz Jul 7, 2020
a33da48
fix(core): require on behalf of the user
merceyz Jul 8, 2020
0c648c2
fix(core): get the schema generator from the driver
merceyz Jul 8, 2020
8eddf8a
fix(core): require ts-node as config
merceyz Jul 8, 2020
bed9d35
fix(core): require tsconfig-paths from config
merceyz Jul 8, 2020
3b83a53
chore: update ignore comments
merceyz Jul 8, 2020
43e5b9c
style(core): add spacing
merceyz Jul 8, 2020
07ee5ef
refactor: add requireFrom helper
merceyz Jul 8, 2020
abc44d3
refactor: make core a peer dependency
merceyz Jul 8, 2020
00655f0
docs(core): document requireFrom
merceyz Jul 8, 2020
d25fbb0
refactor: move getSchemaGenerator to platform
merceyz Jul 8, 2020
e7eb7d4
fix(core): ensure absolute paths
merceyz Jul 8, 2020
0b01cc9
refactor(mariadb): use knex from mysql-base
merceyz Jul 8, 2020
9d14d13
style: spaces not tabs
merceyz Jul 8, 2020
8fe35a6
refactor(core): use path.resolve
merceyz Jul 8, 2020
b9a4a7b
test: fix cli helper tests
B4nan Jul 9, 2020
c58e5b7
Merge branch 'dev' into pnp-support
merceyz Jul 9, 2020
6763402
fix(core): handle folders in requireFrom
merceyz Jul 10, 2020
ae1da95
test: update getModuleVersion
merceyz Jul 10, 2020
6ae1ecd
test: mongodb throws on getSchemaGenerator
merceyz Jul 10, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "mikro-orm",
"name": "mikro-orm-root",
"private": true,
"workspaces": [
"packages/*"
Expand Down
11 changes: 4 additions & 7 deletions packages/cli/src/CLIHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,15 +124,12 @@ export class CLIHelper {
}

static async getModuleVersion(name: string): Promise<string> {
const path = process.cwd() + '/node_modules/' + name + '/package.json';

if (await pathExists(path)) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const pkg = require(path);
try {
const pkg = Utils.requireFrom(`${name}/package.json`, process.cwd());
merceyz marked this conversation as resolved.
Show resolved Hide resolved
return chalk.green(pkg.version);
} catch {
return chalk.red('not-found');
}

return chalk.red('not-found');
}

static dumpTable(options: { columns: string[]; rows: string[][]; empty: string }): void {
Expand Down
12 changes: 4 additions & 8 deletions packages/core/src/MikroORM.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import chalk from 'chalk';

import { EntityManagerType, IDatabaseDriver } from './drivers';
import { MetadataDiscovery, MetadataStorage, ReflectMetadataProvider } from './metadata';
import { Configuration, ConfigurationLoader, Logger, Options } from './utils';
import { Configuration, ConfigurationLoader, Logger, Options, Utils } from './utils';
import { NullCacheAdapter } from './cache';
import { EntityManager } from './EntityManager';
import { IEntityGenerator, IMigrator, ISchemaGenerator } from './typings';
Expand Down Expand Up @@ -106,26 +106,22 @@ export class MikroORM<D extends IDatabaseDriver = IDatabaseDriver> {
* Gets the SchemaGenerator.
*/
getSchemaGenerator<T extends ISchemaGenerator = ISchemaGenerator>(): T {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const SchemaGenerator = require('@mikro-orm/knex').SchemaGenerator;
return new SchemaGenerator(this.em);
return this.driver.getPlatform().getSchemaGenerator(this.em) as T;
}

/**
* Gets the EntityGenerator.
*/
getEntityGenerator<T extends IEntityGenerator = IEntityGenerator>(): T {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const EntityGenerator = require('@mikro-orm/entity-generator').EntityGenerator;
const { EntityGenerator } = Utils.requireFrom('@mikro-orm/entity-generator', this.config.get('baseDir'));
merceyz marked this conversation as resolved.
Show resolved Hide resolved
return new EntityGenerator(this.em);
}

/**
* Gets the Migrator.
*/
getMigrator<T extends IMigrator = IMigrator>(): T {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Migrator = require('@mikro-orm/migrations').Migrator;
const { Migrator } = Utils.requireFrom('@mikro-orm/migrations', this.config.get('baseDir'));
return new Migrator(this.em);
}

Expand Down
7 changes: 6 additions & 1 deletion packages/core/src/platforms/Platform.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { EntityRepository } from '../entity';
import { NamingStrategy, UnderscoreNamingStrategy } from '../naming-strategy';
import { Constructor, Dictionary, EntityProperty, IPrimaryKey, Primary } from '../typings';
import { Constructor, Dictionary, EntityProperty, IPrimaryKey, Primary, ISchemaGenerator } from '../typings';
import { ExceptionConverter } from './ExceptionConverter';
import { EntityManager } from '../EntityManager';

export abstract class Platform {

Expand Down Expand Up @@ -127,4 +128,8 @@ export abstract class Platform {
return this.exceptionConverter;
}

getSchemaGenerator(em: EntityManager): ISchemaGenerator {
throw new Error(`${this.constructor.name} does not use a schema generator`);
}

}
3 changes: 1 addition & 2 deletions packages/core/src/utils/Configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,7 @@ export class Configuration<D extends IDatabaseDriver = IDatabaseDriver> {
private initDriver(): D {
if (!this.options.driver) {
const driver = Configuration.PLATFORMS[this.options.type!];
// eslint-disable-next-line @typescript-eslint/no-var-requires
this.options.driver = require(driver[1])[driver[0]];
this.options.driver = Utils.requireFrom(driver[1], this.options.baseDir)[driver[0]];
}

return new this.options.driver!(this);
Expand Down
6 changes: 2 additions & 4 deletions packages/core/src/utils/ConfigurationLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ export class ConfigurationLoader {
static async registerTsNode(configPath = 'tsconfig.json') {
const tsConfigPath = path.join(process.cwd(), configPath);

// eslint-disable-next-line @typescript-eslint/no-var-requires
require('ts-node').register({
Utils.requireFrom('ts-node', tsConfigPath).register({
project: tsConfigPath,
transpileOnly: true,
});
Expand All @@ -73,8 +72,7 @@ export class ConfigurationLoader {
const paths = tsConfig.compilerOptions?.paths;

if (paths) {
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('tsconfig-paths').register({
Utils.requireFrom('tsconfig-paths', tsConfigPath).register({
baseUrl: tsConfig.compilerOptions.baseUrl,
paths: tsConfig.compilerOptions.paths,
});
Expand Down
11 changes: 11 additions & 0 deletions packages/core/src/utils/Utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import fastEqual from 'fast-deep-equal';
import { createRequire, createRequireFromPath } from 'module';
import clone from 'clone';
import globby, { GlobbyOptions } from 'globby';
import { isAbsolute, normalize, relative } from 'path';
Expand Down Expand Up @@ -624,4 +625,14 @@ export class Utils {
return global[key];
}

/**
* Require a module from a specific location
* @param id The module to require
* @param from Location to start the node resolution
*/
static requireFrom(id: string, from: string) {
merceyz marked this conversation as resolved.
Show resolved Hide resolved
/* istanbul ignore next */
return (createRequire || createRequireFromPath)(Utils.absolutePath(from))(id);
merceyz marked this conversation as resolved.
Show resolved Hide resolved
}

}
7 changes: 6 additions & 1 deletion packages/entity-generator/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,14 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"@mikro-orm/knex": "^4.0.0-alpha.4",
"fs-extra": "^9.0.1",
"ts-morph": "^7.1.2"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 6 additions & 1 deletion packages/knex/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,13 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"fs-extra": "^9.0.1",
"knex": "^0.21.1"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 6 additions & 1 deletion packages/knex/src/AbstractSqlPlatform.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Constructor, Platform } from '@mikro-orm/core';
import { SqlEntityRepository } from './SqlEntityRepository';
import { SchemaHelper } from './schema';
import { SchemaHelper, SchemaGenerator } from './schema';
import { SqlEntityManager } from './SqlEntityManager';

export abstract class AbstractSqlPlatform extends Platform {

Expand All @@ -18,4 +19,8 @@ export abstract class AbstractSqlPlatform extends Platform {
return this.schemaHelper;
}

getSchemaGenerator(em: SqlEntityManager): SchemaGenerator {
return new SchemaGenerator(em);
}

}
3 changes: 3 additions & 0 deletions packages/knex/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ export * from './query';
export * from './schema';
export { SqlEntityManager as EntityManager } from './SqlEntityManager';
export { SqlEntityRepository as EntityRepository } from './SqlEntityRepository';

import * as Knex from 'knex';
export { Knex };
merceyz marked this conversation as resolved.
Show resolved Hide resolved
6 changes: 6 additions & 0 deletions packages/mariadb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,11 @@
"dependencies": {
"@mikro-orm/mysql-base": "^4.0.0-alpha.4",
"mariadb": "^2.4.0"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
12 changes: 7 additions & 5 deletions packages/mariadb/src/MariaDbConnection.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import { Connection } from 'mariadb';
import { MySqlConnectionConfig } from 'knex';
import { MySqlConnection } from '@mikro-orm/mysql-base';
import { MySqlConnection, Knex } from '@mikro-orm/mysql-base';
import { Utils } from '@mikro-orm/core';

// @ts-ignore
import Dialect from 'knex/lib/dialects/mysql/index.js';
const Dialect = Utils.requireFrom(
'knex/lib/dialects/mysql/index.js',
require.resolve('@mikro-orm/knex', { paths: [require.resolve('@mikro-orm/mysql-base')] })
);

export class MariaDbConnection extends MySqlConnection {

async connect(): Promise<void> {
this.client = this.createKnexClient(this.getPatchedDialect());
}

getConnectionOptions(): MySqlConnectionConfig {
getConnectionOptions(): Knex.MySqlConnectionConfig {
const ret = super.getConnectionOptions();
ret.bigNumberStrings = true;

Expand Down
2 changes: 1 addition & 1 deletion packages/mariadb/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export * from '@mikro-orm/knex';
export * from '@mikro-orm/mysql-base';
export * from './MariaDbConnection';
export * from './MariaDbDriver';
7 changes: 6 additions & 1 deletion packages/migrations/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,15 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"@mikro-orm/knex": "^4.0.0-alpha.4",
"fs-extra": "^9.0.1",
"ts-morph": "^7.1.2",
"umzug": "^2.3.0"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 6 additions & 1 deletion packages/mongodb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"mongodb": "^3.5.9"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 6 additions & 1 deletion packages/mysql-base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"@mikro-orm/knex": "^4.0.0-alpha.4"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 3 additions & 4 deletions packages/mysql-base/src/MySqlConnection.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { MySqlConnectionConfig } from 'knex';
import { AbstractSqlConnection } from '@mikro-orm/knex';
import { AbstractSqlConnection, Knex } from '@mikro-orm/knex';

export class MySqlConnection extends AbstractSqlConnection {

Expand All @@ -11,8 +10,8 @@ export class MySqlConnection extends AbstractSqlConnection {
return 'mysql://root@127.0.0.1:3306';
}

getConnectionOptions(): MySqlConnectionConfig {
const ret: MySqlConnectionConfig = super.getConnectionOptions();
getConnectionOptions(): Knex.MySqlConnectionConfig {
const ret: Knex.MySqlConnectionConfig = super.getConnectionOptions();

if (this.config.get('multipleStatements')) {
ret.multipleStatements = this.config.get('multipleStatements');
Expand Down
5 changes: 2 additions & 3 deletions packages/mysql-base/src/MySqlSchemaHelper.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { CreateTableBuilder } from 'knex';
import { AbstractSqlConnection, SchemaHelper, Column, Index, IsSame } from '@mikro-orm/knex';
import { AbstractSqlConnection, SchemaHelper, Column, Index, IsSame, Knex } from '@mikro-orm/knex';
import { Dictionary, EntityProperty } from '@mikro-orm/core';

export class MySqlSchemaHelper extends SchemaHelper {
Expand Down Expand Up @@ -40,7 +39,7 @@ export class MySqlSchemaHelper extends SchemaHelper {
return 'set foreign_key_checks = 1;\n';
}

finalizeTable(table: CreateTableBuilder, charset: string): void {
finalizeTable(table: Knex.CreateTableBuilder, charset: string): void {
table.engine('InnoDB');
table.charset(charset);
}
Expand Down
6 changes: 6 additions & 0 deletions packages/mysql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,11 @@
"dependencies": {
"@mikro-orm/mysql-base": "^4.0.0-alpha.4",
"mysql2": "^2.1.0"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
7 changes: 6 additions & 1 deletion packages/postgresql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,13 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"@mikro-orm/knex": "^4.0.0-alpha.4",
"pg": "^8.2.1"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
16 changes: 7 additions & 9 deletions packages/postgresql/src/PostgreSqlConnection.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { types, defaults } from 'pg';
import { PgConnectionConfig } from 'knex';
// @ts-ignore
import TableCompiler_PG from 'knex/lib/dialects/postgres/schema/tablecompiler.js';
// @ts-ignore
import TableCompiler from 'knex/lib/schema/tablecompiler.js';
import { Dictionary, Utils } from '@mikro-orm/core';
import { AbstractSqlConnection, Knex } from '@mikro-orm/knex';

import { Dictionary } from '@mikro-orm/core';
import { AbstractSqlConnection } from '@mikro-orm/knex';
// eslint-disable-next-line @typescript-eslint/naming-convention
const TableCompiler_PG = Utils.requireFrom('knex/lib/dialects/postgres/schema/tablecompiler.js', require.resolve('@mikro-orm/knex'));
const TableCompiler = Utils.requireFrom('knex/lib/schema/tablecompiler.js', require.resolve('@mikro-orm/knex'));

export class PostgreSqlConnection extends AbstractSqlConnection {

Expand All @@ -19,8 +17,8 @@ export class PostgreSqlConnection extends AbstractSqlConnection {
return 'postgresql://postgres@127.0.0.1:5432';
}

getConnectionOptions(): PgConnectionConfig {
const ret: PgConnectionConfig = super.getConnectionOptions();
getConnectionOptions(): Knex.PgConnectionConfig {
const ret: Knex.PgConnectionConfig = super.getConnectionOptions();

if (this.config.get('forceUtcTimezone')) {
[1082, 1083, 1114].forEach(oid => types.setTypeParser(oid, str => new Date(str + 'Z'))); // date, time, timestamp types
Expand Down
7 changes: 6 additions & 1 deletion packages/reflection/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,13 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"globby": "^11.0.1",
"ts-morph": "^7.1.2"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}
8 changes: 7 additions & 1 deletion packages/sqlite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,14 @@
"access": "public"
},
"dependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4",
"@mikro-orm/knex": "^4.0.0-alpha.4",
"fs-extra": "^9.0.1",
merceyz marked this conversation as resolved.
Show resolved Hide resolved
"sqlite3": "^4.2.0"
},
"devDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
},
"peerDependencies": {
"@mikro-orm/core": "^4.0.0-alpha.4"
}
}