Skip to content

Conversation

@asturur
Copy link
Member

@asturur asturur commented Jun 12, 2023

Motivation

During the migration to "modern js" we thought that having a type property on an instance was kind of a duplicate because classes have costructor.name that is basically what type was.

Dumbly enough we didn't think that minification would have changed variable names and so constructor.name.
This wasn't caught by tests since tests run on the non minified version of the code.

This PR aims at fixing:
#9006 and #9008 making #9007 obsolete.

It restores class type, as a static property that will take the place o constructor.name ( constructor.type ).
The compatibility getter for type on the instances is still there and will return the static type.

closes #9006
closes #9008

Description

Changes

Gist

In Action

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good

@asturur asturur changed the title fix(serialization): WIP fix(serialization): restore explict class type Jun 12, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Jun 12, 2023

Build Stats

file / KB (diff) bundled minified
fabric 921.521 (+2.387) 303.066 (+0.845)

QUnit.test('toString', function (assert) {
class Moo extends fabric.Object {
static type = 'moo'
static type = 'Moo'
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NO IDEA why this class already had a static type and what was testing.

@github-actions
Copy link
Contributor

github-actions bot commented Jun 12, 2023

Coverage after merging restore-4-type into master will be

83.72%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
index.node.ts7.69%100%0%14.29%17, 20, 23, 35, 38, 41
src
   ClassRegistry.ts100%100%100%100%
   Collection.ts94.71%94.64%86.67%97.09%101, 104, 207–208, 233–234
   CommonMethods.ts96.55%87.50%100%100%10
   Intersection.ts100%100%100%100%
   Observable.ts87.23%85.29%84.62%89.36%144–145, 170–171, 39–40, 48, 57, 91, 99
   Point.ts100%100%100%100%
   Shadow.ts98.36%95.65%100%100%178
   cache.ts97.06%90%100%100%57
   config.ts75%66.67%66.67%82.76%130, 138, 138, 138, 138, 138–140, 151–153
   constants.ts100%100%100%100%
src/Pattern
   Pattern.ts92.31%91.89%90%93.55%118, 129, 138, 31, 94
src/brushes
   BaseBrush.ts100%100%100%100%
   CircleBrush.ts0%0%0%0%108, 108, 108, 110, 112, 114–116, 118–121, 128–129, 136, 138, 23–24, 32–36, 40–44, 51–54, 62–66, 68, 76, 76, 76, 76, 76–77, 79, 79, 79–82, 84, 92–93, 95, 97–99
   PatternBrush.ts97.06%87.50%100%100%21
   PencilBrush.ts91.01%82.35%100%93.75%122–123, 152, 152–154, 176, 176, 276, 280, 285–286, 68–69, 84–85
   SprayBrush.ts0%0%0%0%107, 107, 107, 107, 107–108, 110–111, 118–119, 121, 123–127, 136, 140–141, 141, 149, 149, 149–152, 154–157, 161–162, 164, 166–169, 17, 172, 179, 18, 180, 182, 184–185, 187, 194–195, 197–198, 20, 201, 201, 208, 208, 21, 212, 22, 22, 22–24, 28, 37, 44, 51, 58, 65, 84–86, 94–96, 98–99
src/canvas
   Canvas.ts79.05%77.54%83.05%79.57%1000–1001, 1001, 1001–1003, 1005–1006, 1006, 1006, 1008, 1016, 1016, 1016–1018, 1018, 1018, 1024–1025, 1033–1034, 1034, 1034–1035, 1040, 1042, 1073–1075, 1078–1079, 1083–1084, 1197–1199, 1202–1203, 1276, 1395, 1515, 161, 186, 296–297, 300–304, 309, 332–333, 338–343, 36, 363, 363, 363–364, 364, 364–365, 373, 378–379, 379, 379–380, 382, 391, 397–398, 398, 398, 40, 441, 449, 453, 453, 453–454, 456, 538–539, 539, 539–540, 546, 546, 546–548, 568, 570, 570, 570–571, 571, 571, 574, 574, 574–575, 578, 587–588, 590–591, 593, 593–594, 596–597, 609–610, 610, 610–611, 613–618, 624, 631, 668, 668, 668, 670, 672–677, 683, 689, 689, 689–690, 692, 695, 700, 713, 741, 741, 799–800, 800, 800–801, 803, 806–807, 807, 807–808, 810–811, 814, 814–816, 819–820, 890, 902, 909, 930, 962, 983–984
   SelectableCanvas.ts94.42%92.24%94.23%96.15%1115, 1115–1116, 1119, 1139, 1139, 1188, 1196, 1315, 1317, 1319–1320, 519, 694–695, 697–698, 698, 698, 747–748, 809–810, 863–865, 897, 902–903, 930–931
   StaticCanvas.ts96.73%92.88%100%98.52%1037–1038, 1038, 1038–1039, 1159, 1169, 1223–1224, 1227, 1262–1263, 1339, 1348, 1348, 1352, 1352, 1399–1400, 309–310, 326, 694, 706–707
   TextEditingManager.ts84.31%71.43%91.67%88%17–18, 18, 18–19, 19, 19
src/canvas/DOMManagers
   CanvasDOMManager.ts95.52%70%100%100%21–22, 29
   StaticCanvasDOMManager.ts100%100%100%100%
   util.ts86.67%80.56%83.33%93.94%14, 26, 63–64, 67, 67, 74, 93–94
src/color
   Color.ts94.96%91.67%96.30%96.05%233, 258–259, 267–268, 48
   color_map.ts100%100%100%100%
   constants.ts100%100%100%100%
   util.ts85.71%76.92%100%89.74%55–56, 56, 58, 58, 58–59, 61–62, 89
src/controls
   Control.ts93.33%87.88%91.67%97.78%175, 240, 327, 327, 362
   changeWidth.ts100%100%100%100%
   commonControls.ts100%100%100%100%
   controlRendering.ts81.63%78%100%84.78%106, 111, 121, 121, 45, 50, 61, 61, 65–72, 81–82
   drag.ts100%100%100%100%
   fireEvent.ts88.89%75%100%100%13
   polyControl.ts5.97%0%0%11.11%100, 105, 119, 119, 119, 119, 119, 121–124, 124, 127, 134, 17, 25–29, 29, 29, 29, 29, 29, 29, 29, 50–56, 56, 56, 56, 56, 58, 63–64, 66, 76, 82–83, 83, 83–84, 88–90, 90, 90, 90, 90, 92
   rotate.ts19.57%12.50%50%21.43%41, 45, 51, 51, 51–52, 55–57, 59, 59, 59, 59, 59–61, 61, 61–63, 65, 65, 65–67, 67, 67–68, 73, 73, 73–74, 76, 78, 80–81
   scale.ts93.57%92.94%100%93.67%129–130, 132–134, 148–149, 181–183, 42
   scaleSkew.ts78.79%64.29%100%85.71%27, 29, 29, 29, 31, 33, 35
   skew.ts91.03%79.31%100%97.67%131–132, 163–164, 171, 177, 179
   util.ts100%100%100%100%
   wrapWithFireEvent.ts100%100%100%100%
   wrapWithFixedAnchor.ts100%100%100%100%
src/env
   browser.ts84.21%77.78%50%100%14, 17
   index.ts100%100%100%100%
   node.ts74.07%33.33%66.67%88.89%

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good.
This will also solve my Bug since we disconnected class name and type (but I still think my PRs are valid but they an wait now).
1 significant comment and another one for discussion

const newClass = class extends ColorMatrix {
get type() {
return key;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be removed, extending ColorMatrix is enough

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

those had their own name before, will keep them.
I m not even sure is possible with the different defualts. Without their type class they would serialize to ColorMatrix and then to the next deserialize wouldn't work anymore

Copy link
Contributor

@ShaMan123 ShaMan123 Jun 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It inherits the type getter so I don't see a need to hard code it since you assign the static type to it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want this removed because I think in the future it is a potential bug
Once we remove type getter this thing will become an artifact

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I m not even sure is possible with the different defualts

??

* @param {String} type Type to check against
* @return {Boolean}
*/
isType(...types: string[]) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we deprecate this also??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not part of this PR.
isType is not directly related to the incident. nor isType is wrong per se.

@CaptEmulation
Copy link
Contributor

don't we need to update ClassRegistry.ts as well to use .type?

@asturur
Copy link
Member Author

asturur commented Jun 12, 2023

don't we need to update ClassRegistry.ts as well to use .type?

i think i did it? i m sure i did it. Let me double check.

@asturur
Copy link
Member Author

asturur commented Jun 12, 2023

This looks good. This will also solve my Bug since we disconnected class name and type (but I still think my PRs are valid but they an wait now). 1 significant comment and another one for discussion

Your PRs are waiting there because trying to remove isThis and isThat instead of making them work you started to refactor things, doing simple cleanups some of which ended up in logic tweaks.

I was supposed to close them all and replace them with simple fixes, but every day we had something more important to do with fabric.

@asturur
Copy link
Member Author

asturur commented Jun 12, 2023

@CaptEmulation
image

Is because tabs designs sucks.
We need vertical tabs since most of the screens are now 16:9.

At this point i need a test.

@asturur
Copy link
Member Author

asturur commented Jun 12, 2023

@ShaMan123 we verified this unblock my teammates at work.
So please for us is good, give it a review, and if there are no hiccups i ll try to publish this tomorrow at the first occasion.

@ShaMan123
Copy link
Contributor

don't we need to update ClassRegistry.ts as well to use .type?

i think i did it? i m sure i did it. Let me double check.

How did tests pass then?

ShaMan123
ShaMan123 previously approved these changes Jun 12, 2023
Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand now what happened with tests.
Good

@asturur
Copy link
Member Author

asturur commented Jun 13, 2023

don't we need to update ClassRegistry.ts as well to use .type?

i think i did it? i m sure i did it. Let me double check.

How did tests pass then?

because unminified code relies on class.name that still would work.
Now there is an extra assertion to stop that

@asturur asturur deleted the restore-4-type branch June 13, 2023 01:02
ShaMan123 added a commit that referenced this pull request Jun 14, 2023
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.

Minification breaks serialization Minification breaks classRegistry

4 participants