UNPKG

enketo-transformer

Version:

Library that transforms ODK-compliant XForms into a format that Enketo can consume

1 lines 4.27 kB
{"version":3,"file":"Document.cjs","sources":["../../../../src/dom/node/Document.ts"],"sourcesContent":["import { libxmljs } from 'libxslt';\nimport { NAMESPACES } from '../../shared';\nimport type { DOM } from '../abstract';\nimport { NodeTypes } from '../shared';\nimport { XPathResult } from './XPathResult';\n\ntype Node = typeof libxmljs.Node;\n\nconst { Document, Element } = libxmljs;\n\n/** @package */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface DOMExtendedDocument extends DOM.Node {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class DOMExtendedDocument implements DOM.Document {\n get documentElement() {\n return (this as unknown as DOMExtendedDocument & Document).root();\n }\n\n readonly nodeName = '#document';\n\n readonly nodeType = NodeTypes.DOCUMENT_NODE;\n\n createElement(this: DOMExtendedDocument & Document, name: string): Element {\n return new Element(this, name);\n }\n\n createElementNS(\n this: DOMExtendedDocument & Document,\n namespaceURI: string | null,\n name: string\n ): Element {\n const [prefix, suffix] = name.split(':');\n\n const element = new Element(this, suffix ?? name);\n\n if (suffix == null || namespaceURI == null) {\n return element;\n }\n\n const namespace = element.defineNamespace(prefix, namespaceURI);\n\n element.namespace(namespace);\n\n return element;\n }\n\n evaluate(\n this: Document & DOMExtendedDocument,\n xpathExpression: string,\n contextNode: Document | Element,\n namespaceResolver: DOM.NamespaceResolver | null,\n resultType: number\n ): DOM.XPathResult {\n const namespaces =\n namespaceResolver == null\n ? undefined\n : Object.fromEntries(\n Object.entries(NAMESPACES).filter(\n ([prefix, value]) =>\n namespaceResolver.lookupNamespaceURI(prefix) ===\n value\n )\n );\n\n if (resultType === XPathResult.FIRST_ORDERED_NODE_TYPE) {\n const result = (contextNode ?? this).get(\n xpathExpression,\n namespaces\n ) as (Node & DOM.Node) | null;\n const results = result == null ? [] : [result];\n\n return new XPathResult(results);\n }\n\n const results = (contextNode ?? this).find(\n xpathExpression,\n namespaces\n ) as Array<Node & Element & DOM.Node>;\n\n return new XPathResult(results);\n }\n}\n\n/* eslint-disable @typescript-eslint/no-redeclare */\ntype Document = InstanceType<typeof Document>;\ntype Element = InstanceType<typeof Element>;\n/* eslint-enable @typescript-eslint/no-redeclare */\n\nconst { constructor: _, ...descriptors } = Object.getOwnPropertyDescriptors(\n DOMExtendedDocument.prototype\n);\n\nObject.defineProperties(Document.prototype, descriptors);\n"],"names":["libxmljs","NodeTypes","NAMESPACES","XPathResult","results"],"mappings":";;;;;;AAQA,MAAM,EAAE,UAAU,QAAY,IAAAA;AAOvB,MAAM,oBAA4C;AAAA,EAAlD,cAAA;AAKH,SAAS,WAAW;AAEpB,SAAS,WAAWC,OAAU,UAAA;AAAA,EAAA;AAAA,EAN9B,IAAI,kBAAkB;AAClB,WAAQ,KAAmD;EAC/D;AAAA,EAMA,cAAoD,MAAuB;AAChE,WAAA,IAAI,QAAQ,MAAM,IAAI;AAAA,EACjC;AAAA,EAEA,gBAEI,cACA,MACO;AACP,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,MAAM,GAAG;AAEvC,UAAM,UAAU,IAAI,QAAQ,MAAM,UAAU,IAAI;AAE5C,QAAA,UAAU,QAAQ,gBAAgB,MAAM;AACjC,aAAA;AAAA,IACX;AAEA,UAAM,YAAY,QAAQ,gBAAgB,QAAQ,YAAY;AAE9D,YAAQ,UAAU,SAAS;AAEpB,WAAA;AAAA,EACX;AAAA,EAEA,SAEI,iBACA,aACA,mBACA,YACe;AACf,UAAM,aACF,qBAAqB,OACf,SACA,OAAO;AAAA,MACH,OAAO,QAAQC,SAAU,UAAA,EAAE;AAAA,QACvB,CAAC,CAAC,QAAQ,KAAK,MACX,kBAAkB,mBAAmB,MAAM,MAC3C;AAAA,MACR;AAAA,IAAA;AAGV,QAAA,eAAeC,wBAAY,yBAAyB;AAC9C,YAAA,UAAU,eAAe,MAAM;AAAA,QACjC;AAAA,QACA;AAAA,MAAA;AAEJ,YAAMC,WAAU,UAAU,OAAO,CAAA,IAAK,CAAC,MAAM;AAEtC,aAAA,IAAID,YAAAA,YAAYC,QAAO;AAAA,IAClC;AAEM,UAAA,WAAW,eAAe,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,IAAA;AAGG,WAAA,IAAID,YAAAA,YAAY,OAAO;AAAA,EAClC;AACJ;AAOA,MAAM,EAAE,aAAa,GAAG,GAAG,gBAAgB,OAAO;AAAA,EAC9C,oBAAoB;AACxB;AAEA,OAAO,iBAAiB,SAAS,WAAW,WAAW;;"}