@pixwel/pixwel-sdk 2.1.4 → 2.1.6

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.
Files changed (40) hide show
  1. package/.babelrc +2 -2
  2. package/coverage/clover.xml +4 -4
  3. package/coverage/coverage-final.json +2 -2
  4. package/coverage/lcov-report/Ass.js.html +1 -1
  5. package/coverage/lcov-report/Asset.js.html +1 -1
  6. package/coverage/lcov-report/AssetType.js.html +1 -1
  7. package/coverage/lcov-report/Encode.js.html +1 -1
  8. package/coverage/lcov-report/File.js.html +1 -1
  9. package/coverage/lcov-report/Filename.js.html +1 -1
  10. package/coverage/lcov-report/Ingest.js.html +2 -2
  11. package/coverage/lcov-report/IngestFile.js.html +1 -1
  12. package/coverage/lcov-report/Model.js.html +3 -3
  13. package/coverage/lcov-report/Order.js.html +1 -1
  14. package/coverage/lcov-report/Srt.js.html +1 -1
  15. package/coverage/lcov-report/Sub.js.html +1 -1
  16. package/coverage/lcov-report/Tag.js.html +1 -1
  17. package/coverage/lcov-report/TimeFormat.js.html +1 -1
  18. package/coverage/lcov-report/fileType.js.html +1 -1
  19. package/coverage/lcov-report/index.html +1 -1
  20. package/coverage/lcov.info +4 -4
  21. package/dist/Ass.js +206 -0
  22. package/dist/Asset.js +49 -0
  23. package/dist/AssetType.js +45 -0
  24. package/dist/Encode.js +45 -0
  25. package/dist/File.js +45 -0
  26. package/dist/Filename.js +23 -0
  27. package/dist/Ingest.js +734 -0
  28. package/dist/IngestFile.js +18 -0
  29. package/dist/Model.js +580 -0
  30. package/dist/Order.js +70 -0
  31. package/dist/Srt.js +97 -0
  32. package/dist/Sub.js +46 -0
  33. package/dist/Tag.js +45 -0
  34. package/dist/TimeFormat.js +53 -0
  35. package/dist/fileType.js +39 -0
  36. package/dist/index.js +77 -85
  37. package/dist/src/Ingest.js +1 -1
  38. package/package.json +7 -8
  39. package/src/Ingest.js +1 -1
  40. package/test/Ingest.spec.js +10 -7
