| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent e5b4af4 commit de6f1f5
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,8 +39,6 @@ function startup() { | |||
| 39 | 39 | // Do this good and early, since it handles errors. | |
| 40 | 40 | setupProcessFatal(); | |
| 41 | 41 | ||
| 42 | - setupProcessICUVersions(); | ||
| 43 | - | ||
| 44 | 42 | setupGlobalVariables(); | |
| 45 | 43 | ||
| 46 | 44 | // Bootstrappers for all threads, including worker threads and main thread | |
@@ -647,25 +645,6 @@ function setupProcessFatal() { | |||
| 647 | 645 | }; | |
| 648 | 646 | } | |
| 649 | 647 | ||
| 650 | - function setupProcessICUVersions() { | ||
| 651 | - const icu = internalBinding('config').hasIntl ? | ||
| 652 | - internalBinding('icu') : undefined; | ||
| 653 | - if (!icu) return; // no Intl/ICU: nothing to add here. | ||
| 654 | - // With no argument, getVersion() returns a comma separated list | ||
| 655 | - // of possible types. | ||
| 656 | - const versionTypes = icu.getVersion().split(','); | ||
| 657 | - | ||
| 658 | - for (var n = 0; n < versionTypes.length; n++) { | ||
| 659 | - const name = versionTypes[n]; | ||
| 660 | - const version = icu.getVersion(name); | ||
| 661 | - Object.defineProperty(process.versions, name, { | ||
| 662 | - writable: false, | ||
| 663 | - enumerable: true, | ||
| 664 | - value: version | ||
| 665 | - }); | ||
| 666 | - } | ||
| 667 | - } | ||
| 668 | - | ||
| 669 | 648 | function wrapForBreakOnFirstLine(source) { | |
| 670 | 649 | if (!process._breakFirstLine) | |
| 671 | 650 | return source; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -880,7 +880,10 @@ void SetupProcessObject(Environment* env, | |||
| 880 | 880 | READONLY_PROPERTY(process, "versions", versions); | |
| 881 | 881 | ||
| 882 | 882 | #define V(key) \ | |
| 883 | - READONLY_STRING_PROPERTY(versions, #key, per_process::metadata.versions.key); | ||
| 883 | + if (!per_process::metadata.versions.key.empty()) { \ | ||
| 884 | + READONLY_STRING_PROPERTY( \ | ||
| 885 | + versions, #key, per_process::metadata.versions.key); \ | ||
| 886 | + } | ||
| 884 | 887 | NODE_VERSIONS_KEYS(V) | |
| 885 | 888 | #undef V | |
| 886 | 889 | ||
@@ -1672,6 +1675,7 @@ void Init(std::vector<std::string>* argv, | |||
| 1672 | 1675 | argv->at(0).c_str()); | |
| 1673 | 1676 | exit(9); | |
| 1674 | 1677 | } | |
| 1678 | + per_process::metadata.versions.InitializeIntlVersions(); | ||
| 1675 | 1679 | #endif | |
| 1676 | 1680 | ||
| 1677 | 1681 | // We should set node_is_initialized here instead of in node::Start, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -510,67 +510,6 @@ void ICUErrorName(const FunctionCallbackInfo<Value>& args) { | |||
| 510 | 510 | NewStringType::kNormal).ToLocalChecked()); | |
| 511 | 511 | } | |
| 512 | 512 | ||
| 513 | - #define TYPE_ICU "icu" | ||
| 514 | - #define TYPE_UNICODE "unicode" | ||
| 515 | - #define TYPE_CLDR "cldr" | ||
| 516 | - #define TYPE_TZ "tz" | ||
| 517 | - | ||
| 518 | - /** | ||
| 519 | - * This is the workhorse function that deals with the actual version info. | ||
| 520 | - * Get an ICU version. | ||
| 521 | - * @param type the type of version to get. One of VERSION_TYPES | ||
| 522 | - * @param buf optional buffer for result | ||
| 523 | - * @param status ICU error status. If failure, assume result is undefined. | ||
| 524 | - * @return version number, or NULL. May or may not be buf. | ||
| 525 | - */ | ||
| 526 | - const char* GetVersion(const char* type, | ||
| 527 | - char buf[U_MAX_VERSION_STRING_LENGTH], | ||
| 528 | - UErrorCode* status) { | ||
| 529 | - if (!strcmp(type, TYPE_ICU)) { | ||
| 530 | - return U_ICU_VERSION; | ||
| 531 | - } else if (!strcmp(type, TYPE_UNICODE)) { | ||
| 532 | - return U_UNICODE_VERSION; | ||
| 533 | - } else if (!strcmp(type, TYPE_TZ)) { | ||
| 534 | - return icu::TimeZone::getTZDataVersion(*status); | ||
| 535 | - } else if (!strcmp(type, TYPE_CLDR)) { | ||
| 536 | - UVersionInfo versionArray; | ||
| 537 | - ulocdata_getCLDRVersion(versionArray, status); | ||
| 538 | - if (U_SUCCESS(*status)) { | ||
| 539 | - u_versionToString(versionArray, buf); | ||
| 540 | - return buf; | ||
| 541 | - } | ||
| 542 | - } | ||
| 543 | - // Fall through - unknown type or error case | ||
| 544 | - return nullptr; | ||
| 545 | - } | ||
| 546 | - | ||
| 547 | - void GetVersion(const FunctionCallbackInfo<Value>& args) { | ||
| 548 | - Environment* env = Environment::GetCurrent(args); | ||
| 549 | - if ( args.Length() == 0 ) { | ||
| 550 | - // With no args - return a comma-separated list of allowed values | ||
| 551 | - args.GetReturnValue().Set( | ||
| 552 | - String::NewFromUtf8(env->isolate(), | ||
| 553 | - TYPE_ICU "," | ||
| 554 | - TYPE_UNICODE "," | ||
| 555 | - TYPE_CLDR "," | ||
| 556 | - TYPE_TZ, NewStringType::kNormal).ToLocalChecked()); | ||
| 557 | - } else { | ||
| 558 | - CHECK_GE(args.Length(), 1); | ||
| 559 | - CHECK(args[0]->IsString()); | ||
| 560 | - Utf8Value val(env->isolate(), args[0]); | ||
| 561 | - UErrorCode status = U_ZERO_ERROR; | ||
| 562 | - char buf[U_MAX_VERSION_STRING_LENGTH] = ""; // Possible output buffer. | ||
| 563 | - const char* versionString = GetVersion(*val, buf, &status); | ||
| 564 | - | ||
| 565 | - if (U_SUCCESS(status) && versionString) { | ||
| 566 | - // Success. | ||
| 567 | - args.GetReturnValue().Set( | ||
| 568 | - String::NewFromUtf8(env->isolate(), | ||
| 569 | - versionString, NewStringType::kNormal).ToLocalChecked()); | ||
| 570 | - } | ||
| 571 | - } | ||
| 572 | - } | ||
| 573 | - | ||
| 574 | 513 | } // anonymous namespace | |
| 575 | 514 | ||
| 576 | 515 | bool InitializeICUDirectory(const std::string& path) { | |
@@ -868,7 +807,6 @@ void Initialize(Local<Object> target, | |||
| 868 | 807 | env->SetMethod(target, "toUnicode", ToUnicode); | |
| 869 | 808 | env->SetMethod(target, "toASCII", ToASCII); | |
| 870 | 809 | env->SetMethod(target, "getStringWidth", GetStringWidth); | |
| 871 | - env->SetMethod(target, "getVersion", GetVersion); | ||
| 872 | 810 | ||
| 873 | 811 | // One-shot converters | |
| 874 | 812 | env->SetMethod(target, "icuErrName", ICUErrorName); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -12,6 +12,13 @@ | |||
| 12 | 12 | #include <openssl/opensslv.h> | |
| 13 | 13 | #endif // HAVE_OPENSSL | |
| 14 | 14 | ||
| 15 | + #ifdef NODE_HAVE_I18N_SUPPORT | ||
| 16 | + #include <unicode/timezone.h> | ||
| 17 | + #include <unicode/ulocdata.h> | ||
| 18 | + #include <unicode/uvernum.h> | ||
| 19 | + #include <unicode/uversion.h> | ||
| 20 | + #endif // NODE_HAVE_I18N_SUPPORT | ||
| 21 | + | ||
| 15 | 22 | namespace node { | |
| 16 | 23 | ||
| 17 | 24 | namespace per_process { | |
@@ -35,6 +42,25 @@ std::string GetOpenSSLVersion() { | |||
| 35 | 42 | } | |
| 36 | 43 | #endif // HAVE_OPENSSL | |
| 37 | 44 | ||
| 45 | + #ifdef NODE_HAVE_I18N_SUPPORT | ||
| 46 | + void Metadata::Versions::InitializeIntlVersions() { | ||
| 47 | + UErrorCode status = U_ZERO_ERROR; | ||
| 48 | + | ||
| 49 | + const char* tz_version = icu::TimeZone::getTZDataVersion(status); | ||
| 50 | + if (U_SUCCESS(status)) { | ||
| 51 | + tz = tz_version; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + char buf[U_MAX_VERSION_STRING_LENGTH]; | ||
| 55 | + UVersionInfo versionArray; | ||
| 56 | + ulocdata_getCLDRVersion(versionArray, &status); | ||
| 57 | + if (U_SUCCESS(status)) { | ||
| 58 | + u_versionToString(versionArray, buf); | ||
| 59 | + cldr = buf; | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + #endif // NODE_HAVE_I18N_SUPPORT | ||
| 63 | + | ||
| 38 | 64 | Metadata::Versions::Versions() { | |
| 39 | 65 | node = NODE_VERSION_STRING; | |
| 40 | 66 | v8 = v8::V8::GetVersion(); | |
@@ -57,6 +83,11 @@ Metadata::Versions::Versions() { | |||
| 57 | 83 | #if HAVE_OPENSSL | |
| 58 | 84 | openssl = GetOpenSSLVersion(); | |
| 59 | 85 | #endif | |
| 86 | + | ||
| 87 | + #ifdef NODE_HAVE_I18N_SUPPORT | ||
| 88 | + icu = U_ICU_VERSION; | ||
| 89 | + unicode = U_UNICODE_VERSION; | ||
| 90 | + #endif // NODE_HAVE_I18N_SUPPORT | ||
| 60 | 91 | } | |
| 61 | 92 | ||
| 62 | 93 | } // namespace node | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -26,14 +26,38 @@ namespace node { | |||
| 26 | 26 | #define NODE_VERSIONS_KEY_CRYPTO(V) | |
| 27 | 27 | #endif | |
| 28 | 28 | ||
| 29 | + #ifdef NODE_HAVE_I18N_SUPPORT | ||
| 30 | + #define NODE_VERSIONS_KEY_INTL(V) \ | ||
| 31 | + V(cldr) \ | ||
| 32 | + V(icu) \ | ||
| 33 | + V(tz) \ | ||
| 34 | + V(unicode) | ||
| 35 | + #else | ||
| 36 | + #define NODE_VERSIONS_KEY_INTL(V) | ||
| 37 | + #endif // NODE_HAVE_I18N_SUPPORT | ||
| 38 | + | ||
| 29 | 39 | #define NODE_VERSIONS_KEYS(V) \ | |
| 30 | 40 | NODE_VERSIONS_KEYS_BASE(V) \ | |
| 31 | - NODE_VERSIONS_KEY_CRYPTO(V) | ||
| 41 | + NODE_VERSIONS_KEY_CRYPTO(V) \ | ||
| 42 | + NODE_VERSIONS_KEY_INTL(V) | ||
| 32 | 43 | ||
| 33 | 44 | class Metadata { | |
| 34 | 45 | public: | |
| 46 | + Metadata() = default; | ||
| 47 | + Metadata(Metadata&) = delete; | ||
| 48 | + Metadata(Metadata&&) = delete; | ||
| 49 | + Metadata operator=(Metadata&) = delete; | ||
| 50 | + Metadata operator=(Metadata&&) = delete; | ||
| 51 | + | ||
| 35 | 52 | struct Versions { | |
| 36 | 53 | Versions(); | |
| 54 | + | ||
| 55 | + #ifdef NODE_HAVE_I18N_SUPPORT | ||
| 56 | + // Must be called on the main thread after | ||
| 57 | + // i18n::InitializeICUDirectory() | ||
| 58 | + void InitializeIntlVersions(); | ||
| 59 | + #endif // NODE_HAVE_I18N_SUPPORT | ||
| 60 | + | ||
| 37 | 61 | #define V(key) std::string key; | |
| 38 | 62 | NODE_VERSIONS_KEYS(V) | |
| 39 | 63 | #undef V | |
| Back | FazBrowse Home | New Git URL |
0 commit comments