Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,20 @@ To be clear, all contributions added to this library will be included in the lib

# Interface

## Importing

The default export is a transpiled ES5 version with a Promise polyfill - this offers the highest level of compatibility.

```javascript
var Excel = require('exceljs');
import Excel from 'exceljs';
```

// or, for node.js version 8+
const Excel = require('exceljs/nodejs');
However, if you use this library on a modern node.js version (>=8) or on the frontend using a bundler (or can focus on just evergreen browsers), we recommend to use these imports:

```javascript
const Excel = require('exceljs/modern.nodejs');
import Excel from 'exceljs/modern.browser';
```

## Create a Workbook
Expand Down
6 changes: 3 additions & 3 deletions lib/config/set-value.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const PromishLib = require('../utils/promish');
const PromiseLib = require('../utils/promise');

function setValue(key, value, overwrite) {
if (overwrite === undefined) {
Expand All @@ -9,8 +9,8 @@ function setValue(key, value, overwrite) {
}
switch (key.toLowerCase()) {
case 'promise':
if (!overwrite && PromishLib.Promish) return;
PromishLib.Promish = value;
if (!overwrite && PromiseLib.Promise) return;
PromiseLib.Promise = value;
break;
default:
break;
Expand Down
18 changes: 9 additions & 9 deletions lib/csv/csv.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
const fs = require('fs');
const csv = require('fast-csv');
const moment = require('moment');
const PromishLib = require('../utils/promish');
const PromiseLib = require('../utils/promise');
const StreamBuf = require('../utils/stream-buf');

const utils = require('../utils/utils');
Expand Down Expand Up @@ -48,7 +48,7 @@ CSV.prototype = {
},
read(stream, options) {
options = options || {};
return new PromishLib.Promish((resolve, reject) => {
return new PromiseLib.Promise((resolve, reject) => {
const csvStream = this.createInputStream(options)
.on('worksheet', resolve)
.on('error', reject);
Expand All @@ -67,8 +67,9 @@ CSV.prototype = {
if (datum === '') {
return null;
}
if (!isNaN(datum)) {
return parseFloat(datum);
const datumNumber = Number(datum);
if (!Number.isNaN(datumNumber)) {
return datumNumber;
}
const dt = moment(datum, dateFormats, true);
if (dt.isValid()) {
Expand All @@ -92,7 +93,7 @@ CSV.prototype = {
},

write(stream, options) {
return new PromishLib.Promish((resolve, reject) => {
return new PromiseLib.Promise((resolve, reject) => {
options = options || {};
// const encoding = options.encoding || 'utf8';
// const separator = options.separator || ',';
Expand All @@ -107,8 +108,7 @@ CSV.prototype = {
csvStream.on('error', reject);
csvStream.pipe(stream);

const dateFormat = options.dateFormat;
const dateUTC = options.dateUTC;
const {dateFormat, dateUTC} = options;
const map =
options.map ||
(value => {
Expand All @@ -121,7 +121,7 @@ CSV.prototype = {
}
if (value instanceof Date) {
if (dateFormat) {
dateUTC ? moment.utc(value).format(dateFormat) : moment(value).format(dateFormat);
return dateUTC ? moment.utc(value).format(dateFormat) : moment(value).format(dateFormat);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm pretty sure the missing return here was a bug

}
return dateUTC ? moment.utc(value).format() : moment(value).format();
}
Expand All @@ -144,7 +144,7 @@ CSV.prototype = {
csvStream.write([]);
}
}
const values = row.values;
const {values} = row;
values.shift();
csvStream.write(values.map(map));
lastRow = rowNumber;
Expand Down
38 changes: 19 additions & 19 deletions lib/stream/xlsx/workbook-writer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const fs = require('fs');
const Archiver = require('archiver');
const PromishLib = require('../../utils/promish');
const PromiseLib = require('../../utils/promise');

const StreamBuf = require('../../utils/stream-buf');

Expand Down Expand Up @@ -57,7 +57,7 @@ const WorkbookWriter = (module.exports = function(options) {
this.zip.pipe(this.stream);

// these bits can be added right now
this.promise = PromishLib.Promish.all([this.addThemes(), this.addOfficeRels()]);
this.promise = PromiseLib.Promise.all([this.addThemes(), this.addOfficeRels()]);
});

WorkbookWriter.prototype = {
Expand All @@ -77,29 +77,29 @@ WorkbookWriter.prototype = {
_commitWorksheets() {
const commitWorksheet = function(worksheet) {
if (!worksheet.committed) {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
worksheet.stream.on('zipped', () => {
resolve();
});
worksheet.commit();
});
}
return PromishLib.Promish.resolve();
return PromiseLib.Promise.resolve();
};
// if there are any uncommitted worksheets, commit them now and wait
const promises = this._worksheets.map(commitWorksheet);
if (promises.length) {
return PromishLib.Promish.all(promises);
return PromiseLib.Promise.all(promises);
}
return PromishLib.Promish.resolve();
return PromiseLib.Promise.resolve();
},

commit() {
// commit all worksheets, then add suplimentary files
return this.promise
.then(() => this._commitWorksheets())
.then(() =>
PromishLib.Promish.all([this.addContentTypes(), this.addApp(), this.addCore(), this.addSharedStrings(), this.addStyles(), this.addWorkbookRels()])
PromiseLib.Promise.all([this.addContentTypes(), this.addApp(), this.addCore(), this.addSharedStrings(), this.addStyles(), this.addWorkbookRels()])
)
.then(() => this.addWorkbook())
.then(() => this._finalize());
Expand Down Expand Up @@ -164,21 +164,21 @@ WorkbookWriter.prototype = {
},
addStyles() {
const self = this;
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
self.zip.append(self.styles.xml, { name: 'xl/styles.xml' });
resolve();
});
},
addThemes() {
const self = this;
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
self.zip.append(theme1Xml, { name: 'xl/theme/theme1.xml' });
resolve();
});
},
addOfficeRels() {
const self = this;
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const xform = new RelationshipsXform();
const xml = xform.toXml([
{ Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml' },
Expand All @@ -191,7 +191,7 @@ WorkbookWriter.prototype = {
},

addContentTypes() {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const model = {
worksheets: this._worksheets.filter(Boolean),
sharedStrings: this.sharedStrings,
Expand All @@ -203,7 +203,7 @@ WorkbookWriter.prototype = {
});
},
addApp() {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const model = {
worksheets: this._worksheets.filter(Boolean),
};
Expand All @@ -215,7 +215,7 @@ WorkbookWriter.prototype = {
},
addCore() {
const self = this;
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const coreXform = new CoreXform();
const xml = coreXform.toXml(self);
self.zip.append(xml, { name: 'docProps/core.xml' });
Expand All @@ -225,14 +225,14 @@ WorkbookWriter.prototype = {
addSharedStrings() {
const self = this;
if (this.sharedStrings.count) {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const sharedStringsXform = new SharedStringsXform();
const xml = sharedStringsXform.toXml(self.sharedStrings);
self.zip.append(xml, { name: '/xl/sharedStrings.xml' });
resolve();
});
}
return PromishLib.Promish.resolve();
return PromiseLib.Promise.resolve();
},
addWorkbookRels() {
const self = this;
Expand All @@ -250,31 +250,31 @@ WorkbookWriter.prototype = {
relationships.push({ Id: worksheet.rId, Type: RelType.Worksheet, Target: `worksheets/sheet${worksheet.id}.xml` });
}
});
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const xform = new RelationshipsXform();
const xml = xform.toXml(relationships);
self.zip.append(xml, { name: '/xl/_rels/workbook.xml.rels' });
resolve();
});
},
addWorkbook() {
const zip = this.zip;
const {zip} = this;
const model = {
worksheets: this._worksheets.filter(Boolean),
definedNames: this._definedNames.model,
views: this.views,
properties: {},
};

return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const xform = new WorkbookXform();
xform.prepare(model);
zip.append(xform.toXml(model), { name: '/xl/workbook.xml' });
resolve();
});
},
_finalize() {
return new PromishLib.Promish((resolve, reject) => {
return new PromiseLib.Promise((resolve, reject) => {
this.stream.on('error', reject);
this.stream.on('finish', () => {
resolve(this);
Expand Down
14 changes: 7 additions & 7 deletions lib/utils/flow-control.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const events = require('events');
const PromishLib = require('./promish');
const PromiseLib = require('./promise');

const utils = require('./utils');

Expand All @@ -28,7 +28,7 @@ const FlowControl = (module.exports = function(options) {

// determine timeout for flow control delays
if (options.gc) {
const gc = options.gc;
const {gc} = options;
if (gc.getTimeout) {
this.getTimeout = gc.getTimeout;
} else {
Expand Down Expand Up @@ -64,7 +64,7 @@ utils.inherits(FlowControl, events.EventEmitter, {
_write(dst, data, encoding) {
// Write to a single destination and return a promise

return new PromishLib.Promish((resolve, reject) => {
return new PromiseLib.Promise((resolve, reject) => {
dst.write(data, encoding, error => {
if (error) {
reject(error);
Expand All @@ -90,9 +90,9 @@ utils.inherits(FlowControl, events.EventEmitter, {
}
});
if (!promises.length) {
promises.push(PromishLib.Promish.resolve());
promises.push(PromiseLib.Promise.resolve());
}
return PromishLib.Promish.all(promises).then(() => {
return PromiseLib.Promise.all(promises).then(() => {
try {
chunk.callback();
} catch (e) {
Expand All @@ -112,15 +112,15 @@ utils.inherits(FlowControl, events.EventEmitter, {
// in certain situations it may be useful to delay processing (e.g. for GC)
const timeout = this.getTimeout && this.getTimeout();
if (timeout) {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
const anime = this._animate();
setTimeout(() => {
clearInterval(anime);
resolve();
}, timeout);
});
}
return PromishLib.Promish.resolve();
return PromiseLib.Promise.resolve();
},

_flush() {
Expand Down
5 changes: 5 additions & 0 deletions lib/utils/promise.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict';

module.exports = {
Promise: typeof Promise !== 'undefined' ? Promise : null,
};
5 changes: 0 additions & 5 deletions lib/utils/promish.js

This file was deleted.

6 changes: 3 additions & 3 deletions lib/utils/stream-buf.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

const Stream = require('stream');
const PromishLib = require('./promish');
const PromiseLib = require('./promise');

const utils = require('./utils');
const StringBuf = require('./string-buf');
Expand Down Expand Up @@ -183,14 +183,14 @@ utils.inherits(StreamBuf, Stream.Duplex, {

_pipe(chunk) {
const write = function(pipe) {
return new PromishLib.Promish(resolve => {
return new PromiseLib.Promise(resolve => {
pipe.write(chunk.toBuffer(), () => {
resolve();
});
});
};
const promises = this.pipes.map(write);
return promises.length ? PromishLib.Promish.all(promises).then(utils.nop) : PromishLib.Promish.resolve();
return promises.length ? PromiseLib.Promise.all(promises).then(utils.nop) : PromiseLib.Promise.resolve();
},
_writeToBuffers(chunk) {
let inPos = 0;
Expand Down
Loading