@syzlm/ofdparser 0.0.1

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 (213) hide show
  1. package/.babelrc +14 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.json +18 -0
  4. package/.prettierrc.json +9 -0
  5. package/dist/OFD.d.ts +8 -0
  6. package/dist/Pages.d.ts +7 -0
  7. package/dist/RootDocumnet.d.ts +1 -0
  8. package/dist/bundle.cjs.js +64123 -0
  9. package/dist/bundle.esm.js +64115 -0
  10. package/dist/bundle.iife.js +14743 -0
  11. package/dist/bundle.umd.js +64045 -0
  12. package/dist/constant/index.d.ts +7 -0
  13. package/dist/constant.d.ts +6 -0
  14. package/dist/core/ofd-core/Annotations/AnnotationsXml.d.ts +16 -0
  15. package/dist/core/ofd-core/Asn.1Utils.d.ts +47 -0
  16. package/dist/core/ofd-core/Documents/DocumentResXml.d.ts +15 -0
  17. package/dist/core/ofd-core/Documents/DocumnetXml.d.ts +25 -0
  18. package/dist/core/ofd-core/Documents/PublicResXml.d.ts +15 -0
  19. package/dist/core/ofd-core/OFDElement.d.ts +232 -0
  20. package/dist/core/ofd-core/Ofd/OFDXml.d.ts +19 -0
  21. package/dist/core/ofd-core/Pages/PageXml.d.ts +20 -0
  22. package/dist/core/ofd-core/Signatures/Signatures.d.ts +20 -0
  23. package/dist/core/ofd-core/TemplatePages/TemplatePages.d.ts +20 -0
  24. package/dist/core/ofd-core/constant.d.ts +29 -0
  25. package/dist/core/ofd-core/utils.d.ts +21 -0
  26. package/dist/dicom/dicom.d.ts +15 -0
  27. package/dist/dicom/index.d.ts +1 -0
  28. package/dist/errors/ErrorHandle.d.ts +6 -0
  29. package/dist/errors/ErrorMsg.d.ts +16 -0
  30. package/dist/errors/FetchErrors.d.ts +4 -0
  31. package/dist/errors/MimeError.d.ts +4 -0
  32. package/dist/errors/OFDErrors.d.ts +4 -0
  33. package/dist/errors/UnzipErrors.d.ts +4 -0
  34. package/dist/errors/XmlErrors.d.ts +4 -0
  35. package/dist/errors/error-msg.d.ts +9 -0
  36. package/dist/es.d.ts +2 -0
  37. package/dist/index.d.ts +6 -0
  38. package/dist/lib/ParseFile.d.ts +7 -0
  39. package/dist/lib/UnitCoversion.d.ts +31 -0
  40. package/dist/lib/asn1/Asn.1.d.ts +34 -0
  41. package/dist/lib/asn1/Stream.d.ts +27 -0
  42. package/dist/lib/asn1/asn1.d.ts +4 -0
  43. package/dist/lib/asn1/base64.d.ts +4 -0
  44. package/dist/lib/asn1/hex.d.ts +5 -0
  45. package/dist/lib/asn1/index.d.ts +5 -0
  46. package/dist/lib/asn1/int10.d.ts +34 -0
  47. package/dist/lib/asn1/oids.d.ts +2 -0
  48. package/dist/lib/asn1/string-cut.d.ts +2 -0
  49. package/dist/lib/decode-html.d.ts +7 -0
  50. package/dist/lib/fetch.d.ts +17 -0
  51. package/dist/lib/is-element.d.ts +5 -0
  52. package/dist/lib/load-files.d.ts +3 -0
  53. package/dist/lib/load-opentype.d.ts +34 -0
  54. package/dist/lib/load-script.d.ts +1 -0
  55. package/dist/lib/mime.d.ts +8 -0
  56. package/dist/lib/read-buffer.d.ts +2 -0
  57. package/dist/lib/toFixeds.d.ts +7 -0
  58. package/dist/libs/Asn.1Utils.d.ts +47 -0
  59. package/dist/libs/asn1/Asn.1.d.ts +34 -0
  60. package/dist/libs/asn1/Stream.d.ts +27 -0
  61. package/dist/libs/asn1/asn1.d.ts +4 -0
  62. package/dist/libs/asn1/base64.d.ts +4 -0
  63. package/dist/libs/asn1/hex.d.ts +5 -0
  64. package/dist/libs/asn1/index.d.ts +5 -0
  65. package/dist/libs/asn1/int10.d.ts +34 -0
  66. package/dist/libs/asn1/oids.d.ts +2 -0
  67. package/dist/libs/asn1/string-cut.d.ts +2 -0
  68. package/dist/libs/decode-html.d.ts +7 -0
  69. package/dist/libs/fetch.d.ts +17 -0
  70. package/dist/libs/mime.d.ts +8 -0
  71. package/dist/libs/ofdArray.d.ts +10 -0
  72. package/dist/libs/ofdImageObject.d.ts +9 -0
  73. package/dist/libs/ofdLayer.d.ts +3 -0
  74. package/dist/libs/ofdName.d.ts +17 -0
  75. package/dist/libs/ofdPathObject.d.ts +11 -0
  76. package/dist/libs/ofdTextObject.d.ts +6 -0
  77. package/dist/libs/parseAnnotation.d.ts +5 -0
  78. package/dist/libs/parseColor.d.ts +5 -0
  79. package/dist/libs/parsePageArea.d.ts +17 -0
  80. package/dist/libs/parser-elements.d.ts +8 -0
  81. package/dist/libs/parserElements.d.ts +8 -0
  82. package/dist/libs/pipeExtensions.d.ts +4 -0
  83. package/dist/libs/read-buffer.d.ts +2 -0
  84. package/dist/main.d.ts +15 -0
  85. package/dist/ofd/ConverterDpi.d.ts +16 -0
  86. package/dist/ofd/index.d.ts +1 -0
  87. package/dist/ofd/ofd-utils.d.ts +137 -0
  88. package/dist/ofd/ofd.d.ts +35 -0
  89. package/dist/ofd/parse-ofd.d.ts +18 -0
  90. package/dist/ofd/render.d.ts +18 -0
  91. package/dist/ofd/svg-image.d.ts +12 -0
  92. package/dist/ofd/svg-path.d.ts +5 -0
  93. package/dist/ofd/svg-text.d.ts +8 -0
  94. package/dist/ofd.parse.d.ts +6 -0
  95. package/dist/ofd.xml.d.ts +1 -0
  96. package/dist/ofdParse.d.ts +6 -0
  97. package/dist/pipe/annotations.d.ts +13 -0
  98. package/dist/pipe/attachments.d.ts +13 -0
  99. package/dist/pipe/commonData.d.ts +18 -0
  100. package/dist/pipe/customTags.d.ts +14 -0
  101. package/dist/pipe/extensions.d.ts +14 -0
  102. package/dist/pipe/output.d.ts +7 -0
  103. package/dist/pipe/pages.d.ts +13 -0
  104. package/dist/pipe/permissions.d.ts +14 -0
  105. package/dist/pipe/pipeline.d.ts +63 -0
  106. package/dist/pipe/startPipe.d.ts +11 -0
  107. package/dist/xml/index.d.ts +2 -0
  108. package/dist/xml/render.d.ts +6 -0
  109. package/dist/xml/xml.d.ts +18 -0
  110. package/package.json +47 -0
  111. package/public/index.html +75 -0
  112. package/public/opentype.min.js +2 -0
  113. package/rollup.config.dev.mjs +47 -0
  114. package/rollup.config.mjs +70 -0
  115. package/src/constant/index.ts +13 -0
  116. package/src/core/ofd-core/Annotations/Annotation.km +206 -0
  117. package/src/core/ofd-core/Annotations/Annotations.km +59 -0
  118. package/src/core/ofd-core/Annotations/Annotations.md +13 -0
  119. package/src/core/ofd-core/Annotations/AnnotationsXml.ts +114 -0
  120. package/src/core/ofd-core/Asn.1Utils.ts +225 -0
  121. package/src/core/ofd-core/Documents/DocumentResXml.ts +55 -0
  122. package/src/core/ofd-core/Documents/Documnet.km +862 -0
  123. package/src/core/ofd-core/Documents/DocumnetXml.ts +118 -0
  124. package/src/core/ofd-core/Documents/Documnets.md +296 -0
  125. package/src/core/ofd-core/Documents/PublicResXml.ts +63 -0
  126. package/src/core/ofd-core/Documents//345/233/276/345/261/202/346/270/262/346/237/223/351/241/272/345/272/217.png +0 -0
  127. package/src/core/ofd-core/Documents//350/241/25022/347/272/277/346/235/241/350/277/236/346/216/245/346/240/267/345/274/217.png +0 -0
  128. package/src/core/ofd-core/Documents//350/241/25023/347/272/277/346/235/241/350/231/232/347/272/277/346/240/267/345/274/217.png +0 -0
  129. package/src/core/ofd-core/Documents//350/241/25023/347/273/223/345/220/210/347/202/271/351/225/277/345/272/246.png +0 -0
  130. package/src/core/ofd-core/Documents//350/241/25024/347/272/277/346/235/241/347/253/257/347/202/271/346/240/267/345/274/217.png +0 -0
  131. package/src/core/ofd-core/Documents//351/241/265/350/276/271/347/225/214/345/261/202/346/254/241/347/273/223/346/236/204.png +0 -0
  132. package/src/core/ofd-core/OFDElement.ts +724 -0
  133. package/src/core/ofd-core/Ofd/CT_DocInfo.km +197 -0
  134. package/src/core/ofd-core/Ofd/OFD.km +114 -0
  135. package/src/core/ofd-core/Ofd/OFD.md +99 -0
  136. package/src/core/ofd-core/Ofd/OFDXml.ts +69 -0
  137. package/src/core/ofd-core/Pages/PAGE.md +40 -0
  138. package/src/core/ofd-core/Pages/PageXml.ts +59 -0
  139. package/src/core/ofd-core/Signatures/Signature.km +308 -0
  140. package/src/core/ofd-core/Signatures/Signature.md +21 -0
  141. package/src/core/ofd-core/Signatures/Signatures.km +315 -0
  142. package/src/core/ofd-core/Signatures/Signatures.md +24 -0
  143. package/src/core/ofd-core/Signatures/Signatures.ts +247 -0
  144. package/src/core/ofd-core/TemplatePages/TemplatePages.ts +56 -0
  145. package/src/core/ofd-core/asn.md +60 -0
  146. package/src/core/ofd-core/constant.ts +35 -0
  147. package/src/core/ofd-core/index.d.ts +867 -0
  148. package/src/core/ofd-core/utils.ts +86 -0
  149. package/src/dicom/dicom.ts +42 -0
  150. package/src/dicom/index.ts +1 -0
  151. package/src/errors/ErrorHandle.ts +14 -0
  152. package/src/errors/FetchErrors.ts +8 -0
  153. package/src/errors/MimeError.ts +9 -0
  154. package/src/errors/OFDErrors.ts +11 -0
  155. package/src/errors/UnzipErrors.ts +9 -0
  156. package/src/errors/XmlErrors.ts +11 -0
  157. package/src/errors/error-msg.ts +17 -0
  158. package/src/es.ts +3 -0
  159. package/src/global.d.ts +7 -0
  160. package/src/index.ts +7 -0
  161. package/src/lib/ParseFile.ts +12 -0
  162. package/src/lib/README.md +69 -0
  163. package/src/lib/UnitCoversion.ts +55 -0
  164. package/src/lib/asn1/Asn.1.ts +284 -0
  165. package/src/lib/asn1/README.md +1 -0
  166. package/src/lib/asn1/Stream.ts +314 -0
  167. package/src/lib/asn1/asn1.ts +120 -0
  168. package/src/lib/asn1/base64.ts +97 -0
  169. package/src/lib/asn1/hex.ts +60 -0
  170. package/src/lib/asn1/index.ts +5 -0
  171. package/src/lib/asn1/int10.ts +103 -0
  172. package/src/lib/asn1/oids.ts +6164 -0
  173. package/src/lib/asn1/string-cut.ts +8 -0
  174. package/src/lib/decode-html.ts +37 -0
  175. package/src/lib/fetch.ts +70 -0
  176. package/src/lib/is-element.ts +13 -0
  177. package/src/lib/jbig/README.md +1 -0
  178. package/src/lib/jbig/arithmetic_decoder.js +184 -0
  179. package/src/lib/jbig/base_stream.js +117 -0
  180. package/src/lib/jbig/ccitt.js +1068 -0
  181. package/src/lib/jbig/ccitt_stream.js +60 -0
  182. package/src/lib/jbig/compatibility.js +108 -0
  183. package/src/lib/jbig/core_utils.js +591 -0
  184. package/src/lib/jbig/decode_stream.js +184 -0
  185. package/src/lib/jbig/is_node.js +28 -0
  186. package/src/lib/jbig/jbig2.js +2582 -0
  187. package/src/lib/jbig/jbig2_stream.js +78 -0
  188. package/src/lib/jbig/primitives.js +441 -0
  189. package/src/lib/jbig/stream.js +101 -0
  190. package/src/lib/jbig/util.js +1231 -0
  191. package/src/lib/load-files.ts +26 -0
  192. package/src/lib/load-opentype.ts +161 -0
  193. package/src/lib/load-script.ts +33 -0
  194. package/src/lib/mime.ts +97 -0
  195. package/src/lib/read-buffer.ts +19 -0
  196. package/src/lib/toFixeds.ts +56 -0
  197. package/src/ofd/ConverterDpi.ts +35 -0
  198. package/src/ofd/OFD.md +38 -0
  199. package/src/ofd/TODO.md +10 -0
  200. package/src/ofd/index.ts +1 -0
  201. package/src/ofd/ofd-utils.ts +627 -0
  202. package/src/ofd/ofd.demo.md +12 -0
  203. package/src/ofd/ofd.ts +200 -0
  204. package/src/ofd/ofdxml.km +162 -0
  205. package/src/ofd/parse-ofd.ts +103 -0
  206. package/src/ofd/render.ts +393 -0
  207. package/src/ofd/svg-image.ts +318 -0
  208. package/src/ofd/svg-path.ts +283 -0
  209. package/src/ofd/svg-text.ts +272 -0
  210. package/src/xml/index.ts +3 -0
  211. package/src/xml/render.ts +171 -0
  212. package/src/xml/xml.ts +136 -0
  213. package/tsconfig.json +21 -0
