mixin-patch v0.4.1
mixin-patch
Patch the mixin problem #28799
main goal
Patch the problem described in issue #28799 of Typescript development team
When you use several stacked Mixins using TypeScript 2.2+ Support for Mix-in classes you can get this kind of error:
- error TS2425: Class '{ someName(): ... } & { someName:(()....' defines instance member property 'someName', but extended class 'className' defines it as instance member function.
secondary goal
Copy files from known positions (i.e. /src/**) to public positions (i.e. /dist/client) in a controlated way.
Never copies .ts files.
usage
- include in
package.json ⟶ devDependencies - add
& mixin-patchat the end of the"build"script (for example:"build": "tsc & mixin-patch") - turn on options in
package.jsonmixin-patchproperty.
mixin-patch
Mixin-patch patch all of .d.ts with these steps:
1. It reads package.json of the project in the current work directory
2. Take the directories of the "files" entry
3. Search for .d.ts files in those directories (recursively)
4. Patch each .d.ts adding a comment // mixin-patch at the beginning of each offending line
5. Uses /^(\s+)(\w+:\s*\([^;]*\) => [^;]*;\s*)$/mg regex to detect offending lines
config
In package.json mixin-path can have the value true for getting all the default values:
"mixin-patch": {
"patch": true,
"copy": [
{"from": "src", "to": "dist"}
]
}caveats
- multiline emitted member function are not patched
- in some very complex mixins,
mixin-patchcan not patch in reasonable time, then if others capabilities are used (i.e.copy)patchmust be turned off.
"mixin-patch": {
"patch": false,
"copy": [
{"from": "src/client", "to": "dist/client"},
{"from": "src/unlogged", "to": "dist/unlogged"}
]
}license
- MIT