nodejs / nodejs/full-icu-npm

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

Open
#77 5 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
156
Forks
29
PR merge metrics
No merged PRs in 30d

Description

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 ! 🙏

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the package's current small-icu check, using the issue's index.js reproduction and the Node 14.20.0/pkg comparison to understand the differing behavior. Define how the proposed option should behave in full-icu environments and verify that the requested icudtxxy.dat file is downloaded; done means the package can obtain it without requiring small-icu.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js
Domain
tooling
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.