nodejs / full-icu-npm

convenience loader for 'small-icu' node builds
https://nodejs.org/api/intl.html#intl_providing_icu_data_at_runtime
Other
152 stars 31 forks source link

Need an option to download ICU files even if we're not in small-icu situation #77

Open TBG-FR opened 2 years ago

TBG-FR commented 2 years ago

Hello there !

Issue summary

I can't get an environment in small-icu without pain, and without a such environment, I can't get the files needed to switch to full-icu in another app

Proposal

Could we have an option to still get icudtxxy.dat files downloaded into node-modules/full-icu, even if we are not in small-icu and it will probably be useless ?

Details

I'm facing issues with pkg , that allows to build binaries. It looks like that pkg is built with small-icu, and that causes issues in my app. However, to give the right icu files (i.e. icudt70l.dat), I need to get them, and full-icu won't let me, because the original environment/node isn't in small-icu (Note: Your node was not compiled with the ‘small-icu’ case, so the ICU data is not customizable through this script. Exitting.)

However, since Node is now built in full-icu, I can't get a small-icu, I spent many hours trying, without success 🤯 The icu4c version I need isn't available on npm, and I don't know what to do with Github releases to get the .dat files... And full-icu seems to be my savior here, it knows how to handle all of these !

Here's a basic example (index.js)

const icu = require('full-icu');
console.log(icu);

const dateKO = new Date('2022-08-14').toLocaleDateString('ko-KR', { day: 'numeric', month: 'short', year: 'numeric' });
console.log(dateKO);

const dateFR = new Date('2022-08-14').toLocaleDateString('fr-FR', { day: 'numeric', month: 'short', year: 'numeric' });
console.log(dateFR);

If I run it inside a node docker (my usual dev environment), I get

{
  nodever: '14.19.1',
  node_maj: '14',
  node_min: '19',
  icu_small: false,
  icuver: '70.1',
  icumaj: '70',
  icuend: 'l',
  icupkg: 'icu4c-data@70l',
  icudat: 'icudt70l.dat',
  haveDat: [Function: haveDat],
  datPath: [Function: datPath]
}
2022년 8월 14일
14 août 2022

But once I package it, I get

{
  nodever: '14.20.0',
  node_maj: '14',
  node_min: '20',
  icu_small: true,
  icuver: '70.1',
  icumaj: '70',
  icuend: 'l',
  icupkg: 'icu4c-data@70l',
  icudat: 'icudt70l.dat',
  haveDat: [Function: haveDat],
  datPath: [Function: datPath]
}
Aug 14, 2022
Aug 14, 2022

Many thanks in advance ! 🙏

AugustinMauroy commented 1 year ago

Hey! Sorry for the latence. But, wdym by "I package it". Have you an repo for this code to test every things.

TBG-FR commented 1 year ago

Hey! Sorry for the latence. But, wdym by "I package it". Have you an repo for this code to test every things.

No worries 😉 I detailed every step here https://github.com/vercel/pkg/issues/1731

srl295 commented 1 year ago

Hey! Sorry for the latence. But, wdym by "I package it". Have you an repo for this code to test every things.

No worries 😉 I detailed every step here https://github.com/vercel/pkg/issues/1731

This isn't a packagable package. It's a loading hack. In short: Don't prepackage it... more on this later.

srl295 commented 1 year ago

You could help us split full icu into a Helper library maybe ?