package/dist/Srt.js ADDED
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _lodash = _interopRequireDefault(require("lodash"));
11
+
12
+ var _TimeFormat = _interopRequireDefault(require("./TimeFormat"));
13
+
14
+ function stripTags(input, allowed) {
15
+ allowed = (((allowed || '') + '').toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');
16
+ var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
17
+ var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
18
+ return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
19
+ return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
20
+ });
21
+ }
22
+
23
+ var SRT_STATE_SUBNUMBER = 0,
24
+ SRT_STATE_TIME = 1,
25
+ SRT_STATE_TEXT = 2,
26
+ SRT_STATE_BLANK = 3;
27
+ var _default = {
28
+ parse: function parse(lines) {
29
+ var result = [],
30
+ state = SRT_STATE_SUBNUMBER,
31
+ subText = '',
32
+ subTime = '';
33
+
34
+ function time(subTime) {
35
+ var range = subTime.split(' --> ');
36
+
37
+ if (!_TimeFormat["default"].isValidTime(range[0]) || !_TimeFormat["default"].isValidTime(range[1])) {
38
+ throw new Error('Malformed SRT file');
39
+ }
40
+
41
+ return {
42
+ startTime: range[0],
43
+ stopTime: range[1]
44
+ };
45
+ }
46
+
47
+ lines.forEach(function (line) {
48
+ line = line.replace(/^\s+|\s+$/g, '');
49
+
50
+ switch (state) {
51
+ case SRT_STATE_SUBNUMBER:
52
+ state = SRT_STATE_TIME;
53
+ break;
54
+
55
+ case SRT_STATE_TIME:
56
+ subTime = line;
57
+ state = SRT_STATE_TEXT;
58
+ break;
59
+
60
+ case SRT_STATE_TEXT:
61
+ if (line !== '') {
62
+ subText += subText ? "\n" + line : line;
63
+ return;
64
+ }
65
+
66
+ result.push(Object.assign(time(subTime), {
67
+ text: subText
68
+ }));
69
+ subText = '';
70
+ state = SRT_STATE_SUBNUMBER;
71
+ break;
72
+ }
73
+ });
74
+ return result;
75
+ },
76
+ "export": function _export(lines) {
77
+ var result = '',
78
+ i = 1;
79
+ lines.forEach(function (line) {
80
+ if (line.text === undefined) {
81
+ return;
82
+ } // Replace <br> tags with newlines. These tags may accidentally be stored in the translation
83
+
84
+
85
+ var text = _lodash["default"].unescape(line.text.replace(/<br>/g, '\n')); // Remove any tags that may have made it into the translation (div tags seem to be the main problem).
86
+ // <b> <i> are the only two supported tags currently
87
+
88
+
89
+ text = stripTags(text, '<b><i>');
90
+ result += i++ + "\n";
91
+ result += _TimeFormat["default"].startTime(line) + " --> " + _TimeFormat["default"].stopTime(line) + "\n";
92
+ result += text + "\n\n";
93
+ });
94
+ return result;
95
+ }
96
+ };
97
+ exports["default"] = _default;
package/dist/Sub.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _default = {
8
+ parse: function parse(lines) {
9
+ var result = [],
10
+ current = {
11
+ text: ""
12
+ };
13
+ lines.forEach(function (line) {
14
+ line = line.replace(/^\s+|\s+$/g, '');
15
+ var subTime = line.match(/^([0-9:\.]+),([0-9:\.]+)$/);
16
+
17
+ if (subTime) {
18
+ if (current.text) {
19
+ result.push(current);
20
+ }
21
+
22
+ current = {
23
+ startTime: subTime[1],
24
+ stopTime: subTime[2],
25
+ text: ""
26
+ };
27
+ return;
28
+ }
29
+
30
+ if (line) {
31
+ if (current.startTime === undefined || current.stopTime === 'undefined') {
32
+ throw new Error('Malformed SUB file');
33
+ }
34
+
35
+ current.text += current.text ? "\n" + line : line;
36
+ }
37
+ });
38
+
39
+ if (current.text) {
40
+ result.push(current);
41
+ }
42
+
43
+ return result;
44
+ }
45
+ };
46
+ exports["default"] = _default;
package/dist/Tag.js ADDED
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
+
16
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _Model2 = _interopRequireDefault(require("./Model"));
21
+
22
+ var Tag =
23
+ /*#__PURE__*/
24
+ function (_Model) {
25
+ (0, _inherits2["default"])(Tag, _Model);
26
+
27
+ function Tag(data) {
28
+ var _this;
29
+
30
+ (0, _classCallCheck2["default"])(this, Tag);
31
+ _this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(Tag).call(this, data));
32
+ _this._resource = 'tags';
33
+ return _this;
34
+ }
35
+
36
+ (0, _createClass2["default"])(Tag, null, [{
37
+ key: "_resource",
38
+ get: function get() {
39
+ return 'tags';
40
+ }
41
+ }]);
42
+ return Tag;
43
+ }(_Model2["default"]);
44
+
45
+ exports["default"] = Tag;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var stringRegex = /^(\d+):(\d+):(\d+)[,|.](\d{2,3})?$/;
8
+ var _default = {
9
+ isValidTime: function isValidTime(time) {
10
+ return !!time.match(stringRegex);
11
+ },
12
+ timeToTimestamp: function timeToTimestamp(time) {
13
+ var match = time.match(stringRegex);
14
+
15
+ if (!match) {
16
+ return 0;
17
+ }
18
+
19
+ var precision = match[4].length === 2 ? 100 : 1000;
20
+ return parseInt(match[1], 10) * 60 * 60 + parseInt(match[2], 10) * 60 + parseInt(match[3], 10) + parseInt(match[4], 10) / precision;
21
+ },
22
+ timestampToTime: function timestampToTime(second, decimalMark) {
23
+ var hours = ~~(second / 3600);
24
+ var min = ~~(second / 60) % 60;
25
+ var sec = second % 60;
26
+ var fixedSec = sec.toFixed(3).replace('.', decimalMark ? decimalMark : ',');
27
+ return (hours < 10 ? '0' + hours : hours) + ":" + (min < 10 ? '0' + min : min) + ':' + (sec < 10 ? '0' + fixedSec : fixedSec);
28
+ },
29
+ timeDiff: function timeDiff(time1, time2) {
30
+ if (time1 === undefined || time2 === undefined) {
31
+ return 0;
32
+ }
33
+
34
+ return this.timestampDiff(this.timeToTimestamp(time1), this.timeToTimestamp(time2));
35
+ },
36
+ timestampDiff: function timestampDiff(time1, time2) {
37
+ if (time1 === undefined || time2 === undefined || time1 === time2) {
38
+ return 0;
39
+ }
40
+
41
+ var diff = time2 - time1;
42
+ return Math.round(Math.max(-1, Math.min(1, diff)) * 10) / 10;
43
+ },
44
+ startTime: function startTime(line) {
45
+ var timestamp = this.timeToTimestamp(line.startTime) + (line.inOffset || 0);
46
+ return this.timestampToTime(timestamp);
47
+ },
48
+ stopTime: function stopTime(line) {
49
+ var timestamp = this.timeToTimestamp(line.stopTime) + (line.outOffset || 0);
50
+ return this.timestampToTime(timestamp);
51
+ }
52
+ };
53
+ exports["default"] = _default;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var extname = require("path").extname;
4
+
5
+ var TYPES = {
6
+ document: ["doc", "docx", "xls", "xlsx", "txt", "pdf", "ppt", "pptx"],
7
+ video: ["mov", "mp4", "m4v", "mpg", "mxf"],
8
+ audio: ["mp3", "wav", "m4a"],
9
+ image: ["jpg", "jpeg", "png", "tif", "tiff", "ai", "psd", "eps"],
10
+ zip: ["zip"]
11
+ };
12
+
13
+ function extensionType(extension) {
14
+ for (var type in TYPES) {
15
+ if (TYPES[type].indexOf(extension) > -1) {
16
+ return type;
17
+ }
18
+ }
19
+ }
20
+
21
+ function extension(path) {
22
+ return extname(path.split("?")[0].toLowerCase()).substring(1);
23
+ }
24
+
25
+ function mediaType(path) {
26
+ var type = extensionType(extension(path));
27
+
28
+ if (type) {
29
+ return type;
30
+ }
31
+
32
+ throw new Error("Unknown extension '".concat(extension, "'"));
33
+ }
34
+
35
+ module.exports = {
36
+ extension: extension,
37
+ extensionType: extensionType,
38
+ mediaType: mediaType
39
+ };
package/dist/index.js CHANGED
@@ -1,104 +1,96 @@
1
- 'use strict';
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
2
4
 
