diff --git a/README.md b/README.md index 58add0f19..6a9abe06c 100644 --- a/README.md +++ b/README.md @@ -197,11 +197,29 @@ require('core-js/modules/es.object.assign'); require('core-js/modules/es.object.keys'); require('regenerator-runtime/runtime'); -// ... - const ExcelJS = require('exceljs/dist/es5'); ``` +For IE 11, you'll also need a polyfill to support unicode regex patterns. For example, + +```js +const rewritePattern = require('regexpu-core'); +const {generateRegexpuOptions} = require('@babel/helper-create-regexp-features-plugin/lib/util'); + +const {RegExp} = global; +try { + new RegExp('a', 'u'); +} catch (err) { + global.RegExp = function(pattern, flags) { + if (flags && flags.includes('u')) { + return new RegExp(rewritePattern(pattern, flags, generateRegexpuOptions({flags, pattern}))); + } + return new RegExp(pattern, flags); + }; + global.RegExp.prototype = RegExp; +} +``` + ## Browserify ExcelJS publishes two browserified bundles inside the dist/ folder: diff --git a/_patch-fast-csv.js b/_patch-fast-csv.js deleted file mode 100644 index 125d93d0c..000000000 --- a/_patch-fast-csv.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require('fs'); - -const fastCsvPackage = JSON.parse(fs.readFileSync(`${__dirname}/node_modules/fast-csv/package.json`)); - -fastCsvPackage.browserify = { - transform: [['babelify', {presets: ['@babel/preset-env']}]], -}; - -fs.writeFileSync(`${__dirname}/node_modules/fast-csv/package.json`, JSON.stringify(fastCsvPackage, null, 2)); diff --git a/gruntfile.js b/gruntfile.js index 01729bcae..344c80aec 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -21,11 +21,21 @@ module.exports = function(grunt) { }, ], }, + bundle: { + files: [ + { + cwd: './build', + expand: true, + src: ['exceljs.bare.js', 'exceljs.js'], + dest: './dist/', + }, + ], + }, }, browserify: { bare: { src: ['./build/lib/exceljs.bare.js'], - dest: './dist/exceljs.bare.js', + dest: './build/exceljs.bare.js', options: { browserifyOptions: { standalone: 'ExcelJS', @@ -34,7 +44,7 @@ module.exports = function(grunt) { }, bundle: { src: ['./build/lib/exceljs.browser.js'], - dest: './dist/exceljs.js', + dest: './build/exceljs.js', options: { browserifyOptions: { standalone: 'ExcelJS', @@ -48,6 +58,7 @@ module.exports = function(grunt) { }, terser: { options: { + sourceMap: true, output: { preamble: '/*! ExcelJS <%= grunt.template.today("dd-mm-yyyy") %> */\n', }, @@ -94,6 +105,6 @@ module.exports = function(grunt) { }, }); - grunt.registerTask('build', ['babel', 'browserify', 'terser', 'copy']); + grunt.registerTask('build', ['babel:dist', 'browserify', 'babel:bundle', 'terser', 'copy']); grunt.registerTask('ug', ['terser']); }; diff --git a/lib/exceljs.browser.js b/lib/exceljs.browser.js index 4dd159dfb..88b0c348b 100644 --- a/lib/exceljs.browser.js +++ b/lib/exceljs.browser.js @@ -1,9 +1,26 @@ /* eslint-disable import/no-extraneous-dependencies,node/no-unpublished-require */ require('core-js/modules/es.promise'); +require('core-js/modules/es.string.includes'); require('core-js/modules/es.object.assign'); require('core-js/modules/es.object.keys'); require('regenerator-runtime/runtime'); +const rewritePattern = require('regexpu-core'); +const {generateRegexpuOptions} = require('@babel/helper-create-regexp-features-plugin/lib/util'); + +const {RegExp} = global; +try { + RegExp('a', 'u'); +} catch (err) { + global.RegExp = function(pattern, flags) { + if (flags && flags.includes('u')) { + return new RegExp(rewritePattern(pattern, flags, generateRegexpuOptions({flags, pattern}))); + } + return new RegExp(pattern, flags); + }; + global.RegExp.prototype = RegExp; +} + const ExcelJS = { Workbook: require('./doc/workbook'), }; diff --git a/package.json b/package.json index a44878699..2ea9ac8d1 100644 --- a/package.json +++ b/package.json @@ -47,10 +47,9 @@ "lint:fix": "prettier-eslint --write $(pwd)'/**/*.js'", "lint:staged": "lint-staged", "clean": "rm -rf build/ && rm -rf dist", - "patch:fast-csv": "node _patch-fast-csv.js", "benchmark": "node --expose-gc benchmark", "benchmark:debug": "node --expose-gc --inspect-brk --trace-deopt benchmark", - "build": "npm run patch:fast-csv && grunt build", + "build": "grunt build", "preversion": "npm run clean && npm run build && npm run test:all && npm run test:dist", "postversion": "git push --no-verify && git push --tags --no-verify" }, @@ -106,6 +105,7 @@ "devDependencies": { "@babel/cli": "^7.6.4", "@babel/core": "^7.9.0", + "@babel/helper-create-regexp-features-plugin": "^7.8.8", "@babel/preset-env": "^7.9.0", "@types/chai": "^4.2.11", "@types/mocha": "^5.2.7", @@ -139,6 +139,7 @@ "prettier-eslint": "^9.0.0", "prettier-eslint-cli": "^5.0.0", "regenerator-runtime": "^0.13.5", + "regexpu-core": "^4.7.0", "semver": "^5.6.0", "ts-node": "^8.8.1", "typescript": "^3.8.3"
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: