[Breaking] Precompiled globalize from 1.4.2 is not loading in 1.5.0
Background
Using [email protected], we compiled CLDR data using [email protected].
But when we load the compiled code using [email protected]/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 (<anonymous>)
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.<anonymous> (...\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 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 [email protected] 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)
(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
- Clone my repository at https://github.com/compulim/test-globalize-1.5.0
-
npm install- This will install
[email protected]
- This will install
-
node compile- This will generate a
PrecompiledGlobalize.jsfile
- This will generate a
-
npm install [email protected] -
node run- This will load the data from
PrecompiledGlobalize.jswith[email protected]/dist/globalize-runtime
- This will load the data from
we were running into the same issue, with a slight variation though: [email protected] (and 1.6.0) runtime threw the same error when using data compiled with globalize-compiler 1.0.0 (and no variation in the runtime)