3
5
  Object.defineProperty(exports, "__esModule", {
4
- value: true
6
+ value: true
5
7
  });
6
-
7
- var _Asset = require('./src/Asset');
8
-
9
- Object.defineProperty(exports, 'Asset', {
10
- enumerable: true,
11
- get: function get() {
12
- return _interopRequireDefault(_Asset).default;
13
- }
8
+ Object.defineProperty(exports, "Asset", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _Asset["default"];
12
+ }
14
13
  });
15
-
16
- var _AssetType = require('./src/AssetType');
17
-
18
- Object.defineProperty(exports, 'AssetType', {
19
- enumerable: true,
20
- get: function get() {
21
- return _interopRequireDefault(_AssetType).default;
22
- }
14
+ Object.defineProperty(exports, "AssetType", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _AssetType["default"];
18
+ }
23
19
  });
24
-
25
- var _Encode = require('./src/Encode');
26
-
27
- Object.defineProperty(exports, 'Encode', {
28
- enumerable: true,
29
- get: function get() {
30
- return _interopRequireDefault(_Encode).default;
31
- }
20
+ Object.defineProperty(exports, "Encode", {
21
+ enumerable: true,
22
+ get: function get() {
23
+ return _Encode["default"];
24
+ }
32
25
  });
33
-
34
- var _File = require('./src/File');
35
-
36
- Object.defineProperty(exports, 'File', {
37
- enumerable: true,
38
- get: function get() {
39
- return _interopRequireDefault(_File).default;
40
- }
26
+ Object.defineProperty(exports, "File", {
27
+ enumerable: true,
28
+ get: function get() {
29
+ return _File["default"];
30
+ }
41
31
  });
42
-
43
- var _Filename = require('./src/Filename');
44
-
45
- Object.defineProperty(exports, 'Filename', {
46
- enumerable: true,
47
- get: function get() {
48
- return _interopRequireDefault(_Filename).default;
49
- }
32
+ Object.defineProperty(exports, "Filename", {
33
+ enumerable: true,
34
+ get: function get() {
35
+ return _Filename["default"];
36
+ }
50
37
  });
51
-
52
- var _Ingest = require('./src/Ingest');
53
-
54
- Object.defineProperty(exports, 'Ingest', {
55
- enumerable: true,
56
- get: function get() {
57
- return _interopRequireDefault(_Ingest).default;
58
- }
38
+ Object.defineProperty(exports, "Ingest", {
39
+ enumerable: true,
40
+ get: function get() {
41
+ return _Ingest["default"];
42
+ }
43
+ });
44
+ Object.defineProperty(exports, "IngestFile", {
45
+ enumerable: true,
46
+ get: function get() {
47
+ return _IngestFile["default"];
48
+ }
49
+ });
50
+ Object.defineProperty(exports, "Model", {
51
+ enumerable: true,
52
+ get: function get() {
53
+ return _Model["default"];
54
+ }
55
+ });
56
+ Object.defineProperty(exports, "Order", {
57
+ enumerable: true,
58
+ get: function get() {
59
+ return _Order["default"];
60
+ }
61
+ });
62
+ Object.defineProperty(exports, "Tag", {
63
+ enumerable: true,
64
+ get: function get() {
65
+ return _Tag["default"];
66
+ }
59
67
  });
68
+ exports.Pixwel = void 0;
60
69
 
61
- var _IngestFile = require('./src/IngestFile');
70
+ var _Asset = _interopRequireDefault(require("./src/Asset"));
62
71
 
63
- Object.defineProperty(exports, 'IngestFile', {
64
- enumerable: true,
65
- get: function get() {
66
- return _interopRequireDefault(_IngestFile).default;
67
- }
68
- });
72
+ var _AssetType = _interopRequireDefault(require("./src/AssetType"));
69
73
 
70
- var _Model = require('./src/Model');
74
+ var _Encode = _interopRequireDefault(require("./src/Encode"));
71
75
 
72
- Object.defineProperty(exports, 'Model', {
73
- enumerable: true,
74
- get: function get() {
75
- return _interopRequireDefault(_Model).default;
76
- }
77
- });
76
+ var _File = _interopRequireDefault(require("./src/File"));
78
77
 
79
- var _Order = require('./src/Order');
78
+ var _Filename = _interopRequireDefault(require("./src/Filename"));
80
79
 
81
- Object.defineProperty(exports, 'Order', {
82
- enumerable: true,
83
- get: function get() {
84
- return _interopRequireDefault(_Order).default;
85
- }
86
- });
80
+ var _Ingest = _interopRequireDefault(require("./src/Ingest"));
87
81
 
88
- var _Tag = require('./src/Tag');
82
+ var _IngestFile = _interopRequireDefault(require("./src/IngestFile"));
89
83
 
90
- Object.defineProperty(exports, 'Tag', {
91
- enumerable: true,
92
- get: function get() {
93
- return _interopRequireDefault(_Tag).default;
94
- }
95
- });
84
+ var _Model = _interopRequireDefault(require("./src/Model"));
85
+
86
+ var _Order = _interopRequireDefault(require("./src/Order"));
96
87
 
97
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
88
+ var _Tag = _interopRequireDefault(require("./src/Tag"));
98
89
 
99
- var Pixwel = exports.Pixwel = {
100
- credentials: {
101
- token: null
102
- },
103
- endpoint: 'https://api.pixwel.com/api'
104
- };
90
+ var Pixwel = {
91
+ credentials: {
92
+ token: null
93
+ },
94
+ endpoint: 'https://api.pixwel.com/api'
95
+ };
96
+ exports.Pixwel = Pixwel;
@@ -303,7 +303,7 @@ var Ingest = function (_Model) {
303
303
  key: "mapFromMediainfo",
304
304
  value: function mapFromMediainfo() {
305
305
  var info = this.mediainfo;
306
- var mediaType = this.asset.mediaType;
306
+ var mediaType = this.source.mediaType;
307
307
 
308
308
  var schema = {
309
309
  Aspect: null,
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@pixwel/pixwel-sdk",
3
3
  "description": "",
4
- "version": "2.1.4",
4
+ "version": "2.1.6",
5
5
  "author": "Pixwel",
6
6
  "license": "UNLICENSED",
7
7
  "main": "./dist/index.js",
8
8
  "scripts": {
9
- "build": "npx babel-cli -d dist index.js src/*.js",
10
- "watch": "npx babel-cli -w -d dist index.js src/*.js",
9
+ "build": "npx babel -d dist index.js src/*.js",
10
+ "watch": "npx babel -w -d dist index.js src/*.js",
11
11
  "test": "npx jest --coverage",
12
12
  "debug": "node --inspect-brk node_modules/.bin/jest --watch --runInBand"
13
13
  },
@@ -27,17 +27,16 @@
27
27
  "dependencies": {
28
28
  "@babel/runtime": "^7.5.5",
29
29
  "axios": "^0.19.0",
30
- "babel-loader": "^8.0.6",
31
- "babel-runtime": "^6.26.0",
32
30
  "deep-object-diff": "^1.1.0",
33
31
  "lodash": "^4.17.15",
34
32
  "ramda": "^0.26.1",
35
33
  "validate.js": "^0.13.1"
36
34
  },
37
35
  "devDependencies": {
38
- "babel-cli": "^6.26.0",
39
- "babel-plugin-transform-runtime": "^6.23.0",
40
- "babel-preset-env": "^1.7.0",
36
+ "@babel/cli": "^7.5.5",
37
+ "@babel/core": "^7.5.5",
38
+ "@babel/preset-env": "^7.5.5",
39
+ "@babel/plugin-transform-runtime": "^7.5.5",
41
40
  "jest": "^22.4.4"
42
41
  }
43
42
  }
package/src/Ingest.js CHANGED
@@ -278,7 +278,7 @@ export default class Ingest extends Model {
278
278
  */
279
279
  mapFromMediainfo() {
280
280
  let info = this.mediainfo;
281
- let mediaType = this.asset.mediaType;
281
+ let mediaType = this.source.mediaType;
282
282
 
283
283
  let schema = {
284
284
  Aspect: null,
@@ -867,6 +867,9 @@ describe("Ingest", () => {
867
867
  context: {
868
868
  tag: "FRIDAY"
869
869
  },
870
+ source: {
871
+ mediaType: "video"
872
+ },
870
873
  asset: {
871
874
  _id: "a1b2c3",
872
875
  name: "Asset",
@@ -1172,7 +1175,7 @@ describe("Ingest", () => {
1172
1175
  let meta = {};
1173
1176
  expect(() => {
1174
1177
  let ingest = new Ingest({
1175
- asset: { mediaType: "video" },
1178
+ source: { mediaType: "video" },
1176
1179
  mediainfo: meta
1177
1180
  });
1178
1181
  let info = ingest.mapFromMediainfo();
@@ -1182,7 +1185,7 @@ describe("Ingest", () => {
1182
1185
  let meta = { File: {} };
1183
1186
  expect(() => {
1184
1187
  let ingest = new Ingest({
1185
- asset: { mediaType: "video" },
1188
+ source: { mediaType: "video" },
1186
1189
  mediainfo: meta
1187
1190
  });
1188
1191
  let info = ingest.mapFromMediainfo();
@@ -1191,7 +1194,7 @@ describe("Ingest", () => {
1191
1194
  it("should return empty object of tags if no metadata supplied", () => {
1192
1195
  let meta = { File: { track: {} } };
1193
1196
  let ingest = new Ingest({
1194
- asset: { mediaType: "video" },
1197
+ source: { mediaType: "video" },
1195
1198
  mediainfo: meta
1196
1199
  });
1197
1200
  let info = ingest.mapFromMediainfo();
@@ -1199,7 +1202,7 @@ describe("Ingest", () => {
1199
1202
  });
1200
1203
  it("should set usage to broadcast for mxf files", () => {
1201
1204
  let ingest = new Ingest({
1202
- asset: { mediaType: "" },
1205
+ source: { mediaType: "" },
1203
1206
  mediainfo: mxfMock
1204
1207
  });
1205
1208
  let info = ingest.mapFromMediainfo();
@@ -1209,7 +1212,7 @@ describe("Ingest", () => {
1209
1212
  });
1210
1213
  it("should correctly map h264 metadata to tags", () => {
1211
1214
  let ingest = new Ingest({
1212
- asset: { mediaType: "video" },
1215
+ source: { mediaType: "video" },
1213
1216
  mediainfo: mock
1214
1217
  });
1215
1218
  let info = ingest.mapFromMediainfo();
@@ -1232,7 +1235,7 @@ describe("Ingest", () => {
1232
1235
  });
1233
1236
  it("should correctly map prores metadata to tags", () => {
1234
1237
  let ingest = new Ingest({
1235
- asset: { mediaType: "video" },
1238
+ source: { mediaType: "video" },
1236
1239
  mediainfo: proresMock
1237
1240
  });
1238
1241
  let info = ingest.mapFromMediainfo();
@@ -1255,7 +1258,7 @@ describe("Ingest", () => {
1255
1258
  });
1256
1259
  it("should correctly map png metadata to tags", () => {
1257
1260
  let ingest = new Ingest({
1258
- asset: { mediaType: "image" },
1261
+ source: { mediaType: "image" },
1259
1262
  mediainfo: pngMock
1260
1263
  });
1261
1264
  let info = ingest.mapFromMediainfo();