globalizejs / globalizejs/globalize
[Breaking] Precompiled globalize from 1.4.2 is not loading in 1.5.0
- Dominant language
- JavaScript
- Stars
- 4.8k
- Forks
- 585
- PR merge metrics
- No merged PRs in 30d
Description
## Background
Using `globalize-compiler@1.1.1`, we compiled CLDR data using `globalize@1.4.2`.
But when we load the compiled code using `globalize@1.5.0/dist/globalize-runtime`, we are seeing the following error.
```
return partsJoin( numberToPartsFormatter( value ));
^
TypeError: numberToPartsFormatter is not a function
at Object.numberFormatter (...\test-globalize-1.5.0\node_modules\globalize\dist\globalize-runtime\number.js:579:21)
at ...\test-globalize-1.5.0\node_modules\globalize\dist\globalize-runtime\date.js:697:38
at String.replace ()
at dateFormat (...\test-globalize-1.5.0\node_modules\globalize\dist\globalize-runtime\date.js:388:21)
at dateToPartsFormatter (...\test-globalize-1.5.0\node_modules\globalize\dist\globalize-runtime\date.js:1575:10)
at dateFormatter (...\test-globalize-1.5.0\node_modules\globalize\dist\globalize-runtime\date.js:715:21)
at Object. (...\test-globalize-1.5.0\index2.js:3:67)
at Module._compile (internal/modules/cjs/loader.js:734:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:745:10)
at Module.load (internal/modules/cjs/loader.js:626:32)
```
## Description
I believe the semantic version mechanism in `globalize` is not honored.
The data generated by `1.4.2`, should be able to load by `1.5.0`. If the older data is not intended to be loadable, the runtime engine should be bumped to `2.0.0`.
We checked runtime of `1.4.3` can successfully load data compiled from `1.4.2`.
We are developing a [web UI component package](https://github.com/microsoft/BotFramework-WebChat) and we packaged the precompiled globalize.js (`1.4.2`) in our NPM package. As `globalize` recently released as `1.5.0` about 2 days ago, all new installs of our web UI package start picking up `globalize@1.5.0` and it's breaking our component because the data cannot be loaded with the newer runtime.
## Diff of precompiled globalize.js
(Minus is from 1.4.2, plus is from 1.5.0)
```diff
(function( root, factory ) {
// UMD returnExports
if ( typeof define === "function" && define.amd ) {
// AMD
define( ["globalize/dist/globalize-runtime/number","globalize/dist/globalize-runtime/date"], factory );
} else if ( typeof exports === "object" ) {
// Node, CommonJS
module.exports = factory( require("globalize/dist/globalize-runtime/number"), require("globalize/dist/globalize-runtime/date") );
} else {
// Global
factory( root.Globalize );
}
}( this, function( Globalize ) {
var numberRound = Globalize._numberRound;
+ var numberToPartsFormatterFn = Globalize._numberToPartsFormatterFn;
var numberFormatterFn = Globalize._numberFormatterFn;
var dateToPartsFormatterFn = Globalize._dateToPartsFormatterFn;
var dateFormatterFn = Globalize._dateFormatterFn;
+ Globalize.a821123423 = numberToPartsFormatterFn(["",,1,0,0,,,,,,"","0","-0","-","",numberRound(),"∞","NaN",{".":".",",":",","%":"%","+":"+","-":"-","E":"E","‰":"‰"},]);
+ Globalize.b314646955 = numberToPartsFormatterFn(["",,2,0,0,,,,,,"","00","-00","-","",numberRound(),"∞","NaN",{".":".",",":",","%":"%","+":"+","-":"-","E":"E","‰":"‰"},]);
- Globalize.a1378886668 = numberFormatterFn(["",,1,0,0,,,,,,"","0","-0","-","",numberRound(),"∞","NaN",{".":".",",":",","%":"%","+":"+","-":"-","E":"E","‰":"‰"},]);
+ Globalize.a1378886668 = numberFormatterFn(Globalize("en").numberToPartsFormatter({"raw":"0"}));
- Globalize.b203855544 = numberFormatterFn(["",,2,0,0,,,,,,"","00","-00","-","",numberRound(),"∞","NaN",{".":".",",":",","%":"%","+":"+","-":"-","E":"E","‰":"‰"},]);
+ Globalize.b203855544 = numberFormatterFn(Globalize("en").numberToPartsFormatter({"raw":"00"}));
Globalize.b2037043728 = dateToPartsFormatterFn({"1":Globalize("en").numberFormatter({"raw":"0"}),"2":Globalize("en").numberFormatter({"raw":"00"})}, {"pattern":"MMMM d 'at' h:mm a","timeSeparator":":","months":{"M":{"4":{"1":"January","2":"February","3":"March","4":"April","5":"May","6":"June","7":"July","8":"August","9":"September","10":"October","11":"November","12":"December"}}},"dayPeriods":{"am":"AM","pm":"PM"}});
Globalize.b1609185159 = dateFormatterFn(Globalize("en").dateToPartsFormatter({"skeleton":"MMMMdhm"}));
return Globalize;
}));
```
## Repro steps
1. Clone my repository at https://github.com/compulim/test-globalize-1.5.0
1. `npm install`
- This will install `globalize@1.4.2`
1. `node compile`
- This will generate a `PrecompiledGlobalize.js` file
1. `npm install globalize@1.5.0`
1. `node run`
- This will load the data from `PrecompiledGlobalize.js` with `globalize@1.5.0/dist/globalize-runtime`
Contributor guide
Assessment
This issue has not been assessed yet.