rollup-plugin-ec-lang.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. /**
  20. * Find language definations.
  21. *
  22. * Usage:
  23. *
  24. * import ecLangPlugin from 'echarts/build/rollup-plugin-ec-lang';
  25. * let rollupConfig = {
  26. * plugins: [
  27. * ecLangPlugin({lang: 'en'}),
  28. * ...
  29. * ]
  30. * };
  31. */
  32. const {resolve} = require('path');
  33. const {readFileSync} = require('fs');
  34. /**
  35. * @param {Object} [opt]
  36. * @param {string} [opt.lang=null] null/undefined/'' or 'en' or 'fi' or a file path.
  37. */
  38. function getPlugin(opt) {
  39. let lang = opt && opt.lang || '';
  40. return {
  41. load: function (absolutePath) {
  42. if (/\/src\/lang\.js$/.test(absolutePath)) {
  43. let langPath = getLangFileInfo(lang).absolutePath;
  44. if (langPath) {
  45. absolutePath = langPath;
  46. }
  47. }
  48. return readFileSync(absolutePath, 'utf-8');
  49. }
  50. };
  51. }
  52. /**
  53. * @param {string} lang null/undefined/'' or 'en' or 'fi' or a file path.
  54. * @return {Object} {isOuter, absolutePath}
  55. */
  56. let getLangFileInfo = getPlugin.getLangFileInfo = function (lang) {
  57. let absolutePath;
  58. let isOuter = false;
  59. if (lang) {
  60. if (/^[a-zA-Z]{2}$/.test(lang)) {
  61. absolutePath = resolve(__dirname, '../', 'src/lang' + lang.toUpperCase() + '.js');
  62. }
  63. else {
  64. isOuter = true;
  65. // `lang` is an absolute path or a relative path based on process.cwd().
  66. absolutePath = resolve(lang);
  67. }
  68. }
  69. return {isOuter, absolutePath};
  70. };
  71. module.exports = getPlugin;