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

fix(core): refactor internals to reduce number of cycles #830

Merged
merged 2 commits into from
Sep 10, 2020
Merged

Conversation

B4nan
Copy link
Member

@B4nan B4nan commented Sep 10, 2020

Most of the circular dependencies as reported by madge are now gone,
both in the TS code as in the compiled JS. This should reduce weird
circular dependency issues in some environments, like with webpack.

Example of issues this should solve:
TypeError: Cannot read property 'getGlobalStorage' of undefined due
to Utils being undefined from inside MetadataStorage.

Full stack trace
TypeError: Cannot read property 'getGlobalStorage' of undefined
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/metadata/MetadataStorage.js:63:42)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/metadata/index.js:15:14)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/utils/Configuration.js:10:20)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/utils/index.js:13:14)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/entity/EntityFactory.js:4:17)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/entity/EntityAssigner.js:5:25)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/entity/index.js:17:14)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/@mikro-orm/core/index.js:21:14)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.@mikro-orm/core (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:2869:18)
    at __webpack_require__ (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:20:30)
    at Object.../../../src/handlers/book.ts (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:463:16)
    at __webpack_require__ (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:20:30)
    at /Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:84:18
    at Object.<anonymous> (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/.webpack/service/src/handlers/book.js:87:10)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at /Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:80:133
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at InProcessRunner.run (/Users/stermi/dev/workspace/serverless-mikro-orm-example-app/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:80:9)

Some general remarks:

  • do not import from barrel files (index.ts)
  • move types and interfaces to separate files
  • when we need some import for a type only, use interface to get around cycles
  • sometimes it was needed to fallback to any (e.g. with EntityManager)

Still some cycles are there, but they should hopefully not matter (hard to
get around them without doing breaking changes).

Most of the circular dependencies as reported by `madge` are now gone,
both in the TS code as in the compiled JS. This should reduce weird
circular dependency issues in some environments, like with webpack.

Example of issues this should solve:
`TypeError: Cannot read property 'getGlobalStorage' of undefined` due
to `Utils` being undefined from inside `MetadataStorage`.

Some general remarks:
- do not import from barrel files (`index.ts`)
- move types and interfaces to separate files
- when we need some import for a type only, use interface to get around cycles
- sometimes it was needed to fallback to `any` (e.g. with `EntityManager`)

Still some cycles are there, but they should hopefully not matter (hard to
get around them without doing breaking changes).
@lgtm-com
Copy link

lgtm-com bot commented Sep 10, 2020

This pull request fixes 1 alert when merging fd4e5fb into 24b5f3e - view on LGTM.com

fixed alerts:

  • 1 for Unused variable, import, function or class

@lgtm-com
Copy link

lgtm-com bot commented Sep 10, 2020

This pull request fixes 1 alert when merging 064f490 into 24b5f3e - view on LGTM.com

fixed alerts:

  • 1 for Unused variable, import, function or class

@B4nan B4nan merged commit 3994767 into master Sep 10, 2020
@B4nan B4nan deleted the cycles branch September 10, 2020 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant