@zohodesk/client_build_tool 0.0.19-i18n-exp.0 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,35 @@
1
1
  # Changelog and Release Notes
2
2
 
3
- # v0.0.18 (23-12-2025)
3
+ # v0.0.19 (06-01-2026)
4
+
5
+ **Feature:-**
6
+ - During class name generation, when the template included the file name, it was converted to lowercase by default. Support has now been added to include the file name as class names in a case-insensitive manner.
7
+
8
+ ```
9
+ css: {
10
+ classNameOptions: {
11
+ caseOnlyFilename: true
12
+ }
13
+ }
14
+ ```
15
+
16
+
17
+ **Adjustments:-**
18
+ - issue in CssCustomOrderPlugin has been fixed
19
+ - customChunks default pattern for styles is removed (important)
20
+
21
+
22
+ # v0.0.18 (23-12-2025)(issue in CssCustomOrderPlugin)
4
23
 
5
24
  **Adjustments:-**
6
25
  - remove the unwanted console in the previous version
7
26
  - html not creation issue due to the generate html option fixed
8
27
 
9
- # v0.0.17 (22-12-2025)
28
+ # v0.0.17 (22-12-2025) (html not creation issue) (issue in CssCustomOrderPlugin)
29
+
30
+ **revert:-**
31
+ - InjectChunkGraphPlugin and the pfc and plc functions were reverted due to UAT issues unrelated to our tool. Consequently, the plugin could not be included in this version. we rewriting the plc and pfc in resource hints plugins recently, it will function correctly when the new plugin is enabled,so revert this changes from this version
32
+
10
33
 
11
34
  **Feature:-**
12
35
  - `alias` support for `build:es` and `build:lib`
@@ -20,7 +43,7 @@
20
43
  - ChunkHierarchyPlugin.js – modified and rewrite the plugin to get the proper output (this is the stable version of this plugin).
21
44
 
22
45
 
23
- # v0.0.16 (05-11-2025)
46
+ # v0.0.16 (05-11-2025) (deprecated)
24
47
 
25
48
  **Adjustments:-**
26
49
  - ChunkHierarchyPlugin.js – Added support for ConcatenatedModule modules.
@@ -29,7 +52,7 @@
29
52
  - Source map path correction – The resolving paths in source map files appeared as zohodesk-react/./src, which was incompatible with the Murphy tool. Updated it to zohodesk-react/src by adding a function to devtoolModuleFilenameTemplate in the output configuration.
30
53
  - ChunkHierarchyPlugin – Made it active in development mode as well by removing the “run only in production” condition.
31
54
 
32
- # v0.0.15 (11-10-2025)
55
+ # v0.0.15 (11-10-2025) (deprecated)
33
56
 
34
57
  **Feature:-**
35
58
  - Chunk Dependency Mapping: Added a new feature that generates a JSON file listing all chunk dependencies in the Webpack build
@@ -46,7 +69,9 @@ To provide clear visibility into chunk relationships and dependencies for debugg
46
69
 
47
70
  - Preload Chunk Split Visualization
48
71
  Enhanced the Preload Chunk (PLC) mechanism to identify and list the sub-chunks generated from a preloaded parent chunk.
49
- When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it — for example
72
+ When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it
73
+
74
+ rewrite the plc and pfc fucntion in resourceHints plugin and created a new plugin to inject the sub chunks of the preloaded chunks in runtime file
50
75
 
51
76
  if resourceHints not enabled plc , pfc and custom function related to this are not created
52
77
 
package/README.md CHANGED
@@ -475,202 +475,36 @@ First Release
475
475
  - 'templates' command to create es for react library
476
476
  # Changelog and Release Notes
477
477
 
478
- # v0.0.18 (23-12-2025)
479
-
480
- **Adjustments:-**
481
- - remove the unwanted console in the previous version
482
- - html not creation issue due to the generate html option fixed
483
-
484
- # v0.0.17 (22-12-2025)
485
-
486
- **Feature:-**
487
- - `alias` support for `build:es` and `build:lib`
488
- - Add babel-plugin-module-resolver dependencies for library only
489
- - Modify getBabelPlugin to include module resolver with aliases
490
- - An additional entry point support has been added.
491
- - An option for HTML generation has been provided.
492
- - Support for CssCustomOrderPlugin has been added.
493
-
494
- **Adjustments:-**
495
- - ChunkHierarchyPlugin.js – modified and rewrite the plugin to get the proper output (this is the stable version of this plugin).
496
-
497
-
498
- # v0.0.16 (05-11-2025)
499
-
500
- **Adjustments:-**
501
- - ChunkHierarchyPlugin.js – Added support for ConcatenatedModule modules.
502
- - InjectChunkGraphPlugin.js – Changed the template name from {{--preload-chunk-graph-object}} to __PRELOAD_CHUNK_GRAPH__ to resolve minification issues.
503
- - Disabled CSS source map generation – CSS source maps were being created when RTL split was disabled and sourceMap was enabled, causing issues. Hence, CSS source map creation has been disabled
504
- - Source map path correction – The resolving paths in source map files appeared as zohodesk-react/./src, which was incompatible with the Murphy tool. Updated it to zohodesk-react/src by adding a function to devtoolModuleFilenameTemplate in the output configuration.
505
- - ChunkHierarchyPlugin – Made it active in development mode as well by removing the “run only in production” condition.
506
-
507
- # v0.0.15 (11-10-2025)
478
+ # v0.0.19 (06-01-2026)
508
479
 
509
480
  **Feature:-**
510
- - Chunk Dependency Mapping: Added a new feature that generates a JSON file listing all chunk dependencies in the Webpack build
511
- For example, if main.js is a chunk, the generated JSON will include all of its direct imports (dependencies).
512
- - Purpose:
513
- To provide clear visibility into chunk relationships and dependencies for debugging, optimization, and performance analysis.
481
+ - During class name generation, when the template included the file name, it was converted to lowercase by default. Support has now been added to include the file name as class names in a case-insensitive manner.
514
482
 
515
483
  ```
516
- chunkGraph:{
517
- enable: { value: true },
518
- fileName: ''
484
+ css: {
485
+ classNameOptions: {
486
+ caseOnlyFilename: true
487
+ }
519
488
  }
520
489
  ```
521
490
 
522
- - Preload Chunk Split Visualization
523
- Enhanced the Preload Chunk (PLC) mechanism to identify and list the sub-chunks generated from a preloaded parent chunk.
524
- When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it — for example
525
491
 
526
- if resourceHints not enabled plc , pfc and custom function related to this are not created
527
-
528
- ```
529
- resourceHints: {
530
- enable: true,
531
- PreloadChunkNames: [//name of chunks to be preload//]
532
- },
533
- ```
534
-
535
-
536
- # v0.0.14 (06-10-2025)
537
-
538
- **Feature:-**
539
- - Added integrity and crossorigin attributes for all the js and css files in index.html
540
-
541
- ```enableSubResourceIntegrity: true
542
- ```
543
492
  **Adjustments:-**
544
- - add ts-loader to parse tsx and ts files
545
-
546
- # v0.0.13 (02-09-2025)
547
-
548
- **Adjustments:-**
549
- - Source map files are created in the smap/ folder by default. However, they are also being created in the js/ folder to resolve the issue where Murphy was unable to locate them.
550
-
551
- **Feature:-**
552
- - Added support for Murphy to be built as a separate chunk and injected as the top script in the initial HTML.
553
- - To enable this support , add this in your configuration
554
-
555
- ```murphyBootstrapHtml{
556
- enable: true,
557
- chunkName: '',
558
- filePath: ''
559
- }```
560
-
561
-
562
-
563
- # v0.0.12 (14-08-2025)
564
-
565
- - Fixed the initial i18n loading issue caused by using the same function in both the i18nRuntimeDealer plugin and decidePublicPath
566
-
567
- # v0.0.11 (07-08-2025) (had an issue while enable i18n chunk split plugin)
568
- - remove babel-plugin-module-resolver dependencies
569
-
570
- **Adjustments:-**
571
- - Public Folder configuration is separated for development and production
572
-
573
- **Bug Fix:-**
574
- - Fixed the issue where the build log was not visible when `stats (bundle integrity)` was enabled. The problem was resolved by adding an error check in the `bundleIntegrity plugin`.
575
- - Removed the babel-plugin-module-resolver dependency to resolve the alias resolution issue in the application.
576
- - Fixed the issue where a space in the variable name causes it to return an undefined value.
577
- - Fixed the URL path generation issue that occurred while using context in the development setup.
578
-
579
-
580
- # v0.0.10 (12-05-2025)
581
- **Feature:-**
582
- - `alias` support for `build:es` and `build:lib`
583
- - Add babel-plugin-module-resolver dependencies
584
- - Modify getBabelPlugin to include module resolver with aliases
585
-
586
- **Bug Fix:-**
587
- - Enhance runBabelForTSFile to handle both .tsx and .ts file extensions
588
- - Update mockApiHandler to ensure mock function is called correctly
589
-
590
- **Change:-**
591
- - Refactor defaultConfigValues.js to include cli options for enableRTLSplit
592
-
593
- ## v0.0.9
594
-
595
- **Feature:-**
596
- - externals was added to Prevent bundling of certain imported packages and retrieve these external dependencies at runtime.
597
- - to use externals, we use the following pattern in `app > externals` :
598
-
599
- For example
600
- ```
601
- externals: {
602
- <key> : <value>
603
- }
604
- ```
493
+ - issue in CssCustomOrderPlugin has been fixed
494
+ - customChunks default pattern for styles is removed (important)
605
495
 
606
- ## v0.0.6 (4-09-2023)
607
496
 
608
- **Feature:-**
609
- - Generating bundle integrity report json file for the build assets only in production mode. To use this feature we need to add `stats > enable` or cli flags `enable_stats`.
610
- - Added Resource Cleanup plugin to cleanup resource retained by build tool. this plugin is controlled by efc flag resourcecleanup flag.
611
- - added support for using regex expression to get group of chunks chunkId via Resource Hint plugin prefetch/preload hook.
612
- only will be activate when `resourceHints` => `allowPrefetchingMultipleChunks` as `true`
613
- - added support for glob pattern for custom chunks split logic.
614
- - added options to split chunks base config in the key `app` => `customChunksBaseConfig` as object
615
-
616
- **Change:-**
617
- - i18n name not generated issue fix.
618
- - public path not correctly set issue fix.
619
- - changing plugin hook stages in i18nRuntimePlugin and sourceMapPlugin
620
- ## v0.0.5 (6-08-2023)
621
-
622
- **Changes:--**
623
- - Typo fix in i18nRuntimeDealerPlugin.js
624
- - fixing some bugs in resolvers.js file
625
-
626
- ## v0.0.3 (1-08-2023)
627
-
628
- **Changes:--**
629
- - `devtool` default value changed from `hidden-cheap-source-map` to `source-map`
630
- - unwanted files deleted from build
631
-
632
- **Issue Fix:--**
633
- - The issue with the source map not being created in the build has been fixed."
634
-
635
-
636
- ## v0.0.2 (28-04-2023)
637
-
638
- **Features:-**
639
-
640
- - `devModeContentHashAllowedTypes` support added for some project there will be a need for hash even though they run dev mode. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#devModeContentHashAllowedTypes)
641
- - `devLikeHash` support for disable content hash for file names in production mode. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#devLikeHash)
642
- - `disableReactDevWarning` disable react dev warning such as prop-type warnings will be removed in dev mode build or server. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#disableReactDevWarning) can be enabled via `--disable_react_dev_warning` too.
643
- - `statsLogConfig` support to customize default webpack log after build finished. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#statsLogConfig) can be enabled via `--disable_react_dev_warning` too.
644
- - `enableChunkHash` renamed as `enableFileNameHashing`
645
-
646
- - `pre_processor` command to run the preprocessor.js file.preProcessor runs in build, start, buildEs, buildLib commands bu default. and we have watch mode support as well with the option (`-w`)
647
- - `createSeparateSmap` flag `source_map_enable` renamed as `enable_smap`
648
- - `removeAttribute` option changes as `babelCustomizations.removeAttribute`
649
- - `removePropTypes` support for remove the prop types package in the output build.
650
- - `devConsoleExclude` support for remove the _console statements_ such as _console.log_, _console.warn_ in the output build.
651
- - `manifestJson` default value set as false.
652
- - `customAttributes` support for add attributes to html, link , script tag in the output build.
653
-
654
-
655
- ## v0.0.1 (18-04-2023)
656
-
657
- First Release
658
- **Features:-**
659
-
660
- - 'start' command to run react app
661
- - 'build' command to create build for react app
662
- - 'build:lib' command to create lib for react library
663
- - 'build:es' command to create es for react library
664
- - 'templates' command to create es for react library
665
- # Changelog and Release Notes
666
-
667
- # v0.0.18 (23-12-2025)
497
+ # v0.0.18 (23-12-2025)(issue in CssCustomOrderPlugin)
668
498
 
669
499
  **Adjustments:-**
670
500
  - remove the unwanted console in the previous version
671
501
  - html not creation issue due to the generate html option fixed
672
502
 
673
- # v0.0.17 (22-12-2025)
503
+ # v0.0.17 (22-12-2025) (html not creation issue) (issue in CssCustomOrderPlugin)
504
+
505
+ **revert:-**
506
+ - InjectChunkGraphPlugin and the pfc and plc functions were reverted due to UAT issues unrelated to our tool. Consequently, the plugin could not be included in this version. we rewriting the plc and pfc in resource hints plugins recently, it will function correctly when the new plugin is enabled,so revert this changes from this version
507
+
674
508
 
675
509
  **Feature:-**
676
510
  - `alias` support for `build:es` and `build:lib`
@@ -684,7 +518,7 @@ First Release
684
518
  - ChunkHierarchyPlugin.js – modified and rewrite the plugin to get the proper output (this is the stable version of this plugin).
685
519
 
686
520
 
687
- # v0.0.16 (05-11-2025)
521
+ # v0.0.16 (05-11-2025) (deprecated)
688
522
 
689
523
  **Adjustments:-**
690
524
  - ChunkHierarchyPlugin.js – Added support for ConcatenatedModule modules.
@@ -693,7 +527,7 @@ First Release
693
527
  - Source map path correction – The resolving paths in source map files appeared as zohodesk-react/./src, which was incompatible with the Murphy tool. Updated it to zohodesk-react/src by adding a function to devtoolModuleFilenameTemplate in the output configuration.
694
528
  - ChunkHierarchyPlugin – Made it active in development mode as well by removing the “run only in production” condition.
695
529
 
696
- # v0.0.15 (11-10-2025)
530
+ # v0.0.15 (11-10-2025) (deprecated)
697
531
 
698
532
  **Feature:-**
699
533
  - Chunk Dependency Mapping: Added a new feature that generates a JSON file listing all chunk dependencies in the Webpack build
@@ -710,7 +544,9 @@ To provide clear visibility into chunk relationships and dependencies for debugg
710
544
 
711
545
  - Preload Chunk Split Visualization
712
546
  Enhanced the Preload Chunk (PLC) mechanism to identify and list the sub-chunks generated from a preloaded parent chunk.
713
- When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it — for example
547
+ When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it
548
+
549
+ rewrite the plc and pfc fucntion in resourceHints plugin and created a new plugin to inject the sub chunks of the preloaded chunks in runtime file
714
550
 
715
551
  if resourceHints not enabled plc , pfc and custom function related to this are not created
716
552
 
package/README_backup.md CHANGED
@@ -463,195 +463,6 @@ For example
463
463
  - `customAttributes` support for add attributes to html, link , script tag in the output build.
464
464
 
465
465
 
466
- ## v0.0.1 (18-04-2023)
467
-
468
- First Release
469
- **Features:-**
470
-
471
- - 'start' command to run react app
472
- - 'build' command to create build for react app
473
- - 'build:lib' command to create lib for react library
474
- - 'build:es' command to create es for react library
475
- - 'templates' command to create es for react library
476
- # Changelog and Release Notes
477
-
478
- # v0.0.18 (23-12-2025)
479
-
480
- **Adjustments:-**
481
- - remove the unwanted console in the previous version
482
- - html not creation issue due to the generate html option fixed
483
-
484
- # v0.0.17 (22-12-2025)
485
-
486
- **Feature:-**
487
- - `alias` support for `build:es` and `build:lib`
488
- - Add babel-plugin-module-resolver dependencies for library only
489
- - Modify getBabelPlugin to include module resolver with aliases
490
- - An additional entry point support has been added.
491
- - An option for HTML generation has been provided.
492
- - Support for CssCustomOrderPlugin has been added.
493
-
494
- **Adjustments:-**
495
- - ChunkHierarchyPlugin.js – modified and rewrite the plugin to get the proper output (this is the stable version of this plugin).
496
-
497
-
498
- # v0.0.16 (05-11-2025)
499
-
500
- **Adjustments:-**
501
- - ChunkHierarchyPlugin.js – Added support for ConcatenatedModule modules.
502
- - InjectChunkGraphPlugin.js – Changed the template name from {{--preload-chunk-graph-object}} to __PRELOAD_CHUNK_GRAPH__ to resolve minification issues.
503
- - Disabled CSS source map generation – CSS source maps were being created when RTL split was disabled and sourceMap was enabled, causing issues. Hence, CSS source map creation has been disabled
504
- - Source map path correction – The resolving paths in source map files appeared as zohodesk-react/./src, which was incompatible with the Murphy tool. Updated it to zohodesk-react/src by adding a function to devtoolModuleFilenameTemplate in the output configuration.
505
- - ChunkHierarchyPlugin – Made it active in development mode as well by removing the “run only in production” condition.
506
-
507
- # v0.0.15 (11-10-2025)
508
-
509
- **Feature:-**
510
- - Chunk Dependency Mapping: Added a new feature that generates a JSON file listing all chunk dependencies in the Webpack build
511
- For example, if main.js is a chunk, the generated JSON will include all of its direct imports (dependencies).
512
- - Purpose:
513
- To provide clear visibility into chunk relationships and dependencies for debugging, optimization, and performance analysis.
514
-
515
- ```
516
- chunkGraph:{
517
- enable: { value: true },
518
- fileName: ''
519
- }
520
- ```
521
-
522
- - Preload Chunk Split Visualization
523
- Enhanced the Preload Chunk (PLC) mechanism to identify and list the sub-chunks generated from a preloaded parent chunk.
524
- When a chunk is configured for preloading (e.g., ticket.js), the system now traces and records all the split chunks associated with it — for example
525
-
526
- if resourceHints not enabled plc , pfc and custom function related to this are not created
527
-
528
- ```
529
- resourceHints: {
530
- enable: true,
531
- PreloadChunkNames: [//name of chunks to be preload//]
532
- },
533
- ```
534
-
535
-
536
- # v0.0.14 (06-10-2025)
537
-
538
- **Feature:-**
539
- - Added integrity and crossorigin attributes for all the js and css files in index.html
540
-
541
- ```enableSubResourceIntegrity: true
542
- ```
543
- **Adjustments:-**
544
- - add ts-loader to parse tsx and ts files
545
-
546
- # v0.0.13 (02-09-2025)
547
-
548
- **Adjustments:-**
549
- - Source map files are created in the smap/ folder by default. However, they are also being created in the js/ folder to resolve the issue where Murphy was unable to locate them.
550
-
551
- **Feature:-**
552
- - Added support for Murphy to be built as a separate chunk and injected as the top script in the initial HTML.
553
- - To enable this support , add this in your configuration
554
-
555
- ```murphyBootstrapHtml{
556
- enable: true,
557
- chunkName: '',
558
- filePath: ''
559
- }```
560
-
561
-
562
-
563
- # v0.0.12 (14-08-2025)
564
-
565
- - Fixed the initial i18n loading issue caused by using the same function in both the i18nRuntimeDealer plugin and decidePublicPath
566
-
567
- # v0.0.11 (07-08-2025) (had an issue while enable i18n chunk split plugin)
568
- - remove babel-plugin-module-resolver dependencies
569
-
570
- **Adjustments:-**
571
- - Public Folder configuration is separated for development and production
572
-
573
- **Bug Fix:-**
574
- - Fixed the issue where the build log was not visible when `stats (bundle integrity)` was enabled. The problem was resolved by adding an error check in the `bundleIntegrity plugin`.
575
- - Removed the babel-plugin-module-resolver dependency to resolve the alias resolution issue in the application.
576
- - Fixed the issue where a space in the variable name causes it to return an undefined value.
577
- - Fixed the URL path generation issue that occurred while using context in the development setup.
578
-
579
-
580
- # v0.0.10 (12-05-2025)
581
- **Feature:-**
582
- - `alias` support for `build:es` and `build:lib`
583
- - Add babel-plugin-module-resolver dependencies
584
- - Modify getBabelPlugin to include module resolver with aliases
585
-
586
- **Bug Fix:-**
587
- - Enhance runBabelForTSFile to handle both .tsx and .ts file extensions
588
- - Update mockApiHandler to ensure mock function is called correctly
589
-
590
- **Change:-**
591
- - Refactor defaultConfigValues.js to include cli options for enableRTLSplit
592
-
593
- ## v0.0.9
594
-
595
- **Feature:-**
596
- - externals was added to Prevent bundling of certain imported packages and retrieve these external dependencies at runtime.
597
- - to use externals, we use the following pattern in `app > externals` :
598
-
599
- For example
600
- ```
601
- externals: {
602
- <key> : <value>
603
- }
604
- ```
605
-
606
- ## v0.0.6 (4-09-2023)
607
-
608
- **Feature:-**
609
- - Generating bundle integrity report json file for the build assets only in production mode. To use this feature we need to add `stats > enable` or cli flags `enable_stats`.
610
- - Added Resource Cleanup plugin to cleanup resource retained by build tool. this plugin is controlled by efc flag resourcecleanup flag.
611
- - added support for using regex expression to get group of chunks chunkId via Resource Hint plugin prefetch/preload hook.
612
- only will be activate when `resourceHints` => `allowPrefetchingMultipleChunks` as `true`
613
- - added support for glob pattern for custom chunks split logic.
614
- - added options to split chunks base config in the key `app` => `customChunksBaseConfig` as object
615
-
616
- **Change:-**
617
- - i18n name not generated issue fix.
618
- - public path not correctly set issue fix.
619
- - changing plugin hook stages in i18nRuntimePlugin and sourceMapPlugin
620
- ## v0.0.5 (6-08-2023)
621
-
622
- **Changes:--**
623
- - Typo fix in i18nRuntimeDealerPlugin.js
624
- - fixing some bugs in resolvers.js file
625
-
626
- ## v0.0.3 (1-08-2023)
627
-
628
- **Changes:--**
629
- - `devtool` default value changed from `hidden-cheap-source-map` to `source-map`
630
- - unwanted files deleted from build
631
-
632
- **Issue Fix:--**
633
- - The issue with the source map not being created in the build has been fixed."
634
-
635
-
636
- ## v0.0.2 (28-04-2023)
637
-
638
- **Features:-**
639
-
640
- - `devModeContentHashAllowedTypes` support added for some project there will be a need for hash even though they run dev mode. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#devModeContentHashAllowedTypes)
641
- - `devLikeHash` support for disable content hash for file names in production mode. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#devLikeHash)
642
- - `disableReactDevWarning` disable react dev warning such as prop-type warnings will be removed in dev mode build or server. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#disableReactDevWarning) can be enabled via `--disable_react_dev_warning` too.
643
- - `statsLogConfig` support to customize default webpack log after build finished. for details [details](https://zgit.csez.zohocorpin.com/zohodesk/react-cli/-/blob/3.0.0/packages/client_build_tool/ConfigurationDocumentation.md#statsLogConfig) can be enabled via `--disable_react_dev_warning` too.
644
- - `enableChunkHash` renamed as `enableFileNameHashing`
645
-
646
- - `pre_processor` command to run the preprocessor.js file.preProcessor runs in build, start, buildEs, buildLib commands bu default. and we have watch mode support as well with the option (`-w`)
647
- - `createSeparateSmap` flag `source_map_enable` renamed as `enable_smap`
648
- - `removeAttribute` option changes as `babelCustomizations.removeAttribute`
649
- - `removePropTypes` support for remove the prop types package in the output build.
650
- - `devConsoleExclude` support for remove the _console statements_ such as _console.log_, _console.warn_ in the output build.
651
- - `manifestJson` default value set as false.
652
- - `customAttributes` support for add attributes to html, link , script tag in the output build.
653
-
654
-
655
466
  ## v0.0.1 (18-04-2023)
656
467
 
657
468
  First Release
@@ -112,6 +112,7 @@ var _default = {
112
112
  blob: '[prefix]-[filename]-[local]',
113
113
  patterns: []
114
114
  }],
