pdfjs-dist 2.5.207 → 2.6.347

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.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (133) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +867 -216
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +10214 -8547
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/es5/build/pdf.js +2023 -1046
  9. package/es5/build/pdf.js.map +1 -1
  10. package/es5/build/pdf.min.js +22 -0
  11. package/es5/build/pdf.worker.js +11136 -8144
  12. package/es5/build/pdf.worker.js.map +1 -1
  13. package/es5/build/pdf.worker.min.js +22 -0
  14. package/es5/image_decoders/pdf.image_decoders.js +12529 -0
  15. package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
  16. package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
  17. package/es5/web/images/shadow.png +0 -0
  18. package/es5/web/pdf_viewer.css +8 -5
  19. package/es5/web/pdf_viewer.js +195 -51
  20. package/es5/web/pdf_viewer.js.map +1 -1
  21. package/image_decoders/pdf.image_decoders.js +24 -16
  22. package/image_decoders/pdf.image_decoders.js.map +1 -1
  23. package/image_decoders/pdf.image_decoders.min.js +1 -1
  24. package/lib/core/annotation.js +479 -43
  25. package/lib/core/cff_parser.js +643 -615
  26. package/lib/core/chunked_stream.js +64 -50
  27. package/lib/core/colorspace.js +126 -104
  28. package/lib/core/crypto.js +37 -0
  29. package/lib/core/document.js +128 -75
  30. package/lib/core/evaluator.js +3015 -2754
  31. package/lib/core/fonts.js +47 -46
  32. package/lib/core/function.js +79 -6
  33. package/lib/core/image.js +364 -357
  34. package/lib/core/image_utils.js +109 -8
  35. package/lib/core/jpg.js +8 -3
  36. package/lib/core/obj.js +255 -34
  37. package/lib/core/operator_list.js +17 -15
  38. package/lib/core/parser.js +40 -3
  39. package/lib/core/pattern.js +24 -11
  40. package/lib/core/primitives.js +112 -53
  41. package/lib/core/type1_parser.js +2 -0
  42. package/lib/core/worker.js +102 -37
  43. package/lib/core/writer.js +242 -0
  44. package/lib/display/annotation_layer.js +51 -10
  45. package/lib/display/annotation_storage.js +89 -0
  46. package/lib/display/api.js +140 -54
  47. package/lib/display/canvas.js +215 -46
  48. package/lib/display/display_utils.js +55 -18
  49. package/lib/display/fetch_stream.js +6 -0
  50. package/lib/display/font_loader.js +26 -15
  51. package/lib/display/metadata.js +1 -7
  52. package/lib/display/network.js +0 -14
  53. package/lib/display/node_utils.js +87 -0
  54. package/lib/display/optional_content_config.js +184 -0
  55. package/lib/display/svg.js +1 -1
  56. package/lib/display/text_layer.js +4 -1
  57. package/lib/pdf.js +2 -2
  58. package/lib/pdf.worker.js +2 -2
  59. package/lib/shared/is_node.js +1 -1
  60. package/lib/shared/util.js +13 -10
  61. package/lib/test/unit/annotation_spec.js +520 -50
  62. package/lib/test/unit/annotation_storage_spec.js +83 -0
  63. package/lib/test/unit/api_spec.js +16 -6
  64. package/lib/test/unit/cmap_spec.js +4 -4
  65. package/lib/test/unit/colorspace_spec.js +216 -24
  66. package/lib/test/unit/crypto_spec.js +51 -4
  67. package/lib/test/unit/custom_spec.js +129 -1
  68. package/lib/test/unit/document_spec.js +112 -1
  69. package/lib/test/unit/evaluator_spec.js +29 -10
  70. package/lib/test/unit/jasmine-boot.js +1 -1
  71. package/lib/test/unit/metadata_spec.js +3 -3
  72. package/lib/test/unit/primitives_spec.js +242 -63
  73. package/lib/test/unit/test_utils.js +42 -89
  74. package/lib/test/unit/testreporter.js +17 -6
  75. package/lib/test/unit/util_spec.js +13 -12
  76. package/lib/test/unit/writer_spec.js +84 -0
  77. package/lib/web/annotation_layer_builder.js +13 -9
  78. package/lib/web/app.js +231 -26
  79. package/lib/web/app_options.js +1 -6
  80. package/lib/web/base_tree_viewer.js +100 -0
  81. package/lib/web/base_viewer.js +53 -4
  82. package/lib/web/download_manager.js +3 -10
  83. package/lib/web/firefox_print_service.js +32 -12
  84. package/lib/web/firefoxcom.js +20 -6
  85. package/lib/web/interfaces.js +1 -1
  86. package/lib/web/pdf_attachment_viewer.js +80 -38
  87. package/lib/web/pdf_find_controller.js +2 -1
  88. package/lib/web/pdf_layer_viewer.js +208 -0
  89. package/lib/web/pdf_outline_viewer.js +24 -57
  90. package/lib/web/pdf_page_view.js +29 -6
  91. package/lib/web/pdf_print_service.js +13 -11
  92. package/lib/web/pdf_sidebar.js +46 -25
  93. package/lib/web/pdf_thumbnail_view.js +16 -3
  94. package/lib/web/pdf_thumbnail_viewer.js +17 -1
  95. package/lib/web/pdf_viewer.component.js +2 -2
  96. package/lib/web/preferences.js +1 -1
  97. package/lib/web/toolbar.js +1 -1
  98. package/lib/web/ui_utils.js +7 -1
  99. package/package.json +3 -1
  100. package/types/display/annotation_layer.d.ts +61 -0
  101. package/types/display/annotation_storage.d.ts +36 -0
  102. package/types/display/api.d.ts +1107 -0
  103. package/types/display/api_compatibility.d.ts +1 -0
  104. package/types/display/canvas.d.ts +4 -0
  105. package/types/display/content_disposition.d.ts +7 -0
  106. package/types/display/display_utils.d.ts +243 -0
  107. package/types/display/fetch_stream.d.ts +67 -0
  108. package/types/display/font_loader.d.ts +19 -0
  109. package/types/display/metadata.d.ts +9 -0
  110. package/types/display/network.d.ts +80 -0
  111. package/types/display/network_utils.d.ts +14 -0
  112. package/types/display/node_stream.d.ts +72 -0
  113. package/types/display/node_utils.d.ts +6 -0
  114. package/types/display/optional_content_config.d.ts +12 -0
  115. package/types/display/pattern_helper.d.ts +5 -0
  116. package/types/display/svg.d.ts +2 -0
  117. package/types/display/text_layer.d.ts +83 -0
  118. package/types/display/transport_stream.d.ts +57 -0
  119. package/types/display/webgl.d.ts +20 -0
  120. package/types/display/worker_options.d.ts +27 -0
  121. package/types/display/xml_parser.d.ts +35 -0
  122. package/types/pdf.d.ts +33 -0
  123. package/types/shared/compatibility.d.ts +1 -0
  124. package/types/shared/is_node.d.ts +1 -0
  125. package/types/shared/message_handler.d.ts +62 -0
  126. package/types/shared/util.d.ts +421 -0
  127. package/web/images/shadow.png +0 -0
  128. package/web/pdf_viewer.css +8 -5
  129. package/web/pdf_viewer.js +109 -33
  130. package/web/pdf_viewer.js.map +1 -1
  131. package/webpack.js +1 -9
  132. package/es5/web/images/texture.png +0 -0
  133. package/web/images/texture.png +0 -0
