@appsemble/utils 0.19.9 → 0.19.10

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.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Converts an object or an array of objects to a valid CSV format.
3
+ *
4
+ * Implements https://tools.ietf.org/html/rfc4180
5
+ *
6
+ * @param body - An object containing the data to be converted.
7
+ * @returns The data serialized as CSV.
8
+ */
9
+ export declare function convertToCsv(body: any): string;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertToCsv = void 0;
4
+ const _1 = require(".");
5
+ /**
6
+ * Converts an object or an array of objects to a valid CSV format.
7
+ *
8
+ * Implements https://tools.ietf.org/html/rfc4180
9
+ *
10
+ * @param body - An object containing the data to be converted.
11
+ * @returns The data serialized as CSV.
12
+ */
13
+ function convertToCsv(body) {
14
+ const separator = ',';
15
+ const lineEnd = '\r\n';
16
+ const quote = '"';
17
+ const quoteRegex = new RegExp(quote, 'g');
18
+ const escape = (value) => value.includes(separator) || value.includes(lineEnd) || value.includes(quote)
19
+ ? `${quote}${value.replace(quoteRegex, `${quote}${quote}`)}${quote}`
20
+ : value;
21
+ if (body == null) {
22
+ throw new Error('No data');
23
+ }
24
+ if (typeof body !== 'object') {
25
+ throw new TypeError('Data is of an invalid type');
26
+ }
27
+ const data = Array.isArray(body) ? body : [body];
28
+ if (data.length === 0) {
29
+ return null;
30
+ }
31
+ const headers = [...new Set(data.flatMap((value) => Object.keys(value)))].sort(_1.compareStrings);
32
+ if (headers.length === 0) {
33
+ throw new Error('No headers could be found');
34
+ }
35
+ const lines = data.map((object) => {
36
+ const values = headers.map((header) => {
37
+ let value = object[header];
38
+ if (value == null) {
39
+ return '';
40
+ }
41
+ if (value.toJSON instanceof Function) {
42
+ value = value.toJSON();
43
+ }
44
+ if (typeof value !== 'string') {
45
+ value = JSON.stringify(value);
46
+ }
47
+ return escape(value);
48
+ });
49
+ return values.join(separator);
50
+ });
51
+ return `${headers.map((header) => escape(header)).join(separator)}${lineEnd}${lines.join(lineEnd)}${lineEnd}`;
52
+ }
53
+ exports.convertToCsv = convertToCsv;
54
+ //# sourceMappingURL=convertToCsv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertToCsv.js","sourceRoot":"","sources":["../src/convertToCsv.ts"],"names":[],"mappings":";;;AAAA,wBAAmC;AAEnC;;;;;;;GAOG;AACH,SAAgB,YAAY,CAAC,IAAS;IACpC,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,KAAa,EAAU,EAAE,CACvC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC3E,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;QACpE,CAAC,CAAC,KAAK,CAAC;IAEZ,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;KAC5B;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC5B,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;KACnD;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAc,CAAC,CAAC;IAE/F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,KAAK,IAAI,IAAI,EAAE;gBACjB,OAAO,EAAE,CAAC;aACX;YAED,IAAK,KAAc,CAAC,MAAM,YAAY,QAAQ,EAAE;gBAC9C,KAAK,GAAI,KAAc,CAAC,MAAM,EAAE,CAAC;aAClC;YAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAC/B;YAED,OAAO,MAAM,CAAC,KAAe,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,IAAI,CACtF,OAAO,CACR,GAAG,OAAO,EAAE,CAAC;AAChB,CAAC;AAtDD,oCAsDC"}
package/dist/index.d.ts CHANGED
@@ -23,3 +23,4 @@ export * from './theme';
23
23
  export * from './langmap';
24
24
  export * from './i18n';
25
25
  export * from './validation';
26
+ export * from './convertToCsv';
package/dist/index.js CHANGED
@@ -35,4 +35,5 @@ __exportStar(require("./theme"), exports);
35
35
  __exportStar(require("./langmap"), exports);
36
36
  __exportStar(require("./i18n"), exports);
37
37
  __exportStar(require("./validation"), exports);
38
+ __exportStar(require("./convertToCsv"), exports);
38
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAsB;AACtB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,4CAA0B;AAC1B,8CAA4B;AAC5B,wCAAsB;AACtB,kDAAgC;AAChC,yCAAuB;AACvB,8CAA4B;AAC5B,kDAAgC;AAChC,2CAAyB;AACzB,iDAA+B;AAC/B,wDAAsC;AACtC,4CAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B;AAC5B,gDAA8B;AAC9B,wCAAsB;AACtB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,yCAAuB;AACvB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAsB;AACtB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,4CAA0B;AAC1B,8CAA4B;AAC5B,wCAAsB;AACtB,kDAAgC;AAChC,yCAAuB;AACvB,8CAA4B;AAC5B,kDAAgC;AAChC,2CAAyB;AACzB,iDAA+B;AAC/B,wDAAsC;AACtC,4CAA0B;AAC1B,+CAA6B;AAC7B,8CAA4B;AAC5B,gDAA8B;AAC9B,wCAAsB;AACtB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,yCAAuB;AACvB,+CAA6B;AAC7B,iDAA+B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appsemble/utils",
3
- "version": "0.19.9",
3
+ "version": "0.19.10",
4
4
  "description": "Utility functions used in Appsemble internally",
5
5
  "keywords": [
6
6
  "app",
@@ -29,7 +29,7 @@
29
29
  "test": "jest"
30
30
  },
31
31
  "dependencies": {
32
- "@appsemble/types": "0.19.9",
32
+ "@appsemble/types": "0.19.10",
33
33
  "axios": "^0.23.0",
34
34
  "cron-parser": "^4.0.0",
35
35
  "date-fns": "^2.0.0",