globalizejs / globalizejs/globalize

[Breaking] Precompiled globalize from 1.4.2 is not loading in 1.5.0

Open
#895 1 comment 6 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.