@@ -29,6 +29,8 @@ var _api = require("../../display/api.js");
29
29
 
30
30
  var _is_node = require("../../shared/is_node.js");
31
31
 
32
+ var _node_utils = require("../../display/node_utils.js");
33
+
32
34
  function getTopLeftPixel(canvasContext) {
33
35
  const imgData = canvasContext.getImageData(0, 0, 1, 1);
34
36
  return {
@@ -46,7 +48,7 @@ describe("custom canvas rendering", function () {
46
48
  let page;
47
49
  beforeAll(function (done) {
48
50
  if (_is_node.isNodeJS) {
49
- CanvasFactory = new _test_utils.NodeCanvasFactory();
51
+ CanvasFactory = new _node_utils.NodeCanvasFactory();
50
52
  } else {
51
53
  CanvasFactory = new _display_utils.DOMCanvasFactory();
52
54
  }
@@ -105,4 +107,130 @@ describe("custom canvas rendering", function () {
105
107
  done();
106
108
  }).catch(done.fail);
107
109
  });
110
+ });
111
+ describe("custom ownerDocument", function () {
112
+ const FontFace = globalThis.FontFace;
113
+
114
+ const checkFont = font => /g_d\d+_f1/.test(font.family);
115
+
116
+ const checkFontFaceRule = rule => /^@font-face {font-family:"g_d\d+_f1";src:/.test(rule);
117
+
118
+ beforeEach(() => {
119
+ globalThis.FontFace = function MockFontFace(name) {
120
+ this.family = name;
121
+ };
122
+ });
123
+ afterEach(() => {
124
+ globalThis.FontFace = FontFace;
125
+ });
126
+
127
+ function getMocks() {
128
+ const elements = [];
129
+
130
+ const createElement = name => {
131
+ let element = typeof document !== "undefined" && document.createElement(name);
132
+
133
+ if (name === "style") {
134
+ element = {
135
+ tagName: name,
136
+ sheet: {
137
+ cssRules: [],
138
+
139
+ insertRule(rule) {
140
+ this.cssRules.push(rule);
141
+ }
142
+
143
+ }
144
+ };
145
+ Object.assign(element, {
146
+ remove() {
147
+ this.remove.called = true;
148
+ }
149
+
150
+ });
151
+ }
152
+
153
+ elements.push(element);
154
+ return element;
155
+ };
156
+
157
+ const ownerDocument = {
158
+ fonts: new Set(),
159
+ createElement,
160
+ documentElement: {
161
+ getElementsByTagName: () => [{
162
+ appendChild: () => {}
163
+ }]
164
+ }
165
+ };
166
+ const CanvasFactory = _is_node.isNodeJS ? new _node_utils.NodeCanvasFactory() : new _display_utils.DOMCanvasFactory({
167
+ ownerDocument
168
+ });
169
+ return {
170
+ elements,
171
+ ownerDocument,
172
+ CanvasFactory
173
+ };
174
+ }
175
+
176
+ it("should use given document for loading fonts (with Font Loading API)", async function () {
177
+ const {
178
+ ownerDocument,
179
+ elements,
180
+ CanvasFactory
181
+ } = getMocks();
182
+ const getDocumentParams = (0, _test_utils.buildGetDocumentParams)("TrueType_without_cmap.pdf", {
183
+ disableFontFace: false,
184
+ ownerDocument
185
+ });
186
+ const loadingTask = (0, _api.getDocument)(getDocumentParams);
187
+ const doc = await loadingTask.promise;
188
+ const page = await doc.getPage(1);
189
+ const viewport = page.getViewport({
190
+ scale: 1
191
+ });
192
+ const canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
193
+ await page.render({
194
+ canvasContext: canvasAndCtx.context,
195
+ viewport
196
+ }).promise;
197
+ const style = elements.find(element => element.tagName === "style");
198
+ expect(style).toBeFalsy();
199
+ expect(ownerDocument.fonts.size).toBeGreaterThanOrEqual(1);
200
+ expect(Array.from(ownerDocument.fonts).find(checkFont)).toBeTruthy();
201
+ await doc.destroy();
202
+ await loadingTask.destroy();
203
+ CanvasFactory.destroy(canvasAndCtx);
204
+ expect(ownerDocument.fonts.size).toBe(0);
205
+ });
206
+ it("should use given document for loading fonts (with CSS rules)", async function () {
207
+ const {
208
+ ownerDocument,
209
+ elements,
210
+ CanvasFactory
211
+ } = getMocks();
212
+ ownerDocument.fonts = null;
213
+ const getDocumentParams = (0, _test_utils.buildGetDocumentParams)("TrueType_without_cmap.pdf", {
214
+ disableFontFace: false,
215
+ ownerDocument
216
+ });
217
+ const loadingTask = (0, _api.getDocument)(getDocumentParams);
218
+ const doc = await loadingTask.promise;
219
+ const page = await doc.getPage(1);
220
+ const viewport = page.getViewport({
221
+ scale: 1
222
+ });
223
+ const canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
224
+ await page.render({
225
+ canvasContext: canvasAndCtx.context,
226
+ viewport
227
+ }).promise;
228
+ const style = elements.find(element => element.tagName === "style");
229
+ expect(style.sheet.cssRules.length).toBeGreaterThanOrEqual(1);
230
+ expect(style.sheet.cssRules.find(checkFontFaceRule)).toBeTruthy();
231
+ await doc.destroy();
232
+ await loadingTask.destroy();
233
+ CanvasFactory.destroy(canvasAndCtx);
234
+ expect(style.remove.called).toBe(true);
235
+ });
108
236
  });
@@ -23,20 +23,131 @@
23
23
 
24
24
  var _test_utils = require("./test_utils.js");
25
25
 
26
+ var _primitives = require("../../core/primitives.js");
27
+
28
+ var _document = require("../../core/document.js");
29
+
30
+ var _stream = require("../../core/stream.js");
31
+
26
32
  describe("document", function () {
27
33
  describe("Page", function () {
28
- it("should create correct objId using the idFactory", function () {
34
+ it("should create correct objId/fontId using the idFactory", function () {
29
35
  const idFactory1 = (0, _test_utils.createIdFactory)(0);
30
36
  const idFactory2 = (0, _test_utils.createIdFactory)(1);
31
37
  expect(idFactory1.createObjId()).toEqual("p0_1");
32
38
  expect(idFactory1.createObjId()).toEqual("p0_2");
39
+ expect(idFactory1.createFontId()).toEqual("f1");
40
+ expect(idFactory1.createFontId()).toEqual("f2");
33
41
  expect(idFactory1.getDocId()).toEqual("g_d0");
34
42
  expect(idFactory2.createObjId()).toEqual("p1_1");
35
43
  expect(idFactory2.createObjId()).toEqual("p1_2");
44
+ expect(idFactory2.createFontId()).toEqual("f1");
45
+ expect(idFactory2.createFontId()).toEqual("f2");
36
46
  expect(idFactory2.getDocId()).toEqual("g_d0");
37
47
  expect(idFactory1.createObjId()).toEqual("p0_3");
38
48
  expect(idFactory1.createObjId()).toEqual("p0_4");
49
+ expect(idFactory1.createFontId()).toEqual("f3");
50
+ expect(idFactory1.createFontId()).toEqual("f4");
39
51
  expect(idFactory1.getDocId()).toEqual("g_d0");
40
52
  });
41
53
  });
54
+ describe("PDFDocument", function () {
55
+ const pdfManager = {
56
+ get docId() {
57
+ return "d0";
58
+ }
59
+
60
+ };
61
+ const stream = new _stream.StringStream("Dummy_PDF_data");
62
+
63
+ function getDocument(acroForm) {
64
+ const pdfDocument = new _document.PDFDocument(pdfManager, stream);
65
+ pdfDocument.catalog = {
66
+ acroForm
67
+ };
68
+ return pdfDocument;
69
+ }
70
+
71
+ it("should get form info when no form data is present", function () {
72
+ const pdfDocument = getDocument(null);
73
+ expect(pdfDocument.formInfo).toEqual({
74
+ hasAcroForm: false,
75
+ hasXfa: false
76
+ });
77
+ });
78
+ it("should get form info when XFA is present", function () {
79
+ const acroForm = new _primitives.Dict();
80
+ acroForm.set("XFA", []);
81
+ let pdfDocument = getDocument(acroForm);
82
+ expect(pdfDocument.formInfo).toEqual({
83
+ hasAcroForm: false,
84
+ hasXfa: false
85
+ });
86
+ acroForm.set("XFA", ["foo", "bar"]);
87
+ pdfDocument = getDocument(acroForm);
88
+ expect(pdfDocument.formInfo).toEqual({
89
+ hasAcroForm: false,
90
+ hasXfa: true
91
+ });
92
+ acroForm.set("XFA", new _stream.StringStream(""));
93
+ pdfDocument = getDocument(acroForm);
94
+ expect(pdfDocument.formInfo).toEqual({
95
+ hasAcroForm: false,
96
+ hasXfa: false
97
+ });
98
+ acroForm.set("XFA", new _stream.StringStream("non-empty"));
99
+ pdfDocument = getDocument(acroForm);
100
+ expect(pdfDocument.formInfo).toEqual({
101
+ hasAcroForm: false,
102
+ hasXfa: true
103
+ });
104
+ });
105
+ it("should get form info when AcroForm is present", function () {
106
+ const acroForm = new _primitives.Dict();
107
+ acroForm.set("Fields", []);
108
+ let pdfDocument = getDocument(acroForm);
109
+ expect(pdfDocument.formInfo).toEqual({
110
+ hasAcroForm: false,
111
+ hasXfa: false
112
+ });
113
+ acroForm.set("Fields", ["foo", "bar"]);
114
+ pdfDocument = getDocument(acroForm);
115
+ expect(pdfDocument.formInfo).toEqual({
116
+ hasAcroForm: true,
117
+ hasXfa: false
118
+ });
119
+ acroForm.set("Fields", ["foo", "bar"]);
120
+ acroForm.set("SigFlags", 2);
121
+ pdfDocument = getDocument(acroForm);
122
+ expect(pdfDocument.formInfo).toEqual({
123
+ hasAcroForm: true,
124
+ hasXfa: false
125
+ });
126
+ const annotationDict = new _primitives.Dict();
127
+ annotationDict.set("FT", _primitives.Name.get("Sig"));
128
+ annotationDict.set("Rect", [0, 0, 0, 0]);
129
+
130
+ const annotationRef = _primitives.Ref.get(11, 0);
131
+
132
+ const kidsDict = new _primitives.Dict();
133
+ kidsDict.set("Kids", [annotationRef]);
134
+
135
+ const kidsRef = _primitives.Ref.get(10, 0);
136
+
137
+ pdfDocument.xref = new _test_utils.XRefMock([{
138
+ ref: annotationRef,
139
+ data: annotationDict
140
+ }, {
141
+ ref: kidsRef,
142
+ data: kidsDict
143
+ }]);
144
+ acroForm.set("Fields", [kidsRef]);
145
+ acroForm.set("SigFlags", 3);
146
+ pdfDocument = getDocument(acroForm);
147
+ expect(pdfDocument.formInfo).toEqual({
148
+ hasAcroForm: false,
149
+ hasXfa: false
150
+ });
151
+ });
152
+ });
42
153
  });
@@ -108,14 +108,26 @@ describe("evaluator", function () {
108
108
  });
109
109
  });
110
110
  it("should handle two glued operations", function (done) {
111
- var resources = new ResourcesMock();
112
- resources.Res1 = {};
111
+ const imgDict = new _primitives.Dict();
112
+ imgDict.set("Subtype", _primitives.Name.get("Image"));
113
+ imgDict.set("Width", 1);
114
+ imgDict.set("Height", 1);
115
+ const imgStream = new _stream.Stream([0]);
116
+ imgStream.dict = imgDict;
117
+ const xObject = new _primitives.Dict();
118
+ xObject.set("Res1", imgStream);
119
+ const resources = new ResourcesMock();
120
+ resources.XObject = xObject;
113
121
  var stream = new _stream.StringStream("/Res1 DoQ");
114
122
  runOperatorListCheck(partialEvaluator, stream, resources, function (result) {
115
- expect(!!result.fnArray && !!result.argsArray).toEqual(true);
116
- expect(result.fnArray.length).toEqual(2);
117
- expect(result.fnArray[0]).toEqual(_util.OPS.paintXObject);
118
- expect(result.fnArray[1]).toEqual(_util.OPS.restore);
123
+ expect(result.fnArray.length).toEqual(3);
124
+ expect(result.fnArray[0]).toEqual(_util.OPS.dependency);
125
+ expect(result.fnArray[1]).toEqual(_util.OPS.paintImageXObject);
126
+ expect(result.fnArray[2]).toEqual(_util.OPS.restore);
127
+ expect(result.argsArray.length).toEqual(3);
128
+ expect(result.argsArray[0]).toEqual(["img_p0_1"]);
129
+ expect(result.argsArray[1]).toEqual(["img_p0_1", 1, 1]);
130
+ expect(result.argsArray[2]).toEqual(null);
119
131
  done();
120
132
  });
121
133
  });
@@ -194,16 +206,23 @@ describe("evaluator", function () {
194
206
  });
195
207
  });
196
208
  it("should execute if nested commands", function (done) {
209
+ const gState = new _primitives.Dict();
210
+ gState.set("LW", 2);
211
+ gState.set("CA", 0.5);
212
+ const extGState = new _primitives.Dict();
213
+ extGState.set("GS2", gState);
214
+ const resources = new ResourcesMock();
215
+ resources.ExtGState = extGState;
197
216
  var stream = new _stream.StringStream("/F2 /GS2 gs 5.711 Tf");
198
- runOperatorListCheck(partialEvaluator, stream, new ResourcesMock(), function (result) {
217
+ runOperatorListCheck(partialEvaluator, stream, resources, function (result) {
199
218
  expect(result.fnArray.length).toEqual(3);
200
219
  expect(result.fnArray[0]).toEqual(_util.OPS.setGState);
201
220
  expect(result.fnArray[1]).toEqual(_util.OPS.dependency);
202
221
  expect(result.fnArray[2]).toEqual(_util.OPS.setFont);
203
222
  expect(result.argsArray.length).toEqual(3);
204
- expect(result.argsArray[0].length).toEqual(1);
205
- expect(result.argsArray[1].length).toEqual(1);
206
- expect(result.argsArray[2].length).toEqual(2);
223
+ expect(result.argsArray[0]).toEqual([[["LW", 2], ["CA", 0.5]]]);
224
+ expect(result.argsArray[1]).toEqual(["g_font_error"]);
225
+ expect(result.argsArray[2]).toEqual(["g_font_error", 5.711]);
207
226
  done();
208
227
  });
209
228
  });
@@ -22,7 +22,7 @@
22
22
  "use strict";
23
23
 
24
24
  function initializePDFJS(callback) {
25
- Promise.all(["pdfjs/display/api.js", "pdfjs/display/worker_options.js", "pdfjs/display/network.js", "pdfjs/display/fetch_stream.js", "pdfjs/shared/is_node.js", "pdfjs-test/unit/annotation_spec.js", "pdfjs-test/unit/api_spec.js", "pdfjs-test/unit/bidi_spec.js", "pdfjs-test/unit/cff_parser_spec.js", "pdfjs-test/unit/cmap_spec.js", "pdfjs-test/unit/colorspace_spec.js", "pdfjs-test/unit/core_utils_spec.js", "pdfjs-test/unit/crypto_spec.js", "pdfjs-test/unit/custom_spec.js", "pdfjs-test/unit/display_svg_spec.js", "pdfjs-test/unit/display_utils_spec.js", "pdfjs-test/unit/document_spec.js", "pdfjs-test/unit/encodings_spec.js", "pdfjs-test/unit/evaluator_spec.js", "pdfjs-test/unit/function_spec.js", "pdfjs-test/unit/fetch_stream_spec.js", "pdfjs-test/unit/message_handler_spec.js", "pdfjs-test/unit/metadata_spec.js", "pdfjs-test/unit/murmurhash3_spec.js", "pdfjs-test/unit/network_spec.js", "pdfjs-test/unit/network_utils_spec.js", "pdfjs-test/unit/parser_spec.js", "pdfjs-test/unit/pdf_find_controller_spec.js", "pdfjs-test/unit/pdf_find_utils_spec.js", "pdfjs-test/unit/pdf_history_spec.js", "pdfjs-test/unit/primitives_spec.js", "pdfjs-test/unit/stream_spec.js", "pdfjs-test/unit/type1_parser_spec.js", "pdfjs-test/unit/ui_utils_spec.js", "pdfjs-test/unit/unicode_spec.js", "pdfjs-test/unit/util_spec.js"].map(function (moduleName) {
25
+ Promise.all(["pdfjs/display/api.js", "pdfjs/display/worker_options.js", "pdfjs/display/network.js", "pdfjs/display/fetch_stream.js", "pdfjs/shared/is_node.js", "pdfjs-test/unit/annotation_spec.js", "pdfjs-test/unit/annotation_storage_spec.js", "pdfjs-test/unit/api_spec.js", "pdfjs-test/unit/bidi_spec.js", "pdfjs-test/unit/cff_parser_spec.js", "pdfjs-test/unit/cmap_spec.js", "pdfjs-test/unit/colorspace_spec.js", "pdfjs-test/unit/core_utils_spec.js", "pdfjs-test/unit/crypto_spec.js", "pdfjs-test/unit/custom_spec.js", "pdfjs-test/unit/display_svg_spec.js", "pdfjs-test/unit/display_utils_spec.js", "pdfjs-test/unit/document_spec.js", "pdfjs-test/unit/encodings_spec.js", "pdfjs-test/unit/evaluator_spec.js", "pdfjs-test/unit/function_spec.js", "pdfjs-test/unit/fetch_stream_spec.js", "pdfjs-test/unit/message_handler_spec.js", "pdfjs-test/unit/metadata_spec.js", "pdfjs-test/unit/murmurhash3_spec.js", "pdfjs-test/unit/network_spec.js", "pdfjs-test/unit/network_utils_spec.js", "pdfjs-test/unit/parser_spec.js", "pdfjs-test/unit/pdf_find_controller_spec.js", "pdfjs-test/unit/pdf_find_utils_spec.js", "pdfjs-test/unit/pdf_history_spec.js", "pdfjs-test/unit/primitives_spec.js", "pdfjs-test/unit/stream_spec.js", "pdfjs-test/unit/type1_parser_spec.js", "pdfjs-test/unit/ui_utils_spec.js", "pdfjs-test/unit/unicode_spec.js", "pdfjs-test/unit/util_spec.js", "pdfjs-test/unit/writer_spec.js"].map(function (moduleName) {
26
26
  return SystemJS.import(moduleName);
27
27
  })).then(function (modules) {
28
28
  const displayApi = modules[0];
@@ -21,7 +21,7 @@
21
21
  */
22
22
  "use strict";
23
23
 
24
- var _util = require("../../shared/util.js");
24
+ var _test_utils = require("./test_utils.js");
25
25
 
26
26
  var _metadata = require("../../display/metadata.js");
27
27
 
@@ -64,7 +64,7 @@ describe("metadata", function () {
64
64
  it("should gracefully handle incomplete tags (issue 8884)", function () {
65
65
  const data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d' + '<x:xmpmeta xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about=""' + 'xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">' + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + "<xap:ModifyDate>2010-03-25T11:20:09-04:00</xap:ModifyDate>" + "<xap:CreateDate>2010-03-25T11:20:09-04:00</xap:CreateDate>" + "<xap:MetadataDate>2010-03-25T11:20:09-04:00</xap:MetadataDate>" + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + "<dc:format>application/pdf</dc:format>" + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">' + "<pdfaid:part>1</pdfaid:part>" + "<pdfaid:conformance>A</pdfaid:conformance>" + "</rdf:Description>" + "</rdf:RDF>" + "</x:xmpmeta>" + '<?xpacket end="w"?>';
66
66
  const metadata = new _metadata.Metadata(data);
67
- expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
67
+ expect((0, _test_utils.isEmptyObj)(metadata.getAll())).toEqual(true);
68
68
  });
69
69
  it('should gracefully handle "junk" before the actual metadata (issue 10395)', function () {
70
70
  const data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<x:xmpmeta x:xmptk="TallComponents PDFObjects 1.0" ' + 'xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + "<pdf:Producer>PDFKit.NET 4.0.102.0</pdf:Producer>" + "<pdf:Keywords></pdf:Keywords>" + "<pdf:PDFVersion>1.7</pdf:PDFVersion></rdf:Description>" + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + "<xap:CreateDate>2018-12-27T13:50:36-08:00</xap:CreateDate>" + "<xap:ModifyDate>2018-12-27T13:50:38-08:00</xap:ModifyDate>" + "<xap:CreatorTool></xap:CreatorTool>" + "<xap:MetadataDate>2018-12-27T13:50:38-08:00</xap:MetadataDate>" + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + "<dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator>" + "<dc:subject><rdf:Bag /></dc:subject>" + '<dc:description><rdf:Alt><rdf:li xml:lang="x-default">' + "</rdf:li></rdf:Alt></dc:description>" + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default"></rdf:li>' + "</rdf:Alt></dc:title><dc:format>application/pdf</dc:format>" + '</rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
@@ -102,7 +102,7 @@ describe("metadata", function () {
102
102
  it("should gracefully handle unbalanced end tags (issue 10410)", function () {
103
103
  const data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + "<pdf:Producer>Soda PDF 5</pdf:Producer></rdf:Description>" + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + "<xap:CreateDate>2018-10-02T08:14:49-05:00</xap:CreateDate>" + "<xap:CreatorTool>Soda PDF 5</xap:CreatorTool>" + "<xap:MetadataDate>2018-10-02T08:14:49-05:00</xap:MetadataDate> " + "<xap:ModifyDate>2018-10-02T08:14:49-05:00</xap:ModifyDate>" + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">' + "<xmpMM:DocumentID>uuid:00000000-1c84-3cf9-89ba-bef0e729c831" + "</xmpMM:DocumentID></rdf:Description>" + '</rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
104
104
  const metadata = new _metadata.Metadata(data);
105
- expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
105
+ expect((0, _test_utils.isEmptyObj)(metadata.getAll())).toEqual(true);
106
106
  });
107
107
  it("should not be vulnerable to the billion laughs attack", function () {
108
108
  const data = '<?xml version="1.0"?>' + "<!DOCTYPE lolz [" + ' <!ENTITY lol "lol">' + ' <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">' + ' <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">' + ' <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">' + ' <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">' + ' <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">' + ' <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">' + ' <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">' + ' <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">' + ' <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">' + "]>" + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + ' <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/">' + " <dc:title>" + " <rdf:Alt>" + ' <rdf:li xml:lang="x-default">a&lol9;b</rdf:li>' + " </rdf:Alt>" + " </dc:title>" + " </rdf:Description>" + "</rdf:RDF>";