Open mfulton26 opened 3 months ago
Do modifications to the Array.prototype make the sideEffects
become true?
Do modifications to the Array.prototype make the
sideEffects
become true?
I'm not familiar with that flag. Is that a webpack specific flag? I think it would, but the side-effects modules could be published under a different package name while reusing code to avoid such.
After looking at some docs it looks like this can be set to true for only some modules. e.g.
"sideEffects": ["./src/$/**/*.ts"]
mutating Array.prototype doesn't sound like the best idea to me
mutating Array.prototype doesn't sound like the best idea to me
Understandably IMO. Historically this is considered unsafe but with the introduction of Symbol
in JavaScript this can now be done safely without name collisions (as is possible with String-based keys but not with unique Symbol-based keys). This is commonly done today with polyfills (e.g. via zloirock/core-js: Standard Library). It is this same polyfill idea/process but applied to user-defined prototype methods using Symbol keys instead of TC39-define prototype methods using String keys.
I just discovered this library and it looks great. What do you think of supporting a chainable API too?
Pure functions are nice but when a developer needs to use multiple methods in a row it gets annoying to have to define intermediary variables or to nest function calls. JavaScript doesn't have a pipeline operator but prototypes can be safely augmented these days using symbols (rather than strings which can cause conflicts because they are not unique).
Example
Implementation
Augmenting modules should be able to be programmatically generated from pure functions (e.g. using ts-morph):