@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.
- package/.babelrc +14 -0
- package/.eslintignore +2 -0
- package/.eslintrc.json +18 -0
- package/.prettierrc.json +9 -0
- package/dist/OFD.d.ts +8 -0
- package/dist/Pages.d.ts +7 -0
- package/dist/RootDocumnet.d.ts +1 -0
- package/dist/bundle.cjs.js +64123 -0
- package/dist/bundle.esm.js +64115 -0
- package/dist/bundle.iife.js +14743 -0
- package/dist/bundle.umd.js +64045 -0
- package/dist/constant/index.d.ts +7 -0
- package/dist/constant.d.ts +6 -0
- package/dist/core/ofd-core/Annotations/AnnotationsXml.d.ts +16 -0
- package/dist/core/ofd-core/Asn.1Utils.d.ts +47 -0
- package/dist/core/ofd-core/Documents/DocumentResXml.d.ts +15 -0
- package/dist/core/ofd-core/Documents/DocumnetXml.d.ts +25 -0
- package/dist/core/ofd-core/Documents/PublicResXml.d.ts +15 -0
- package/dist/core/ofd-core/OFDElement.d.ts +232 -0
- package/dist/core/ofd-core/Ofd/OFDXml.d.ts +19 -0
- package/dist/core/ofd-core/Pages/PageXml.d.ts +20 -0
- package/dist/core/ofd-core/Signatures/Signatures.d.ts +20 -0
- package/dist/core/ofd-core/TemplatePages/TemplatePages.d.ts +20 -0
- package/dist/core/ofd-core/constant.d.ts +29 -0
- package/dist/core/ofd-core/utils.d.ts +21 -0
- package/dist/dicom/dicom.d.ts +15 -0
- package/dist/dicom/index.d.ts +1 -0
- package/dist/errors/ErrorHandle.d.ts +6 -0
- package/dist/errors/ErrorMsg.d.ts +16 -0
- package/dist/errors/FetchErrors.d.ts +4 -0
- package/dist/errors/MimeError.d.ts +4 -0
- package/dist/errors/OFDErrors.d.ts +4 -0
- package/dist/errors/UnzipErrors.d.ts +4 -0
- package/dist/errors/XmlErrors.d.ts +4 -0
- package/dist/errors/error-msg.d.ts +9 -0
- package/dist/es.d.ts +2 -0
- package/dist/index.d.ts +6 -0
- package/dist/lib/ParseFile.d.ts +7 -0
- package/dist/lib/UnitCoversion.d.ts +31 -0
- package/dist/lib/asn1/Asn.1.d.ts +34 -0
- package/dist/lib/asn1/Stream.d.ts +27 -0
- package/dist/lib/asn1/asn1.d.ts +4 -0
- package/dist/lib/asn1/base64.d.ts +4 -0
- package/dist/lib/asn1/hex.d.ts +5 -0
- package/dist/lib/asn1/index.d.ts +5 -0
- package/dist/lib/asn1/int10.d.ts +34 -0
- package/dist/lib/asn1/oids.d.ts +2 -0
- package/dist/lib/asn1/string-cut.d.ts +2 -0
- package/dist/lib/decode-html.d.ts +7 -0
- package/dist/lib/fetch.d.ts +17 -0
- package/dist/lib/is-element.d.ts +5 -0
- package/dist/lib/load-files.d.ts +3 -0
- package/dist/lib/load-opentype.d.ts +34 -0
- package/dist/lib/load-script.d.ts +1 -0
- package/dist/lib/mime.d.ts +8 -0
- package/dist/lib/read-buffer.d.ts +2 -0
- package/dist/lib/toFixeds.d.ts +7 -0
- package/dist/libs/Asn.1Utils.d.ts +47 -0
- package/dist/libs/asn1/Asn.1.d.ts +34 -0
- package/dist/libs/asn1/Stream.d.ts +27 -0
- package/dist/libs/asn1/asn1.d.ts +4 -0
- package/dist/libs/asn1/base64.d.ts +4 -0
- package/dist/libs/asn1/hex.d.ts +5 -0
- package/dist/libs/asn1/index.d.ts +5 -0
- package/dist/libs/asn1/int10.d.ts +34 -0
- package/dist/libs/asn1/oids.d.ts +2 -0
- package/dist/libs/asn1/string-cut.d.ts +2 -0
- package/dist/libs/decode-html.d.ts +7 -0
- package/dist/libs/fetch.d.ts +17 -0
- package/dist/libs/mime.d.ts +8 -0
- package/dist/libs/ofdArray.d.ts +10 -0
- package/dist/libs/ofdImageObject.d.ts +9 -0
- package/dist/libs/ofdLayer.d.ts +3 -0
- package/dist/libs/ofdName.d.ts +17 -0
- package/dist/libs/ofdPathObject.d.ts +11 -0
- package/dist/libs/ofdTextObject.d.ts +6 -0
- package/dist/libs/parseAnnotation.d.ts +5 -0
- package/dist/libs/parseColor.d.ts +5 -0
- package/dist/libs/parsePageArea.d.ts +17 -0
- package/dist/libs/parser-elements.d.ts +8 -0
- package/dist/libs/parserElements.d.ts +8 -0
- package/dist/libs/pipeExtensions.d.ts +4 -0
- package/dist/libs/read-buffer.d.ts +2 -0
- package/dist/main.d.ts +15 -0
- package/dist/ofd/ConverterDpi.d.ts +16 -0
- package/dist/ofd/index.d.ts +1 -0
- package/dist/ofd/ofd-utils.d.ts +137 -0
- package/dist/ofd/ofd.d.ts +35 -0
- package/dist/ofd/parse-ofd.d.ts +18 -0
- package/dist/ofd/render.d.ts +18 -0
- package/dist/ofd/svg-image.d.ts +12 -0
- package/dist/ofd/svg-path.d.ts +5 -0
- package/dist/ofd/svg-text.d.ts +8 -0
- package/dist/ofd.parse.d.ts +6 -0
- package/dist/ofd.xml.d.ts +1 -0
- package/dist/ofdParse.d.ts +6 -0
- package/dist/pipe/annotations.d.ts +13 -0
- package/dist/pipe/attachments.d.ts +13 -0
- package/dist/pipe/commonData.d.ts +18 -0
- package/dist/pipe/customTags.d.ts +14 -0
- package/dist/pipe/extensions.d.ts +14 -0
- package/dist/pipe/output.d.ts +7 -0
- package/dist/pipe/pages.d.ts +13 -0
- package/dist/pipe/permissions.d.ts +14 -0
- package/dist/pipe/pipeline.d.ts +63 -0
- package/dist/pipe/startPipe.d.ts +11 -0
- package/dist/xml/index.d.ts +2 -0
- package/dist/xml/render.d.ts +6 -0
- package/dist/xml/xml.d.ts +18 -0
- package/package.json +47 -0
- package/public/index.html +75 -0
- package/public/opentype.min.js +2 -0
- package/rollup.config.dev.mjs +47 -0
- package/rollup.config.mjs +70 -0
- package/src/constant/index.ts +13 -0
- package/src/core/ofd-core/Annotations/Annotation.km +206 -0
- package/src/core/ofd-core/Annotations/Annotations.km +59 -0
- package/src/core/ofd-core/Annotations/Annotations.md +13 -0
- package/src/core/ofd-core/Annotations/AnnotationsXml.ts +114 -0
- package/src/core/ofd-core/Asn.1Utils.ts +225 -0
- package/src/core/ofd-core/Documents/DocumentResXml.ts +55 -0
- package/src/core/ofd-core/Documents/Documnet.km +862 -0
- package/src/core/ofd-core/Documents/DocumnetXml.ts +118 -0
- package/src/core/ofd-core/Documents/Documnets.md +296 -0
- package/src/core/ofd-core/Documents/PublicResXml.ts +63 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/src/core/ofd-core/OFDElement.ts +724 -0
- package/src/core/ofd-core/Ofd/CT_DocInfo.km +197 -0
- package/src/core/ofd-core/Ofd/OFD.km +114 -0
- package/src/core/ofd-core/Ofd/OFD.md +99 -0
- package/src/core/ofd-core/Ofd/OFDXml.ts +69 -0
- package/src/core/ofd-core/Pages/PAGE.md +40 -0
- package/src/core/ofd-core/Pages/PageXml.ts +59 -0
- package/src/core/ofd-core/Signatures/Signature.km +308 -0
- package/src/core/ofd-core/Signatures/Signature.md +21 -0
- package/src/core/ofd-core/Signatures/Signatures.km +315 -0
- package/src/core/ofd-core/Signatures/Signatures.md +24 -0
- package/src/core/ofd-core/Signatures/Signatures.ts +247 -0
- package/src/core/ofd-core/TemplatePages/TemplatePages.ts +56 -0
- package/src/core/ofd-core/asn.md +60 -0
- package/src/core/ofd-core/constant.ts +35 -0
- package/src/core/ofd-core/index.d.ts +867 -0
- package/src/core/ofd-core/utils.ts +86 -0
- package/src/dicom/dicom.ts +42 -0
- package/src/dicom/index.ts +1 -0
- package/src/errors/ErrorHandle.ts +14 -0
- package/src/errors/FetchErrors.ts +8 -0
- package/src/errors/MimeError.ts +9 -0
- package/src/errors/OFDErrors.ts +11 -0
- package/src/errors/UnzipErrors.ts +9 -0
- package/src/errors/XmlErrors.ts +11 -0
- package/src/errors/error-msg.ts +17 -0
- package/src/es.ts +3 -0
- package/src/global.d.ts +7 -0
- package/src/index.ts +7 -0
- package/src/lib/ParseFile.ts +12 -0
- package/src/lib/README.md +69 -0
- package/src/lib/UnitCoversion.ts +55 -0
- package/src/lib/asn1/Asn.1.ts +284 -0
- package/src/lib/asn1/README.md +1 -0
- package/src/lib/asn1/Stream.ts +314 -0
- package/src/lib/asn1/asn1.ts +120 -0
- package/src/lib/asn1/base64.ts +97 -0
- package/src/lib/asn1/hex.ts +60 -0
- package/src/lib/asn1/index.ts +5 -0
- package/src/lib/asn1/int10.ts +103 -0
- package/src/lib/asn1/oids.ts +6164 -0
- package/src/lib/asn1/string-cut.ts +8 -0
- package/src/lib/decode-html.ts +37 -0
- package/src/lib/fetch.ts +70 -0
- package/src/lib/is-element.ts +13 -0
- package/src/lib/jbig/README.md +1 -0
- package/src/lib/jbig/arithmetic_decoder.js +184 -0
- package/src/lib/jbig/base_stream.js +117 -0
- package/src/lib/jbig/ccitt.js +1068 -0
- package/src/lib/jbig/ccitt_stream.js +60 -0
- package/src/lib/jbig/compatibility.js +108 -0
- package/src/lib/jbig/core_utils.js +591 -0
- package/src/lib/jbig/decode_stream.js +184 -0
- package/src/lib/jbig/is_node.js +28 -0
- package/src/lib/jbig/jbig2.js +2582 -0
- package/src/lib/jbig/jbig2_stream.js +78 -0
- package/src/lib/jbig/primitives.js +441 -0
- package/src/lib/jbig/stream.js +101 -0
- package/src/lib/jbig/util.js +1231 -0
- package/src/lib/load-files.ts +26 -0
- package/src/lib/load-opentype.ts +161 -0
- package/src/lib/load-script.ts +33 -0
- package/src/lib/mime.ts +97 -0
- package/src/lib/read-buffer.ts +19 -0
- package/src/lib/toFixeds.ts +56 -0
- package/src/ofd/ConverterDpi.ts +35 -0
- package/src/ofd/OFD.md +38 -0
- package/src/ofd/TODO.md +10 -0
- package/src/ofd/index.ts +1 -0
- package/src/ofd/ofd-utils.ts +627 -0
- package/src/ofd/ofd.demo.md +12 -0
- package/src/ofd/ofd.ts +200 -0
- package/src/ofd/ofdxml.km +162 -0
- package/src/ofd/parse-ofd.ts +103 -0
- package/src/ofd/render.ts +393 -0
- package/src/ofd/svg-image.ts +318 -0
- package/src/ofd/svg-path.ts +283 -0
- package/src/ofd/svg-text.ts +272 -0
- package/src/xml/index.ts +3 -0
- package/src/xml/render.ts +171 -0
- package/src/xml/xml.ts +136 -0
- 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,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,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
package/src/global.d.ts
ADDED
package/src/index.ts
ADDED
|
@@ -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
|