115
+ caseOnlyFilename: false,
115
116
  classNamePrefix: 'zd'
116
117
  },
117
118
  // NOTE: Suggestions
@@ -179,27 +180,6 @@ var _default = {
179
180
  jsResource: null,
180
181
  propertiesFolder: null
181
182
  },
182
- i18nIndexing: {
183
- enable: {
184
- value: false,
185
- cli: 'i18n_indexing'
186
- },
187
- jsResourcePath: null,
188
- propertiesFolderPath: null,
189
- numericMapPath: null,
190
- outputFolder: 'i18n-chunk',
191
- numericFilenameTemplate: 'i18n-chunk/[locale]/numeric.i18n.js',
192
- dynamicFilenameTemplate: 'i18n-chunk/[locale]/dynamic.i18n.js',
193
- singleFile: false,
194
- singleFileTemplate: '[locale].js',
195
- jsonpFunc: 'window.loadI18nChunk',
196
- htmlTemplateLabel: '{{--user-locale}}',
197
- localeVarName: 'window.userLangCode',
198
- includeContentHash: false,
199
- emitFiles: true,
200
- generateManifest: false,
201
- manifestPath: null
202
- },
203
183
  publicFolders: {
204
184
  dev: ['...'],
205
185
  prod: ['...']
@@ -302,10 +282,7 @@ var _default = {
302
282
  webpackPlugins: [],
303
283
  vendorPatterns: [],
304
284
  customChunksBaseConfig: null,
305
- customChunks: [{
306
- name: 'styles',
307
- patterns: ['*.css']
308
- }],
285
+ customChunks: [],
309
286
  cdnMapping: {
310
287
  isCdnEnabled: {
311
288
  value: false,
@@ -96,24 +96,6 @@ var _default = {
96
96
  jsResource: null,
97
97
  propertiesFolder: null
98
98
  },
99
- i18nIndexing: {
100
- enable: false,
101
- jsResourcePath: null,
102
- propertiesFolderPath: null,
103
- numericMapPath: null,
104
- outputFolder: 'i18n-chunk',
105
- numericFilenameTemplate: 'i18n-chunk/[locale]/numeric.i18n.js',
106
- dynamicFilenameTemplate: 'i18n-chunk/[locale]/dynamic.i18n.js',
107
- singleFile: false,
108
- singleFileTemplate: '[locale].js',
109
- jsonpFunc: 'window.loadI18nChunk',
110
- htmlTemplateLabel: '{{--user-locale}}',
111
- localeVarName: 'window.userLangCode',
112
- includeContentHash: false,
113
- emitFiles: true,
114
- generateManifest: false,
115
- manifestPath: null
116
- },
117
99
  publicFolders: {
118
100
  dev: ['...'],
119
101
  prod: ['...']
@@ -27,7 +27,7 @@ class CssCustomOrderPlugin {
27
27
  Object.keys(assets).filter(file => file.includes('runtime')).forEach(filename => {
28
28
  try {
29
29
  let source = assets[filename].source().toString();
30
- let changedCode = `var referenceTag = document.getElementById(${this.className});
30
+ let changedCode = `var referenceTag = document.getElementById('${this.className}');
31
31
  document.head.insertBefore(linkTag, referenceTag);`;
32
32
  const result = source.replace('document.head.appendChild(linkTag);', changedCode);
33
33
  compilation.updateAsset(filename, new RawSource(result));
@@ -3,7 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.decodeUnicodeEscapes = decodeUnicodeEscapes;
7
6
  exports.getAllI18n = getAllI18n;
8
7
  exports.getPropertiesAsJSON = getPropertiesAsJSON;
9
8
  exports.jsonToString = jsonToString;
@@ -14,10 +13,6 @@ var _path = require("path");
14
13
 
15
14
  var _constants = require("../../../../../constants");
16
15
 
17
- function decodeUnicodeEscapes(str) {
18
- return str.replace(/\\u([0-9A-Fa-f]{4})/g, (_, code) => String.fromCharCode(parseInt(code, 16)));
19
- }
20
-
21
16
  function isComment(line) {
22
17
  return line[0] === '#';
23
18
  }
@@ -5,21 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.jsLoaders = jsLoaders;
7
7
 
8
- var _babelLoaderConfig = require("./loaderConfigs/babelLoaderConfig.js");
9
-
10
- var _i18nIdReplaceLoaderConfig = require("./loaderConfigs/i18nIdReplaceLoaderConfig.js");
8
+ var _babelLoaderConfig = require("./loaderConfigs/babelLoaderConfig");
11
9
 
12
10
  function jsLoaders(options) {
13
- const useLoaders = [(0, _babelLoaderConfig.babelLoaderConfig)(options)];
14
- const shouldUseNumericIndexing = options.i18nIndexing?.enable || options.i18nChunkSplit?.chunkSplitEnable && options.i18nChunkSplit.useNumericIndexing;
15
-
16
- if (shouldUseNumericIndexing) {
17
- useLoaders.push((0, _i18nIdReplaceLoaderConfig.i18nIdReplaceLoaderConfig)(options));
18
- }
19
-
20
11
  return [{
21
12
  test: /\.js$/,
22
13
  exclude: /node_modules/,
23
- use: useLoaders
14
+ use: [(0, _babelLoaderConfig.babelLoaderConfig)(options)] // include: path.join(appPath, folder)
15
+
24
16
  }];
25
17
  }
@@ -34,7 +34,8 @@ var _default = options => {
34
34
  } = options.css;
35
35
  const {
36
36
  classNamePrefix,
37
- customizations
37
+ customizations,
38
+ caseOnlyFilename
38
39
  } = classNameOptions;
39
40
  return (context, localIdentName, localName) => {
40
41
  // NOTE: in build machine we use date as folder path.
@@ -53,6 +54,10 @@ var _default = options => {
53
54
 
54
55
  let cleanFileName = fileNameWithoutExt.replace(/-/g, '_').toLowerCase();
55
56
 
57
+ if (caseOnlyFilename) {
58
+ cleanFileName = fileNameWithoutExt;
59
+ }
60
+
56
61
  if (cleanFileName.endsWith('.module')) {
57
62
  cleanFileName = cleanFileName.slice(0, -7);
58
63
  }
@@ -57,11 +57,10 @@ var _configInjectChunkGraphPlugin = require("./pluginConfigs/configInjectChunkGr
57
57
 
58
58
  var _configCssCustomOrderPlugin = require("./pluginConfigs/configCssCustomOrderPlugin");
59
59
 
60
- var _configI18nNumericIndexPlugin = require("./pluginConfigs/configI18nNumericIndexPlugin");
61
-
60
+ // import { IgnorePlugin } from 'webpack';
62
61
  function plugins(options) {
63
62
  const {
64
63
  webpackPlugins
65
64
  } = options;
66
- return [(0, _configEnvVariables.configEnvVariables)(options), (0, _configCustomAttributesPlugin.configCustomAttributesPlugin)(options), (0, _configTPHashMappingPlugin.configTPHashMappingPlugin)(options), (0, _configCopyPublicFolders.configCopyPublicFolders)(options), (0, _configIgnorePlugin.configIgnorePlugin)(options), (0, _configMiniCSSExtractPlugin.configMiniCSSExtractPlugin)(options), (0, _configSelectorWeightPlugin.configSelectorWeightPlugin)(options), (0, _configVariableConversionPlugin.configVariableConversionPlugin)(options), (0, _configI18nSplitPlugin.configI18nSplitPlugin)(options), (0, _configRtlCssPlugin.configRtlCssPlugin)(options), (0, _configHtmlWebpackPlugin.configHtmlWebpackPlugin)(options), (0, _configI18nNumericIndexPlugin.configI18nNumericIndexPlugin)(options), (0, _configCustomScriptLoadingStrategyPlugin.configCustomScriptLoadingStrategyPlugin)(options), (0, _configCdnChangePlugin.configCdnChangePlugin)(options), (0, _configServiceWorkerPlugin.configServiceWorkerPlugin)(options), (0, _configEFCTemplatePlugin.configEFCTemplatePlugin)(options), (0, _configResourceHintsPlugin.configResourceHintsPlugin)(options), (0, _configBundleAnalyzer.configBundleAnalyzer)(options), (0, _configManifestJsonPlugin.configManifestJsonPlugin)(options), (0, _configSourceMapPlugin.configSourceMapPlugin)(options), (0, _configProgressPlugin.configProgressPlugin)(options), (0, _configBundleIntegrityReport.configBundleIntegrityReport)(options), (0, _configRuntimeResourceCleanup.configRuntimeResourceCleanup)(options), (0, _configMurphyInjectorPlugin.configMurphyInjectorPlugin)(options), (0, _configCssCustomOrderPlugin.configCssCustomOrderPlugin)(options), (0, _configChunkHierarchyPlugin.configChunkHierarchyPlugin)(options), ...webpackPlugins].filter(Boolean);
65
+ return [(0, _configEnvVariables.configEnvVariables)(options), (0, _configCustomAttributesPlugin.configCustomAttributesPlugin)(options), (0, _configTPHashMappingPlugin.configTPHashMappingPlugin)(options), (0, _configCopyPublicFolders.configCopyPublicFolders)(options), (0, _configIgnorePlugin.configIgnorePlugin)(options), (0, _configMiniCSSExtractPlugin.configMiniCSSExtractPlugin)(options), (0, _configSelectorWeightPlugin.configSelectorWeightPlugin)(options), (0, _configVariableConversionPlugin.configVariableConversionPlugin)(options), (0, _configI18nSplitPlugin.configI18nSplitPlugin)(options), (0, _configRtlCssPlugin.configRtlCssPlugin)(options), (0, _configHtmlWebpackPlugin.configHtmlWebpackPlugin)(options), (0, _configCustomScriptLoadingStrategyPlugin.configCustomScriptLoadingStrategyPlugin)(options), (0, _configCdnChangePlugin.configCdnChangePlugin)(options), (0, _configServiceWorkerPlugin.configServiceWorkerPlugin)(options), (0, _configEFCTemplatePlugin.configEFCTemplatePlugin)(options), (0, _configResourceHintsPlugin.configResourceHintsPlugin)(options), (0, _configBundleAnalyzer.configBundleAnalyzer)(options), (0, _configManifestJsonPlugin.configManifestJsonPlugin)(options), (0, _configSourceMapPlugin.configSourceMapPlugin)(options), (0, _configProgressPlugin.configProgressPlugin)(options), (0, _configBundleIntegrityReport.configBundleIntegrityReport)(options), (0, _configRuntimeResourceCleanup.configRuntimeResourceCleanup)(options), (0, _configMurphyInjectorPlugin.configMurphyInjectorPlugin)(options), (0, _configCssCustomOrderPlugin.configCssCustomOrderPlugin)(options), (0, _configChunkHierarchyPlugin.configChunkHierarchyPlugin)(options), ...webpackPlugins].filter(Boolean);
67
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/client_build_tool",
3
- "version": "0.0.19-i18n-exp.0",
3
+ "version": "0.0.19",
4
4
  "description": "A CLI tool to build web applications and client libraries",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -1,34 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(cat:*)",
5
- "Bash(ls:*)",
6
- "Bash(npm root:*)",
7
- "Bash(grep:*)",
8
- "Bash(source:*)",
9
- "Bash(echo $CLAUDE_CODE_SUBAGENT_MODEL)",
10
- "Bash(npm run devMode:*)",
11
- "Bash(npm run start:*)",
12
- "Bash(npm run build:*)",
13
- "Bash(lsof:*)",
14
- "Bash(xargs kill:*)",
15
- "Bash(pkill:*)",
16
- "Bash(node:*)",
17
- "Bash(git -C /Users/ramaraj-14019/i18nIndexing_plugin/packages/client_build_tool status --short)",
18
- "Bash(git -C /Users/ramaraj-14019/zoho_iM/zohoim_client/jsapps/imclient status --short)",
19
- "Bash(git -C /Users/ramaraj-14019/zoho_iM/zohoim_client/jsapps/imclient diff --name-only)",
20
- "Bash(git -C /Users/ramaraj-14019/zoho_iM/zohoim_client/jsapps/imclient status numericMap.json)",
21
- "Bash(git -C /Users/ramaraj-14019/i18nIndexing_plugin/packages/client_build_tool status src/shared/bundler/webpack/utils/)",
22
- "Bash(git -C /Users/ramaraj-14019/i18nIndexing_plugin/packages/client_build_tool show 3.0.0:src/shared/bundler/webpack/utils/)",
23
- "Bash(git -C /Users/ramaraj-14019/i18nIndexing_plugin/packages/client_build_tool ls-tree:*)",
24
- "Bash(git -C /Users/ramaraj-14019/i18nIndexing_plugin/packages/client_build_tool show 3.0.0:src/shared/bundler/webpack/custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js)",
25
- "Bash(curl:*)",
26
- "Skill(ralph-loop:ralph-loop)",
27
- "Bash(kill:*)",
28
- "Bash(npm install:*)",
29
- "Bash(npm run createEfc:*)",
30
- "Bash(npm run i18n-sync:*)",
31
- "Bash(git push:*)"
32
- ]
33
- }
34
- }
@@ -1,195 +0,0 @@
1
- "use strict";
2
-
3
- const path = require('path');
4
-
5
- const {
6
- sources,
7
- Compilation
8
- } = require('webpack');
9
-
10
- const {
11
- decodeUnicodeEscapes
12
- } = require('../I18nSplitPlugin/utils/propertiesUtils');
13
-
14
- const {
15
- loadNumericMap,
16
- loadI18nData
17
- } = require('./utils/i18nDataLoader');
18
-
19
- const {
20
- createHash
21
- } = require('../I18nSplitPlugin/createHash');
22
-
23
- const {
24
- pathCreator
25
- } = require('../I18nSplitPlugin/pathCreator');
26
-
27
- const {
28
- RawSource
29
- } = sources;
30
- const pluginName = 'I18nNumericIndexPlugin';
31
-
32
- class I18nNumericIndexPlugin {
33
- constructor(options) {
34
- if (!options) {
35
- throw new Error('[I18nNumericIndexPlugin] options is required');
36
- }
37
-
38
- this.options = options;
39
- }
40
-
41
- emitChunk(compilation, filename, locale, data, manifest) {
42
- const content = decodeUnicodeEscapes(JSON.stringify(data));
43
- const fileContent = `${this.options.jsonpFunc}(${content});`;
44
- const contentHash = createHash({
45
- outputOptions: compilation.outputOptions,
46
- content: fileContent
47
- });
48
- let outputPath = pathCreator(filename, compilation, {
49
- hash: compilation.hash,
50
- locale,
51
- chunkName: null,
52
- chunkId: locale,
53
- chunkHash: null,
54
- contentHash
55
- });
56
-
57
- if (this.options.includeContentHash && !filename.includes('[contenthash]')) {
58
- outputPath = outputPath.replace(/\.js$/, `.${contentHash}.js`);
59
- }
60
-
61
- if (this.options.generateManifest) {
62
- manifest[locale] = outputPath.split('/').pop();
63
- }
64
-
65
- if (this.options.emitFiles) {
66
- compilation.emitAsset(outputPath, new RawSource(fileContent));
67
- }
68
-
69
- return outputPath;
70
- }
71
-
72
- buildNumericData(sortedKeys, totalKeys, jsResourceBase, localeData, englishData) {
73
- const numericData = {};
74
-
75
- for (let i = 0; i < totalKeys; i++) {
76
- const key = sortedKeys[i];
77
-
78
- if (key && jsResourceBase[key] !== undefined) {
79
- numericData[i] = localeData[key] ?? englishData[key];
80
- }
81
- }
82
-
83
- return numericData;
84
- }
85
-
86
- buildDynamicData(numericKeysSet, jsResourceBase, localeData, englishData) {
87
- const dynamicData = {};
88
-
89
- for (const key of Object.keys(jsResourceBase)) {
90
- if (!numericKeysSet.has(key)) {
91
- dynamicData[key] = localeData[key] ?? englishData[key];
92
- }
93
- }
94
-
95
- return dynamicData;
96
- }
97
-
98
- processLocaleData(compilation, locale, {
99
- sortedKeys,
100
- totalKeys,
101
- numericKeysSet,
102
- jsResourceBase,
103
- allI18n,
104
- englishData,
105
- manifest
106
- }) {
107
- const localeData = allI18n[locale] || {};
108
- const numericData = this.buildNumericData(sortedKeys, totalKeys, jsResourceBase, localeData, englishData);
109
- const dynamicData = this.buildDynamicData(numericKeysSet, jsResourceBase, localeData, englishData);
110
-
111
- if (this.options.singleFile) {
112
- const combinedData = { ...numericData,
113
- ...dynamicData
114
- };
115
-
116
- if (Object.keys(combinedData).length > 0) {
117
- const filename = `${this.options.outputFolder}/${this.options.singleFileTemplate}`;
118
- this.emitChunk(compilation, filename, locale, combinedData, manifest);
119
- }
120
- } else {
121
- if (Object.keys(numericData).length > 0) {
122
- this.emitChunk(compilation, this.options.numericFilenameTemplate, locale, numericData, manifest);
123
- }
124
-
125
- if (Object.keys(dynamicData).length > 0) {
126
- this.emitChunk(compilation, this.options.dynamicFilenameTemplate, locale, dynamicData, manifest);
127
- }
128
- }
129
- }
130
-
131
- emitManifest(compilation, manifest) {
132
- if (!this.options.generateManifest || Object.keys(manifest).length === 0) {
133
- return;
134
- }
135
-
136
- const manifestContent = JSON.stringify(manifest, null, 2);
137
-
138
- if (this.options.emitFiles) {
139
- compilation.emitAsset(this.options.manifestPath, new RawSource(manifestContent));
140
- }
141
- }
142
-
143
- processI18nAssets(compilation) {
144
- const mapPath = path.resolve(compilation.compiler.context, this.options.numericMapPath);
145
- const {
146
- sortedKeys,
147
- totalKeys
148
- } = loadNumericMap(mapPath, compilation);
149
- const {
150
- jsResourceBase,
151
- allI18n,
152
- locales
153
- } = loadI18nData(this.options, compilation);
154
- if (!locales.length) return;
155
- const manifest = {};
156
- const numericKeysSet = new Set(sortedKeys);
157
- const englishData = allI18n.en_US || jsResourceBase;
158
- const context = {
159
- sortedKeys,
160
- totalKeys,
161
- numericKeysSet,
162
- jsResourceBase,
163
- allI18n,
164
- englishData,
165
- manifest
166
- };
167
-
168
- for (const locale of locales) {
169
- this.processLocaleData(compilation, locale, context);
170
- }
171
-
172
- this.emitManifest(compilation, manifest);
173
- }
174
-
175
- apply(compiler) {
176
- compiler.hooks.thisCompilation.tap(pluginName, compilation => {
177
- compilation.hooks.processAssets.tapAsync({
178
- name: pluginName,
179
- stage: Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE
180
- }, (_assets, callback) => {
181
- if (!this.options.enable) {
182
- return callback();
183
- }
184
-
185
- this.processI18nAssets(compilation);
186
- callback();
187
- });
188
- });
189
- }
190
-
191
- }
192
-
193
- module.exports = {
194
- I18nNumericIndexPlugin
195
- };
@@ -1,115 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- const path = require('path');
6
-
7
- const {
8
- parseProperties
9
- } = require('../../../utils/propertiesParser');
10
-
11
- function loadPropertiesFile(filePath, compilation, description) {
12
- try {
13
- const content = fs.readFileSync(filePath, 'utf-8');
14
- return parseProperties(content);
15
- } catch (err) {
16
- if (compilation) {
17
- compilation.errors.push(new Error(`I18nNumericIndexPlugin: Error loading ${description}: ${err.message}`));
18
- }
19
-
20
- return {};
21
- }
22
- }
23
-
24
- function loadNumericMap(numericMapPath, compilation) {
25
- try {
26
- const fileContent = fs.readFileSync(numericMapPath, 'utf-8');
27
- const parsedData = JSON.parse(fileContent);
28
- const numericIds = Object.values(parsedData.originalKeyToNumericId);
29
- const maxId = numericIds.length > 0 ? Math.max(...numericIds) : -1;
30
- const totalKeys = maxId + 1;
31
- const sortedKeys = new Array(totalKeys);
32
- Object.entries(parsedData.originalKeyToNumericId).forEach(([key, id]) => {
33
- sortedKeys[id] = key;
34
- });
35
- return {
36
- sortedKeys,
37
- totalKeys
38
- };
39
- } catch (err) {
40
- if (compilation) {
41
- compilation.errors.push(new Error(`I18nNumericIndexPlugin: Error loading numeric map: ${err.message}`));
42
- }
43
-
44
- return {
45
- sortedKeys: [],
46
- totalKeys: 0
47
- };
48
- }
49
- }
50
-
51
- function loadAllLocaleFiles(propertiesPath, baseFileName, compilation) {
52
- const allI18n = {};
53
- const locales = [];
54
-
55
- try {
56
- const files = fs.readdirSync(propertiesPath);
57
- files.forEach(file => {
58
- if (file === baseFileName + '.properties') {
59
- const filePath = path.join(propertiesPath, file);
60
- const baseData = loadPropertiesFile(filePath, compilation, 'JSResources base');
61
- allI18n['en_US'] = baseData;
62
- locales.push('en_US');
63
- }
64
- });
65
- files.forEach(file => {
66
- if (!file.endsWith('.properties')) return;
67
- const match = file.match(/^ApplicationResources_([a-z]{2}_[A-Z]{2})\.properties$/);
68
-
69
- if (match) {
70
- const locale = match[1];
71
- const filePath = path.join(propertiesPath, file);
72
- const localeData = loadPropertiesFile(filePath, compilation, `locale ${locale}`);
73
- allI18n[locale] = { ...allI18n['en_US'],
74
- ...localeData
75
- };
76
-
77
- if (!locales.includes(locale)) {
78
- locales.push(locale);
79
- }
80
- }
81
- });
82
- } catch (err) {
83
- if (compilation) {
84
- compilation.errors.push(new Error(`I18nNumericIndexPlugin: Error reading properties folder: ${err.message}`));
85
- }
86
- }
87
-
88
- return {
89
- allI18n,
90
- locales
91
- };
92
- }
93
-
94
- function loadI18nData(options, compilation) {
95
- const jsResourcePath = path.resolve(compilation.compiler.context, options.jsResourcePath);
96
- const propertiesPath = path.resolve(compilation.compiler.context, options.propertiesFolderPath);
97
- const baseFileName = path.basename(options.jsResourcePath, '.properties');
98
- const jsResourceBase = loadPropertiesFile(jsResourcePath, compilation, 'JS resources');
99
- const {
100
- allI18n,
101
- locales
102
- } = loadAllLocaleFiles(propertiesPath, baseFileName, compilation);
103
- return {
104
- jsResourceBase,
105
- allI18n,
106
- locales
107
- };
108
- }
109
-
110
- module.exports = {
111
- loadPropertiesFile,
112
- loadNumericMap,
113
- loadAllLocaleFiles,
114
- loadI18nData
115
- };
@@ -1,62 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.i18nIdReplaceLoaderConfig = i18nIdReplaceLoaderConfig;
7
-
8
- var _propertiesUtils = require("../custom_plugins/I18nSplitPlugin/utils/propertiesUtils.js");
9
-
10
- function getI18nConfig(options) {
11
- if (options.i18nIndexing?.enable) {
12
- return {
13
- jsResourcePath: options.i18nIndexing.jsResourcePath,
14
- numericMapPath: options.i18nIndexing.numericMapPath
15
- };
16
- }
17
-
18
- if (options.i18nChunkSplit?.chunkSplitEnable && options.i18nChunkSplit.useNumericIndexing) {
19
- return {
20
- jsResourcePath: options.i18nChunkSplit.jsResource,
21
- numericMapPath: options.i18nChunkSplit.numericMapPath
22
- };
23
- }
24
-
25
- return null;
26
- }
27
-
28
- function loadJSResources(jsResourcePath) {
29
- const i18nData = (0, _propertiesUtils.getPropertiesAsJSON)(jsResourcePath);
30
-
31
- if (Object.keys(i18nData).length === 0) {
32
- console.warn(`[i18nIdReplaceLoaderConfig] Warning: No i18n data found in JSResource file: ${jsResourcePath}`);
33
- return {};
34
- }
35
-
36
- return i18nData;
37
- }
38
-
39
- function i18nIdReplaceLoaderConfig(options) {
40
- const config = getI18nConfig(options);
41
-
42
- if (!config) {
43
- throw new Error('i18nIdReplaceLoader requires either i18nIndexing to be enabled or i18nChunkSplit with useNumericIndexing');
44
- }
45
-
46
- if (!config.jsResourcePath) {
47
- throw new Error('Missing required jsResourcePath in i18n options');
48
- }
49
-
50
- if (!config.numericMapPath) {
51
- throw new Error('numericMapPath is required in i18nIndexing or i18nChunkSplit config');
52
- }
53
-
54
- return {
55
- loader: require.resolve('../loaders/i18nIdReplaceLoader.js'),
56
- options: {
57
- allI18nData: loadJSResources(config.jsResourcePath),
58
- numericMapPath: config.numericMapPath,
59
- sourceMaps: false
60
- }
61
- };
62
- }
@@ -1,116 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- const parser = require('@babel/parser');
6
-
7
- const traverse = require('@babel/traverse').default;
8
-
9
- const generator = require('@babel/generator').default;
10
-
11
- const t = require('@babel/types');
12
-
13
- const {
14
- getOptions
15
- } = require('loader-utils');
16
-
17
- function loadNumericMap(numericMapPath) {
18
- if (!numericMapPath) {
19
- console.warn('[i18nIdReplaceLoader] numericMapPath option is missing');
20
- return null;
21
- }
22
-
23
- if (!fs.existsSync(numericMapPath)) {
24
- console.warn(`[i18nIdReplaceLoader] Numeric map file not found: ${numericMapPath}`);
25
- return null;
26
- }
27
-
28
- try {
29
- const fileContent = fs.readFileSync(numericMapPath, 'utf-8');
30
- const parsedData = JSON.parse(fileContent);
31
-
32
- if (!parsedData?.originalKeyToNumericId) {
33
- console.warn(`[i18nIdReplaceLoader] Invalid numeric map format: missing 'originalKeyToNumericId'`);
34
- return null;
35
- }
36
-
37
- return parsedData.originalKeyToNumericId;
38
- } catch (err) {
39
- console.warn(`[i18nIdReplaceLoader] Error reading numeric map: ${err.message}`);
40
- return null;
41
- }
42
- }
43
-
44
- function transformSource(source, resourcePath, numericIdMap, allI18nData, options) {
45
- const ast = parser.parse(source, {
46
- sourceType: 'module',
47
- plugins: ['jsx', 'typescript', 'classProperties', 'optionalChaining', 'nullishCoalescingOperator'],
48
- sourceFilename: resourcePath
49
- });
50
- let hasTransformations = false;
51
- traverse(ast, {
52
- StringLiteral(path) {
53
- const {
54
- node
55
- } = path;
56
-
57
- if (!(node.value in allI18nData)) {
58
- return;
59
- }
60
-
61
- if (node.value in numericIdMap) {
62
- path.replaceWith(t.stringLiteral(String(numericIdMap[node.value])));
63
- hasTransformations = true;
64
- }
65
- }
66
-
67
- });
68
-
69
- if (!hasTransformations) {
70
- return null;
71
- }
72
-
73
- return generator(ast, {
74
- sourceMaps: !!options.sourceMaps,
75
- sourceFileName: resourcePath,
76
- retainLines: false,
77
- comments: true
78
- }, source);
79
- }
80
-
81
- module.exports = function i18nIdReplaceLoader(source, map) {
82
- const resourcePath = this.resourcePath;
83
- if (this.cacheable) this.cacheable();
84
- const options = getOptions(this) || {};
85
- const callback = this.async();
86
-
87
- if (resourcePath.includes('node_modules') || !resourcePath.includes('src')) {
88
- return callback(null, source, map);
89
- }
90
-
91
- if (!options.allI18nData) {
92
- return callback(null, source, map);
93
- }
94
-
95
- if (options.numericMapPath) {
96
- this.addDependency(options.numericMapPath);
97
- }
98
-
99
- const numericIdMap = loadNumericMap(options.numericMapPath);
100
-
101
- if (!numericIdMap) {
102
- return callback(null, source, map);
103
- }
104
-
105
- try {
106
- const output = transformSource(source, resourcePath, numericIdMap, options.allI18nData, options);
107
-
108
- if (output) {
109
- callback(null, output.code, output.map);
110
- } else {
111
- callback(null, source, map);
112
- }
113
- } catch (err) {
114
- callback(err);
115
- }
116
- };
@@ -1,75 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.configI18nNumericIndexPlugin = configI18nNumericIndexPlugin;
7
-
8
- var _I18nNumericIndexPlugin = require("../custom_plugins/I18nNumericIndexPlugin/I18nNumericIndexPlugin.js");
9
-
10
- var _readI18nValues = require("../custom_plugins/I18nSplitPlugin/readI18nValues.js");
11
-
12
- function configI18nNumericIndexPlugin(options) {
13
- if (!options.i18nIndexing?.enable) {
14
- return null;
15
- }
16
-
17
- const i18nOpts = options.i18nIndexing;
18
- const requiredOptions = ['jsResourcePath', 'propertiesFolderPath', 'numericMapPath', 'jsonpFunc', 'localeVarName'];
19
- const missingOptions = requiredOptions.filter(opt => !i18nOpts[opt]);
20
-
21
- if (missingOptions.length > 0) {
22
- console.warn(`[configI18nNumericIndexPlugin] Missing required options: ${missingOptions.join(', ')}`);
23
- return null;
24
- }
25
-
26
- if (i18nOpts.singleFile) {
27
- if (!i18nOpts.singleFileTemplate) {
28
- console.warn('[configI18nNumericIndexPlugin] singleFileTemplate is required when singleFile is true');
29
- return null;
30
- }
31
- } else {
32
- if (!i18nOpts.numericFilenameTemplate || !i18nOpts.numericFilenameTemplate.includes('[locale]')) {
33
- console.warn('[configI18nNumericIndexPlugin] numericFilenameTemplate must include [locale] placeholder');
34
- return null;
35
- }
36
-
37
- if (!i18nOpts.dynamicFilenameTemplate || !i18nOpts.dynamicFilenameTemplate.includes('[locale]')) {
38
- console.warn('[configI18nNumericIndexPlugin] dynamicFilenameTemplate must include [locale] placeholder');
39
- return null;
40
- }
41
- }
42
-
43
- if (i18nOpts.generateManifest && !i18nOpts.manifestPath) {
44
- console.warn('[configI18nNumericIndexPlugin] manifestPath is required when generateManifest is true');
45
- return null;
46
- }
47
-
48
- const {
49
- locales,
50
- allI18nObject
51
- } = (0, _readI18nValues.readI18nValues)({
52
- jsResource: i18nOpts.jsResourcePath,
53
- propertiesFolder: i18nOpts.propertiesFolderPath,
54
- disableDefault: false
55
- });
56
- const numericIndexPluginOptions = {
57
- enable: i18nOpts.enable,
58
- jsResourcePath: i18nOpts.jsResourcePath,
59
- propertiesFolderPath: i18nOpts.propertiesFolderPath,
60
- numericMapPath: i18nOpts.numericMapPath,
61
- locales,
62
- allI18nObject,
63
- outputFolder: i18nOpts.outputFolder,
64
- numericFilenameTemplate: i18nOpts.numericFilenameTemplate,
65
- dynamicFilenameTemplate: i18nOpts.dynamicFilenameTemplate,
66
- singleFile: i18nOpts.singleFile,
67
- singleFileTemplate: i18nOpts.singleFileTemplate,
68
- jsonpFunc: i18nOpts.jsonpFunc,
69
- includeContentHash: i18nOpts.includeContentHash,
70
- emitFiles: i18nOpts.emitFiles,
71
- generateManifest: i18nOpts.generateManifest,
72
- manifestPath: i18nOpts.manifestPath
73
- };
74
- return new _I18nNumericIndexPlugin.I18nNumericIndexPlugin(numericIndexPluginOptions);
75
- }
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- const fs = require('fs');
4
-
5
- function decodeUnicodeEscapes(str) {
6
- return str.replace(/\\u([0-9A-Fa-f]{4})/g, (_, code) => String.fromCharCode(parseInt(code, 16)));
7
- }
8
-
9
- function parseProperties(content) {
10
- const result = {};
11
- const lines = content.split(/\r?\n/);
12
-
13
- for (const line of lines) {
14
- const trimmed = line.trim();
15
-
16
- if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('!')) {
17
- continue;
18
- }
19
-
20
- const separatorIndex = trimmed.search(/[=:]/);
21
- if (separatorIndex === -1) continue;
22
- const key = trimmed.slice(0, separatorIndex).trim().replace(/\\ /g, ' ');
23
- const value = trimmed.slice(separatorIndex + 1).trim();
24
-
25
- if (key) {
26
- result[key] = decodeUnicodeEscapes(value);
27
- }
28
- }
29
-
30
- return result;
31
- }
32
-
33
- module.exports = {
34
- decodeUnicodeEscapes,
35
- parseProperties
36
- };