@@ -0,0 +1,86 @@
1
+ import { Element } from 'xml-js';
2
+ import { OFD_Q } from './constant';
3
+
4
+ export const reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/;
5
+
6
+ export function recursion(
7
+ elements: Array<Element>,
8
+ result: { [key: string]: any },
9
+ flatResult: { [key: string]: any },
10
+ ) {
11
+ if (elements && elements.length) {
12
+ elements.forEach(item => {
13
+ const { type, name, elements } = item;
14
+ if (name) {
15
+ // 获取子集是否是text
16
+ result[name] = null;
17
+ flatResult[name] = null;
18
+ if (type === 'element') {
19
+ if (elements && elements.length === 1 && elements[0].type === 'text') {
20
+ result[name] = elements[0].text;
21
+ flatResult[name] = elements[0].text;
22
+ }
23
+
24
+ // 递归
25
+ if (elements && elements.length && elements[0].type !== 'text') {
26
+ result[name] = {};
27
+ recursion(elements, result[name], flatResult);
28
+ }
29
+ if (!elements && item.attributes) {
30
+ result[name] = { ...item.attributes };
31
+ flatResult[name] = { ...item.attributes };
32
+ }
33
+ }
34
+ }
35
+ });
36
+ }
37
+ }
38
+
39
+ export function recursionGet(elements: Array<Element>, qName: string): Element | null {
40
+ if (elements && elements.length) {
41
+ for (let i = 0; i < elements.length; i++) {
42
+ const item = elements[i];
43
+ const { name, elements: cElements, type } = item;
44
+ if (qName === name) {
45
+ return { ...item };
46
+ }
47
+ if (type === 'element' && cElements?.length) {
48
+ const result = recursionGet(cElements, qName);
49
+ if (result) {
50
+ return result;
51
+ }
52
+ }
53
+ continue;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+
59
+ export const NameREG = new RegExp(OFD_Q);
60
+
61
+ /**
62
+ * @description
63
+ * 包结构内文件的路径,“”表示当前路径,“”表示父路径。
64
+ * 约定:
65
+ * 1.“/”代表根节点;
66
+ * 2. 未显式指定时代表当前路径;
67
+ * 3.路径区分大小写
68
+ * @param STLoc
69
+ * @param pathString
70
+ * @returns
71
+ */
72
+ export const replacePathPriex = (STLoc: string, pathString: string) => {
73
+ const pathReg = new RegExp(`${STLoc}/${STLoc}`);
74
+ if (pathString.startsWith('/')) {
75
+ return pathString.replace('/', '');
76
+ }
77
+ if (pathString.startsWith('..')) {
78
+ // TODO: 多层路径无实际文件测试
79
+ return `${STLoc}${pathString}`.replace(pathReg, `${STLoc}`);
80
+ }
81
+ if (pathString.startsWith('.')) {
82
+ // TODO: 多层路径无实际文件测试
83
+ return `${STLoc}${pathString}`.replace(pathReg, `${STLoc}`);
84
+ }
85
+ return `${STLoc}${pathString}`.replace(pathReg, `${STLoc}`);
86
+ };
@@ -0,0 +1,42 @@
1
+ // import dicomParser from 'dicom-parser';
2
+
3
+ interface Options {
4
+ file: string | File | ArrayBuffer;
5
+ container?: Element;
6
+ requestOptions?: undefined | { [key: string]: any };
7
+ requestData?: undefined | { [key: string]: any };
8
+ responseFilter?: (key: { [key: string]: string | number }) => string;
9
+ }
10
+ const parse = ({ file }: Options) => {
11
+ if (file instanceof File) {
12
+ var reader = new FileReader();
13
+ reader.onload = function () {
14
+ // var arrayBuffer = reader.result as ArrayBuffer;
15
+
16
+ // Here we have the file data as an ArrayBuffer. dicomParser requires as input a
17
+ // Uint8Array so we create that here
18
+ // var byteArray = new Uint8Array(arrayBuffer);
19
+
20
+ // var kb = byteArray.length / 1024;
21
+ // var mb = kb / 1024;
22
+ // var byteStr = mb > 1 ? mb.toFixed(3) + ' MB' : kb.toFixed(0) + ' KB';
23
+
24
+ // set a short timeout to do the parse so the DOM has time to update itself with the above message
25
+ setTimeout(function () {
26
+ // Invoke the paresDicom function and get back a DataSet object with the contents
27
+ try {
28
+ // var start = new Date().getTime();
29
+ // const dataSet = dicomParser.parseDicom(byteArray);
30
+ // Here we call dumpDataSet to update the DOM with the contents of the dataSet
31
+ // dumpDataSet(dataSet);
32
+ } catch (err) {
33
+ console.error('err:', err);
34
+ }
35
+ }, 20);
36
+ };
37
+
38
+ reader.readAsArrayBuffer(file);
39
+ }
40
+ };
41
+
42
+ export default parse;
@@ -0,0 +1 @@
1
+ export { default } from './dicom';
@@ -0,0 +1,14 @@
1
+ import errorMsg from './error-msg';
2
+
3
+ export type ErrorCode = 400 | 404 | 403 | 500 | 9999;
4
+
5
+ export default class ErrorHandle extends Error {
6
+ code: ErrorCode;
7
+ type: string;
8
+ constructor(code: ErrorCode, type: string) {
9
+ super();
10
+ this.code = code;
11
+ this.type = type;
12
+ this.message = errorMsg[code];
13
+ }
14
+ }
@@ -0,0 +1,8 @@
1
+ import { ERROR_TYPE_FETCH } from '../constant';
2
+ import ErrorHandle, { ErrorCode } from './ErrorHandle';
3
+
4
+ export default class VaildFetchError extends ErrorHandle {
5
+ constructor(code: ErrorCode) {
6
+ super(code, ERROR_TYPE_FETCH);
7
+ }
8
+ }
@@ -0,0 +1,9 @@
1
+ import { ERROR_TYPE_MAGIC } from '../constant';
2
+
3
+ import ErrorHandle, { ErrorCode } from './ErrorHandle';
4
+
5
+ export default class VaildMimeError extends ErrorHandle {
6
+ constructor(code: ErrorCode) {
7
+ super(code, ERROR_TYPE_MAGIC);
8
+ }
9
+ }
@@ -0,0 +1,11 @@
1
+ import { FILE_TYPE_OFD } from '../constant';
2
+ import ErrorHandle, { ErrorCode } from './ErrorHandle';
3
+
4
+ export default class VaildOFDError extends ErrorHandle {
5
+ constructor(code: ErrorCode, msg?: string) {
6
+ super(code, FILE_TYPE_OFD);
7
+ if (msg) {
8
+ this.message = msg;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,9 @@
1
+ import { ERROR_TYPE_UNZIP } from '../constant';
2
+
3
+ import ErrorHandle, { ErrorCode } from './ErrorHandle';
4
+
5
+ export default class VaildUnzipError extends ErrorHandle {
6
+ constructor(code: ErrorCode) {
7
+ super(code, ERROR_TYPE_UNZIP);
8
+ }
9
+ }
@@ -0,0 +1,11 @@
1
+ import { FILE_TYPE_XML } from '../constant';
2
+ import ErrorHandle, { ErrorCode } from './ErrorHandle';
3
+
4
+ export default class VaildXmlError extends ErrorHandle {
5
+ constructor(code: ErrorCode, msg?: string) {
6
+ super(code, FILE_TYPE_XML);
7
+ if (msg) {
8
+ this.message = msg;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,17 @@
1
+ interface ErrorMsg {
2
+ 400: string;
3
+ 403: string;
4
+ 404: string;
5
+ 500: string;
6
+ 9999: string;
7
+ }
8
+
9
+ const errorMsg: ErrorMsg = {
10
+ '400': '参数传递错误',
11
+ '403': '类型不支持',
12
+ '404': '文件不存在',
13
+ '500': '文件解析错误',
14
+ '9999': '未知错误'
15
+ };
16
+
17
+ export default errorMsg;
package/src/es.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { default as XMLRender } from './xml';
2
+
3
+ export { default as OFDParse, getSVGDoms } from './ofd';
@@ -0,0 +1,7 @@
1
+ import * as Opentype from 'opentype.js';
2
+
3
+ export declare global {
4
+ interface Window {
5
+ opentype: Opentype;
6
+ }
7
+ }
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ import XMLRender from './xml';
2
+ import OFDParse, { getSVGDoms } from './ofd';
3
+ import getMime from './lib/mime';
4
+
5
+ export { getSVGDoms, XMLRender, getMime, OFDParse };
6
+
7
+ export default () => {};
@@ -0,0 +1,12 @@
1
+ import JSZip from 'jszip';
2
+ class ParseFile {
3
+ static zip: JSZip;
4
+
5
+ init(zip: JSZip) {
6
+ ParseFile.zip = zip;
7
+ }
8
+
9
+ // parseImageFromZip(data: { Path: string }) {}
10
+ }
11
+
12
+ export default new ParseFile();
@@ -0,0 +1,69 @@
1
+ ## 记录文件类型
2
+
3
+ | 文件后缀 | 文件mime |
4
+ | -------- | ------------------------------------------------------------------------- |
5
+ | .3gp | video/3gpp |
6
+ | .apk | application/vnd.android.package-archive |
7
+ | .asf | video/x-ms-asf |
8
+ | .avi | video/x-msvideo |
9
+ | .bin | application/octet-stream |
10
+ | .bmp | image/bmp |
11
+ | .c | text/plain |
12
+ | .class | application/octet-stream |
13
+ | .conf | text/plain |
14
+ | .cpp | text/plain |
15
+ | .doc | application/msword |
16
+ | .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
17
+ | .xls | application/vnd.ms-excel |
18
+ | .xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
19
+ | .exe | application/octet-stream |
20
+ | .gif | image/gif |
21
+ | .gtar | application/x-gtar |
22
+ | .gz | application/x-gzip |
23
+ | .h | text/plain |
24
+ | .htm | text/html |
25
+ | .html | text/html |
26
+ | .jar | application/java-archive |
27
+ | .java | text/plain |
28
+ | .jpeg | image/jpeg |
29
+ | .jpg | image/jpeg |
30
+ | .js | application/x-javascript |
31
+ | .log | text/plain |
32
+ | .m3u | audio/x-mpegurl |
33
+ | .m4a | audio/mp4a-latm |
34
+ | .m4b | audio/mp4a-latm |
35
+ | .m4p | audio/mp4a-latm |
36
+ | .m4u | video/vnd.mpegurl |
37
+ | .m4v | video/x-m4v |
38
+ | .mov | video/quicktime |
39
+ | .mp2 | audio/x-mpeg |
40
+ | .mp3 | audio/x-mpeg |
41
+ | .mp4 | video/mp4 |
42
+ | .mpc | application/vnd.mpohun.certificate |
43
+ | .mpe | video/mpeg |
44
+ | .mpeg | video/mpeg |
45
+ | .mpg | video/mpeg |
46
+ | .mpg4 | video/mp4 |
47
+ | .mpga | audio/mpeg |
48
+ | .msg | application/vnd.ms-outlook |
49
+ | .ogg | audio/ogg |
50
+ | .pdf | application/pdf |
51
+ | .png | image/png |
52
+ | .pps | application/vnd.ms-powerpoint |
53
+ | .ppt | application/vnd.ms-powerpoint |
54
+ | .pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
55
+ | .prop | text/plain |
56
+ | .rc | text/plain |
57
+ | .rmvb | audio/x-pn-realaudio |
58
+ | .rtf | application/rtf |
59
+ | .sh | text/plain |
60
+ | .tar | application/x-tar |
61
+ | .tgz | application/x-compressed |
62
+ | .txt | text/plain |
63
+ | .wav | audio/x-wav |
64
+ | .wma | audio/x-ms-wma |
65
+ | .wmv | audio/x-ms-wmv |
66
+ | .wps | application/vnd.ms-works |
67
+ | .xml | text/plain |
68
+ | .z | application/x-compress |
69
+ | .zip | application/x-zip-compressed |
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @desc mm 转 px
3
+ */
4
+ class UnitCoversion {
5
+ /**
6
+ * Description placeholder
7
+ * @date 2022/8/2 - 15:49:57
8
+ *
9
+ * @static
10
+ * @type {number}
11
+ */
12
+ static multiple: number;
13
+
14
+ /**
15
+ * 设置1mm单位
16
+ */
17
+ setUnit() {
18
+ if (document?.body) {
19
+ const div = document.createElement('div');
20
+ div.setAttribute('style', 'width:1mm');
21
+ document.body.appendChild(div);
22
+ const { width } = div.getBoundingClientRect();
23
+ UnitCoversion.multiple = width;
24
+ document.body.removeChild(div);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * px转换MM
30
+ * @param millimeter 待转换毫米
31
+ * @returns number
32
+ */
33
+ CoversionMill(px: number): number {
34
+ if (!px) return 0;
35
+ if (!UnitCoversion.multiple) {
36
+ this.setUnit();
37
+ }
38
+ return Number(px) / UnitCoversion.multiple;
39
+ }
40
+
41
+ /**
42
+ * 毫米转换PX
43
+ * @param millimeter 待转换毫米
44
+ * @returns number
45
+ */
46
+ CoversionPx(millimeter: number | string): number {
47
+ if (!millimeter) return 0;
48
+ if (!UnitCoversion.multiple) {
49
+ this.setUnit();
50
+ }
51
+ return Number(millimeter) * UnitCoversion.multiple;
52
+ }
53
+ }
54
+
55
+ export default new UnitCoversion();
@@ -0,0 +1,284 @@
1
+ import Stream from './Stream';
2
+ import Int10 from './int10';
3
+ import stringCut from './string-cut';
4
+
5
+ function recurse(el: Asn1, parser: string | number, maxLength: number) {
6
+ let avoidRecurse = true;
7
+ if (el.tag.tagConstructed && el.sub) {
8
+ avoidRecurse = false;
9
+ el.sub.forEach(function (e1: any) {
10
+ if (
11
+ e1.tag.tagClass != el.tag.tagClass ||
12
+ e1.tag.tagNumber != el.tag.tagNumber
13
+ )
14
+ avoidRecurse = true;
15
+ });
16
+ }
17
+ if (avoidRecurse) {
18
+ return el.stream[parser](
19
+ el.posContent(),
20
+ el.posContent() + Math.abs(el.length),
21
+ maxLength
22
+ );
23
+ }
24
+ const d = { size: 0, str: '' };
25
+ el.sub.forEach(function (el: any) {
26
+ const d1 = recurse(el, parser, maxLength - d.str.length);
27
+ d.size += d1.size;
28
+ d.str += d1.str;
29
+ });
30
+ return d;
31
+ }
32
+
33
+ export class ASN1Tag {
34
+ tagClass: number;
35
+ tagNumber: number;
36
+ tagConstructed: boolean;
37
+ constructor(stream: Stream) {
38
+ let buf = stream.get();
39
+ this.tagClass = buf >> 6;
40
+ this.tagConstructed = (buf & 0x20) !== 0;
41
+ this.tagNumber = buf & 0x1f;
42
+ if (this.tagNumber == 0x1f) {
43
+ // long tag
44
+
45
+ const int10 = new Int10();
46
+ do {
47
+ buf = stream.get();
48
+ int10.mulAdd(128, buf & 0x7f);
49
+ } while (buf & 0x80);
50
+ this.tagNumber = int10.simplify() as number;
51
+ }
52
+ }
53
+ isUniversal() {
54
+ return this.tagClass === 0x00;
55
+ }
56
+ isEOC() {
57
+ return this.tagClass === 0x00 && this.tagNumber === 0x00;
58
+ }
59
+ }
60
+
61
+ export class Asn1 {
62
+ stream: { [k: string | number]: any };
63
+ header: number;
64
+ length: number;
65
+ tag: ASN1Tag;
66
+ tagLen: number;
67
+ sub: any[];
68
+ constructor(
69
+ stream: { [k: string | number]: any },
70
+ header: number,
71
+ length: number,
72
+ tag: ASN1Tag,
73
+ tagLen: number,
74
+ sub: any[]
75
+ ) {
76
+ if (!(tag instanceof ASN1Tag)) throw 'Invalid tag value.';
77
+ this.stream = stream;
78
+ this.header = header;
79
+ this.length = length;
80
+ this.tag = tag;
81
+ this.tagLen = tagLen;
82
+ this.sub = sub;
83
+ }
84
+ typeName() {
85
+ switch (this.tag.tagClass) {
86
+ case 0: // universal
87
+ switch (this.tag.tagNumber) {
88
+ case 0x00:
89
+ return 'EOC';
90
+ case 0x01:
91
+ return 'BOOLEAN';
92
+ case 0x02:
93
+ return 'INTEGER';
94
+ case 0x03:
95
+ return 'BIT_STRING';
96
+ case 0x04:
97
+ return 'OCTET_STRING';
98
+ case 0x05:
99
+ return 'NULL';
100
+ case 0x06:
101
+ return 'OBJECT_IDENTIFIER';
102
+ case 0x07:
103
+ return 'ObjectDescriptor';
104
+ case 0x08:
105
+ return 'EXTERNAL';
106
+ case 0x09:
107
+ return 'REAL';
108
+ case 0x0a:
109
+ return 'ENUMERATED';
110
+ case 0x0b:
111
+ return 'EMBEDDED_PDV';
112
+ case 0x0c:
113
+ return 'UTF8String';
114
+ case 0x10:
115
+ return 'SEQUENCE';
116
+ case 0x11:
117
+ return 'SET';
118
+ case 0x12:
119
+ return 'NumericString';
120
+ case 0x13:
121
+ return 'PrintableString'; // ASCII subset
122
+ case 0x14:
123
+ return 'TeletexString'; // aka T61String
124
+ case 0x15:
125
+ return 'VideotexString';
126
+ case 0x16:
127
+ return 'IA5String'; // ASCII
128
+ case 0x17:
129
+ return 'UTCTime';
130
+ case 0x18:
131
+ return 'GeneralizedTime';
132
+ case 0x19:
133
+ return 'GraphicString';
134
+ case 0x1a:
135
+ return 'VisibleString'; // ASCII subset
136
+ case 0x1b:
137
+ return 'GeneralString';
138
+ case 0x1c:
139
+ return 'UniversalString';
140
+ case 0x1e:
141
+ return 'BMPString';
142
+ }
143
+
144
+ return 'Universal_' + this.tag.tagNumber.toString();
145
+ case 1:
146
+ return 'Application_' + this.tag.tagNumber.toString();
147
+ case 2:
148
+ return '[' + this.tag.tagNumber.toString() + ']'; // Context
149
+ case 3:
150
+ return 'Private_' + this.tag.tagNumber.toString();
151
+ }
152
+ }
153
+
154
+ content(maxLength?: number) {
155
+ if (this.tag === undefined) return null;
156
+ if (maxLength === undefined) maxLength = Infinity;
157
+ const content = this.posContent();
158
+ const len = Math.abs(this.length);
159
+ if (!this.tag.isUniversal()) {
160
+ if (this.sub !== null) return '(' + this.sub.length + ' elem)';
161
+ const d1 = this.stream.parseOctetString(
162
+ content,
163
+ content + len,
164
+ maxLength
165
+ );
166
+ return '(' + d1.size + ' byte)\n' + d1.str;
167
+ }
168
+ switch (this.tag.tagNumber) {
169
+ case 0x01: // BOOLEAN
170
+ return this.stream.get(content) === 0 ? 'false' : 'true';
171
+ case 0x02: // INTEGER
172
+ return this.stream.parseInteger(content, content + len);
173
+ case 0x03: // BIT_STRING
174
+ var d = recurse(this, 'parseBitString', maxLength);
175
+ return '(' + d.size + ' bit)\n' + d.str;
176
+ case 0x04: // OCTET_STRING
177
+ d = recurse(this, 'parseOctetString', maxLength);
178
+ return '(' + d.size + ' byte)\n' + d.str;
179
+ //case 0x05: // NULL
180
+ case 0x06: // OBJECT_IDENTIFIER
181
+ return this.stream.parseOID(content, content + len, maxLength);
182
+ //case 0x07: // ObjectDescriptor
183
+ //case 0x08: // EXTERNAL
184
+ //case 0x09: // REAL
185
+ case 0x0a: // ENUMERATED
186
+ return this.stream.parseInteger(content, content + len);
187
+ //case 0x0B: // EMBEDDED_PDV
188
+ case 0x10: // SEQUENCE
189
+ case 0x11: // SET
190
+ if (this.sub !== null) return '(' + this.sub.length + ' elem)';
191
+ else return '(no elem)';
192
+ case 0x0c: // UTF8String
193
+ return stringCut(
194
+ this.stream.parseStringUTF(content, content + len),
195
+ maxLength
196
+ );
197
+ case 0x12: // NumericString
198
+ case 0x13: // PrintableString
199
+ case 0x14: // TeletexString
200
+ case 0x15: // VideotexString
201
+ case 0x16: // IA5String
202
+ case 0x1a: // VisibleString
203
+ case 0x1b: // GeneralString
204
+ //case 0x19: // GraphicString
205
+ //case 0x1C: // UniversalString
206
+ return stringCut(
207
+ this.stream.parseStringISO(content, content + len),
208
+ maxLength
209
+ );
210
+ case 0x1e: // BMPString
211
+ return stringCut(
212
+ this.stream.parseStringBMP(content, content + len),
213
+ maxLength
214
+ );
215
+ case 0x17: // UTCTime
216
+ case 0x18: // GeneralizedTime
217
+ return this.stream.parseTime(
218
+ content,
219
+ content + len,
220
+ this.tag.tagNumber == 0x17
221
+ );
222
+ }
223
+ return null;
224
+ }
225
+
226
+ toString() {
227
+ return (
228
+ this.typeName() +
229
+ '@' +
230
+ this.stream.pos +
231
+ '[header:' +
232
+ this.header +
233
+ ',length:' +
234
+ this.length +
235
+ ',sub:' +
236
+ (this.sub === null ? 'null' : this.sub.length) +
237
+ ']'
238
+ );
239
+ }
240
+
241
+ toPrettyString(indent: any) {
242
+ if (indent === undefined) indent = '';
243
+ let s = indent + this.typeName() + ' @' + this.stream.pos;
244
+ if (this.length >= 0) s += '+';
245
+ s += this.length;
246
+ if (this.tag.tagConstructed) s += ' (constructed)';
247
+ else if (
248
+ this.tag.isUniversal() &&
249
+ (this.tag.tagNumber == 0x03 || this.tag.tagNumber == 0x04) &&
250
+ this.sub !== null
251
+ )
252
+ s += ' (encapsulates)';
253
+ const content = this.content();
254
+ if (content) s += ': ' + content.replace(/\n/g, '|');
255
+ s += '\n';
256
+ if (this.sub !== null) {
257
+ indent += ' ';
258
+ for (let i = 0, max = this.sub.length; i < max; ++i)
259
+ s += this.sub[i].toPrettyString(indent);
260
+ }
261
+ return s;
262
+ }
263
+ posStart() {
264
+ return this.stream.pos;
265
+ }
266
+ posContent() {
267
+ return this.stream.pos + this.header;
268
+ }
269
+ posEnd() {
270
+ return this.stream.pos + this.header + Math.abs(this.length);
271
+ }
272
+ /** Position of the length. */
273
+ posLen() {
274
+ return this.stream.pos + this.tagLen;
275
+ }
276
+ toHexString() {
277
+ return this.stream.hexDump(this.posStart(), this.posEnd(), true);
278
+ }
279
+ toB64String() {
280
+ return this.stream.b64Dump(this.posStart(), this.posEnd());
281
+ }
282
+ }
283
+
284
+ export default Asn1;
@@ -0,0 +1 @@
1
+ # 参考 https://github.com/lapo-luchini/asn1js.git