From ddd772f5631231ab058c66f7af98bf1d8b9e5aba Mon Sep 17 00:00:00 2001 From: Andy Bunce Date: Tue, 11 Nov 2025 15:36:33 +0000 Subject: [PATCH] [mod] wsl --- .dockerignore | 14 +- .vscode/launch.json | 26 +- LICENSE | 146 +- README.md | 176 +- bundles/cm6/lsp.js | 272 +- bundles/cm6/try.js | 80 +- bundles/lemminx/html/acego.js | 54 +- bundles/lemminx/html/index.html | 86 +- bundles/lemminx/html/t2.html | 76 +- bundles/lemminx/lemminx.bat | 4 +- bundles/lemminx/lsp.xqm | 144 +- bundles/lemminx/test.html | 6 +- bundles/websockets-lsp/client.ts | 60 +- bundles/websockets-lsp/server/README.md | 22 +- .../websockets-lsp/server/package-lock.json | 1234 +- bundles/websockets-lsp/server/package.json | 24 +- bundles/websockets-lsp/server/server.ts | 196 +- compose.yaml | 46 +- docs/XQuery-40.ebnf.xhtml | 36954 ++++++++-------- docs/notes.md | 36 +- docs/protocol.md | 48 +- get-docker.sh | 720 + package-lock.json | 4266 +- package.json | 74 +- rollup.config.js | 26 +- test/sample.docs/parse-pdfbox.xml | 1046 +- test/sample.docs/pdfbox.xqm | 1046 +- test/sample.msg/didChange/client.json | 28 +- test/sample.msg/didChange/client2.json | 48 +- test/sample.msg/didopen/client.json | 22 +- test/sample.msg/hover/client.json | 26 +- test/sample.msg/initialize/client.json | 134 +- test/sample.msg/initialize/server.json | 62 +- test/sample.msg/logMessage/server.json | 8 +- webapp/lsp-manager/api-sockets.xqm | 36 +- webapp/lsp-manager/error-reporting.xqm | 50 +- webapp/lsp-manager/lib.xq/outlet.xqm | 202 +- webapp/lsp-manager/lib.xq/wrangler.xqm | 396 +- webapp/lsp-manager/views/dev/dba-iframe.htm | 40 +- webapp/lsp-manager/views/dev/home.htm | 78 +- webapp/lsp-manager/views/dev/job.htm | 54 +- webapp/lsp-manager/views/error.htm | 52 +- webapp/lsp-manager/views/home.htm | 126 +- webapp/lsp-manager/views/layout.htm | 134 +- webapp/lsp-manager/views/login.htm | 48 +- webapp/lsp-manager/views/test.htm | 82 +- webapp/lsp-manager/views/unknown.htm | 36 +- webapp/lsp/etc/capabilities.json | 54 +- webapp/lsp/etc/format-defaults.json | 12 +- webapp/lsp/etc/snippets.json | 532 +- webapp/lsp/etc/snippets.jsonc | 558 +- webapp/lsp/lint.xqm | 34 +- webapp/lsp/smoke.xq | 6 +- webapp/static/clients/ace/acego.js | 54 +- webapp/static/clients/ace/index copy.html | 102 +- webapp/static/clients/ace/index.html | 56 +- webapp/static/clients/ace/script.js | 82 +- webapp/static/clients/ace/socket.html | 64 +- webapp/static/clients/ace/styles.css | 12 +- webapp/static/clients/codemirror/grail.css | 242 +- webapp/static/clients/codemirror/grail.html | 612 +- webapp/static/clients/codemirror/icons.js | 10 +- webapp/static/clients/codemirror/index.html | 390 +- .../static/clients/codemirror/lsp.bundle.js | 194 +- webapp/static/clients/codemirror/script.js | 490 +- webapp/static/clients/codemirror/styles.css | 68 +- .../static/clients/codemirror/wc-qd-list.js | 408 +- .../clients/codemirror/wc-qd-popover.js | 64 +- .../static/clients/codicon@0.0.40/readme.md | 12 +- 69 files changed, 26660 insertions(+), 25940 deletions(-) create mode 100644 get-docker.sh diff --git a/.dockerignore b/.dockerignore index 704cfa7..a8de7a9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,8 +1,8 @@ - -#Ignoring git and other folders -.git -.github -.settings -src/ -#Ignoring all the markdown + +#Ignoring git and other folders +.git +.github +.settings +src/ +#Ignoring all the markdown *.md \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index dae727f..84bc9e3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,14 +1,14 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "jdk", - "request": "launch", - "name": "Launch Java App" - } - ] +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "jdk", + "request": "launch", + "name": "Launch Java App" + } + ] } \ No newline at end of file diff --git a/LICENSE b/LICENSE index 4b65b62..b3cb40b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,73 +1,73 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright 2025 Andy Bunce - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright 2025 Andy Bunce + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.md b/README.md index e1661a1..f3787af 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,88 @@ -Work in progress. - -An attempt to write a [Language Server Protocol](https://en.wikipedia.org/wiki/Language_Server_Protocol) server for and in XQuery 4.0. It tracks the draft specifications at https://qt4cg.org/ -It written for BaseX 12.0 and uses the [BaseX websocket](https://docs.basex.org/main/WebSockets) feature. - -# Demo -The demos expect `Docker` or `Podman` on the local machine. This is only a requirement for the demos. - -1 Clone this repo -2. Run `docker compose up -d` The LSP server shall now running on port 3000 (edit `compose.yaml` to change port) -3. In a browser navigate to `http://localhost:3000/static/clients/codemirror/` to see the CodeMirror 6 demo. - -In principle, the LSP can be used in any environment that can make use of a LSP server accessed via a websocket. -## LSP Server -* `webapp/lsp` The LSP implementation in XQuery using WebSockets for transport and the [JSON-RPC](https://www.jsonrpc.org/specification) 2.0 API for data format. - -## Sample html clients - -Samples using common browser based code editors are available. The `CodeMirror 6` sample is the most functional. - -These examples are self contained (no internet access required). Some make use of recent html features, for instance [popovertarget](https://caniuse.com/?search=popovertarget) -### `CodeMirror6` https://codemirror.net/ -* `webapp/static/codemirror` A test html page using the [CodeMirror6 editor](https://codemirror.net/) that connects to the BaseX LSP instance - -#### uses -* https://codemirror.net/docs/ref/#lsp-client -* [https://github.com/codemirror/legacy-modes/](https://github.com/codemirror/legacy-modes/blob/main/README.md#modexquery) `xquery` mode provides browser based syntax highlighting (XQuery 3.1?) -#### alternative LSP interfaces -* https://github.com/FurqanSoftware/codemirror-languageserver -* https://hjr265.me/blog/codemirror-lsp/ - -### `Ace Editor` -* `webapp/static/ace` A test html page using the [Ace editor](https://ace.c9.io/) that connects to the BaseX LSP instance -@TODO fix -#### Uses -* https://github.com/mkslanc/ace-linters https://mkslanc.github.io/ace-linters/ - -Make a websocket server for lsp on port 3000 -https://mkslanc.github.io/ace-linters/websocket.html - -http://localhost:3000/exampleServer - -https://github.com/mkslanc/ace-linters/blob/c1b317e01299016ac7da6588361228637f4eac25/packages/demo/websockets-lsp/server/server.ts -I needed `set NODE_OPTIONS=--max_old_space_size=8192` for build to complete - -Or `node --max-old-space-size=8192 node_modules/webpack-dev-serve -r/bin/webpack-dev-server.js` - -### `Monaco editor` -@TODO create -https://socket.dev/npm/package/monaco-editor - -### Server dev notes - -State is held in [websocket attributes](https://docs.basex.org/main/WebSocket_Functions#websocket_attributes). - -|Name|Use| -|----|---| -|id|wsid| -|connectTime|dateTime of connection| -|initialized|set true after client sends initialized message| -|client|the client initialize message| -|files|A map whose keys are open uris, values are maps (doctype-> attribute name where doctype is stored| | -|file-{uuid}|name of websocket attribute containing the textDocument| -|parse-{uuid}|name of websocket attribute containing parse tree XML| - -```mermaid -sequenceDiagram - WS->>lsp-ws: message - lsp-ws->>rpc: reply - rpc->>+John: John, can you hear me? - -``` - -#### XQuery 4.0 parser -The ebnf is taken from Gunther Rademacher's rex-parser-generator -[XQuery-40.ebnf](https://github.com/GuntherRademacher/rex-parser-generator/blob/main/docs/sample-grammars/XQuery-40.ebnf) - -The script [scripts/rex.xq](scripts/rex.xq) can generate XQuery or Java parser code from this. -The npm `package.json` script `javac` can create a jar file from the Java source. -## Related links -java -cp org.eclipse.lemminx-uber.jar org.eclipse.lemminx.XMLServerSocketLauncher` - - - - - - +Work in progress. + +An attempt to write a [Language Server Protocol](https://en.wikipedia.org/wiki/Language_Server_Protocol) server for and in XQuery 4.0. It tracks the draft specifications at https://qt4cg.org/ +It written for BaseX 12.0 and uses the [BaseX websocket](https://docs.basex.org/main/WebSockets) feature. + +# Demo +The demos expect `Docker` or `Podman` on the local machine. This is only a requirement for the demos. + +1 Clone this repo +2. Run `docker compose up -d` The LSP server shall now running on port 3000 (edit `compose.yaml` to change port) +3. In a browser navigate to `http://localhost:3000/static/clients/codemirror/` to see the CodeMirror 6 demo. + +In principle, the LSP can be used in any environment that can make use of a LSP server accessed via a websocket. +## LSP Server +* `webapp/lsp` The LSP implementation in XQuery using WebSockets for transport and the [JSON-RPC](https://www.jsonrpc.org/specification) 2.0 API for data format. + +## Sample html clients + +Samples using common browser based code editors are available. The `CodeMirror 6` sample is the most functional. + +These examples are self contained (no internet access required). Some make use of recent html features, for instance [popovertarget](https://caniuse.com/?search=popovertarget) +### `CodeMirror6` https://codemirror.net/ +* `webapp/static/codemirror` A test html page using the [CodeMirror6 editor](https://codemirror.net/) that connects to the BaseX LSP instance + +#### uses +* https://codemirror.net/docs/ref/#lsp-client +* [https://github.com/codemirror/legacy-modes/](https://github.com/codemirror/legacy-modes/blob/main/README.md#modexquery) `xquery` mode provides browser based syntax highlighting (XQuery 3.1?) +#### alternative LSP interfaces +* https://github.com/FurqanSoftware/codemirror-languageserver +* https://hjr265.me/blog/codemirror-lsp/ + +### `Ace Editor` +* `webapp/static/ace` A test html page using the [Ace editor](https://ace.c9.io/) that connects to the BaseX LSP instance +@TODO fix +#### Uses +* https://github.com/mkslanc/ace-linters https://mkslanc.github.io/ace-linters/ + +Make a websocket server for lsp on port 3000 +https://mkslanc.github.io/ace-linters/websocket.html + +http://localhost:3000/exampleServer + +https://github.com/mkslanc/ace-linters/blob/c1b317e01299016ac7da6588361228637f4eac25/packages/demo/websockets-lsp/server/server.ts +I needed `set NODE_OPTIONS=--max_old_space_size=8192` for build to complete + +Or `node --max-old-space-size=8192 node_modules/webpack-dev-serve +r/bin/webpack-dev-server.js` + +### `Monaco editor` +@TODO create +https://socket.dev/npm/package/monaco-editor + +### Server dev notes + +State is held in [websocket attributes](https://docs.basex.org/main/WebSocket_Functions#websocket_attributes). + +|Name|Use| +|----|---| +|id|wsid| +|connectTime|dateTime of connection| +|initialized|set true after client sends initialized message| +|client|the client initialize message| +|files|A map whose keys are open uris, values are maps (doctype-> attribute name where doctype is stored| | +|file-{uuid}|name of websocket attribute containing the textDocument| +|parse-{uuid}|name of websocket attribute containing parse tree XML| + +```mermaid +sequenceDiagram + WS->>lsp-ws: message + lsp-ws->>rpc: reply + rpc->>+John: John, can you hear me? + +``` + +#### XQuery 4.0 parser +The ebnf is taken from Gunther Rademacher's rex-parser-generator +[XQuery-40.ebnf](https://github.com/GuntherRademacher/rex-parser-generator/blob/main/docs/sample-grammars/XQuery-40.ebnf) + +The script [scripts/rex.xq](scripts/rex.xq) can generate XQuery or Java parser code from this. +The npm `package.json` script `javac` can create a jar file from the Java source. +## Related links +java -cp org.eclipse.lemminx-uber.jar org.eclipse.lemminx.XMLServerSocketLauncher` + + + + + + diff --git a/bundles/cm6/lsp.js b/bundles/cm6/lsp.js index 52d3407..e4f44cf 100644 --- a/bundles/cm6/lsp.js +++ b/bundles/cm6/lsp.js @@ -1,137 +1,137 @@ - -import { EditorState, StateEffect, Compartment } from '@codemirror/state'; - -import { - lineNumbers, highlightActiveLineGutter, highlightWhitespace, - drawSelection, rectangularSelection, crosshairCursor, highlightActiveLine, - keymap, dropCursor, EditorView,tooltips -} from '@codemirror/view'; - -import { openSearchPanel, highlightSelectionMatches, searchKeymap } from '@codemirror/search'; - -import { openLintPanel, lintGutter, lintKeymap, linter } from "@codemirror/lint" - -import { indentWithTab, history, defaultKeymap, historyKeymap } from '@codemirror/commands'; - -import { - foldGutter, indentOnInput, indentUnit, bracketMatching, foldKeymap, - syntaxHighlighting, defaultHighlightStyle, StreamLanguage -} from '@codemirror/language'; - -import { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete'; - -import { - LSPClient, LSPPlugin, languageServerSupport, languageServerExtensions, - formatDocument, formatKeymap -} from "@codemirror/lsp-client"; - -import { xQuery } from "@codemirror/legacy-modes/mode/xquery" -// Language -import { xml } from "@codemirror/lang-xml"; - -import { showMinimap } from "@replit/codemirror-minimap" -let create = (v) => { - const dom = document.createElement('div'); - return { dom } -} -const compartment = new Compartment(); -let curOpts = { - lineWrap: true, - minimap: true, - highlightWhitespace: true -} -// array of extensions reflecting opts -function optExts(opts) { - let exts = [] - if (opts.lineWrap) exts.push(EditorView.lineWrapping) - if (opts.highlightWhitespace) exts.push(highlightWhitespace()) - if (opts.minimap) exts.push( - showMinimap.compute(['doc'], (state) => { - return { - create, - /* optional showOverlay: 'mouse-over' */ - displayText: 'characters' - - } - })); - return exts -} - -function updateCompartment(opts) { - view.dispatch({ - effects: [compartment.reconfigure(optExts(opts))] - }); -} - -// return promise with socket map or reject if no connect -function simpleWebSocketTransport(uri) { - let handlers = []; - return new Promise(function (resolve, reject) { - let sock = new WebSocket(uri); - - sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; - sock.onerror = e => reject(e); - sock.onopen = () => resolve({ - socket: sock, - send: (message) => sock.send(message), - subscribe: (handler) => handlers.push(handler), - unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) - }); - } - ); -}; - -const baseExts = [ - lineNumbers(), - highlightActiveLineGutter(), - history(), - foldGutter(), - lintGutter(), - drawSelection(), - dropCursor(), - EditorState.allowMultipleSelections.of(true), - tooltips({ }), // clipped - keymap.of([indentWithTab]), - indentOnInput(), - syntaxHighlighting(defaultHighlightStyle, { fallback: true }), - bracketMatching(), - closeBrackets(), - autocompletion(), - rectangularSelection(), - crosshairCursor(), - highlightActiveLine(), - highlightSelectionMatches(), - keymap.of([ - ...closeBracketsKeymap, - ...defaultKeymap, - ...searchKeymap, - ...historyKeymap, - ...foldKeymap, - ...completionKeymap, - ...lintKeymap - ]), - StreamLanguage.define(xQuery), - compartment.of(optExts(curOpts)) -]; - - - -// map cmd->{keybings,fn} -function listCommands(view) { - const commands = new Map(); - const keymaps = view.state.facet(keymap); - for (let km of keymaps) { - for (let binding of km) { - if (binding.run && binding.run.name) { - commands.set(binding.run.name, { key: binding.key, fn: binding.run }); - } - } - } - return commands; -}; - -export { - baseExts, EditorView, EditorState, StateEffect, LSPPlugin, LSPClient, - openSearchPanel, openLintPanel, languageServerSupport, languageServerExtensions, - simpleWebSocketTransport, linter, formatDocument, keymap, formatKeymap, listCommands, updateCompartment, curOpts + +import { EditorState, StateEffect, Compartment } from '@codemirror/state'; + +import { + lineNumbers, highlightActiveLineGutter, highlightWhitespace, + drawSelection, rectangularSelection, crosshairCursor, highlightActiveLine, + keymap, dropCursor, EditorView,tooltips +} from '@codemirror/view'; + +import { openSearchPanel, highlightSelectionMatches, searchKeymap } from '@codemirror/search'; + +import { openLintPanel, lintGutter, lintKeymap, linter } from "@codemirror/lint" + +import { indentWithTab, history, defaultKeymap, historyKeymap } from '@codemirror/commands'; + +import { + foldGutter, indentOnInput, indentUnit, bracketMatching, foldKeymap, + syntaxHighlighting, defaultHighlightStyle, StreamLanguage +} from '@codemirror/language'; + +import { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete'; + +import { + LSPClient, LSPPlugin, languageServerSupport, languageServerExtensions, + formatDocument, formatKeymap +} from "@codemirror/lsp-client"; + +import { xQuery } from "@codemirror/legacy-modes/mode/xquery" +// Language +import { xml } from "@codemirror/lang-xml"; + +import { showMinimap } from "@replit/codemirror-minimap" +let create = (v) => { + const dom = document.createElement('div'); + return { dom } +} +const compartment = new Compartment(); +let curOpts = { + lineWrap: true, + minimap: true, + highlightWhitespace: true +} +// array of extensions reflecting opts +function optExts(opts) { + let exts = [] + if (opts.lineWrap) exts.push(EditorView.lineWrapping) + if (opts.highlightWhitespace) exts.push(highlightWhitespace()) + if (opts.minimap) exts.push( + showMinimap.compute(['doc'], (state) => { + return { + create, + /* optional showOverlay: 'mouse-over' */ + displayText: 'characters' + + } + })); + return exts +} + +function updateCompartment(opts) { + view.dispatch({ + effects: [compartment.reconfigure(optExts(opts))] + }); +} + +// return promise with socket map or reject if no connect +function simpleWebSocketTransport(uri) { + let handlers = []; + return new Promise(function (resolve, reject) { + let sock = new WebSocket(uri); + + sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; + sock.onerror = e => reject(e); + sock.onopen = () => resolve({ + socket: sock, + send: (message) => sock.send(message), + subscribe: (handler) => handlers.push(handler), + unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) + }); + } + ); +}; + +const baseExts = [ + lineNumbers(), + highlightActiveLineGutter(), + history(), + foldGutter(), + lintGutter(), + drawSelection(), + dropCursor(), + EditorState.allowMultipleSelections.of(true), + tooltips({ }), // clipped + keymap.of([indentWithTab]), + indentOnInput(), + syntaxHighlighting(defaultHighlightStyle, { fallback: true }), + bracketMatching(), + closeBrackets(), + autocompletion(), + rectangularSelection(), + crosshairCursor(), + highlightActiveLine(), + highlightSelectionMatches(), + keymap.of([ + ...closeBracketsKeymap, + ...defaultKeymap, + ...searchKeymap, + ...historyKeymap, + ...foldKeymap, + ...completionKeymap, + ...lintKeymap + ]), + StreamLanguage.define(xQuery), + compartment.of(optExts(curOpts)) +]; + + + +// map cmd->{keybings,fn} +function listCommands(view) { + const commands = new Map(); + const keymaps = view.state.facet(keymap); + for (let km of keymaps) { + for (let binding of km) { + if (binding.run && binding.run.name) { + commands.set(binding.run.name, { key: binding.key, fn: binding.run }); + } + } + } + return commands; +}; + +export { + baseExts, EditorView, EditorState, StateEffect, LSPPlugin, LSPClient, + openSearchPanel, openLintPanel, languageServerSupport, languageServerExtensions, + simpleWebSocketTransport, linter, formatDocument, keymap, formatKeymap, listCommands, updateCompartment, curOpts }; \ No newline at end of file diff --git a/bundles/cm6/try.js b/bundles/cm6/try.js index dfbd514..d6a7b8f 100644 --- a/bundles/cm6/try.js +++ b/bundles/cm6/try.js @@ -1,41 +1,41 @@ -import {basicSetup, EditorView} from "codemirror" -import { EditorState } from '@codemirror/state'; -import { LSPClient, LSPPlugin, languageServerSupport } from "@codemirror/lsp-client"; -import {StreamLanguage} from "@codemirror/language" -import { xQuery } from "@codemirror/legacy-modes/mode/xquery" - -function simpleWebSocketTransport(uri) { - let handlers = []; - return new Promise(function (resolve, reject) { - let sock = new WebSocket(uri); - - sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; - sock.onerror = e => reject(e); - sock.onopen = () => resolve({ - socket: sock, - send: (message) => sock.send(message), - subscribe: (handler) => handlers.push(handler), - unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) - }); - } - ); -}; -simpleWebSocketTransport("ws://localhost:3000/ws/lsp") - .then(transport => { - - client = new LSPClient().connect(transport); - - let extLsp = languageServerSupport(client, file, "xquery"); - - const doc = view.state.doc.toString(); - const state = lsp.createEditorState(doc, [...lsp.baseExts, extLsp, extLint]); - view.setState(state); - }) - .catch(r => { alert("connection failed: " + server) }); - - -new EditorView({ - doc: "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n", - extensions: [basicSetup, StreamLanguage.define(xQuery)], - parent: document.body +import {basicSetup, EditorView} from "codemirror" +import { EditorState } from '@codemirror/state'; +import { LSPClient, LSPPlugin, languageServerSupport } from "@codemirror/lsp-client"; +import {StreamLanguage} from "@codemirror/language" +import { xQuery } from "@codemirror/legacy-modes/mode/xquery" + +function simpleWebSocketTransport(uri) { + let handlers = []; + return new Promise(function (resolve, reject) { + let sock = new WebSocket(uri); + + sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; + sock.onerror = e => reject(e); + sock.onopen = () => resolve({ + socket: sock, + send: (message) => sock.send(message), + subscribe: (handler) => handlers.push(handler), + unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) + }); + } + ); +}; +simpleWebSocketTransport("ws://localhost:3000/ws/lsp") + .then(transport => { + + client = new LSPClient().connect(transport); + + let extLsp = languageServerSupport(client, file, "xquery"); + + const doc = view.state.doc.toString(); + const state = lsp.createEditorState(doc, [...lsp.baseExts, extLsp, extLint]); + view.setState(state); + }) + .catch(r => { alert("connection failed: " + server) }); + + +new EditorView({ + doc: "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n", + extensions: [basicSetup, StreamLanguage.define(xQuery)], + parent: document.body }); \ No newline at end of file diff --git a/bundles/lemminx/html/acego.js b/bundles/lemminx/html/acego.js index afb01c0..3e3e929 100644 --- a/bundles/lemminx/html/acego.js +++ b/bundles/lemminx/html/acego.js @@ -1,28 +1,28 @@ -import * as aceBuilds from 'https://esm.run/ace-builds'; - -import ace from 'https://cdn.jsdelivr.net/npm/ace/+esm' - -/* import 'ace-builds/src-noconflict/mode-javascript'; -import 'ace-builds/src-noconflict/theme-chrome'; */ - -/* import {AceLanguageClient} from "ace-linters/build/ace-language-client"; - -const serverData = { - module: () => import("ace-linters/build/language-client"), - modes: "json|json5", - type: "socket", - socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address -} - */ - // Initialize the editor - const editor = ace.edit("editor", { - theme: "ace/theme/chrome", - mode: "ace/mode/javascript", - fontSize: "14px", - showPrintMargin: false, - useWorker: false // Disable web worker for this simple demo -}); - -// Create a language provider for WebSocket -//let languageProvider = AceLanguageClient.for(serverData); +import * as aceBuilds from 'https://esm.run/ace-builds'; + +import ace from 'https://cdn.jsdelivr.net/npm/ace/+esm' + +/* import 'ace-builds/src-noconflict/mode-javascript'; +import 'ace-builds/src-noconflict/theme-chrome'; */ + +/* import {AceLanguageClient} from "ace-linters/build/ace-language-client"; + +const serverData = { + module: () => import("ace-linters/build/language-client"), + modes: "json|json5", + type: "socket", + socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address +} + */ + // Initialize the editor + const editor = ace.edit("editor", { + theme: "ace/theme/chrome", + mode: "ace/mode/javascript", + fontSize: "14px", + showPrintMargin: false, + useWorker: false // Disable web worker for this simple demo +}); + +// Create a language provider for WebSocket +//let languageProvider = AceLanguageClient.for(serverData); //languageProvider.registerEditor(editor); \ No newline at end of file diff --git a/bundles/lemminx/html/index.html b/bundles/lemminx/html/index.html index 954098a..8d8c884 100644 --- a/bundles/lemminx/html/index.html +++ b/bundles/lemminx/html/index.html @@ -1,44 +1,44 @@ - - - - - - BaseX LSP - - - - - - - - -
something
-
some text
- - - - - + + + + + + BaseX LSP + + + + + + + + +
something
+
some text
+ + + + + \ No newline at end of file diff --git a/bundles/lemminx/html/t2.html b/bundles/lemminx/html/t2.html index 4f19cec..0576f4a 100644 --- a/bundles/lemminx/html/t2.html +++ b/bundles/lemminx/html/t2.html @@ -1,39 +1,39 @@ - - - - - - Editor - - - - -
function foo(items) {
-    var i;
-    for (i = 0; i < items.length; i++) {
-        alert("Ace Rocks " + items[i]);
-    }
-}
- - - - - + + + + + + Editor + + + + +
function foo(items) {
+    var i;
+    for (i = 0; i < items.length; i++) {
+        alert("Ace Rocks " + items[i]);
+    }
+}
+ + + + + \ No newline at end of file diff --git a/bundles/lemminx/lemminx.bat b/bundles/lemminx/lemminx.bat index c9d8681..6cf9e68 100644 --- a/bundles/lemminx/lemminx.bat +++ b/bundles/lemminx/lemminx.bat @@ -1,3 +1,3 @@ -REM default port 5008 -REM https://download.eclipse.org/lemminx/releases/0.31.0/ +REM default port 5008 +REM https://download.eclipse.org/lemminx/releases/0.31.0/ java -cp org.eclipse.lemminx-uber.jar org.eclipse.lemminx.XMLServerSocketLauncher \ No newline at end of file diff --git a/bundles/lemminx/lsp.xqm b/bundles/lemminx/lsp.xqm index 98916bf..208e018 100644 --- a/bundles/lemminx/lsp.xqm +++ b/bundles/lemminx/lsp.xqm @@ -1,72 +1,72 @@ -(:~ web socket for ace -:) -module namespace lsp="urn:quodatum:vscode"; -import module namespace ws = "http://basex.org/modules/ws"; - -declare -%ws:connect('/ws/exampleServer') -function lsp:connect() -as empty-sequence(){ - let $_:=trace(ws:id(),"BaseX socket id: ") - return () - }; - - (:~ - : Processes a WebSocket message. - : @param $message message - :) -declare - %ws:message('/ws/exampleServer', '{$message}') -function lsp:message( - $message as xs:string -) as empty-sequence() { - let $json:=json:parse($message, map{ 'format': 'xquery' }) - let $id:=$json?id - let $_:=trace($id,"MESSAGE id: ") - return switch($json?method=>trace("method: ")) - case "initialize" return - let $a:=map{ - "capabilities":map{"textDocumentSync":2, - "completionProvider":map{"resolveProvider":false(),"triggerCharacters":["\",":"]}, - "hoverProvider":true(), - "documentSymbolProvider":true(), - "documentRangeFormattingProvider":false(), - "colorProvider":map{}, - "foldingRangeProvider":true(), - "selectionRangeProvider":true(), - "documentLinkProvider":map{} - } - } - let $a:=trace($a,"A: ") - return lsp:send-result($a,$id,ws:id()) - default - return error() -}; - -declare %ws:error('/ws/exampleServer', '{$error}') -function lsp:error($error) -{ - let $_:=trace($error,"ERROR ") - return () -}; - -(:~ - : Closes a WebSocket connection. Unregisters the user and notifies all clients. - :) -declare - %ws:close('/ws/exampleServer') -function lsp:close() as empty-sequence() { - let $_:=trace("CLOSE") - return () -}; - - - -declare -function lsp:send-result($result as map(*),$rpcId as xs:string, $wsId as xs:string) -as empty-sequence() -{ - let $json:=map{"jsonrpc":"2.0","id":$rpcId,"result":$result}=>trace("RESULT: ") - return ws:send($json,$wsId) -}; - +(:~ web socket for ace +:) +module namespace lsp="urn:quodatum:vscode"; +import module namespace ws = "http://basex.org/modules/ws"; + +declare +%ws:connect('/ws/exampleServer') +function lsp:connect() +as empty-sequence(){ + let $_:=trace(ws:id(),"BaseX socket id: ") + return () + }; + + (:~ + : Processes a WebSocket message. + : @param $message message + :) +declare + %ws:message('/ws/exampleServer', '{$message}') +function lsp:message( + $message as xs:string +) as empty-sequence() { + let $json:=json:parse($message, map{ 'format': 'xquery' }) + let $id:=$json?id + let $_:=trace($id,"MESSAGE id: ") + return switch($json?method=>trace("method: ")) + case "initialize" return + let $a:=map{ + "capabilities":map{"textDocumentSync":2, + "completionProvider":map{"resolveProvider":false(),"triggerCharacters":["\",":"]}, + "hoverProvider":true(), + "documentSymbolProvider":true(), + "documentRangeFormattingProvider":false(), + "colorProvider":map{}, + "foldingRangeProvider":true(), + "selectionRangeProvider":true(), + "documentLinkProvider":map{} + } + } + let $a:=trace($a,"A: ") + return lsp:send-result($a,$id,ws:id()) + default + return error() +}; + +declare %ws:error('/ws/exampleServer', '{$error}') +function lsp:error($error) +{ + let $_:=trace($error,"ERROR ") + return () +}; + +(:~ + : Closes a WebSocket connection. Unregisters the user and notifies all clients. + :) +declare + %ws:close('/ws/exampleServer') +function lsp:close() as empty-sequence() { + let $_:=trace("CLOSE") + return () +}; + + + +declare +function lsp:send-result($result as map(*),$rpcId as xs:string, $wsId as xs:string) +as empty-sequence() +{ + let $json:=map{"jsonrpc":"2.0","id":$rpcId,"result":$result}=>trace("RESULT: ") + return ws:send($json,$wsId) +}; + diff --git a/bundles/lemminx/test.html b/bundles/lemminx/test.html index c3526e5..2571707 100644 --- a/bundles/lemminx/test.html +++ b/bundles/lemminx/test.html @@ -1,4 +1,4 @@ - \ No newline at end of file diff --git a/bundles/websockets-lsp/client.ts b/bundles/websockets-lsp/client.ts index 0bc0d3b..07be8c6 100644 --- a/bundles/websockets-lsp/client.ts +++ b/bundles/websockets-lsp/client.ts @@ -1,30 +1,30 @@ -import "ace-code/esm-resolver"; -import {jsonContent} from "../docs-example/json-example"; - -import {json5Content, json5Schema} from "../docs-example/json5-example"; - -import {addFormatCommand, createEditorWithLSP} from "../utils"; -import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client"; - - -let modes = [ - {name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}}, - {name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}}, -] - -const serverData: LanguageClientConfig = { - module: () => import("ace-linters/build/language-client"), - modes: "json|json5", - type: "socket", - socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"), -} - -let languageProvider = AceLanguageClient.for(serverData); -let i = 0; -for (let mode of modes) { - // @ts-expect-error - createEditorWithLSP(mode, i, languageProvider); - i++; -} -// @ts-expect-error -addFormatCommand(languageProvider); +import "ace-code/esm-resolver"; +import {jsonContent} from "../docs-example/json-example"; + +import {json5Content, json5Schema} from "../docs-example/json5-example"; + +import {addFormatCommand, createEditorWithLSP} from "../utils"; +import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client"; + + +let modes = [ + {name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}}, + {name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}}, +] + +const serverData: LanguageClientConfig = { + module: () => import("ace-linters/build/language-client"), + modes: "json|json5", + type: "socket", + socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"), +} + +let languageProvider = AceLanguageClient.for(serverData); +let i = 0; +for (let mode of modes) { + // @ts-expect-error + createEditorWithLSP(mode, i, languageProvider); + i++; +} +// @ts-expect-error +addFormatCommand(languageProvider); diff --git a/bundles/websockets-lsp/server/README.md b/bundles/websockets-lsp/server/README.md index 36368fa..6a693f5 100644 --- a/bundles/websockets-lsp/server/README.md +++ b/bundles/websockets-lsp/server/README.md @@ -1,11 +1,11 @@ -# Sample language server - -This is just sample websocket server based on vscode-json-languageserver - -## Getting Started -To run the server, simply follow these steps: - -1. Install dependencies by running `npm i` -2. Start the server by running `npm run start-server` - -And that's it! Your sample language server on 3000 port should now be up and running. +# Sample language server + +This is just sample websocket server based on vscode-json-languageserver + +## Getting Started +To run the server, simply follow these steps: + +1. Install dependencies by running `npm i` +2. Start the server by running `npm run start-server` + +And that's it! Your sample language server on 3000 port should now be up and running. diff --git a/bundles/websockets-lsp/server/package-lock.json b/bundles/websockets-lsp/server/package-lock.json index 6b9d885..21dcb2d 100644 --- a/bundles/websockets-lsp/server/package-lock.json +++ b/bundles/websockets-lsp/server/package-lock.json @@ -1,617 +1,617 @@ -{ - "name": "sample-server", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "sample-server", - "version": "1.0.0", - "dependencies": { - "ts-node": "^10.8.1", - "vscode-json-languageserver": "^1.3.4" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "peer": true - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dependencies": { - "agent-base": "4", - "debug": "3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/request-light": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.4.0.tgz", - "integrity": "sha512-fimzjIVw506FBZLspTAXHdpvgvQebyjpNyLRd0e6drPPRq7gcrROeGWRyF81wLqFg5ijPgnOQbmfck5wdTqpSA==", - "dependencies": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "vscode-nls": "^4.1.2" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/vscode-json-languageserver": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/vscode-json-languageserver/-/vscode-json-languageserver-1.3.4.tgz", - "integrity": "sha512-+ghebnslXk6fVDySBrT0BVqozLDdmKY/qxgkDD4JtOQcU2vXc3e7jh7YyMxvuvE93E9OLvBqUrvajttj8xf3BA==", - "dependencies": { - "jsonc-parser": "^3.0.0", - "request-light": "^0.4.0", - "vscode-json-languageservice": "^4.0.2", - "vscode-languageserver": "^7.0.0", - "vscode-uri": "^3.0.2" - }, - "bin": { - "vscode-json-languageserver": "bin/vscode-json-languageserver" - }, - "engines": { - "node": "*" - } - }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "node_modules/vscode-json-languageservice/node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" - }, - "node_modules/vscode-nls": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", - "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==" - }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "peer": true - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "request-light": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.4.0.tgz", - "integrity": "sha512-fimzjIVw506FBZLspTAXHdpvgvQebyjpNyLRd0e6drPPRq7gcrROeGWRyF81wLqFg5ijPgnOQbmfck5wdTqpSA==", - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "vscode-nls": "^4.1.2" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "peer": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "vscode-json-languageserver": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/vscode-json-languageserver/-/vscode-json-languageserver-1.3.4.tgz", - "integrity": "sha512-+ghebnslXk6fVDySBrT0BVqozLDdmKY/qxgkDD4JtOQcU2vXc3e7jh7YyMxvuvE93E9OLvBqUrvajttj8xf3BA==", - "requires": { - "jsonc-parser": "^3.0.0", - "request-light": "^0.4.0", - "vscode-json-languageservice": "^4.0.2", - "vscode-languageserver": "^7.0.0", - "vscode-uri": "^3.0.2" - } - }, - "vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - }, - "dependencies": { - "vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" - } - } - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - }, - "dependencies": { - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - } - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - }, - "vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" - }, - "vscode-nls": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", - "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==" - }, - "vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - } - } -} +{ + "name": "sample-server", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "sample-server", + "version": "1.0.0", + "dependencies": { + "ts-node": "^10.8.1", + "vscode-json-languageserver": "^1.3.4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "peer": true + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/request-light": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.4.0.tgz", + "integrity": "sha512-fimzjIVw506FBZLspTAXHdpvgvQebyjpNyLRd0e6drPPRq7gcrROeGWRyF81wLqFg5ijPgnOQbmfck5wdTqpSA==", + "dependencies": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.4", + "vscode-nls": "^4.1.2" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/vscode-json-languageserver": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/vscode-json-languageserver/-/vscode-json-languageserver-1.3.4.tgz", + "integrity": "sha512-+ghebnslXk6fVDySBrT0BVqozLDdmKY/qxgkDD4JtOQcU2vXc3e7jh7YyMxvuvE93E9OLvBqUrvajttj8xf3BA==", + "dependencies": { + "jsonc-parser": "^3.0.0", + "request-light": "^0.4.0", + "vscode-json-languageservice": "^4.0.2", + "vscode-languageserver": "^7.0.0", + "vscode-uri": "^3.0.2" + }, + "bin": { + "vscode-json-languageserver": "bin/vscode-json-languageserver" + }, + "engines": { + "node": "*" + } + }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-json-languageservice/node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + }, + "node_modules/vscode-nls": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", + "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==" + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "peer": true + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "request-light": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.4.0.tgz", + "integrity": "sha512-fimzjIVw506FBZLspTAXHdpvgvQebyjpNyLRd0e6drPPRq7gcrROeGWRyF81wLqFg5ijPgnOQbmfck5wdTqpSA==", + "requires": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.4", + "vscode-nls": "^4.1.2" + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "vscode-json-languageserver": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/vscode-json-languageserver/-/vscode-json-languageserver-1.3.4.tgz", + "integrity": "sha512-+ghebnslXk6fVDySBrT0BVqozLDdmKY/qxgkDD4JtOQcU2vXc3e7jh7YyMxvuvE93E9OLvBqUrvajttj8xf3BA==", + "requires": { + "jsonc-parser": "^3.0.0", + "request-light": "^0.4.0", + "vscode-json-languageservice": "^4.0.2", + "vscode-languageserver": "^7.0.0", + "vscode-uri": "^3.0.2" + } + }, + "vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + }, + "dependencies": { + "vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + } + } + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + }, + "dependencies": { + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + } + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + }, + "vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + }, + "vscode-nls": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", + "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==" + }, + "vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + } + } +} diff --git a/bundles/websockets-lsp/server/package.json b/bundles/websockets-lsp/server/package.json index 831898e..9d0b56c 100644 --- a/bundles/websockets-lsp/server/package.json +++ b/bundles/websockets-lsp/server/package.json @@ -1,12 +1,12 @@ -{ - "name": "sample-server", - "version": "1.0.0", - "scripts": { - "start-server": "node --loader ts-node/esm server.ts" - }, - "dependencies": { - "vscode-json-languageserver": "^1.3.4", - "ts-node": "^10.8.1" - }, - "type": "module" -} +{ + "name": "sample-server", + "version": "1.0.0", + "scripts": { + "start-server": "node --loader ts-node/esm server.ts" + }, + "dependencies": { + "vscode-json-languageserver": "^1.3.4", + "ts-node": "^10.8.1" + }, + "type": "module" +} diff --git a/bundles/websockets-lsp/server/server.ts b/bundles/websockets-lsp/server/server.ts index 60c8b86..0863e68 100644 --- a/bundles/websockets-lsp/server/server.ts +++ b/bundles/websockets-lsp/server/server.ts @@ -1,98 +1,98 @@ -import fs from "fs"; -import {WebSocketServer} from 'ws'; -import * as http from 'http'; -import {fileURLToPath, URL} from 'url'; -import * as net from 'net'; -import express from 'express'; -import * as rpc from 'vscode-ws-jsonrpc'; -// @ts-ignore -import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js' -import requestLight from "request-light"; -import vscodeUri from "vscode-uri"; -import {createConnection} from 'vscode-languageserver/lib/node/main.js'; -import path from 'path'; - -export function startLanguageServer(webSocket: rpc.IWebSocket) { - const messageReader = new rpc.WebSocketMessageReader(webSocket); - const messageWriter = new rpc.WebSocketMessageWriter(webSocket); - const connection = createConnection(messageReader, messageWriter); - jsonServer.startServer(connection, { - file: getFileService(), - http: getHTTPService(), - configureHttpRequests: requestLight.configure - }); -} - -function getHTTPService() { - return { - getContent(uri: any) { - const headers = {'Accept-Encoding': 'gzip, deflate'}; - return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => { - return response.responseText; - }, (error) => { - return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString()); - }); - } - }; -} - -function getFileService() { - return { - getContent(location: any) { - return new Promise((resolve, reject) => { - const uri = vscodeUri.URI.parse(location); - fs.readFile(uri.fsPath, 'utf8', (err, data) => { - if (err) { - reject(err); - } else { - resolve(data); - } - }); - }); - } - }; -} - -const serverFilePath = fileURLToPath(import.meta.url); -const serverDir = path.dirname(serverFilePath); - -process.on('uncaughtException', (err: any) => { - console.error('Uncaught Exception: ', err.toString()); - if (err.stack) { - console.error(err.stack); - } -}); - -const app = express(); -app.use(express.static(serverDir)); -const server = app.listen(3000); - -const webSocketServer = new WebSocketServer({ - noServer: true, - perMessageDeflate: false -}); -server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => { - const baseURL = `http://${request.headers.host}/`; - const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined; - if (pathname === '/exampleServer') { - webSocketServer.handleUpgrade(request, socket, head, webSocket => { - const socket: rpc.IWebSocket = { - send: content => webSocket.send(content, error => { - if (error) { - throw error; - } - }), - onMessage: cb => webSocket.on('message', cb), - onError: cb => webSocket.on('error', cb), - onClose: cb => webSocket.on('close', cb), - dispose: () => webSocket.close() - }; - if (webSocket.readyState === webSocket.OPEN) { - startLanguageServer(socket); - } else { - webSocket.on('open', () => startLanguageServer(socket)); - } - }); - } -}); - +import fs from "fs"; +import {WebSocketServer} from 'ws'; +import * as http from 'http'; +import {fileURLToPath, URL} from 'url'; +import * as net from 'net'; +import express from 'express'; +import * as rpc from 'vscode-ws-jsonrpc'; +// @ts-ignore +import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js' +import requestLight from "request-light"; +import vscodeUri from "vscode-uri"; +import {createConnection} from 'vscode-languageserver/lib/node/main.js'; +import path from 'path'; + +export function startLanguageServer(webSocket: rpc.IWebSocket) { + const messageReader = new rpc.WebSocketMessageReader(webSocket); + const messageWriter = new rpc.WebSocketMessageWriter(webSocket); + const connection = createConnection(messageReader, messageWriter); + jsonServer.startServer(connection, { + file: getFileService(), + http: getHTTPService(), + configureHttpRequests: requestLight.configure + }); +} + +function getHTTPService() { + return { + getContent(uri: any) { + const headers = {'Accept-Encoding': 'gzip, deflate'}; + return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => { + return response.responseText; + }, (error) => { + return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString()); + }); + } + }; +} + +function getFileService() { + return { + getContent(location: any) { + return new Promise((resolve, reject) => { + const uri = vscodeUri.URI.parse(location); + fs.readFile(uri.fsPath, 'utf8', (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); + } + }; +} + +const serverFilePath = fileURLToPath(import.meta.url); +const serverDir = path.dirname(serverFilePath); + +process.on('uncaughtException', (err: any) => { + console.error('Uncaught Exception: ', err.toString()); + if (err.stack) { + console.error(err.stack); + } +}); + +const app = express(); +app.use(express.static(serverDir)); +const server = app.listen(3000); + +const webSocketServer = new WebSocketServer({ + noServer: true, + perMessageDeflate: false +}); +server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => { + const baseURL = `http://${request.headers.host}/`; + const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined; + if (pathname === '/exampleServer') { + webSocketServer.handleUpgrade(request, socket, head, webSocket => { + const socket: rpc.IWebSocket = { + send: content => webSocket.send(content, error => { + if (error) { + throw error; + } + }), + onMessage: cb => webSocket.on('message', cb), + onError: cb => webSocket.on('error', cb), + onClose: cb => webSocket.on('close', cb), + dispose: () => webSocket.close() + }; + if (webSocket.readyState === webSocket.OPEN) { + startLanguageServer(socket); + } else { + webSocket.on('open', () => startLanguageServer(socket)); + } + }); + } +}); + diff --git a/compose.yaml b/compose.yaml index 61c7887..e95a1d3 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,23 +1,23 @@ -# basex lsp, use with -services: - basex: - image: ghcr.io/quodatum/basexhttp:basex-12.0 - container_name: basex-lsp - restart: unless-stopped - ports: - - "3000:8080" - - "3001:1984" - volumes: - - ./data:/srv/basex/data -# - ./webapp/web.xml:/srv/basex/webapp/WEB-INF/web.xml # set websocket options 12.1+ - - ./webapp/custom:/srv/basex/lib/custom:ro # jars - - ./webapp/lsp:/srv/basex/webapp/lsp - - ./webapp/static/clients:/srv/basex/webapp/static/clients:ro - - ./webapp/lsp-manager:/srv/basex/webapp/lsp-manager -# - ./repo:/srv/basex/repo - environment: - - "BASEX_JVM= -Dorg.basex.RESTXQERRORS=false -Dorg.basex.LOGEXCLUDE=/dba" - - "SERVER_OPTS= " - -volumes: - basex-lsp: +# basex lsp, use with +services: + basex: + image: ghcr.io/quodatum/basexhttp:basex-12.0 + container_name: basex-lsp + restart: unless-stopped + ports: + - "3000:8080" + - "3001:1984" + volumes: + - ./data:/srv/basex/data +# - ./webapp/web.xml:/srv/basex/webapp/WEB-INF/web.xml # set websocket options 12.1+ + - ./webapp/custom:/srv/basex/lib/custom:ro # jars + - ./webapp/lsp:/srv/basex/webapp/lsp + - ./webapp/static/clients:/srv/basex/webapp/static/clients:ro + - ./webapp/lsp-manager:/srv/basex/webapp/lsp-manager +# - ./repo:/srv/basex/repo + environment: + - "BASEX_JVM= -Dorg.basex.RESTXQERRORS=false -Dorg.basex.LOGEXCLUDE=/dba" + - "SERVER_OPTS= " + +volumes: + basex-lsp: diff --git a/docs/XQuery-40.ebnf.xhtml b/docs/XQuery-40.ebnf.xhtml index ac880c7..074c293 100644 --- a/docs/XQuery-40.ebnf.xhtml +++ b/docs/XQuery-40.ebnf.xhtml @@ -1,18478 +1,18478 @@ - - - - - - - - - - - - - - - XQuery-40.ebnf - - - Find - - Productions:X - AbbreviatedStep - AbsolutePathExpr - AdditiveExpr - AllowingEmpty - AndExpr - Annotation - AnnotationValue - AnyArrayType - AnyFunctionType - AnyItemTest - AnyMapType - AnyNodeKindTest - AnyRecordType - AposAttrContentChar - AposAttrValueContent - AposStringLiteral - Argument - ArgumentList - ArrayConstructor - ArrayType - ArrowExpr - ArrowTarget - AttributeName - AttributeTest - Axis - AxisStep - BaseURIDecl - BinaryDigit - BinaryDigits - BinaryIntegerLiteral - BoundarySpaceDecl - BracedAction - BracedSwitchCases - BracedTypeswitchCases - BracedURILiteral - CDataSection - CDataSectionContents - CaseClause - CastExpr - CastTarget - CastableExpr - CatchClause - Char - CharRef - ChoiceItemType - Comment - CommentContents - CommentTest - CommonContent - CompAttrConstructor - CompCommentConstructor - CompDocConstructor - CompElemConstructor - CompNamespaceConstructor - CompNodeNCName - CompNodeName - CompPIConstructor - CompTextConstructor - ComparisonExpr - ComputedConstructor - ConstructionDecl - ContextValueDecl - CopyNamespacesDecl - CountClause - CurlyArrayConstructor - CurrentVar - DFPropertyName - DecDigit - DecimalFormatDecl - DecimalLiteral - DefaultCollationDecl - DefaultNamespaceDecl - Digits - DirAttributeList - DirAttributeValue - DirCommentConstructor - DirCommentContents - DirElemConstructor - DirElemConstructorDelimiter - DirElemContent - DirPIConstructor - DirPIContents - DirectConstructor - DocumentTest - DoubleLiteral - DynamicFunctionCall - EOF - EQName - ElementContentChar - ElementName - ElementTest - EmptyOrderDecl - EnclosedContentExpr - EnclosedExpr - EnumerationType - Expr - ExprSingle - ExtendedFieldDeclaration - ExtensibleFlag - ExtensionExpr - FLWORExpr - FieldDeclaration - FieldName - FilterExpr - FilterExprAM - FinallyClause - ForBinding - ForClause - ForEntryBinding - ForEntryKeyBinding - ForEntryValueBinding - ForItemBinding - ForMemberBinding - FullStep - FunctionBody - FunctionCall - FunctionDecl - FunctionItemExpr - FunctionSignature - FunctionType - GNodeType - GeneralComp - GeneralCompDelimiter - GroupByClause - GroupingSpec - HexDigit - HexDigits - HexIntegerLiteral - IfExpr - Import - InheritMode - InitialClause - InlineFunctionExpr - InstanceofExpr - IntegerLiteral - IntermediateClause - IntersectExceptExpr - ItemType - ItemTypeDecl - JNodeType - KeySpecifier - KeywordArgument - KeywordArguments - LetArrayBinding - LetBinding - LetClause - LetMapBinding - LetSequenceBinding - LetValueBinding - LibraryModule - Literal - LocalPart - Lookup - LookupExpr - MainModule - MapConstructor - MapConstructorEntry - MapType - MappingArrowTarget - MarkedNCName - MethodCall - Module - ModuleDecl - ModuleImport - MultiplicativeExpr - NCName - NCName - NCNameDelimiter - Name - NameChar - NameStartChar - NameTest - NameTestUnion - NamedFunctionRef - NamedRecordTypeDecl - NamespaceDecl - NamespaceNodeTest - NextVar - NodeComp - NodeConstructor - NodeFollows - NodeKindTest - NodePrecedes - NodeTest - NumericLiteral - NumericLiteralDelimiter - OccurrenceIndicator - OptionDecl - OrExpr - OrderByClause - OrderModifier - OrderSpec - OrderedExpr - OrderingModeDecl - OtherwiseExpr - PITarget - PITest - ParamList - ParamListWithDefaults - ParamWithDefault - ParenthesizedExpr - PathExpr - PipelineExpr - PositionalArgumentList - PositionalArguments - PositionalVar - PostfixExpr - Pragma - PragmaContents - PredefinedEntityRef - Predicate - Prefix - PrefixedName - PreserveMode - PreviousVar - PrimaryExpr - Prolog - QName - QName - QNameLiteral - QNameOrKeywordDelimiter - QuantifiedExpr - QuantifierBinding - QueryBody - QuotAttrContentChar - QuotAttrValueContent - QuotStringLiteral - RangeExpr - RecordType - RegularItemType - RelativePathExpr - ReservedName - RestrictedDynamicCall - ReturnClause - S - SchemaAttributeTest - SchemaElementTest - SchemaImport - SchemaPrefix - Selector - SequenceArrowTarget - SequenceType - SequenceTypeUnion - Setter - SimpleMapExpr - SimpleNodeTest - SlidingWindowClause - SquareArrayConstructor - StepExpr - StringConcatExpr - StringConstructor - StringConstructorChars - StringConstructorContent - StringInterpolation - StringLiteral - StringTemplate - StringTemplateFixedPart - StringTemplateVariablePart - SwitchCaseClause - SwitchCaseOperand - SwitchCases - SwitchComparand - SwitchExpr - TextTest - TreatExpr - TryCatchExpr - TryClause - TumblingWindowClause - TypeDeclaration - TypeName - TypeTest - TypedArrayType - TypedFunctionParam - TypedFunctionType - TypedMapType - TypedRecordType - TypeswitchCases - TypeswitchExpr - URILiteral - URIQualifiedName - UnaryExpr - UnaryLookup - UnbracedActions - UnionExpr - UnionNodeTest - UnorderedExpr - UnprefixedName - UnreservedFunctionEQName - UnreservedFunctionQName - UnreservedNCName - UnreservedName - UnreservedQName - ValidateExpr - ValidationMode - ValueComp - ValueExpr - VarDecl - VarDefaultValue - VarName - VarNameAndType - VarRef - VarValue - VersionDecl - WhereClause - WhileClause - Whitespace - Wildcard - WindowClause - WindowEndCondition - WindowStartCondition - WindowVars - - - var filter = document.getElementById("the-filter"), // search box - list = document.querySelectorAll("#the-list li"); // all list items - update=function(){ - let search = filter.value.toLowerCase(); - for (let i of list) { - let item = i.innerHTML.toLowerCase(); - if (item.indexOf(search) == -1) { i.classList.add("hide"); } - else { i.classList.remove("hide"); } - } - }; - window.addEventListener("load", () => {filter.onkeyup =update;}); - - - var details = document.getElementById("the-details"), // form - document.addEventListener('click', function(e){ - if(!details.contains(e.target)){ - details.removeAttribute('open') - } - }) - - - - - -

Module:

- - - - - - - - - - VersionDecl - - - - - - LibraryModule - - - - - - MainModule - - - - - - EOF - - - -

- -

-

- -

no references


VersionDecl:

- - - - - - - - - - xquery - - - - - - encoding - - - - - - version - - - - - - StringLiteral - - - - encoding - - - - - - StringLiteral - - - - ; - - - - - -

- -

- - - -
         ::= 'xquery' ( 'encoding' | 'version' ( StringLiteral 'encoding' )? ) StringLiteral ';'
-

- -

referenced by: - -

-


LibraryModule:

- - - - - - - - - - ModuleDecl - - - - - - Prolog - - - -

- -

- - - -
         ::= ModuleDecl Prolog
-

- -

referenced by: - -

-


ModuleDecl:

- - - - - - - - - - module - - - - - - namespace - - - - - - NCName - - - - = - - - - - - URILiteral - - - - ; - - - - - -

- -

- - - -
         ::= 'module' 'namespace' NCName '=' URILiteral ';'
-

- -

referenced by: - -

-


NCName:

- - - - - - - - - - UnreservedNCName - - - - NaN - - - - - - allowing - - - - - - ancestor - - - - - - ancestor-or-self - - - - - - and - - - - - - array - - - - - - as - - - - - - ascending - - - - - - at - - - - - - attribute - - - - - - base-uri - - - - - - boundary-space - - - - - - by - - - - - - case - - - - - - cast - - - - - - castable - - - - - - catch - - - - - - child - - - - - - collation - - - - - - comment - - - - - - construction - - - - - - context - - - - - - copy-namespaces - - - - - - count - - - - - - decimal-format - - - - - - decimal-separator - - - - - - declare - - - - - - default - - - - - - descendant - - - - - - descendant-or-self - - - - - - descending - - - - - - digit - - - - - - div - - - - - - document - - - - - - document-node - - - - - - element - - - - - - else - - - - - - empty - - - - - - empty-sequence - - - - - - encoding - - - - - - end - - - - - - enum - - - - - - eq - - - - - - every - - - - - - except - - - - - - exponent-separator - - - - - - external - - - - - - false - - - - - - finally - - - - - - fixed - - - - - - fn - - - - - - following - - - - - - following-or-self - - - - - - following-sibling - - - - - - following-sibling-or-self - - - - - - follows - - - - - - for - - - - - - function - - - - - - ge - - - - - - get - - - - - - gnode - - - - - - greatest - - - - - - group - - - - - - grouping-separator - - - - - - gt - - - - - - idiv - - - - - - if - - - - - - import - - - - - - in - - - - - - infinity - - - - - - inherit - - - - - - instance - - - - - - intersect - - - - - - is - - - - - - is-not - - - - - - item - - - - - - jnode - - - - - - key - - - - - - lax - - - - - - le - - - - - - least - - - - - - let - - - - - - lt - - - - - - map - - - - - - member - - - - - - minus-sign - - - - - - mod - - - - - - module - - - - - - namespace - - - - - - namespace-node - - - - - - ne - - - - - - next - - - - - - no-inherit - - - - - - no-preserve - - - - - - node - - - - - - of - - - - - - only - - - - - - option - - - - - - or - - - - - - order - - - - - - ordered - - - - - - ordering - - - - - - otherwise - - - - - - parent - - - - - - pattern-separator - - - - - - per-mille - - - - - - percent - - - - - - precedes - - - - - - preceding - - - - - - preceding-or-self - - - - - - preceding-sibling - - - - - - preceding-sibling-or-self - - - - - - preserve - - - - - - previous - - - - - - processing-instruction - - - - - - record - - - - - - return - - - - - - satisfies - - - - - - schema - - - - - - schema-attribute - - - - - - schema-element - - - - - - self - - - - - - sliding - - - - - - some - - - - - - stable - - - - - - start - - - - - - strict - - - - - - strip - - - - - - switch - - - - - - text - - - - - - then - - - - - - to - - - - - - treat - - - - - - true - - - - - - try - - - - - - tumbling - - - - - - type - - - - - - typeswitch - - - - - - union - - - - - - unordered - - - - - - validate - - - - - - value - - - - - - variable - - - - - - version - - - - - - when - - - - - - where - - - - - - while - - - - - - window - - - - - - xquery - - - - - - zero-digit - - - - - -

- -

- - - -
           | 'NaN'
- -
           | 'allowing'
- -
           | 'ancestor'
- -
           | 'ancestor-or-self'
- -
           | 'and'
- -
           | 'array'
- -
           | 'as'
- -
           | 'ascending'
- -
           | 'at'
- -
           | 'attribute'
- -
           | 'base-uri'
- -
           | 'boundary-space'
- -
           | 'by'
- -
           | 'case'
- -
           | 'cast'
- -
           | 'castable'
- -
           | 'catch'
- -
           | 'child'
- -
           | 'collation'
- -
           | 'comment'
- -
           | 'construction'
- -
           | 'context'
- -
           | 'copy-namespaces'
- -
           | 'count'
- -
           | 'decimal-format'
- -
           | 'decimal-separator'
- -
           | 'declare'
- -
           | 'default'
- -
           | 'descendant'
- -
           | 'descendant-or-self'
- -
           | 'descending'
- -
           | 'digit'
- -
           | 'div'
- -
           | 'document'
- -
           | 'document-node'
- -
           | 'element'
- -
           | 'else'
- -
           | 'empty'
- -
           | 'empty-sequence'
- -
           | 'encoding'
- -
           | 'end'
- -
           | 'enum'
- -
           | 'eq'
- -
           | 'every'
- -
           | 'except'
- -
           | 'exponent-separator'
- -
           | 'external'
- -
           | 'false'
- -
           | 'finally'
- -
           | 'fixed'
- -
           | 'fn'
- -
           | 'following'
- -
           | 'following-or-self'
- -
           | 'following-sibling'
- -
           | 'following-sibling-or-self'
- -
           | 'follows'
- -
           | 'for'
- -
           | 'function'
- -
           | 'ge'
- -
           | 'get'
- -
           | 'gnode'
- -
           | 'greatest'
- -
           | 'group'
- -
           | 'grouping-separator'
- -
           | 'gt'
- -
           | 'idiv'
- -
           | 'if'
- -
           | 'import'
- -
           | 'in'
- -
           | 'infinity'
- -
           | 'inherit'
- -
           | 'instance'
- -
           | 'intersect'
- -
           | 'is'
- -
           | 'is-not'
- -
           | 'item'
- -
           | 'jnode'
- -
           | 'key'
- -
           | 'lax'
- -
           | 'le'
- -
           | 'least'
- -
           | 'let'
- -
           | 'lt'
- -
           | 'map'
- -
           | 'member'
- -
           | 'minus-sign'
- -
           | 'mod'
- -
           | 'module'
- -
           | 'namespace'
- -
           | 'namespace-node'
- -
           | 'ne'
- -
           | 'next'
- -
           | 'no-inherit'
- -
           | 'no-preserve'
- -
           | 'node'
- -
           | 'of'
- -
           | 'only'
- -
           | 'option'
- -
           | 'or'
- -
           | 'order'
- -
           | 'ordered'
- -
           | 'ordering'
- -
           | 'otherwise'
- -
           | 'parent'
- -
           | 'pattern-separator'
- -
           | 'per-mille'
- -
           | 'percent'
- -
           | 'precedes'
- -
           | 'preceding'
- -
           | 'preceding-or-self'
- -
           | 'preceding-sibling'
- -
           | 'preceding-sibling-or-self'
- -
           | 'preserve'
- -
           | 'previous'
- -
           | 'processing-instruction'
- -
           | 'record'
- -
           | 'return'
- -
           | 'satisfies'
- -
           | 'schema'
- -
           | 'schema-attribute'
- -
           | 'schema-element'
- -
           | 'self'
- -
           | 'sliding'
- -
           | 'some'
- -
           | 'stable'
- -
           | 'start'
- -
           | 'strict'
- -
           | 'strip'
- -
           | 'switch'
- -
           | 'text'
- -
           | 'then'
- -
           | 'to'
- -
           | 'treat'
- -
           | 'true'
- -
           | 'try'
- -
           | 'tumbling'
- -
           | 'type'
- -
           | 'typeswitch'
- -
           | 'union'
- -
           | 'unordered'
- -
           | 'validate'
- -
           | 'value'
- -
           | 'variable'
- -
           | 'version'
- -
           | 'when'
- -
           | 'where'
- -
           | 'while'
- -
           | 'window'
- -
           | 'xquery'
- -
           | 'zero-digit'
-

- -

referenced by: - -

-


URILiteral:

- - - - - - - - - - StringLiteral - - - -

- -

- - - -
         ::= StringLiteral
-

- -

referenced by: - -

-


Prolog:

- - - - - - - - - - DefaultNamespaceDecl - - - - - - Setter - - - - - - NamespaceDecl - - - - - - Import - - - - ; - - - - - - ContextValueDecl - - - - - - VarDecl - - - - - - FunctionDecl - - - - - - ItemTypeDecl - - - - - - NamedRecordTypeDecl - - - - - - OptionDecl - - - - ; - - - - - -

- -

-

- -

referenced by: - -

-


DefaultNamespaceDecl:

- - - - - - - - - - declare - - - - - - fixed - - - - - - default - - - - - - element - - - - - - function - - - - - - namespace - - - - - - URILiteral - - - -

- -

- - - -
         ::= 'declare' 'fixed'? 'default' ( 'element' | 'function' ) 'namespace' URILiteral
-

- -

referenced by: - -

-


Setter:

- - - - - - - - - - BoundarySpaceDecl - - - - - - DefaultCollationDecl - - - - - - BaseURIDecl - - - - - - ConstructionDecl - - - - - - OrderingModeDecl - - - - - - EmptyOrderDecl - - - - - - CopyNamespacesDecl - - - - - - DecimalFormatDecl - - - -

- -

- - - -
           | DefaultCollationDecl
- -
           | BaseURIDecl
- -
           | ConstructionDecl
- -
           | OrderingModeDecl
- -
           | EmptyOrderDecl
- -
           | CopyNamespacesDecl
- -
           | DecimalFormatDecl
-

- -

referenced by: - -

-


BoundarySpaceDecl:

- - - - - - - - - - declare - - - - - - boundary-space - - - - - - preserve - - - - - - strip - - - - - -

- -

- - - -
         ::= 'declare' 'boundary-space' ( 'preserve' | 'strip' )
-

- -

referenced by: - -

-


DefaultCollationDecl:

- - - - - - - - - - declare - - - - - - default - - - - - - collation - - - - - - URILiteral - - - -

- -

- - - -
         ::= 'declare' 'default' 'collation' URILiteral
-

- -

referenced by: - -

-


BaseURIDecl:

- - - - - - - - - - declare - - - - - - base-uri - - - - - - URILiteral - - - -

- -

- - - -
         ::= 'declare' 'base-uri' URILiteral
-

- -

referenced by: - -

-


ConstructionDecl:

- - - - - - - - - - declare - - - - - - construction - - - - - - strip - - - - - - preserve - - - - - -

- -

- - - -
         ::= 'declare' 'construction' ( 'strip' | 'preserve' )
-

- -

referenced by: - -

-


OrderingModeDecl:

- - - - - - - - - - declare - - - - - - ordering - - - - - - ordered - - - - - - unordered - - - - - -

- -

- - - -
         ::= 'declare' 'ordering' ( 'ordered' | 'unordered' )
-

- -

referenced by: - -

-


EmptyOrderDecl:

- - - - - - - - - - declare - - - - - - default - - - - - - order - - - - - - empty - - - - - - greatest - - - - - - least - - - - - -

- -

- - - -
         ::= 'declare' 'default' 'order' 'empty' ( 'greatest' | 'least' )
-

- -

referenced by: - -

-


CopyNamespacesDecl:

- - - - - - - - - - declare - - - - - - copy-namespaces - - - - - - PreserveMode - - - - , - - - - - - InheritMode - - - -

- -

- - - -
         ::= 'declare' 'copy-namespaces' PreserveMode ',' InheritMode
-

- -

referenced by: - -

-


PreserveMode:

- - - - - - - - - - preserve - - - - - - no-preserve - - - - - -

- -

- - - -
         ::= 'preserve'
- -
           | 'no-preserve'
-

- -

referenced by: - -

-


InheritMode:

- - - - - - - - - - inherit - - - - - - no-inherit - - - - - -

- -

- - - -
         ::= 'inherit'
- -
           | 'no-inherit'
-

- -

referenced by: - -

-


DecimalFormatDecl:

- - - - - - - - - - declare - - - - - - decimal-format - - - - - - EQName - - - - default - - - - - - decimal-format - - - - - - DFPropertyName - - - - = - - - - - - StringLiteral - - - -

- -

- - - -
         ::= 'declare' ( 'decimal-format' EQName | 'default' 'decimal-format' ) ( DFPropertyName '=' StringLiteral )*
-

- -

referenced by: - -

-


EQName:

- - - - - - - - - - QName - - - - - - URIQualifiedName - - - -

- -

- -
EQName   ::= QName
- -
           | URIQualifiedName
-

- -

referenced by: - -

-


QName:

- - - - - - - - - - UnreservedFunctionQName - - - - attribute - - - - - - comment - - - - - - document-node - - - - - - element - - - - - - namespace-node - - - - - - node - - - - - - schema-attribute - - - - - - schema-element - - - - - - processing-instruction - - - - - - text - - - - - - array - - - - - - enum - - - - - - fn - - - - - - function - - - - - - gnode - - - - - - get - - - - - - if - - - - - - item - - - - - - jnode - - - - - - map - - - - - - record - - - - - - switch - - - - - - type - - - - - - typeswitch - - - - - -

- -

- - - -
           | 'attribute'
- -
           | 'comment'
- -
           | 'document-node'
- -
           | 'element'
- -
           | 'namespace-node'
- -
           | 'node'
- -
           | 'schema-attribute'
- -
           | 'schema-element'
- -
           | 'processing-instruction'
- -
           | 'text'
- -
           | 'array'
- -
           | 'enum'
- -
           | 'fn'
- -
           | 'function'
- -
           | 'gnode'
- -
           | 'get'
- -
           | 'if'
- -
           | 'item'
- -
           | 'jnode'
- -
           | 'map'
- -
           | 'record'
- -
           | 'switch'
- -
           | 'type'
- -
           | 'typeswitch'
-

- -

referenced by: - -

-


UnreservedFunctionQName:

- - - - - - - - - - UnreservedQName - - - - NaN - - - - - - allowing - - - - - - ancestor - - - - - - ancestor-or-self - - - - - - and - - - - - - as - - - - - - ascending - - - - - - at - - - - - - base-uri - - - - - - boundary-space - - - - - - by - - - - - - case - - - - - - cast - - - - - - castable - - - - - - catch - - - - - - child - - - - - - collation - - - - - - construction - - - - - - context - - - - - - copy-namespaces - - - - - - count - - - - - - decimal-format - - - - - - decimal-separator - - - - - - declare - - - - - - default - - - - - - descendant - - - - - - descendant-or-self - - - - - - descending - - - - - - digit - - - - - - div - - - - - - document - - - - - - else - - - - - - empty - - - - - - empty-sequence - - - - - - encoding - - - - - - end - - - - - - eq - - - - - - every - - - - - - except - - - - - - exponent-separator - - - - - - external - - - - - - false - - - - - - finally - - - - - - fixed - - - - - - following - - - - - - following-or-self - - - - - - following-sibling - - - - - - following-sibling-or-self - - - - - - follows - - - - - - for - - - - - - ge - - - - - - greatest - - - - - - group - - - - - - grouping-separator - - - - - - gt - - - - - - idiv - - - - - - import - - - - - - in - - - - - - infinity - - - - - - inherit - - - - - - instance - - - - - - intersect - - - - - - is - - - - - - is-not - - - - - - key - - - - - - lax - - - - - - le - - - - - - least - - - - - - let - - - - - - lt - - - - - - member - - - - - - minus-sign - - - - - - mod - - - - - - module - - - - - - namespace - - - - - - ne - - - - - - next - - - - - - no-inherit - - - - - - no-preserve - - - - - - of - - - - - - only - - - - - - option - - - - - - or - - - - - - order - - - - - - ordered - - - - - - ordering - - - - - - otherwise - - - - - - parent - - - - - - pattern-separator - - - - - - per-mille - - - - - - percent - - - - - - precedes - - - - - - preceding - - - - - - preceding-or-self - - - - - - preceding-sibling - - - - - - preceding-sibling-or-self - - - - - - preserve - - - - - - previous - - - - - - return - - - - - - satisfies - - - - - - schema - - - - - - self - - - - - - sliding - - - - - - some - - - - - - stable - - - - - - start - - - - - - strict - - - - - - strip - - - - - - then - - - - - - to - - - - - - treat - - - - - - true - - - - - - try - - - - - - tumbling - - - - - - union - - - - - - unordered - - - - - - validate - - - - - - value - - - - - - variable - - - - - - version - - - - - - when - - - - - - where - - - - - - while - - - - - - window - - - - - - xquery - - - - - - zero-digit - - - - - -

- -

- - - -
         ::= UnreservedQName
- -
           | 'NaN'
- -
           | 'allowing'
- -
           | 'ancestor'
- -
           | 'ancestor-or-self'
- -
           | 'and'
- -
           | 'as'
- -
           | 'ascending'
- -
           | 'at'
- -
           | 'base-uri'
- -
           | 'boundary-space'
- -
           | 'by'
- -
           | 'case'
- -
           | 'cast'
- -
           | 'castable'
- -
           | 'catch'
- -
           | 'child'
- -
           | 'collation'
- -
           | 'construction'
- -
           | 'context'
- -
           | 'copy-namespaces'
- -
           | 'count'
- -
           | 'decimal-format'
- -
           | 'decimal-separator'
- -
           | 'declare'
- -
           | 'default'
- -
           | 'descendant'
- -
           | 'descendant-or-self'
- -
           | 'descending'
- -
           | 'digit'
- -
           | 'div'
- -
           | 'document'
- -
           | 'else'
- -
           | 'empty'
- -
           | 'empty-sequence'
- -
           | 'encoding'
- -
           | 'end'
- -
           | 'eq'
- -
           | 'every'
- -
           | 'except'
- -
           | 'exponent-separator'
- -
           | 'external'
- -
           | 'false'
- -
           | 'finally'
- -
           | 'fixed'
- -
           | 'following'
- -
           | 'following-or-self'
- -
           | 'following-sibling'
- -
           | 'following-sibling-or-self'
- -
           | 'follows'
- -
           | 'for'
- -
           | 'ge'
- -
           | 'greatest'
- -
           | 'group'
- -
           | 'grouping-separator'
- -
           | 'gt'
- -
           | 'idiv'
- -
           | 'import'
- -
           | 'in'
- -
           | 'infinity'
- -
           | 'inherit'
- -
           | 'instance'
- -
           | 'intersect'
- -
           | 'is'
- -
           | 'is-not'
- -
           | 'key'
- -
           | 'lax'
- -
           | 'le'
- -
           | 'least'
- -
           | 'let'
- -
           | 'lt'
- -
           | 'member'
- -
           | 'minus-sign'
- -
           | 'mod'
- -
           | 'module'
- -
           | 'namespace'
- -
           | 'ne'
- -
           | 'next'
- -
           | 'no-inherit'
- -
           | 'no-preserve'
- -
           | 'of'
- -
           | 'only'
- -
           | 'option'
- -
           | 'or'
- -
           | 'order'
- -
           | 'ordered'
- -
           | 'ordering'
- -
           | 'otherwise'
- -
           | 'parent'
- -
           | 'pattern-separator'
- -
           | 'per-mille'
- -
           | 'percent'
- -
           | 'precedes'
- -
           | 'preceding'
- -
           | 'preceding-or-self'
- -
           | 'preceding-sibling'
- -
           | 'preceding-sibling-or-self'
- -
           | 'preserve'
- -
           | 'previous'
- -
           | 'return'
- -
           | 'satisfies'
- -
           | 'schema'
- -
           | 'self'
- -
           | 'sliding'
- -
           | 'some'
- -
           | 'stable'
- -
           | 'start'
- -
           | 'strict'
- -
           | 'strip'
- -
           | 'then'
- -
           | 'to'
- -
           | 'treat'
- -
           | 'true'
- -
           | 'try'
- -
           | 'tumbling'
- -
           | 'union'
- -
           | 'unordered'
- -
           | 'validate'
- -
           | 'value'
- -
           | 'variable'
- -
           | 'version'
- -
           | 'when'
- -
           | 'where'
- -
           | 'while'
- -
           | 'window'
- -
           | 'xquery'
- -
           | 'zero-digit'
-

- -

referenced by: - -

-


DFPropertyName:

- - - - - - - - - - decimal-separator - - - - - - grouping-separator - - - - - - infinity - - - - - - minus-sign - - - - - - NaN - - - - - - percent - - - - - - per-mille - - - - - - zero-digit - - - - - - digit - - - - - - pattern-separator - - - - - - exponent-separator - - - - - -

- -

- - - -
         ::= 'decimal-separator'
- -
           | 'grouping-separator'
- -
           | 'infinity'
- -
           | 'minus-sign'
- -
           | 'NaN'
- -
           | 'percent'
- -
           | 'per-mille'
- -
           | 'zero-digit'
- -
           | 'digit'
- -
           | 'pattern-separator'
- -
           | 'exponent-separator'
-

- -

referenced by: - -

-


NamespaceDecl:

- - - - - - - - - - declare - - - - - - namespace - - - - - - NCName - - - - = - - - - - - URILiteral - - - -

- -

- - - -
         ::= 'declare' 'namespace' NCName '=' URILiteral
-

- -

referenced by: - -

-


Import:

- - - - - - - - - - SchemaImport - - - - - - ModuleImport - - - -

- -

- - - -
           | ModuleImport
-

- -

referenced by: - -

-


SchemaImport:

- - - - - - - - - - import - - - - - - schema - - - - - - SchemaPrefix - - - - - - URILiteral - - - - at - - - - - - URILiteral - - - - , - - - - - -

- -

- - - -
         ::= 'import' 'schema' SchemaPrefix? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )?
-

- -

referenced by: - -

-


SchemaPrefix:

- - - - - - - - - - namespace - - - - - - NCName - - - - = - - - - - - fixed - - - - - - default - - - - - - element - - - - - - namespace - - - - - -

- -

- - - -
         ::= 'namespace' NCName '='
- -
           | 'fixed'? 'default' 'element' 'namespace'
-

- -

referenced by: - -

-


ModuleImport:

- - - - - - - - - - import - - - - - - module - - - - - - namespace - - - - - - NCName - - - - = - - - - - - URILiteral - - - - at - - - - - - URILiteral - - - - , - - - - - -

- -

- - - -
         ::= 'import' 'module' ( 'namespace' NCName '=' )? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )?
-

- -

referenced by: - -

-


ContextValueDecl:

- - - - - - - - - - declare - - - - - - context - - - - - - value - - - - - - as - - - - - - SequenceType - - - - item - - - - - - as - - - - - - ItemType - - - - := - - - - - - VarValue - - - - external - - - - - - := - - - - - - VarDefaultValue - - - -

- -

- - - -
         ::= 'declare' 'context' ( 'value' ( 'as' SequenceType )? | 'item' ( 'as' ItemType )? ) ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? )
-

- -

referenced by: - -

-


SequenceType:

- - - - - - - - - - empty-sequence - - - - - - ( - - - - - - ) - - - - - - ItemType - - - - - - OccurrenceIndicator - - - -

- -

- - - -
         ::= 'empty-sequence' '(' ')'
- -
           | ItemType ( OccurrenceIndicator | )
-

- -

referenced by: - -

-


ItemType:

- - - - - - - - - - RegularItemType - - - - - - FunctionType - - - - - - TypeName - - - - - - ChoiceItemType - - - -

- -

- - - -
           | FunctionType
- -
           | TypeName
- -
           | ChoiceItemType
-

- -

referenced by: - -

-


RegularItemType:

- - - - - - - - - - AnyItemTest - - - - - - NodeKindTest - - - - - - GNodeType - - - - - - JNodeType - - - - - - MapType - - - - - - ArrayType - - - - - - RecordType - - - - - - EnumerationType - - - -

- -

- - - -
         ::= AnyItemTest
- -
           | NodeKindTest
- -
           | GNodeType
- -
           | JNodeType
- -
           | MapType
- -
           | ArrayType
- -
           | RecordType
- -
           | EnumerationType
-

- -

referenced by: - -

-


AnyItemTest:

- - - - - - - - - - item - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= 'item' '(' ')'
-

- -

referenced by: - -

-


NodeKindTest:

- - - - - - - - - - DocumentTest - - - - - - ElementTest - - - - - - AttributeTest - - - - - - SchemaElementTest - - - - - - SchemaAttributeTest - - - - - - PITest - - - - - - CommentTest - - - - - - TextTest - - - - - - NamespaceNodeTest - - - - - - AnyNodeKindTest - - - -

- -

- - - -
         ::= DocumentTest
- -
           | ElementTest
- -
           | AttributeTest
- -
           | SchemaElementTest
- -
           | SchemaAttributeTest
- -
           | PITest
- -
           | CommentTest
- -
           | TextTest
- -
           | NamespaceNodeTest
- -
           | AnyNodeKindTest
-

- -

referenced by: - -

-


DocumentTest:

- - - - - - - - - - document-node - - - - - - ( - - - - - - ElementTest - - - - - - SchemaElementTest - - - - - - NameTestUnion - - - - ) - - - - - -

- -

- - - -
         ::= 'document-node' '(' ( ElementTest | SchemaElementTest | NameTestUnion )? ')'
-

- -

referenced by: - -

-


ElementTest:

- - - - - - - - - - element - - - - - - ( - - - - - - NameTestUnion - - - - , - - - - - - TypeName - - - - ? - - - - - - ) - - - - - -

- -

- - - -
         ::= 'element' '(' ( NameTestUnion ( ',' TypeName '?'? )? )? ')'
-

- -

referenced by: - -

-


NameTestUnion:

- - - - - - - - - - NameTest - - - - | - - - - - -

- -

- - - -
         ::= NameTest ( '|' NameTest )*
-

- -

referenced by: - -

-


NameTest:

- - - - - - - - - - EQName - - - - - - Wildcard - - - -

- -

- - - -
           | Wildcard
-

- -

referenced by: - -

-


TypeName:

- - - - - - - - - - EQName - - - -

- -

- -
-

- -

referenced by: - -

-


SchemaElementTest:

- - - - - - - - - - schema-element - - - - - - ( - - - - - - ElementName - - - - ) - - - - - -

- -

- - - -
         ::= 'schema-element' '(' ElementName ')'
-

- -

referenced by: - -

-


ElementName:

- - - - - - - - - - EQName - - - -

- -

- - - -
         ::= EQName
-

- -

referenced by: - -

-


AttributeTest:

- - - - - - - - - - attribute - - - - - - ( - - - - - - NameTestUnion - - - - , - - - - - - TypeName - - - - ) - - - - - -

- -

- - - -
         ::= 'attribute' '(' ( NameTestUnion ( ',' TypeName )? )? ')'
-

- -

referenced by: - -

-


SchemaAttributeTest:

- - - - - - - - - - schema-attribute - - - - - - ( - - - - - - AttributeName - - - - ) - - - - - -

- -

- - - -
         ::= 'schema-attribute' '(' AttributeName ')'
-

- -

referenced by: - -

-


AttributeName:

- - - - - - - - - - EQName - - - -

- -

- - - -
         ::= EQName
-

- -

referenced by: - -

-


PITest:

- - - - - - - - - - processing-instruction - - - - - - ( - - - - - - NCName - - - - - - StringLiteral - - - - ) - - - - - -

- -

- -
PITest   ::= 'processing-instruction' '(' ( NCName | StringLiteral )? ')'
-

- -

referenced by: - -

-


CommentTest:

- - - - - - - - - - comment - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= 'comment' '(' ')'
-

- -

referenced by: - -

-


TextTest:

- - - - - - - - - - text - - - - - - ( - - - - - - ) - - - - - -

- -

- -
TextTest ::= 'text' '(' ')'
-

- -

referenced by: - -

-


NamespaceNodeTest:

- - - - - - - - - - namespace-node - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= 'namespace-node' '(' ')'
-

- -

referenced by: - -

-


AnyNodeKindTest:

- - - - - - - - - - node - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= 'node' '(' ')'
-

- -

referenced by: - -

-


GNodeType:

- - - - - - - - - - gnode - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= 'gnode' '(' ')'
-

- -

referenced by: - -

-


JNodeType:

- - - - - - - - - - jnode - - - - - - ( - - - - - - SequenceType - - - - ) - - - - - -

- -

- - - -
         ::= 'jnode' '(' SequenceType? ')'
-

- -

referenced by: - -

-


MapType:

- - - - - - - - - - AnyMapType - - - - - - TypedMapType - - - -

- -

- - - -
           | TypedMapType
-

- -

referenced by: - -

-


AnyMapType:

- - - - - - - - - - map - - - - - - ( - - - - - - * - - - - - - ) - - - - - -

- -

- - - -
         ::= 'map' '(' '*' ')'
-

- -

referenced by: - -

-


TypedMapType:

- - - - - - - - - - map - - - - - - ( - - - - - - ItemType - - - - , - - - - - - SequenceType - - - - ) - - - - - -

- -

- - - -
         ::= 'map' '(' ItemType ',' SequenceType ')'
-

- -

referenced by: - -

-


ArrayType:

- - - - - - - - - - AnyArrayType - - - - - - TypedArrayType - - - -

- -

- - - -
         ::= AnyArrayType
- -
           | TypedArrayType
-

- -

referenced by: - -

-


AnyArrayType:

- - - - - - - - - - array - - - - - - ( - - - - - - * - - - - - - ) - - - - - -

- -

- - - -
         ::= 'array' '(' '*' ')'
-

- -

referenced by: - -

-


TypedArrayType:

- - - - - - - - - - array - - - - - - ( - - - - - - SequenceType - - - - ) - - - - - -

- -

- - - -
         ::= 'array' '(' SequenceType ')'
-

- -

referenced by: - -

-


RecordType:

- - - - - - - - - - AnyRecordType - - - - - - TypedRecordType - - - -

- -

- - - -
         ::= AnyRecordType
- -
           | TypedRecordType
-

- -

referenced by: - -

-


AnyRecordType:

- - - - - - - - - - record - - - - - - ( - - - - - - * - - - - - - ) - - - - - -

- -

- - - -
         ::= 'record' '(' '*' ')'
-

- -

referenced by: - -

-


TypedRecordType:

- - - - - - - - - - record - - - - - - ( - - - - - - FieldDeclaration - - - - , - - - - - - ExtensibleFlag - - - - ) - - - - - -

- -

- - - -
         ::= 'record' '(' ( FieldDeclaration ( ',' FieldDeclaration )* )? ExtensibleFlag? ')'
-

- -

referenced by: - -

-


FieldDeclaration:

- - - - - - - - - - FieldName - - - - ? - - - - - - as - - - - - - SequenceType - - - -

- -

- - - -
         ::= FieldName '?'? ( 'as' SequenceType )?
-

- -

referenced by: - -

-


FieldName:

- - - - - - - - - - NCName - - - - - - StringLiteral - - - -

- -

- - - -
         ::= NCName
- -
           | StringLiteral
-

- -

referenced by: - -

-


ExtensibleFlag:

- - - - - - - - - - , - - - - - - * - - - - - -

- -

- - - -
         ::= ',' '*'
-

- -

referenced by: - -

-


EnumerationType:

- - - - - - - - - - enum - - - - - - ( - - - - - - StringLiteral - - - - , - - - - - - ) - - - - - -

- -

- - - -
         ::= 'enum' '(' StringLiteral ( ',' StringLiteral )* ')'
-

- -

referenced by: - -

-


FunctionType:

- - - - - - - - - - Annotation - - - - - - AnyFunctionType - - - - - - TypedFunctionType - - - -

- -

- - - -
         ::= Annotation* ( AnyFunctionType | TypedFunctionType )
-

- -

referenced by: - -

-


Annotation:

- - - - - - - - - - % - - - - - - EQName - - - - ( - - - - - - AnnotationValue - - - - , - - - - - - ) - - - - - -

- -

- - - -
         ::= '%' EQName ( '(' AnnotationValue ( ',' AnnotationValue )* ')' )?
-

- -

referenced by: - -

-


AnnotationValue:

- - - - - - - - - - StringLiteral - - - - - - - - - - - NumericLiteral - - - - - - QNameLiteral - - - - true - - - - - - false - - - - - - ( - - - - - - ) - - - - - -

- -

- - - -
         ::= StringLiteral
- -
           | '-'? NumericLiteral
- -
           | QNameLiteral
- -
           | ( 'true' | 'false' ) '(' ')'
-

- -

referenced by: - -

-


NumericLiteral:

- - - - - - - - - - IntegerLiteral - - - - - - HexIntegerLiteral - - - - - - BinaryIntegerLiteral - - - - - - DecimalLiteral - - - - - - DoubleLiteral - - - -

- -

- - - -
         ::= IntegerLiteral
- -
           | HexIntegerLiteral
- -
           | BinaryIntegerLiteral
- -
           | DecimalLiteral
- -
           | DoubleLiteral
-

- -

referenced by: - -

-


QNameLiteral:

- - - - - - - - - - # - - - - - - EQName - - - -

- -

- - - -
         ::= '#' EQName
-

- -

referenced by: - -

-


AnyFunctionType:

- - - - - - - - - - function - - - - - - fn - - - - - - ( - - - - - - * - - - - - - ) - - - - - -

- -

- - - -
         ::= ( 'function' | 'fn' ) '(' '*' ')'
-

- -

referenced by: - -

-


TypedFunctionType:

- - - - - - - - - - function - - - - - - fn - - - - - - ( - - - - - - TypedFunctionParam - - - - , - - - - - - ) - - - - - - as - - - - - - SequenceType - - - -

- -

- - - -
         ::= ( 'function' | 'fn' ) '(' ( TypedFunctionParam ( ',' TypedFunctionParam )* )? ')' 'as' SequenceType
-

- -

referenced by: - -

-


TypedFunctionParam:

- - - - - - - - - - $ - - - - - - EQName - - - - as - - - - - - SequenceType - - - -

- -

- - - -
         ::= ( '$' EQName 'as' )? SequenceType
-

- -

referenced by: - -

-


ChoiceItemType:

- - - - - - - - - - ( - - - - - - ItemType - - - - | - - - - - - ) - - - - - -

- -

- - - -
         ::= '(' ItemType ( '|' ItemType )* ')'
-

- -

referenced by: - -

-


OccurrenceIndicator:

- - - - - - - - - - ? - - - - - - * - - - - - - + - - - - - -

- -

- - - -
         ::= '?'
- -
           | '*'
- -
           | '+'
-

- -

referenced by: - -

-


VarValue:

- - - - - - - - - - ExprSingle - - - -

- -

-

- -

referenced by: - -

-


ExprSingle:

- - - - - - - - - - FLWORExpr - - - - - - QuantifiedExpr - - - - - - SwitchExpr - - - - - - TypeswitchExpr - - - - - - IfExpr - - - - - - TryCatchExpr - - - - - - OrExpr - - - -

- -

- - - -
         ::= FLWORExpr
- -
           | QuantifiedExpr
- -
           | SwitchExpr
- -
           | TypeswitchExpr
- -
           | IfExpr
- -
           | TryCatchExpr
- -
           | OrExpr
-

- -

referenced by: - -

-


FLWORExpr:

- - - - - - - - - - InitialClause - - - - - - IntermediateClause - - - - - - ReturnClause - - - -

- -

- - - -
-

- -

referenced by: - -

-


InitialClause:

- - - - - - - - - - ForClause - - - - - - LetClause - - - - - - WindowClause - - - -

- -

- - - -
         ::= ForClause
- -
           | LetClause
- -
           | WindowClause
-

- -

referenced by: - -

-


ForClause:

- - - - - - - - - - for - - - - - - ForBinding - - - - , - - - - - -

- -

- - - -
         ::= 'for' ForBinding ( ',' ForBinding )*
-

- -

referenced by: - -

-


ForBinding:

- - - - - - - - - - ForItemBinding - - - - - - ForMemberBinding - - - - - - ForEntryBinding - - - -

- -

- - - -
         ::= ForItemBinding
- -
           | ForMemberBinding
- -
           | ForEntryBinding
-

- -

referenced by: - -

-


ForItemBinding:

- - - - - - - - - - VarNameAndType - - - - - - AllowingEmpty - - - - - - PositionalVar - - - - in - - - - - - ExprSingle - - - -

- -

-

- -

referenced by: - -

-


VarNameAndType:

- - - - - - - - - - $ - - - - - - EQName - - - - - - TypeDeclaration - - - -

- -

- - - -
         ::= '$' EQName TypeDeclaration?
-

- -

referenced by: - -

-


TypeDeclaration:

- - - - - - - - - - as - - - - - - SequenceType - - - -

- -

- - - -
         ::= 'as' SequenceType
-

- -

referenced by: - -

-


AllowingEmpty:

- - - - - - - - - - allowing - - - - - - empty - - - - - -

- -

- - - -
         ::= 'allowing' 'empty'
-

- -

referenced by: - -

-


PositionalVar:

- - - - - - - - - - at - - - - - - VarName - - - -

- -

- - - -
         ::= 'at' VarName
-

- -

referenced by: - -

-


VarName:

- - - - - - - - - - $ - - - - - - EQName - - - -

- -

- -
VarName  ::= '$' EQName
-

- -

referenced by: - -

-


ForMemberBinding:

- - - - - - - - - - member - - - - - - VarNameAndType - - - - - - PositionalVar - - - - in - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'member' VarNameAndType PositionalVar? 'in' ExprSingle
-

- -

referenced by: - -

-


ForEntryBinding:

- - - - - - - - - - ForEntryKeyBinding - - - - - - ForEntryValueBinding - - - - - - ForEntryValueBinding - - - - - - PositionalVar - - - - in - - - - - - ExprSingle - - - -

- -

-

- -

referenced by: - -

-


ForEntryKeyBinding:

- - - - - - - - - - key - - - - - - VarNameAndType - - - -

- -

- - - -
         ::= 'key' VarNameAndType
-

- -

referenced by: - -

-


ForEntryValueBinding:

- - - - - - - - - - value - - - - - - VarNameAndType - - - -

- -

- - - -
         ::= 'value' VarNameAndType
-

- -

referenced by: - -

-


LetClause:

- - - - - - - - - - let - - - - - - LetBinding - - - - , - - - - - -

- -

- - - -
         ::= 'let' LetBinding ( ',' LetBinding )*
-

- -

referenced by: - -

-


LetBinding:

- - - - - - - - - - LetValueBinding - - - - - - LetSequenceBinding - - - - - - LetArrayBinding - - - - - - LetMapBinding - - - -

- -

- - - -
         ::= LetValueBinding
- -
           | LetSequenceBinding
- -
           | LetArrayBinding
- -
           | LetMapBinding
-

- -

referenced by: - -

-


LetValueBinding:

- - - - - - - - - - VarNameAndType - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= VarNameAndType ':=' ExprSingle
-

- -

referenced by: - -

-


LetSequenceBinding:

- - - - - - - - - - $ - - - - - - ( - - - - - - VarNameAndType - - - - , - - - - - - ) - - - - - - TypeDeclaration - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= '$' '(' VarNameAndType ( ',' VarNameAndType )* ')' TypeDeclaration? ':=' ExprSingle
-

- -

referenced by: - -

-


LetArrayBinding:

- - - - - - - - - - $ - - - - - - [ - - - - - - VarNameAndType - - - - , - - - - - - ] - - - - - - TypeDeclaration - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= '$' '[' VarNameAndType ( ',' VarNameAndType )* ']' TypeDeclaration? ':=' ExprSingle
-

- -

referenced by: - -

-


LetMapBinding:

- - - - - - - - - - $ - - - - - - { - - - - - - VarNameAndType - - - - , - - - - - - } - - - - - - TypeDeclaration - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= '$' '{' VarNameAndType ( ',' VarNameAndType )* '}' TypeDeclaration? ':=' ExprSingle
-

- -

referenced by: - -

-


WindowClause:

- - - - - - - - - - for - - - - - - TumblingWindowClause - - - - - - SlidingWindowClause - - - -

- -

- - - -
         ::= 'for' ( TumblingWindowClause | SlidingWindowClause )
-

- -

referenced by: - -

-


TumblingWindowClause:

- - - - - - - - - - tumbling - - - - - - window - - - - - - VarNameAndType - - - - in - - - - - - ExprSingle - - - - - - WindowStartCondition - - - - - - WindowEndCondition - - - -

- -

- - - -
         ::= 'tumbling' 'window' VarNameAndType 'in' ExprSingle WindowStartCondition? WindowEndCondition?
-

- -

referenced by: - -

-


WindowStartCondition:

- - - - - - - - - - start - - - - - - WindowVars - - - - when - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'start' WindowVars ( 'when' ExprSingle )?
-

- -

referenced by: - -

-


WindowVars:

- - - - - - - - - - CurrentVar - - - - - - PositionalVar - - - - - - PreviousVar - - - - - - NextVar - - - -

- -

- - - -
         ::= CurrentVar? PositionalVar? PreviousVar? NextVar?
-

- -

referenced by: - -

-


CurrentVar:

- - - - - - - - - - VarName - - - -

- -

- - - -
         ::= VarName
-

- -

referenced by: - -

-


PreviousVar:

- - - - - - - - - - previous - - - - - - VarName - - - -

- -

- - - -
         ::= 'previous' VarName
-

- -

referenced by: - -

-


NextVar:

- - - - - - - - - - next - - - - - - VarName - - - -

- -

- -
NextVar  ::= 'next' VarName
-

- -

referenced by: - -

-


WindowEndCondition:

- - - - - - - - - - only - - - - - - end - - - - - - WindowVars - - - - when - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'only'? 'end' WindowVars ( 'when' ExprSingle )?
-

- -

referenced by: - -

-


SlidingWindowClause:

- - - - - - - - - - sliding - - - - - - window - - - - - - VarNameAndType - - - - in - - - - - - ExprSingle - - - - - - WindowStartCondition - - - - - - WindowEndCondition - - - -

- -

- - - -
         ::= 'sliding' 'window' VarNameAndType 'in' ExprSingle WindowStartCondition? WindowEndCondition
-

- -

referenced by: - -

-


IntermediateClause:

- - - - - - - - - - InitialClause - - - - - - WhereClause - - - - - - WhileClause - - - - - - GroupByClause - - - - - - OrderByClause - - - - - - CountClause - - - -

- -

- - - -
         ::= InitialClause
- -
           | WhereClause
- -
           | WhileClause
- -
           | GroupByClause
- -
           | OrderByClause
- -
           | CountClause
-

- -

referenced by: - -

-


WhereClause:

- - - - - - - - - - where - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'where' ExprSingle
-

- -

referenced by: - -

-


WhileClause:

- - - - - - - - - - while - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'while' ExprSingle
-

- -

referenced by: - -

-


GroupByClause:

- - - - - - - - - - group - - - - - - by - - - - - - GroupingSpec - - - - , - - - - - -

- -

- - - -
         ::= 'group' 'by' GroupingSpec ( ',' GroupingSpec )*
-

- -

referenced by: - -

-


GroupingSpec:

- - - - - - - - - - VarName - - - - - - TypeDeclaration - - - - := - - - - - - ExprSingle - - - - collation - - - - - - URILiteral - - - -

- -

- - - -
         ::= VarName ( TypeDeclaration? ':=' ExprSingle )? ( 'collation' URILiteral )?
-

- -

referenced by: - -

-


OrderByClause:

- - - - - - - - - - stable - - - - - - order - - - - - - by - - - - - - OrderSpec - - - - , - - - - - -

- -

- - - -
         ::= 'stable'? 'order' 'by' OrderSpec ( ',' OrderSpec )*
-

- -

referenced by: - -

-


OrderSpec:

- - - - - - - - - - ExprSingle - - - - - - OrderModifier - - - -

- -

- - - -
         ::= ExprSingle OrderModifier
-

- -

referenced by: - -

-


OrderModifier:

- - - - - - - - - - ascending - - - - - - descending - - - - - - empty - - - - - - greatest - - - - - - least - - - - - - collation - - - - - - URILiteral - - - -

- -

- - - -
         ::= ( 'ascending' | 'descending' )? ( 'empty' ( 'greatest' | 'least' ) )? - ( 'collation' URILiteral )?
-

- -

referenced by: - -

-


CountClause:

- - - - - - - - - - count - - - - - - VarName - - - -

- -

- - - -
         ::= 'count' VarName
-

- -

referenced by: - -

-


ReturnClause:

- - - - - - - - - - return - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'return' ExprSingle
-

- -

referenced by: - -

-


QuantifiedExpr:

- - - - - - - - - - some - - - - - - every - - - - - - QuantifierBinding - - - - , - - - - - - satisfies - - - - - - ExprSingle - - - -

- -

- - - -
         ::= ( 'some' | 'every' ) QuantifierBinding ( ',' QuantifierBinding )* 'satisfies' ExprSingle
-

- -

referenced by: - -

-


QuantifierBinding:

- - - - - - - - - - VarNameAndType - - - - in - - - - - - ExprSingle - - - -

- -

- - - -
         ::= VarNameAndType 'in' ExprSingle
-

- -

referenced by: - -

-


SwitchExpr:

- - - - - - - - - - switch - - - - - - SwitchComparand - - - - - - SwitchCases - - - - - - BracedSwitchCases - - - -

- -

- - - -
         ::= 'switch' SwitchComparand ( SwitchCases | BracedSwitchCases )
-

- -

referenced by: - -

-


SwitchComparand:

- - - - - - - - - - ( - - - - - - Expr - - - - ) - - - - - -

- -

- - - -
         ::= '(' Expr? ')'
-

- -

referenced by: - -

-


Expr:

- - - - - - - - - - ExprSingle - - - - , - - - - - -

- -

- -
Expr     ::= ExprSingle ( ',' ExprSingle )*
-

- -

referenced by: - -

-


SwitchCases:

- - - - - - - - - - SwitchCaseClause - - - - default - - - - - - return - - - - - - ExprSingle - - - -

- -

- - - -
         ::= SwitchCaseClause+ 'default' 'return' ExprSingle
-

- -

referenced by: - -

-


SwitchCaseClause:

- - - - - - - - - - case - - - - - - SwitchCaseOperand - - - - return - - - - - - ExprSingle - - - -

- -

- - - -
         ::= ( 'case' SwitchCaseOperand )+ 'return' ExprSingle
-

- -

referenced by: - -

-


SwitchCaseOperand:

- - - - - - - - - - Expr - - - -

- -

- - - -
         ::= Expr
-

- -

referenced by: - -

-


BracedSwitchCases:

- - - - - - - - - - { - - - - - - SwitchCases - - - - } - - - - - -

- -

- - - -
         ::= '{' SwitchCases '}'
-

- -

referenced by: - -

-


TypeswitchExpr:

- - - - - - - - - - typeswitch - - - - - - ( - - - - - - Expr - - - - ) - - - - - - TypeswitchCases - - - - - - BracedTypeswitchCases - - - -

- -

- - - -
         ::= 'typeswitch' '(' Expr ')' ( TypeswitchCases | BracedTypeswitchCases )
-

- -

referenced by: - -

-


TypeswitchCases:

- - - - - - - - - - CaseClause - - - - default - - - - - - VarName - - - - return - - - - - - ExprSingle - - - -

- -

- - - -
         ::= CaseClause+ 'default' VarName? 'return' ExprSingle
-

- -

referenced by: - -

-


CaseClause:

- - - - - - - - - - case - - - - - - VarName - - - - as - - - - - - SequenceTypeUnion - - - - return - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'case' ( VarName 'as' )? SequenceTypeUnion 'return' ExprSingle
-

- -

referenced by: - -

-


SequenceTypeUnion:

- - - - - - - - - - SequenceType - - - - | - - - - - -

- -

- - - -
         ::= SequenceType ( '|' SequenceType )*
-

- -

referenced by: - -

-


BracedTypeswitchCases:

- - - - - - - - - - { - - - - - - TypeswitchCases - - - - } - - - - - -

- -

- - - -
         ::= '{' TypeswitchCases '}'
-

- -

referenced by: - -

-


IfExpr:

- - - - - - - - - - if - - - - - - ( - - - - - - Expr - - - - ) - - - - - - UnbracedActions - - - - - - BracedAction - - - -

- -

- -
IfExpr   ::= 'if' '(' Expr ')' ( UnbracedActions | BracedAction )
-

- -

referenced by: - -

-


UnbracedActions:

- - - - - - - - - - then - - - - - - ExprSingle - - - - else - - - - - - ExprSingle - - - -

- -

- - - -
         ::= 'then' ExprSingle 'else' ExprSingle
-

- -

referenced by: - -

-


BracedAction:

- - - - - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= EnclosedExpr
-

- -

referenced by: - -

-


EnclosedExpr:

- - - - - - - - - - { - - - - - - Expr - - - - } - - - - - -

- -

- - - -
         ::= '{' Expr? '}'
-

- -

referenced by: - -

-


TryCatchExpr:

- - - - - - - - - - TryClause - - - - - - CatchClause - - - - - - FinallyClause - - - - - - FinallyClause - - - -

- -

- - - -
         ::= TryClause ( CatchClause+ FinallyClause? | FinallyClause )
-

- -

referenced by: - -

-


TryClause:

- - - - - - - - - - try - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'try' EnclosedExpr
-

- -

referenced by: - -

-


CatchClause:

- - - - - - - - - - catch - - - - - - NameTestUnion - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'catch' NameTestUnion EnclosedExpr
-

- -

referenced by: - -

-


FinallyClause:

- - - - - - - - - - finally - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'finally' EnclosedExpr
-

- -

referenced by: - -

-


OrExpr:

- - - - - - - - - - AndExpr - - - - or - - - - - -

- -

- -
OrExpr   ::= AndExpr ( 'or' AndExpr )*
-

- -

referenced by: - -

-


AndExpr:

- - - - - - - - - - ComparisonExpr - - - - and - - - - - -

- -

- -
-

- -

referenced by: - -

-


ComparisonExpr:

- - - - - - - - - - OtherwiseExpr - - - - - - ValueComp - - - - - - GeneralComp - - - - - - NodeComp - - - - - - OtherwiseExpr - - - -

- -

- - - -
         ::= OtherwiseExpr ( ( ValueComp | GeneralComp | NodeComp ) OtherwiseExpr )?
-

- -

referenced by: - -

-


OtherwiseExpr:

- - - - - - - - - - StringConcatExpr - - - - otherwise - - - - - -

- -

- - - -
         ::= StringConcatExpr ( 'otherwise' StringConcatExpr )*
-

- -

referenced by: - -

-


StringConcatExpr:

- - - - - - - - - - RangeExpr - - - - || - - - - - -

- -

- - - -
         ::= RangeExpr ( '||' RangeExpr )*
-

- -

referenced by: - -

-


RangeExpr:

- - - - - - - - - - AdditiveExpr - - - - to - - - - - - AdditiveExpr - - - -

- -

- - - -
         ::= AdditiveExpr ( 'to' AdditiveExpr )?
-

- -

referenced by: - -

-


AdditiveExpr:

- - - - - - - - - - MultiplicativeExpr - - - - + - - - - - - - - - - - - -

- -

- - - -
         ::= MultiplicativeExpr ( ( '+' | '-' ) MultiplicativeExpr )*
-

- -

referenced by: - -

-


MultiplicativeExpr:

- - - - - - - - - - UnionExpr - - - - * - - - - - - × - - - - - - div - - - - - - ÷ - - - - - - idiv - - - - - - mod - - - - - -

- -

- - - -
         ::= UnionExpr ( ( '*' | '×' | 'div' | '÷' | 'idiv' | 'mod' ) UnionExpr )*
-

- -

referenced by: - -

-


UnionExpr:

- - - - - - - - - - IntersectExceptExpr - - - - union - - - - - - | - - - - - -

- -

- - - -
         ::= IntersectExceptExpr ( ( 'union' | '|' ) IntersectExceptExpr )*
-

- -

referenced by: - -

-


IntersectExceptExpr:

- - - - - - - - - - InstanceofExpr - - - - intersect - - - - - - except - - - - - -

- -

- - - -
         ::= InstanceofExpr ( ( 'intersect' | 'except' ) InstanceofExpr )*
-

- -

referenced by: - -

-


InstanceofExpr:

- - - - - - - - - - TreatExpr - - - - instance - - - - - - of - - - - - - SequenceType - - - -

- -

- - - -
         ::= TreatExpr ( 'instance' 'of' SequenceType )?
-

- -

referenced by: - -

-


TreatExpr:

- - - - - - - - - - CastableExpr - - - - treat - - - - - - as - - - - - - SequenceType - - - -

- -

- - - -
         ::= CastableExpr ( 'treat' 'as' SequenceType )?
-

- -

referenced by: - -

-


CastableExpr:

- - - - - - - - - - CastExpr - - - - castable - - - - - - as - - - - - - CastTarget - - - - ? - - - - - -

- -

- - - -
         ::= CastExpr ( 'castable' 'as' CastTarget '?'? )?
-

- -

referenced by: - -

-


CastExpr:

- - - - - - - - - - PipelineExpr - - - - cast - - - - - - as - - - - - - CastTarget - - - - ? - - - - - -

- -

- -
CastExpr ::= PipelineExpr ( 'cast' 'as' CastTarget '?'? )?
-

- -

referenced by: - -

-


PipelineExpr:

- - - - - - - - - - ArrowExpr - - - - -> - - - - - -

- -

- - - -
         ::= ArrowExpr ( '->' ArrowExpr )*
-

- -

referenced by: - -

-


ArrowExpr:

- - - - - - - - - - UnaryExpr - - - - - - SequenceArrowTarget - - - - - - MappingArrowTarget - - - -

- -

- - - -
         ::= UnaryExpr ( SequenceArrowTarget | MappingArrowTarget )*
-

- -

referenced by: - -

-


UnaryExpr:

- - - - - - - - - - - - - - - - - + - - - - - - ValueExpr - - - -

- -

- - - -
         ::= ( '-' | '+' )* ValueExpr
-

- -

referenced by: - -

-


ValueExpr:

- - - - - - - - - - ValidateExpr - - - - - - ExtensionExpr - - - - - - SimpleMapExpr - - - -

- -

- - - -
         ::= ValidateExpr
- -
           | ExtensionExpr
- -
           | SimpleMapExpr
-

- -

referenced by: - -

-


ValidateExpr:

- - - - - - - - - - validate - - - - - - ValidationMode - - - - type - - - - - - TypeName - - - - { - - - - - - Expr - - - - } - - - - - -

- -

- - - -
         ::= 'validate' ( ValidationMode | 'type' TypeName )? '{' Expr '}'
-

- -

referenced by: - -

-


ValidationMode:

- - - - - - - - - - lax - - - - - - strict - - - - - -

- -

- - - -
         ::= 'lax'
- -
           | 'strict'
-

- -

referenced by: - -

-


ExtensionExpr:

- - - - - - - - - - Pragma - - - - { - - - - - - Expr - - - - } - - - - - -

- -

- - - -
         ::= Pragma+ '{' Expr? '}'
-

- -

referenced by: - -

-


Pragma:

- - - - - - - - - - (# - - - - - - S - - - - - - EQName - - - - - - S - - - - - - PragmaContents - - - - #) - - - - - -

- -

- -
Pragma   ::= '(#' S EQName ( S PragmaContents )? '#)'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


SimpleMapExpr:

- - - - - - - - - - PathExpr - - - - ! - - - - - -

- -

- - - -
         ::= PathExpr ( '!' PathExpr )*
-

- -

referenced by: - -

-


PathExpr:

- - - - - - - - - - AbsolutePathExpr - - - - - - RelativePathExpr - - - -

- -

- - - -
           | RelativePathExpr
-

- -

referenced by: - -

-


AbsolutePathExpr:

- - - - - - - - - - / - - - - - - RelativePathExpr - - - - // - - - - - - RelativePathExpr - - - -

- -

- - - -
         ::= '/' ( RelativePathExpr | )
- -
           | '//' RelativePathExpr
-

- -

referenced by: - -

-


RelativePathExpr:

- - - - - - - - - - StepExpr - - - - / - - - - - - // - - - - - -

- -

- - - -
         ::= StepExpr ( ( '/' | '//' ) StepExpr )*
-

- -

referenced by: - -

-


StepExpr:

- - - - - - - - - - PostfixExpr - - - - - - AxisStep - - - -

- -

- - - -
           | AxisStep
-

- -

referenced by: - -

-


PostfixExpr:

- - - - - - - - - - PrimaryExpr - - - - - - FilterExpr - - - - - - DynamicFunctionCall - - - - - - LookupExpr - - - - - - MethodCall - - - - - - FilterExprAM - - - -

- -

- - - -
         ::= PrimaryExpr
- -
           | FilterExpr
- -
           | DynamicFunctionCall
- -
           | LookupExpr
- -
           | MethodCall
- -
           | FilterExprAM
-

- -

referenced by: - -

-


PrimaryExpr:

- - - - - - - - - - Literal - - - - - - VarRef - - - - - - ParenthesizedExpr - - - - . - - - - - - FunctionCall - - - - - - OrderedExpr - - - - - - UnorderedExpr - - - - - - NodeConstructor - - - - - - FunctionItemExpr - - - - - - MapConstructor - - - - - - ArrayConstructor - - - - - - StringTemplate - - - - - - StringConstructor - - - - - - UnaryLookup - - - -

- -

- - - -
         ::= Literal
- -
           | VarRef
- -
           | ParenthesizedExpr
- -
           | '.'
- -
           | FunctionCall
- -
           | OrderedExpr
- -
           | UnorderedExpr
- -
           | NodeConstructor
- -
           | FunctionItemExpr
- -
           | MapConstructor
- -
           | ArrayConstructor
- -
           | StringTemplate
- -
           | StringConstructor
- -
           | UnaryLookup
-

- -

referenced by: - -

-


Literal:

- - - - - - - - - - NumericLiteral - - - - - - StringLiteral - - - - - - QNameLiteral - - - -

- -

- - - -
           | StringLiteral
- -
           | QNameLiteral
-

- -

referenced by: - -

-


VarRef:

- - - - - - - - - - $ - - - - - - EQName - - - -

- -

- -
VarRef   ::= '$' EQName
-

- -

referenced by: - -

-


ParenthesizedExpr:

- - - - - - - - - - ( - - - - - - Expr - - - - ) - - - - - -

- -

- - - -
         ::= '(' Expr? ')'
-

- -

referenced by: - -

-


FunctionCall:

- - - - - - - - - - UnreservedFunctionEQName - - - - - - ArgumentList - - - -

- -

- - - -
-

- -

referenced by: - -

-


UnreservedFunctionEQName:

- - - - - - - - - - UnreservedFunctionQName - - - - - - URIQualifiedName - - - -

- -

- - - -
         ::= UnreservedFunctionQName
- -
           | URIQualifiedName
-

- -

referenced by: - -

-


ArgumentList:

- - - - - - - - - - ( - - - - - - PositionalArguments - - - - , - - - - - - KeywordArguments - - - - - - KeywordArguments - - - - ) - - - - - -

- -

- - - -
         ::= '(' ( PositionalArguments ( ',' KeywordArguments )? | KeywordArguments )? ')'
-

- -

referenced by: - -

-


PositionalArguments:

- - - - - - - - - - Argument - - - - , - - - - - -

- -

- - - -
         ::= Argument ( ',' Argument )*
-

- -

referenced by: - -

-


Argument:

- - - - - - - - - - ExprSingle - - - - ? - - - - - -

- -

- - - -
           | '?'
-

- -

referenced by: - -

-


KeywordArguments:

- - - - - - - - - - KeywordArgument - - - - , - - - - - -

- -

- - - -
         ::= KeywordArgument ( ',' KeywordArgument )*
-

- -

referenced by: - -

-


KeywordArgument:

- - - - - - - - - - EQName - - - - := - - - - - - Argument - - - -

- -

- - - -
         ::= EQName ':=' Argument
-

- -

referenced by: - -

-


OrderedExpr:

- - - - - - - - - - ordered - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'ordered' EnclosedExpr
-

- -

referenced by: - -

-


UnorderedExpr:

- - - - - - - - - - unordered - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'unordered' EnclosedExpr
-

- -

referenced by: - -

-


NodeConstructor:

- - - - - - - - - - DirectConstructor - - - - - - ComputedConstructor - - - -

- -

- - - -
         ::= DirectConstructor
- -
           | ComputedConstructor
-

- -

referenced by: - -

-


DirectConstructor:

- - - - - - - - - - DirElemConstructor - - - - - - DirCommentConstructor - - - - - - DirPIConstructor - - - -

- -

- - - -
         ::= DirElemConstructor
- -
           | DirCommentConstructor
- -
           | DirPIConstructor
-

- -

referenced by: - -

-


DirElemConstructor:

- - - - - - - - - - < - - - - - - QName - - - - - - DirAttributeList - - - - > - - - - - - DirElemContent - - - - </ - - - - - - QName - - - - - - S - - - - > - - - - - - /> - - - - - -

- -

- - - -
         ::= '<'^DirElemConstructor QName DirAttributeList ( '/>' | '>' DirElemContent* '</' QName S? '>' )
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DirAttributeList:

- - - - - - - - - - S - - - - - - QName - - - - - - S - - - - = - - - - - - S - - - - - - DirAttributeValue - - - -

- -

- - - -
         ::= ( S ( QName S? '=' S? DirAttributeValue )? )*
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DirAttributeValue:

- - - - - - - - - - " - - - - - - "" - - - - - - QuotAttrValueContent - - - - " - - - - - - ' - - - - - - '' - - - - - - AposAttrValueContent - - - - ' - - - - - -

- -

- - - -
         ::= '"' ( '""' | QuotAttrValueContent )* '"'
- -
           | "'" ( "''" | AposAttrValueContent )* "'"
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


QuotAttrValueContent:

- - - - - - - - - - QuotAttrContentChar - - - - - - CommonContent - - - -

- -

- - - -
         ::= QuotAttrContentChar
- -
           | CommonContent
-

- -

referenced by: - -

-


CommonContent:

- - - - - - - - - - PredefinedEntityRef - - - - - - CharRef - - - - {{ - - - - - - }} - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= PredefinedEntityRef
- -
           | CharRef
- -
           | '{{'
- -
           | '}}'
- -
           | EnclosedExpr
-

- -

referenced by: - -

-


AposAttrValueContent:

- - - - - - - - - - AposAttrContentChar - - - - - - CommonContent - - - -

- -

- - - -
         ::= AposAttrContentChar
- -
           | CommonContent
-

- -

referenced by: - -

-


DirElemContent:

- - - - - - - - - - DirectConstructor - - - - - - CDataSection - - - - - - CommonContent - - - - - - ElementContentChar - - - -

- -

- - - -
         ::= DirectConstructor
- -
           | CDataSection
- -
           | CommonContent
- -
           | ElementContentChar
-

- -

referenced by: - -

-


CDataSection:

- - - - - - - - - - <![CDATA[ - - - - - - CDataSectionContents - - - - ]]> - - - - - -

- -

- - - -
         ::= '<![CDATA[' CDataSectionContents ']]>'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DirCommentConstructor:

- - - - - - - - - - <!-- - - - - - - DirCommentContents - - - - --> - - - - - -

- -

- - - -
         ::= '<!--' DirCommentContents '-->'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DirPIConstructor:

- - - - - - - - - - <? - - - - - - PITarget - - - - - - S - - - - - - DirPIContents - - - - ?> - - - - - -

- -

- - - -
         ::= '<?' PITarget ( S DirPIContents )? '?>'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


ComputedConstructor:

- - - - - - - - - - CompDocConstructor - - - - - - CompElemConstructor - - - - - - CompAttrConstructor - - - - - - CompNamespaceConstructor - - - - - - CompTextConstructor - - - - - - CompCommentConstructor - - - - - - CompPIConstructor - - - -

- -

- - - -
         ::= CompDocConstructor
- -
           | CompElemConstructor
- -
           | CompAttrConstructor
- -
           | CompNamespaceConstructor
- -
           | CompTextConstructor
- -
           | CompCommentConstructor
- -
           | CompPIConstructor
-

- -

referenced by: - -

-


CompDocConstructor:

- - - - - - - - - - document - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'document' EnclosedExpr
-

- -

referenced by: - -

-


CompElemConstructor:

- - - - - - - - - - element - - - - - - CompNodeName - - - - - - EnclosedContentExpr - - - -

- -

- - - -
         ::= 'element' CompNodeName EnclosedContentExpr
-

- -

referenced by: - -

-


CompNodeName:

- - - - - - - - - - QNameLiteral - - - - - - UnreservedName - - - - { - - - - - - Expr - - - - } - - - - - -

- -

- - - -
         ::= QNameLiteral
- -
           | UnreservedName
- -
           | '{' Expr '}'
-

- -

referenced by: - -

-


UnreservedName:

- - - - - - - - - - UnreservedQName - - - - - - URIQualifiedName - - - -

- -

- - - -
         ::= UnreservedQName
- -
           | URIQualifiedName
-

- -

referenced by: - -

-


EnclosedContentExpr:

- - - - - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= EnclosedExpr
-

- -

referenced by: - -

-


CompAttrConstructor:

- - - - - - - - - - attribute - - - - - - CompNodeName - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'attribute' CompNodeName EnclosedExpr
-

- -

referenced by: - -

-


CompNamespaceConstructor:

- - - - - - - - - - namespace - - - - - - CompNodeNCName - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'namespace' CompNodeNCName EnclosedExpr
-

- -

referenced by: - -

-


CompNodeNCName:

- - - - - - - - - - MarkedNCName - - - - - - UnreservedNCName - - - - { - - - - - - Expr - - - - } - - - - - -

- -

- - - -
         ::= MarkedNCName
- -
           | UnreservedNCName
- -
           | '{' Expr '}'
-

- -

referenced by: - -

-


MarkedNCName:

- - - - - - - - - - # - - - - - - NCName - - - -

- -

- - - -
         ::= '#' NCName
-

- -

referenced by: - -

-


CompTextConstructor:

- - - - - - - - - - text - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'text' EnclosedExpr
-

- -

referenced by: - -

-


CompCommentConstructor:

- - - - - - - - - - comment - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'comment' EnclosedExpr
-

- -

referenced by: - -

-


CompPIConstructor:

- - - - - - - - - - processing-instruction - - - - - - CompNodeNCName - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'processing-instruction' CompNodeNCName EnclosedExpr
-

- -

referenced by: - -

-


FunctionItemExpr:

- - - - - - - - - - NamedFunctionRef - - - - - - InlineFunctionExpr - - - -

- -

- - - -
         ::= NamedFunctionRef
- -
           | InlineFunctionExpr
-

- -

referenced by: - -

-


NamedFunctionRef:

- - - - - - - - - - UnreservedFunctionEQName - - - - # - - - - - - IntegerLiteral - - - -

- -

- - - -
         ::= UnreservedFunctionEQName '#' IntegerLiteral
-

- -

referenced by: - -

-


InlineFunctionExpr:

- - - - - - - - - - Annotation - - - - function - - - - - - fn - - - - - - FunctionSignature - - - - - - FunctionBody - - - -

- -

- - - -
         ::= Annotation* ( 'function' | 'fn' ) FunctionSignature? FunctionBody
-

- -

referenced by: - -

-


FunctionSignature:

- - - - - - - - - - ( - - - - - - ParamList - - - - ) - - - - - - TypeDeclaration - - - -

- -

- - - -
         ::= '(' ParamList ')' TypeDeclaration?
-

- -

referenced by: - -

-


ParamList:

- - - - - - - - - - VarNameAndType - - - - , - - - - - -

- -

- - - -
         ::= ( VarNameAndType ( ',' VarNameAndType )* )?
-

- -

referenced by: - -

-


FunctionBody:

- - - - - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= EnclosedExpr
-

- -

referenced by: - -

-


MapConstructor:

- - - - - - - - - - map - - - - - - { - - - - - - MapConstructorEntry - - - - , - - - - - - } - - - - - -

- -

- - - -
         ::= 'map'? '{' ( MapConstructorEntry ( ',' MapConstructorEntry )* )? '}'
-

- -

referenced by: - -

-


MapConstructorEntry:

- - - - - - - - - - ExprSingle - - - - : - - - - - - ExprSingle - - - -

- -

- - - -
         ::= ExprSingle ( ':' ExprSingle )?
-

- -

referenced by: - -

-


ArrayConstructor:

- - - - - - - - - - SquareArrayConstructor - - - - - - CurlyArrayConstructor - - - -

- -

- - - -
         ::= SquareArrayConstructor
- -
           | CurlyArrayConstructor
-

- -

referenced by: - -

-


SquareArrayConstructor:

- - - - - - - - - - [ - - - - - - ExprSingle - - - - , - - - - - - ] - - - - - -

- -

- - - -
         ::= '[' ( ExprSingle ( ',' ExprSingle )* )? ']'
-

- -

referenced by: - -

-


CurlyArrayConstructor:

- - - - - - - - - - array - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= 'array' EnclosedExpr
-

- -

referenced by: - -

-


StringTemplate:

- - - - - - - - - - ` - - - - - - StringTemplateFixedPart - - - - - - StringTemplateVariablePart - - - - ` - - - - - -

- -

- - - -
         ::= '`' ( StringTemplateFixedPart | StringTemplateVariablePart )* '`'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


StringTemplateVariablePart:

- - - - - - - - - - EnclosedExpr - - - -

- -

- - - -
         ::= EnclosedExpr
-

- -

referenced by: - -

-


StringConstructor:

- - - - - - - - - - ``[ - - - - - - StringConstructorContent - - - - ]`` - - - - - -

- -

- - - -
         ::= '``[' StringConstructorContent ']``'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


StringConstructorContent:

- - - - - - - - - - StringConstructorChars - - - - - - StringInterpolation - - - -

- -

- - - - - -
          /* ws: explicit */
-

- -

referenced by: - -

-


StringInterpolation:

- - - - - - - - - - ` - - - - - - EnclosedExpr - - - - ` - - - - - -

- -

- - - -
         ::= '`' EnclosedExpr '`'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


UnaryLookup:

- - - - - - - - - - Lookup - - - -

- -

- - - -
         ::= Lookup
-

- -

referenced by: - -

-


Lookup:

- - - - - - - - - - ? - - - - - - KeySpecifier - - - -

- -

- -
Lookup   ::= '?' KeySpecifier
-

- -

referenced by: - -

-


KeySpecifier:

- - - - - - - - - - NCName - - - - - - Literal - - - - . - - - - - - VarRef - - - - - - ParenthesizedExpr - - - - * - - - - - -

- -

- - - -
         ::= NCName
- -
           | Literal
- -
           | '.'
- -
           | VarRef
- -
           | ParenthesizedExpr
- -
           | '*'
-

- -

referenced by: - -

-


FilterExpr:

- - - - - - - - - - PostfixExpr - - - - - - Predicate - - - -

- -

- - - -
         ::= PostfixExpr Predicate
-

- -

referenced by: - -

-


Predicate:

- - - - - - - - - - [ - - - - - - Expr - - - - ] - - - - - -

- -

- - - -
         ::= '[' Expr ']'
-

- -

referenced by: - -

-


DynamicFunctionCall:

- - - - - - - - - - PostfixExpr - - - - - - PositionalArgumentList - - - -

- -

-

- -

referenced by: - -

-


PositionalArgumentList:

- - - - - - - - - - ( - - - - - - PositionalArguments - - - - ) - - - - - -

- -

- - - -
         ::= '(' PositionalArguments? ')'
-

- -

referenced by: - -

-


LookupExpr:

- - - - - - - - - - PostfixExpr - - - - - - Lookup - - - -

- -

- - - -
         ::= PostfixExpr Lookup
-

- -

referenced by: - -

-


MethodCall:

- - - - - - - - - - PostfixExpr - - - - =?> - - - - - - NCName - - - - - - PositionalArgumentList - - - -

- -

- - - -
         ::= PostfixExpr '=?>' NCName PositionalArgumentList
-

- -

referenced by: - -

-


FilterExprAM:

- - - - - - - - - - PostfixExpr - - - - ?[ - - - - - - Expr - - - - ] - - - - - -

- -

- - - -
         ::= PostfixExpr '?[' Expr ']'
-

- -

referenced by: - -

-


AxisStep:

- - - - - - - - - - AbbreviatedStep - - - - - - FullStep - - - - - - Predicate - - - -

- -

-

- -

referenced by: - -

-


AbbreviatedStep:

- - - - - - - - - - .. - - - - - - @ - - - - - - NodeTest - - - - - - SimpleNodeTest - - - -

- -

- - - -
         ::= '..'
- -
           | '@' NodeTest
- -
           | SimpleNodeTest
-

- -

referenced by: - -

-


NodeTest:

- - - - - - - - - - UnionNodeTest - - - - - - SimpleNodeTest - - - -

- -

- - - -
           | SimpleNodeTest
-

- -

referenced by: - -

-


UnionNodeTest:

- - - - - - - - - - ( - - - - - - SimpleNodeTest - - - - | - - - - - - ) - - - - - -

- -

- - - -
         ::= '(' SimpleNodeTest ( '|' SimpleNodeTest )* ')'
-

- -

referenced by: - -

-


SimpleNodeTest:

- - - - - - - - - - TypeTest - - - - - - Selector - - - -

- -

- - - -
         ::= TypeTest
- -
           | Selector
-

- -

referenced by: - -

-


TypeTest:

- - - - - - - - - - RegularItemType - - - - type - - - - - - ( - - - - - - SequenceType - - - - ) - - - - - -

- -

- - - -
           | 'type' '(' SequenceType ')'
-

- -

referenced by: - -

-


Selector:

- - - - - - - - - - EQName - - - - - - Wildcard - - - - get - - - - - - ( - - - - - - ExprSingle - - - - ) - - - - - -

- -

- - - -
           | Wildcard
- -
           | 'get' '(' ExprSingle ')'
-

- -

referenced by: - -

-


FullStep:

- - - - - - - - - - Axis - - - - - - NodeTest - - - -

- -

-

- -

referenced by: - -

-


Axis:

- - - - - - - - - - ancestor - - - - - - ancestor-or-self - - - - - - attribute - - - - - - child - - - - - - descendant - - - - - - descendant-or-self - - - - - - following - - - - - - following-or-self - - - - - - following-sibling - - - - - - following-sibling-or-self - - - - - - parent - - - - - - preceding - - - - - - preceding-or-self - - - - - - preceding-sibling - - - - - - preceding-sibling-or-self - - - - - - self - - - - - - :: - - - - - -

- -

- -
Axis     ::= ( 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' - | 'descendant-or-self' | 'following' | 'following-or-self' | 'following-sibling' | - 'following-sibling-or-self' | 'parent' | 'preceding' | 'preceding-or-self' | 'preceding-sibling' - | 'preceding-sibling-or-self' | 'self' ) '::'
-

- -

referenced by: - -

-


SequenceArrowTarget:

- - - - - - - - - - => - - - - - - ArrowTarget - - - -

- -

- - - -
         ::= '=>' ArrowTarget
-

- -

referenced by: - -

-


ArrowTarget:

- - - - - - - - - - FunctionCall - - - - - - RestrictedDynamicCall - - - -

- -

- - - -
         ::= FunctionCall
- -
           | RestrictedDynamicCall
-

- -

referenced by: - -

-


RestrictedDynamicCall:

- - - - - - - - - - VarRef - - - - - - ParenthesizedExpr - - - - - - FunctionItemExpr - - - - - - MapConstructor - - - - - - ArrayConstructor - - - - - - PositionalArgumentList - - - -

- -

-

- -

referenced by: - -

-


MappingArrowTarget:

- - - - - - - - - - =!> - - - - - - ArrowTarget - - - -

- -

- - - -
         ::= '=!>' ArrowTarget
-

- -

referenced by: - -

-


CastTarget:

- - - - - - - - - - TypeName - - - - - - ChoiceItemType - - - - - - EnumerationType - - - -

- -

- - - -
         ::= TypeName
- -
           | ChoiceItemType
- -
           | EnumerationType
-

- -

referenced by: - -

-


ValueComp:

- - - - - - - - - - eq - - - - - - ne - - - - - - lt - - - - - - le - - - - - - gt - - - - - - ge - - - - - -

- -

- - - -
         ::= 'eq'
- -
           | 'ne'
- -
           | 'lt'
- -
           | 'le'
- -
           | 'gt'
- -
           | 'ge'
-

- -

referenced by: - -

-


GeneralComp:

- - - - - - - - - - = - - - - - - != - - - - - - < - - - - - - <= - - - - - - > - - - - - - >= - - - - - -

- -

- - - -
         ::= '='
- -
           | '!='
- -
           | '<'^GeneralComp
- -
           | '<='
- -
           | '>'
- -
           | '>='
-

- -

referenced by: - -

-


NodeComp:

- - - - - - - - - - is - - - - - - is-not - - - - - - NodePrecedes - - - - - - NodeFollows - - - -

- -

- -
NodeComp ::= 'is'
- -
           | 'is-not'
- -
           | NodePrecedes
- -
           | NodeFollows
-

- -

referenced by: - -

-


NodePrecedes:

- - - - - - - - - - << - - - - - - precedes - - - - - -

- -

- - - -
         ::= '<<'
- -
           | 'precedes'
-

- -

referenced by: - -

-


NodeFollows:

- - - - - - - - - - >> - - - - - - follows - - - - - -

- -

- - - -
         ::= '>>'
- -
           | 'follows'
-

- -

referenced by: - -

-


VarDefaultValue:

- - - - - - - - - - ExprSingle - - - -

- -

- - - -
         ::= ExprSingle
-

- -

referenced by: - -

-


VarDecl:

- - - - - - - - - - declare - - - - - - Annotation - - - - variable - - - - - - VarNameAndType - - - - := - - - - - - VarValue - - - - external - - - - - - := - - - - - - VarDefaultValue - - - -

- -

- -
VarDecl  ::= 'declare' Annotation* 'variable' VarNameAndType ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? )
-

- -

referenced by: - -

-


FunctionDecl:

- - - - - - - - - - declare - - - - - - Annotation - - - - function - - - - - - UnreservedFunctionEQName - - - - ( - - - - - - ParamListWithDefaults - - - - ) - - - - - - TypeDeclaration - - - - - - FunctionBody - - - - external - - - - - -

- -

- - - -
         ::= 'declare' Annotation* 'function' UnreservedFunctionEQName '(' ParamListWithDefaults? ')' TypeDeclaration? ( FunctionBody | 'external' )
-

- -

referenced by: - -

-


ParamListWithDefaults:

- - - - - - - - - - ParamWithDefault - - - - , - - - - - -

- -

- - - -
         ::= ParamWithDefault ( ',' ParamWithDefault )*
-

- -

referenced by: - -

-


ParamWithDefault:

- - - - - - - - - - VarNameAndType - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= VarNameAndType ( ':=' ExprSingle )?
-

- -

referenced by: - -

-


ItemTypeDecl:

- - - - - - - - - - declare - - - - - - Annotation - - - - type - - - - - - EQName - - - - as - - - - - - ItemType - - - -

- -

- - - -
         ::= 'declare' Annotation* 'type' EQName 'as' ItemType
-

- -

referenced by: - -

-


NamedRecordTypeDecl:

- - - - - - - - - - declare - - - - - - Annotation - - - - record - - - - - - EQName - - - - ( - - - - - - ExtendedFieldDeclaration - - - - , - - - - - - ExtensibleFlag - - - - ) - - - - - -

- -

- - - -
         ::= 'declare' Annotation* 'record' EQName '(' ( ExtendedFieldDeclaration ( ',' ExtendedFieldDeclaration )* )? ExtensibleFlag? ')'
-

- -

referenced by: - -

-


ExtendedFieldDeclaration:

- - - - - - - - - - FieldDeclaration - - - - := - - - - - - ExprSingle - - - -

- -

- - - -
         ::= FieldDeclaration ( ':=' ExprSingle )?
-

- -

referenced by: - -

-


OptionDecl:

- - - - - - - - - - declare - - - - - - option - - - - - - EQName - - - - - - StringLiteral - - - -

- -

- - - -
         ::= 'declare' 'option' EQName StringLiteral
-

- -

referenced by: - -

-


MainModule:

- - - - - - - - - - Prolog - - - - - - QueryBody - - - -

- -

- - - -
         ::= Prolog QueryBody
-

- -

referenced by: - -

-


QueryBody:

- - - - - - - - - - Expr - - - -

- -

- - - -
         ::= Expr
-

- -

referenced by: - -

-


Whitespace:

- - - - - - - - - - S - - - - - - Comment - - - -

- -

- - - -
         ::= S^WS
- -
           | Comment
- -
          /* ws: definition */
-

- -

no references


Comment:

- - - - - - - - - - (: - - - - - - CommentContents - - - - - - Comment - - - - :) - - - - - -

- -

- -
Comment  ::= '(:' ( CommentContents | Comment )* ':)'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


StringLiteral:

- - - - - - - - - - AposStringLiteral - - - - - - QuotStringLiteral - - - -

- -

- - - -
         ::= AposStringLiteral
- -
           | QuotStringLiteral
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


AposStringLiteral:

- - - - - - - - - - ' - - - - - - PredefinedEntityRef - - - - - - CharRef - - - - '' - - - - - - [^'&] - - - - - - ' - - - - - -

- -

- - - -
         ::= "'" ( PredefinedEntityRef | CharRef | "''" | [^'&] )* "'"
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


PredefinedEntityRef:

- - - - - - - - - - & - - - - - - lt - - - - - - gt - - - - - - amp - - - - - - quot - - - - - - apos - - - - - - ; - - - - - -

- -

- - - -
         ::= '&' ( 'lt' | 'gt' | 'amp' | 'quot' | 'apos' ) ';'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


CharRef:

- - - - - - - - - - &# - - - - - - [0-9] - - - - - - &#x - - - - - - [0-9] - - - - - - [a-f] - - - - - - [A-F] - - - - - - ; - - - - - -

- -

- -
CharRef  ::= ( '&#' [0-9]+ | '&#x' [0-9a-fA-F]+ ) ';'
-

- -

referenced by: - -

-


QuotStringLiteral:

- - - - - - - - - - " - - - - - - PredefinedEntityRef - - - - - - CharRef - - - - "" - - - - - - [^"&] - - - - - - " - - - - - -

- -

- - - -
         ::= '"' ( PredefinedEntityRef | CharRef | '""' | [^"&] )* '"'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


AposAttrContentChar:

- - - - - - - - - - Char - ['{}<&] - - - - - -

- -

- - - -
         ::= Char - ['{}<&]
-

- -

referenced by: - -

-


Char:

- - - - - - - - - - [#x9] - - - - - - [#xA] - - - - - - [#xD] - - - - - - [#x20-#xD7FF] - - - - - - [#xE000-#xFFFD] - - - - - - [#x10000-#x10FFFF] - - - - - -

- -

- -
Char     ::= [#x9#xA#xD#x20-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
-

- -

referenced by: - -

-


CDataSectionContents:

- - - - - - - - - - Char* - ( Char* ']]>' Char* ) & ']]' - - - - - -

- -

- - - -
         ::= Char* - ( Char* ']]>' Char* ) & ']]'
-

- -

referenced by: - -

-


UnreservedNCName:

- - - - - - - - - - NCName - ReservedName - - - - - -

- -

- - - -
         ::= NCName - ReservedName
-

- -

referenced by: - -

-


NCName:

- - - - - - - - - - Name - ( Char* ':' Char* ) - - - - - -

- -

- -
NCName   ::= Name - ( Char* ':' Char* )
-

- -

referenced by: - -

-


Name:

- - - - - - - - - - NameStartChar - - - - - - NameChar - - - -

- -

- -
-

- -

referenced by: - -

-


NameStartChar:

- - - - - - - - - - : - - - - - - [A-Z] - - - - - - _ - - - - - - [a-z] - - - - - - [#xC0-#xD6] - - - - - - [#xD8-#xF6] - - - - - - [#xF8-#x2FF] - - - - - - [#x370-#x37D] - - - - - - [#x37F-#x1FFF] - - - - - - [#x200C-#x200D] - - - - - - [#x2070-#x218F] - - - - - - [#x2C00-#x2FEF] - - - - - - [#x3001-#xD7FF] - - - - - - [#xF900-#xFDCF] - - - - - - [#xFDF0-#xFFFD] - - - - - - [#x10000-#xEFFFF] - - - - - -

- -

- - - -
         ::= [:A-Z_a-z#xC0-#xD6#xD8-#xF6#xF8-#x2FF#x370-#x37D#x37F-#x1FFF#x200C-#x200D#x2070-#x218F#x2C00-#x2FEF#x3001-#xD7FF#xF900-#xFDCF#xFDF0-#xFFFD#x10000-#xEFFFF]
-

- -

referenced by: - -

-


NameChar:

- - - - - - - - - - NameStartChar - - - - - - - - - - - . - - - - - - [0-9] - - - - - - [#xB7] - - - - - - [#x0300-#x036F] - - - - - - [#x203F-#x2040] - - - - - -

- -

- - - -
           | [-.0-9#xB7#x0300-#x036F#x203F-#x2040]
-

- -

referenced by: - -

-


ReservedName:

- - - - - - - - - - NaN - - - - - - allowing - - - - - - ancestor - - - - - - ancestor-or-self - - - - - - and - - - - - - array - - - - - - as - - - - - - ascending - - - - - - at - - - - - - attribute - - - - - - base-uri - - - - - - boundary-space - - - - - - by - - - - - - case - - - - - - cast - - - - - - castable - - - - - - catch - - - - - - child - - - - - - collation - - - - - - comment - - - - - - construction - - - - - - context - - - - - - copy-namespaces - - - - - - count - - - - - - decimal-format - - - - - - decimal-separator - - - - - - declare - - - - - - default - - - - - - descendant - - - - - - descendant-or-self - - - - - - descending - - - - - - digit - - - - - - div - - - - - - document - - - - - - document-node - - - - - - element - - - - - - else - - - - - - empty - - - - - - empty-sequence - - - - - - encoding - - - - - - end - - - - - - enum - - - - - - eq - - - - - - every - - - - - - except - - - - - - exponent-separator - - - - - - external - - - - - - false - - - - - - finally - - - - - - fixed - - - - - - fn - - - - - - following - - - - - - following-or-self - - - - - - following-sibling - - - - - - following-sibling-or-self - - - - - - follows - - - - - - for - - - - - - function - - - - - - ge - - - - - - get - - - - - - gnode - - - - - - greatest - - - - - - group - - - - - - grouping-separator - - - - - - gt - - - - - - idiv - - - - - - if - - - - - - import - - - - - - in - - - - - - infinity - - - - - - inherit - - - - - - instance - - - - - - intersect - - - - - - is - - - - - - is-not - - - - - - item - - - - - - jnode - - - - - - key - - - - - - lax - - - - - - le - - - - - - least - - - - - - let - - - - - - lt - - - - - - map - - - - - - member - - - - - - minus-sign - - - - - - mod - - - - - - module - - - - - - namespace - - - - - - namespace-node - - - - - - ne - - - - - - next - - - - - - no-inherit - - - - - - no-preserve - - - - - - node - - - - - - of - - - - - - only - - - - - - option - - - - - - or - - - - - - order - - - - - - ordered - - - - - - ordering - - - - - - otherwise - - - - - - parent - - - - - - pattern-separator - - - - - - per-mille - - - - - - percent - - - - - - precedes - - - - - - preceding - - - - - - preceding-or-self - - - - - - preceding-sibling - - - - - - preceding-sibling-or-self - - - - - - preserve - - - - - - previous - - - - - - processing-instruction - - - - - - record - - - - - - return - - - - - - satisfies - - - - - - schema - - - - - - schema-attribute - - - - - - schema-element - - - - - - self - - - - - - sliding - - - - - - some - - - - - - stable - - - - - - start - - - - - - strict - - - - - - strip - - - - - - switch - - - - - - text - - - - - - then - - - - - - to - - - - - - treat - - - - - - true - - - - - - try - - - - - - tumbling - - - - - - type - - - - - - typeswitch - - - - - - union - - - - - - unordered - - - - - - validate - - - - - - value - - - - - - variable - - - - - - version - - - - - - when - - - - - - where - - - - - - while - - - - - - window - - - - - - xquery - - - - - - zero-digit - - - - - -

- -

- - - -
         ::= 'NaN'
- -
           | 'allowing'
- -
           | 'ancestor'
- -
           | 'ancestor-or-self'
- -
           | 'and'
- -
           | 'array'
- -
           | 'as'
- -
           | 'ascending'
- -
           | 'at'
- -
           | 'attribute'
- -
           | 'base-uri'
- -
           | 'boundary-space'
- -
           | 'by'
- -
           | 'case'
- -
           | 'cast'
- -
           | 'castable'
- -
           | 'catch'
- -
           | 'child'
- -
           | 'collation'
- -
           | 'comment'
- -
           | 'construction'
- -
           | 'context'
- -
           | 'copy-namespaces'
- -
           | 'count'
- -
           | 'decimal-format'
- -
           | 'decimal-separator'
- -
           | 'declare'
- -
           | 'default'
- -
           | 'descendant'
- -
           | 'descendant-or-self'
- -
           | 'descending'
- -
           | 'digit'
- -
           | 'div'
- -
           | 'document'
- -
           | 'document-node'
- -
           | 'element'
- -
           | 'else'
- -
           | 'empty'
- -
           | 'empty-sequence'
- -
           | 'encoding'
- -
           | 'end'
- -
           | 'enum'
- -
           | 'eq'
- -
           | 'every'
- -
           | 'except'
- -
           | 'exponent-separator'
- -
           | 'external'
- -
           | 'false'
- -
           | 'finally'
- -
           | 'fixed'
- -
           | 'fn'
- -
           | 'following'
- -
           | 'following-or-self'
- -
           | 'following-sibling'
- -
           | 'following-sibling-or-self'
- -
           | 'follows'
- -
           | 'for'
- -
           | 'function'
- -
           | 'ge'
- -
           | 'get'
- -
           | 'gnode'
- -
           | 'greatest'
- -
           | 'group'
- -
           | 'grouping-separator'
- -
           | 'gt'
- -
           | 'idiv'
- -
           | 'if'
- -
           | 'import'
- -
           | 'in'
- -
           | 'infinity'
- -
           | 'inherit'
- -
           | 'instance'
- -
           | 'intersect'
- -
           | 'is'
- -
           | 'is-not'
- -
           | 'item'
- -
           | 'jnode'
- -
           | 'key'
- -
           | 'lax'
- -
           | 'le'
- -
           | 'least'
- -
           | 'let'
- -
           | 'lt'
- -
           | 'map'
- -
           | 'member'
- -
           | 'minus-sign'
- -
           | 'mod'
- -
           | 'module'
- -
           | 'namespace'
- -
           | 'namespace-node'
- -
           | 'ne'
- -
           | 'next'
- -
           | 'no-inherit'
- -
           | 'no-preserve'
- -
           | 'node'
- -
           | 'of'
- -
           | 'only'
- -
           | 'option'
- -
           | 'or'
- -
           | 'order'
- -
           | 'ordered'
- -
           | 'ordering'
- -
           | 'otherwise'
- -
           | 'parent'
- -
           | 'pattern-separator'
- -
           | 'per-mille'
- -
           | 'percent'
- -
           | 'precedes'
- -
           | 'preceding'
- -
           | 'preceding-or-self'
- -
           | 'preceding-sibling'
- -
           | 'preceding-sibling-or-self'
- -
           | 'preserve'
- -
           | 'previous'
- -
           | 'processing-instruction'
- -
           | 'record'
- -
           | 'return'
- -
           | 'satisfies'
- -
           | 'schema'
- -
           | 'schema-attribute'
- -
           | 'schema-element'
- -
           | 'self'
- -
           | 'sliding'
- -
           | 'some'
- -
           | 'stable'
- -
           | 'start'
- -
           | 'strict'
- -
           | 'strip'
- -
           | 'switch'
- -
           | 'text'
- -
           | 'then'
- -
           | 'to'
- -
           | 'treat'
- -
           | 'true'
- -
           | 'try'
- -
           | 'tumbling'
- -
           | 'type'
- -
           | 'typeswitch'
- -
           | 'union'
- -
           | 'unordered'
- -
           | 'validate'
- -
           | 'value'
- -
           | 'variable'
- -
           | 'version'
- -
           | 'when'
- -
           | 'where'
- -
           | 'while'
- -
           | 'window'
- -
           | 'xquery'
- -
           | 'zero-digit'
-

- -

referenced by: - -

-


S:

- - - - - - - - - - [#x20] - - - - - - [#x9] - - - - - - [#xD] - - - - - - [#xA] - - - - - -

- -

- -
S        ::= [#x20#x9#xD#xA]+
-

- -

referenced by: - -

-


DirCommentContents:

- - - - - - - - - - - - - - - - - Char - '-' - - - - - -

- -

- - - -
         ::= ( '-'? ( Char - '-' ) )*
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


ElementContentChar:

- - - - - - - - - - Char - [{}<&] - - - - - -

- -

- - - -
         ::= Char - [{}<&]
-

- -

referenced by: - -

-


PITarget:

- - - - - - - - - - NCName - ( ( 'X' | 'x' ) ( 'M' | 'm' ) ( 'L' | 'l' ) ) - - - - - -

- -

- -
PITarget ::= NCName - ( ( 'X' | 'x' ) ( 'M' | 'm' ) ( 'L' | 'l' ) )
-

- -

referenced by: - -

-


DirPIContents:

- - - - - - - - - - Char* - ( Char* '?>' Char* ) & '?' - - - - - -

- -

- - - -
         ::= Char* - ( Char* '?>' Char* ) & '?'
-

- -

referenced by: - -

-


URIQualifiedName:

- - - - - - - - - - BracedURILiteral - - - - - - NCName - - - -

- -

- - - -
         ::= BracedURILiteral NCName
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


BracedURILiteral:

- - - - - - - - - - Q - - - - - - { - - - - - - PredefinedEntityRef - - - - - - CharRef - - - - [^&{}] - - - - - - } - - - - - -

- -

- - - -
         ::= 'Q' '{' ( PredefinedEntityRef | CharRef | [^&{}] )* '}'
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


EOF:

- - - - - - - - - - $ - - - - - -

- -

- -
EOF      ::= $
-

- -

referenced by: - -

-


IntegerLiteral:

- - - - - - - - - - Digits - - - -

- -

- - - -
         ::= Digits
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


Digits:

- - - - - - - - - - DecDigit - - - - - - DecDigit - - - - _ - - - - - - DecDigit - - - -

- -

- -
Digits   ::= DecDigit ( ( DecDigit | '_' )* DecDigit )?
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DecDigit:

- - - - - - - - - - [0-9] - - - - - -

- -

- -
DecDigit ::= [0-9]
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


Wildcard:

- - - - - - - - - - BracedURILiteral - - - - * - - - - - - NCName - - - - :* - - - - - - *: - - - - - - NCName - - - -

- -

- - - -
           | NCName ':*'
- -
           | '*:' NCName
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


HexIntegerLiteral:

- - - - - - - - - - 0x - - - - - - HexDigits - - - -

- -

- - - -
         ::= '0x' HexDigits
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


HexDigits:

- - - - - - - - - - HexDigit - - - - - - HexDigit - - - - _ - - - - - - HexDigit - - - -

- -

- - - -
         ::= HexDigit ( ( HexDigit | '_' )* HexDigit )?
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


HexDigit:

- - - - - - - - - - [0-9] - - - - - - [a-f] - - - - - - [A-F] - - - - - -

- -

- -
HexDigit ::= [0-9a-fA-F]
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


BinaryIntegerLiteral:

- - - - - - - - - - 0b - - - - - - BinaryDigits - - - -

- -

- - - -
         ::= '0b' BinaryDigits
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


BinaryDigits:

- - - - - - - - - - BinaryDigit - - - - - - BinaryDigit - - - - _ - - - - - - BinaryDigit - - - -

- -

- - - -
         ::= BinaryDigit ( ( BinaryDigit | '_' )* BinaryDigit )?
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


BinaryDigit:

- - - - - - - - - - [0-1] - - - - - -

- -

- - - -
         ::= [0-1]
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DecimalLiteral:

- - - - - - - - - - . - - - - - - Digits - - - - - - Digits - - - - . - - - - - - Digits - - - -

- -

- - - -
         ::= '.' Digits
- -
           | Digits '.' Digits?
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


DoubleLiteral:

- - - - - - - - - - . - - - - - - Digits - - - - - - Digits - - - - . - - - - - - Digits - - - - e - - - - - - E - - - - - - + - - - - - - [#x2D] - - - - - - Digits - - - -

- -

- - - -
         ::= ( '.' Digits | Digits ( '.' Digits? )? ) [eE] [+#x2D]? Digits
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


PragmaContents:

- - - - - - - - - - Char* - ( Char* '#)' Char* ) & '#' - - - - - -

- -

- - - -
         ::= Char* - ( Char* '#)' Char* ) & '#'
-

- -

referenced by: - -

-


QuotAttrContentChar:

- - - - - - - - - - Char - ["{}<&] - - - - - -

- -

- - - -
         ::= Char - ["{}<&]
-

- -

referenced by: - -

-


StringConstructorChars:

- - - - - - - - - - Char* - ( Char* ( '`{' | ']``' ) Char* ) & ( '`{' | ']`' ) - - - - - -

- -

- - - -
         ::= Char* - ( Char* ( '`{' | ']``' ) Char* ) & ( '`{' | ']`' )
-

- -

referenced by: - -

-


StringTemplateFixedPart:

- - - - - - - - - - Char - ( '{' | '}' | '`' ) - - - - - - {{ - - - - - - }} - - - - - - `` - - - - - -

- -

- - - -
         ::= ( Char - ( '{' | '}' | '`' ) | '{{' | '}}' | '``' )+
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


UnreservedQName:

- - - - - - - - - - QName - ReservedName - - - - - -

- -

- - - -
         ::= QName - ReservedName
-

- -

referenced by: - -

-


QName:

- - - - - - - - - - PrefixedName - - - - - - UnprefixedName - - - -

- -

- -
QName    ::= PrefixedName
- -
           | UnprefixedName
-

- -

referenced by: - -

-


PrefixedName:

- - - - - - - - - - Prefix - - - - : - - - - - - LocalPart - - - -

- -

- - - -
         ::= Prefix ':' LocalPart
-

- -

referenced by: - -

-


Prefix:

- - - - - - - - - - NCName - - - -

- -

- -
Prefix   ::= NCName
-

- -

referenced by: - -

-


LocalPart:

- - - - - - - - - - NCName - - - -

- -

- - - -
         ::= NCName
-

- -

referenced by: - -

-


UnprefixedName:

- - - - - - - - - - LocalPart - - - -

- -

- - - -
         ::= LocalPart
-

- -

referenced by: - -

-


CommentContents:

- - - - - - - - - - ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) - ( Char* '(' ) & ':' - - - - - - Char+ - ( Char* ( '(:' | ':)' ) Char* ) & '(' - - - - - -

- -

- - - -
         ::= ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) - ( Char* '(' ) & ':'
- -
           | Char+ - ( Char* ( '(:' | ':)' ) Char* ) & '('
- -
          /* ws: explicit */
-

- -

referenced by: - -

-


QNameOrKeywordDelimiter:

- - - - - - - - - - $ - - - - - - : - - - - - - Char - NameChar - - - - - -

- -

- - - -
         ::= $
- -
           | ':'
- -
           | Char - NameChar
-

- -

referenced by: - -

-


NCNameDelimiter:

- - - - - - - - - - $ - - - - - - $ - - - - - - Char - NameChar - - - - - - $ - - - - - - Char - - - - : - - - - - - Char - NameStartChar - - - - - -

- -

- - - -
         ::= $ $
- -
           | ( Char - NameChar ) ( $ | Char )
- -
           | ':' ( Char - NameStartChar )
-

- -

no references


NumericLiteralDelimiter:

- - - - - - - - - - QNameOrKeywordDelimiter - - - - - - - - - - -

- -

- - - -
         ::= QNameOrKeywordDelimiter
- -
           | '-'
-

- -

no references


GeneralCompDelimiter:

- - - - - - - - - - [^?] - - - - - -

- -

- - - -
         ::= [^?]
-

- -

no references


DirElemConstructorDelimiter:

- - - - - - - - - - QName - - - - - - S - - - - - - QName - - - - - - S - - - - = - - - - - - S - - - - / - - - - - - > - - - - - -

- -

- - - -
         ::= QName ( S QName S? '=' | S? [/>] )
-

- -

no references



- -

- - - - - - - -
  - - ... generated by RR - Railroad Diagram Generator - - - - - - - - - - - - - R - - R -
-

-
-
- + + + + + + + + + + + + + + + XQuery-40.ebnf + + + Find + + Productions:X + AbbreviatedStep + AbsolutePathExpr + AdditiveExpr + AllowingEmpty + AndExpr + Annotation + AnnotationValue + AnyArrayType + AnyFunctionType + AnyItemTest + AnyMapType + AnyNodeKindTest + AnyRecordType + AposAttrContentChar + AposAttrValueContent + AposStringLiteral + Argument + ArgumentList + ArrayConstructor + ArrayType + ArrowExpr + ArrowTarget + AttributeName + AttributeTest + Axis + AxisStep + BaseURIDecl + BinaryDigit + BinaryDigits + BinaryIntegerLiteral + BoundarySpaceDecl + BracedAction + BracedSwitchCases + BracedTypeswitchCases + BracedURILiteral + CDataSection + CDataSectionContents + CaseClause + CastExpr + CastTarget + CastableExpr + CatchClause + Char + CharRef + ChoiceItemType + Comment + CommentContents + CommentTest + CommonContent + CompAttrConstructor + CompCommentConstructor + CompDocConstructor + CompElemConstructor + CompNamespaceConstructor + CompNodeNCName + CompNodeName + CompPIConstructor + CompTextConstructor + ComparisonExpr + ComputedConstructor + ConstructionDecl + ContextValueDecl + CopyNamespacesDecl + CountClause + CurlyArrayConstructor + CurrentVar + DFPropertyName + DecDigit + DecimalFormatDecl + DecimalLiteral + DefaultCollationDecl + DefaultNamespaceDecl + Digits + DirAttributeList + DirAttributeValue + DirCommentConstructor + DirCommentContents + DirElemConstructor + DirElemConstructorDelimiter + DirElemContent + DirPIConstructor + DirPIContents + DirectConstructor + DocumentTest + DoubleLiteral + DynamicFunctionCall + EOF + EQName + ElementContentChar + ElementName + ElementTest + EmptyOrderDecl + EnclosedContentExpr + EnclosedExpr + EnumerationType + Expr + ExprSingle + ExtendedFieldDeclaration + ExtensibleFlag + ExtensionExpr + FLWORExpr + FieldDeclaration + FieldName + FilterExpr + FilterExprAM + FinallyClause + ForBinding + ForClause + ForEntryBinding + ForEntryKeyBinding + ForEntryValueBinding + ForItemBinding + ForMemberBinding + FullStep + FunctionBody + FunctionCall + FunctionDecl + FunctionItemExpr + FunctionSignature + FunctionType + GNodeType + GeneralComp + GeneralCompDelimiter + GroupByClause + GroupingSpec + HexDigit + HexDigits + HexIntegerLiteral + IfExpr + Import + InheritMode + InitialClause + InlineFunctionExpr + InstanceofExpr + IntegerLiteral + IntermediateClause + IntersectExceptExpr + ItemType + ItemTypeDecl + JNodeType + KeySpecifier + KeywordArgument + KeywordArguments + LetArrayBinding + LetBinding + LetClause + LetMapBinding + LetSequenceBinding + LetValueBinding + LibraryModule + Literal + LocalPart + Lookup + LookupExpr + MainModule + MapConstructor + MapConstructorEntry + MapType + MappingArrowTarget + MarkedNCName + MethodCall + Module + ModuleDecl + ModuleImport + MultiplicativeExpr + NCName + NCName + NCNameDelimiter + Name + NameChar + NameStartChar + NameTest + NameTestUnion + NamedFunctionRef + NamedRecordTypeDecl + NamespaceDecl + NamespaceNodeTest + NextVar + NodeComp + NodeConstructor + NodeFollows + NodeKindTest + NodePrecedes + NodeTest + NumericLiteral + NumericLiteralDelimiter + OccurrenceIndicator + OptionDecl + OrExpr + OrderByClause + OrderModifier + OrderSpec + OrderedExpr + OrderingModeDecl + OtherwiseExpr + PITarget + PITest + ParamList + ParamListWithDefaults + ParamWithDefault + ParenthesizedExpr + PathExpr + PipelineExpr + PositionalArgumentList + PositionalArguments + PositionalVar + PostfixExpr + Pragma + PragmaContents + PredefinedEntityRef + Predicate + Prefix + PrefixedName + PreserveMode + PreviousVar + PrimaryExpr + Prolog + QName + QName + QNameLiteral + QNameOrKeywordDelimiter + QuantifiedExpr + QuantifierBinding + QueryBody + QuotAttrContentChar + QuotAttrValueContent + QuotStringLiteral + RangeExpr + RecordType + RegularItemType + RelativePathExpr + ReservedName + RestrictedDynamicCall + ReturnClause + S + SchemaAttributeTest + SchemaElementTest + SchemaImport + SchemaPrefix + Selector + SequenceArrowTarget + SequenceType + SequenceTypeUnion + Setter + SimpleMapExpr + SimpleNodeTest + SlidingWindowClause + SquareArrayConstructor + StepExpr + StringConcatExpr + StringConstructor + StringConstructorChars + StringConstructorContent + StringInterpolation + StringLiteral + StringTemplate + StringTemplateFixedPart + StringTemplateVariablePart + SwitchCaseClause + SwitchCaseOperand + SwitchCases + SwitchComparand + SwitchExpr + TextTest + TreatExpr + TryCatchExpr + TryClause + TumblingWindowClause + TypeDeclaration + TypeName + TypeTest + TypedArrayType + TypedFunctionParam + TypedFunctionType + TypedMapType + TypedRecordType + TypeswitchCases + TypeswitchExpr + URILiteral + URIQualifiedName + UnaryExpr + UnaryLookup + UnbracedActions + UnionExpr + UnionNodeTest + UnorderedExpr + UnprefixedName + UnreservedFunctionEQName + UnreservedFunctionQName + UnreservedNCName + UnreservedName + UnreservedQName + ValidateExpr + ValidationMode + ValueComp + ValueExpr + VarDecl + VarDefaultValue + VarName + VarNameAndType + VarRef + VarValue + VersionDecl + WhereClause + WhileClause + Whitespace + Wildcard + WindowClause + WindowEndCondition + WindowStartCondition + WindowVars + + + var filter = document.getElementById("the-filter"), // search box + list = document.querySelectorAll("#the-list li"); // all list items + update=function(){ + let search = filter.value.toLowerCase(); + for (let i of list) { + let item = i.innerHTML.toLowerCase(); + if (item.indexOf(search) == -1) { i.classList.add("hide"); } + else { i.classList.remove("hide"); } + } + }; + window.addEventListener("load", () => {filter.onkeyup =update;}); + + + var details = document.getElementById("the-details"), // form + document.addEventListener('click', function(e){ + if(!details.contains(e.target)){ + details.removeAttribute('open') + } + }) + + + + + +

Module:

+ + + + + + + + + + VersionDecl + + + + + + LibraryModule + + + + + + MainModule + + + + + + EOF + + + +

+ +

+

+ +

no references


VersionDecl:

+ + + + + + + + + + xquery + + + + + + encoding + + + + + + version + + + + + + StringLiteral + + + + encoding + + + + + + StringLiteral + + + + ; + + + + + +

+ +

+ + + +
         ::= 'xquery' ( 'encoding' | 'version' ( StringLiteral 'encoding' )? ) StringLiteral ';'
+

+ +

referenced by: + +

+


LibraryModule:

+ + + + + + + + + + ModuleDecl + + + + + + Prolog + + + +

+ +

+ + + +
         ::= ModuleDecl Prolog
+

+ +

referenced by: + +

+


ModuleDecl:

+ + + + + + + + + + module + + + + + + namespace + + + + + + NCName + + + + = + + + + + + URILiteral + + + + ; + + + + + +

+ +

+ + + +
         ::= 'module' 'namespace' NCName '=' URILiteral ';'
+

+ +

referenced by: + +

+


NCName:

+ + + + + + + + + + UnreservedNCName + + + + NaN + + + + + + allowing + + + + + + ancestor + + + + + + ancestor-or-self + + + + + + and + + + + + + array + + + + + + as + + + + + + ascending + + + + + + at + + + + + + attribute + + + + + + base-uri + + + + + + boundary-space + + + + + + by + + + + + + case + + + + + + cast + + + + + + castable + + + + + + catch + + + + + + child + + + + + + collation + + + + + + comment + + + + + + construction + + + + + + context + + + + + + copy-namespaces + + + + + + count + + + + + + decimal-format + + + + + + decimal-separator + + + + + + declare + + + + + + default + + + + + + descendant + + + + + + descendant-or-self + + + + + + descending + + + + + + digit + + + + + + div + + + + + + document + + + + + + document-node + + + + + + element + + + + + + else + + + + + + empty + + + + + + empty-sequence + + + + + + encoding + + + + + + end + + + + + + enum + + + + + + eq + + + + + + every + + + + + + except + + + + + + exponent-separator + + + + + + external + + + + + + false + + + + + + finally + + + + + + fixed + + + + + + fn + + + + + + following + + + + + + following-or-self + + + + + + following-sibling + + + + + + following-sibling-or-self + + + + + + follows + + + + + + for + + + + + + function + + + + + + ge + + + + + + get + + + + + + gnode + + + + + + greatest + + + + + + group + + + + + + grouping-separator + + + + + + gt + + + + + + idiv + + + + + + if + + + + + + import + + + + + + in + + + + + + infinity + + + + + + inherit + + + + + + instance + + + + + + intersect + + + + + + is + + + + + + is-not + + + + + + item + + + + + + jnode + + + + + + key + + + + + + lax + + + + + + le + + + + + + least + + + + + + let + + + + + + lt + + + + + + map + + + + + + member + + + + + + minus-sign + + + + + + mod + + + + + + module + + + + + + namespace + + + + + + namespace-node + + + + + + ne + + + + + + next + + + + + + no-inherit + + + + + + no-preserve + + + + + + node + + + + + + of + + + + + + only + + + + + + option + + + + + + or + + + + + + order + + + + + + ordered + + + + + + ordering + + + + + + otherwise + + + + + + parent + + + + + + pattern-separator + + + + + + per-mille + + + + + + percent + + + + + + precedes + + + + + + preceding + + + + + + preceding-or-self + + + + + + preceding-sibling + + + + + + preceding-sibling-or-self + + + + + + preserve + + + + + + previous + + + + + + processing-instruction + + + + + + record + + + + + + return + + + + + + satisfies + + + + + + schema + + + + + + schema-attribute + + + + + + schema-element + + + + + + self + + + + + + sliding + + + + + + some + + + + + + stable + + + + + + start + + + + + + strict + + + + + + strip + + + + + + switch + + + + + + text + + + + + + then + + + + + + to + + + + + + treat + + + + + + true + + + + + + try + + + + + + tumbling + + + + + + type + + + + + + typeswitch + + + + + + union + + + + + + unordered + + + + + + validate + + + + + + value + + + + + + variable + + + + + + version + + + + + + when + + + + + + where + + + + + + while + + + + + + window + + + + + + xquery + + + + + + zero-digit + + + + + +

+ +

+ + + +
           | 'NaN'
+ +
           | 'allowing'
+ +
           | 'ancestor'
+ +
           | 'ancestor-or-self'
+ +
           | 'and'
+ +
           | 'array'
+ +
           | 'as'
+ +
           | 'ascending'
+ +
           | 'at'
+ +
           | 'attribute'
+ +
           | 'base-uri'
+ +
           | 'boundary-space'
+ +
           | 'by'
+ +
           | 'case'
+ +
           | 'cast'
+ +
           | 'castable'
+ +
           | 'catch'
+ +
           | 'child'
+ +
           | 'collation'
+ +
           | 'comment'
+ +
           | 'construction'
+ +
           | 'context'
+ +
           | 'copy-namespaces'
+ +
           | 'count'
+ +
           | 'decimal-format'
+ +
           | 'decimal-separator'
+ +
           | 'declare'
+ +
           | 'default'
+ +
           | 'descendant'
+ +
           | 'descendant-or-self'
+ +
           | 'descending'
+ +
           | 'digit'
+ +
           | 'div'
+ +
           | 'document'
+ +
           | 'document-node'
+ +
           | 'element'
+ +
           | 'else'
+ +
           | 'empty'
+ +
           | 'empty-sequence'
+ +
           | 'encoding'
+ +
           | 'end'
+ +
           | 'enum'
+ +
           | 'eq'
+ +
           | 'every'
+ +
           | 'except'
+ +
           | 'exponent-separator'
+ +
           | 'external'
+ +
           | 'false'
+ +
           | 'finally'
+ +
           | 'fixed'
+ +
           | 'fn'
+ +
           | 'following'
+ +
           | 'following-or-self'
+ +
           | 'following-sibling'
+ +
           | 'following-sibling-or-self'
+ +
           | 'follows'
+ +
           | 'for'
+ +
           | 'function'
+ +
           | 'ge'
+ +
           | 'get'
+ +
           | 'gnode'
+ +
           | 'greatest'
+ +
           | 'group'
+ +
           | 'grouping-separator'
+ +
           | 'gt'
+ +
           | 'idiv'
+ +
           | 'if'
+ +
           | 'import'
+ +
           | 'in'
+ +
           | 'infinity'
+ +
           | 'inherit'
+ +
           | 'instance'
+ +
           | 'intersect'
+ +
           | 'is'
+ +
           | 'is-not'
+ +
           | 'item'
+ +
           | 'jnode'
+ +
           | 'key'
+ +
           | 'lax'
+ +
           | 'le'
+ +
           | 'least'
+ +
           | 'let'
+ +
           | 'lt'
+ +
           | 'map'
+ +
           | 'member'
+ +
           | 'minus-sign'
+ +
           | 'mod'
+ +
           | 'module'
+ +
           | 'namespace'
+ +
           | 'namespace-node'
+ +
           | 'ne'
+ +
           | 'next'
+ +
           | 'no-inherit'
+ +
           | 'no-preserve'
+ +
           | 'node'
+ +
           | 'of'
+ +
           | 'only'
+ +
           | 'option'
+ +
           | 'or'
+ +
           | 'order'
+ +
           | 'ordered'
+ +
           | 'ordering'
+ +
           | 'otherwise'
+ +
           | 'parent'
+ +
           | 'pattern-separator'
+ +
           | 'per-mille'
+ +
           | 'percent'
+ +
           | 'precedes'
+ +
           | 'preceding'
+ +
           | 'preceding-or-self'
+ +
           | 'preceding-sibling'
+ +
           | 'preceding-sibling-or-self'
+ +
           | 'preserve'
+ +
           | 'previous'
+ +
           | 'processing-instruction'
+ +
           | 'record'
+ +
           | 'return'
+ +
           | 'satisfies'
+ +
           | 'schema'
+ +
           | 'schema-attribute'
+ +
           | 'schema-element'
+ +
           | 'self'
+ +
           | 'sliding'
+ +
           | 'some'
+ +
           | 'stable'
+ +
           | 'start'
+ +
           | 'strict'
+ +
           | 'strip'
+ +
           | 'switch'
+ +
           | 'text'
+ +
           | 'then'
+ +
           | 'to'
+ +
           | 'treat'
+ +
           | 'true'
+ +
           | 'try'
+ +
           | 'tumbling'
+ +
           | 'type'
+ +
           | 'typeswitch'
+ +
           | 'union'
+ +
           | 'unordered'
+ +
           | 'validate'
+ +
           | 'value'
+ +
           | 'variable'
+ +
           | 'version'
+ +
           | 'when'
+ +
           | 'where'
+ +
           | 'while'
+ +
           | 'window'
+ +
           | 'xquery'
+ +
           | 'zero-digit'
+

+ +

referenced by: + +

+


URILiteral:

+ + + + + + + + + + StringLiteral + + + +

+ +

+ + + +
         ::= StringLiteral
+

+ +

referenced by: + +

+


Prolog:

+ + + + + + + + + + DefaultNamespaceDecl + + + + + + Setter + + + + + + NamespaceDecl + + + + + + Import + + + + ; + + + + + + ContextValueDecl + + + + + + VarDecl + + + + + + FunctionDecl + + + + + + ItemTypeDecl + + + + + + NamedRecordTypeDecl + + + + + + OptionDecl + + + + ; + + + + + +

+ +

+

+ +

referenced by: + +

+


DefaultNamespaceDecl:

+ + + + + + + + + + declare + + + + + + fixed + + + + + + default + + + + + + element + + + + + + function + + + + + + namespace + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= 'declare' 'fixed'? 'default' ( 'element' | 'function' ) 'namespace' URILiteral
+

+ +

referenced by: + +

+


Setter:

+ + + + + + + + + + BoundarySpaceDecl + + + + + + DefaultCollationDecl + + + + + + BaseURIDecl + + + + + + ConstructionDecl + + + + + + OrderingModeDecl + + + + + + EmptyOrderDecl + + + + + + CopyNamespacesDecl + + + + + + DecimalFormatDecl + + + +

+ +

+ + + +
           | DefaultCollationDecl
+ +
           | BaseURIDecl
+ +
           | ConstructionDecl
+ +
           | OrderingModeDecl
+ +
           | EmptyOrderDecl
+ +
           | CopyNamespacesDecl
+ +
           | DecimalFormatDecl
+

+ +

referenced by: + +

+


BoundarySpaceDecl:

+ + + + + + + + + + declare + + + + + + boundary-space + + + + + + preserve + + + + + + strip + + + + + +

+ +

+ + + +
         ::= 'declare' 'boundary-space' ( 'preserve' | 'strip' )
+

+ +

referenced by: + +

+


DefaultCollationDecl:

+ + + + + + + + + + declare + + + + + + default + + + + + + collation + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= 'declare' 'default' 'collation' URILiteral
+

+ +

referenced by: + +

+


BaseURIDecl:

+ + + + + + + + + + declare + + + + + + base-uri + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= 'declare' 'base-uri' URILiteral
+

+ +

referenced by: + +

+


ConstructionDecl:

+ + + + + + + + + + declare + + + + + + construction + + + + + + strip + + + + + + preserve + + + + + +

+ +

+ + + +
         ::= 'declare' 'construction' ( 'strip' | 'preserve' )
+

+ +

referenced by: + +

+


OrderingModeDecl:

+ + + + + + + + + + declare + + + + + + ordering + + + + + + ordered + + + + + + unordered + + + + + +

+ +

+ + + +
         ::= 'declare' 'ordering' ( 'ordered' | 'unordered' )
+

+ +

referenced by: + +

+


EmptyOrderDecl:

+ + + + + + + + + + declare + + + + + + default + + + + + + order + + + + + + empty + + + + + + greatest + + + + + + least + + + + + +

+ +

+ + + +
         ::= 'declare' 'default' 'order' 'empty' ( 'greatest' | 'least' )
+

+ +

referenced by: + +

+


CopyNamespacesDecl:

+ + + + + + + + + + declare + + + + + + copy-namespaces + + + + + + PreserveMode + + + + , + + + + + + InheritMode + + + +

+ +

+ + + +
         ::= 'declare' 'copy-namespaces' PreserveMode ',' InheritMode
+

+ +

referenced by: + +

+


PreserveMode:

+ + + + + + + + + + preserve + + + + + + no-preserve + + + + + +

+ +

+ + + +
         ::= 'preserve'
+ +
           | 'no-preserve'
+

+ +

referenced by: + +

+


InheritMode:

+ + + + + + + + + + inherit + + + + + + no-inherit + + + + + +

+ +

+ + + +
         ::= 'inherit'
+ +
           | 'no-inherit'
+

+ +

referenced by: + +

+


DecimalFormatDecl:

+ + + + + + + + + + declare + + + + + + decimal-format + + + + + + EQName + + + + default + + + + + + decimal-format + + + + + + DFPropertyName + + + + = + + + + + + StringLiteral + + + +

+ +

+ + + +
         ::= 'declare' ( 'decimal-format' EQName | 'default' 'decimal-format' ) ( DFPropertyName '=' StringLiteral )*
+

+ +

referenced by: + +

+


EQName:

+ + + + + + + + + + QName + + + + + + URIQualifiedName + + + +

+ +

+ +
EQName   ::= QName
+ +
           | URIQualifiedName
+

+ +

referenced by: + +

+


QName:

+ + + + + + + + + + UnreservedFunctionQName + + + + attribute + + + + + + comment + + + + + + document-node + + + + + + element + + + + + + namespace-node + + + + + + node + + + + + + schema-attribute + + + + + + schema-element + + + + + + processing-instruction + + + + + + text + + + + + + array + + + + + + enum + + + + + + fn + + + + + + function + + + + + + gnode + + + + + + get + + + + + + if + + + + + + item + + + + + + jnode + + + + + + map + + + + + + record + + + + + + switch + + + + + + type + + + + + + typeswitch + + + + + +

+ +

+ + + +
           | 'attribute'
+ +
           | 'comment'
+ +
           | 'document-node'
+ +
           | 'element'
+ +
           | 'namespace-node'
+ +
           | 'node'
+ +
           | 'schema-attribute'
+ +
           | 'schema-element'
+ +
           | 'processing-instruction'
+ +
           | 'text'
+ +
           | 'array'
+ +
           | 'enum'
+ +
           | 'fn'
+ +
           | 'function'
+ +
           | 'gnode'
+ +
           | 'get'
+ +
           | 'if'
+ +
           | 'item'
+ +
           | 'jnode'
+ +
           | 'map'
+ +
           | 'record'
+ +
           | 'switch'
+ +
           | 'type'
+ +
           | 'typeswitch'
+

+ +

referenced by: + +

+


UnreservedFunctionQName:

+ + + + + + + + + + UnreservedQName + + + + NaN + + + + + + allowing + + + + + + ancestor + + + + + + ancestor-or-self + + + + + + and + + + + + + as + + + + + + ascending + + + + + + at + + + + + + base-uri + + + + + + boundary-space + + + + + + by + + + + + + case + + + + + + cast + + + + + + castable + + + + + + catch + + + + + + child + + + + + + collation + + + + + + construction + + + + + + context + + + + + + copy-namespaces + + + + + + count + + + + + + decimal-format + + + + + + decimal-separator + + + + + + declare + + + + + + default + + + + + + descendant + + + + + + descendant-or-self + + + + + + descending + + + + + + digit + + + + + + div + + + + + + document + + + + + + else + + + + + + empty + + + + + + empty-sequence + + + + + + encoding + + + + + + end + + + + + + eq + + + + + + every + + + + + + except + + + + + + exponent-separator + + + + + + external + + + + + + false + + + + + + finally + + + + + + fixed + + + + + + following + + + + + + following-or-self + + + + + + following-sibling + + + + + + following-sibling-or-self + + + + + + follows + + + + + + for + + + + + + ge + + + + + + greatest + + + + + + group + + + + + + grouping-separator + + + + + + gt + + + + + + idiv + + + + + + import + + + + + + in + + + + + + infinity + + + + + + inherit + + + + + + instance + + + + + + intersect + + + + + + is + + + + + + is-not + + + + + + key + + + + + + lax + + + + + + le + + + + + + least + + + + + + let + + + + + + lt + + + + + + member + + + + + + minus-sign + + + + + + mod + + + + + + module + + + + + + namespace + + + + + + ne + + + + + + next + + + + + + no-inherit + + + + + + no-preserve + + + + + + of + + + + + + only + + + + + + option + + + + + + or + + + + + + order + + + + + + ordered + + + + + + ordering + + + + + + otherwise + + + + + + parent + + + + + + pattern-separator + + + + + + per-mille + + + + + + percent + + + + + + precedes + + + + + + preceding + + + + + + preceding-or-self + + + + + + preceding-sibling + + + + + + preceding-sibling-or-self + + + + + + preserve + + + + + + previous + + + + + + return + + + + + + satisfies + + + + + + schema + + + + + + self + + + + + + sliding + + + + + + some + + + + + + stable + + + + + + start + + + + + + strict + + + + + + strip + + + + + + then + + + + + + to + + + + + + treat + + + + + + true + + + + + + try + + + + + + tumbling + + + + + + union + + + + + + unordered + + + + + + validate + + + + + + value + + + + + + variable + + + + + + version + + + + + + when + + + + + + where + + + + + + while + + + + + + window + + + + + + xquery + + + + + + zero-digit + + + + + +

+ +

+ + + +
         ::= UnreservedQName
+ +
           | 'NaN'
+ +
           | 'allowing'
+ +
           | 'ancestor'
+ +
           | 'ancestor-or-self'
+ +
           | 'and'
+ +
           | 'as'
+ +
           | 'ascending'
+ +
           | 'at'
+ +
           | 'base-uri'
+ +
           | 'boundary-space'
+ +
           | 'by'
+ +
           | 'case'
+ +
           | 'cast'
+ +
           | 'castable'
+ +
           | 'catch'
+ +
           | 'child'
+ +
           | 'collation'
+ +
           | 'construction'
+ +
           | 'context'
+ +
           | 'copy-namespaces'
+ +
           | 'count'
+ +
           | 'decimal-format'
+ +
           | 'decimal-separator'
+ +
           | 'declare'
+ +
           | 'default'
+ +
           | 'descendant'
+ +
           | 'descendant-or-self'
+ +
           | 'descending'
+ +
           | 'digit'
+ +
           | 'div'
+ +
           | 'document'
+ +
           | 'else'
+ +
           | 'empty'
+ +
           | 'empty-sequence'
+ +
           | 'encoding'
+ +
           | 'end'
+ +
           | 'eq'
+ +
           | 'every'
+ +
           | 'except'
+ +
           | 'exponent-separator'
+ +
           | 'external'
+ +
           | 'false'
+ +
           | 'finally'
+ +
           | 'fixed'
+ +
           | 'following'
+ +
           | 'following-or-self'
+ +
           | 'following-sibling'
+ +
           | 'following-sibling-or-self'
+ +
           | 'follows'
+ +
           | 'for'
+ +
           | 'ge'
+ +
           | 'greatest'
+ +
           | 'group'
+ +
           | 'grouping-separator'
+ +
           | 'gt'
+ +
           | 'idiv'
+ +
           | 'import'
+ +
           | 'in'
+ +
           | 'infinity'
+ +
           | 'inherit'
+ +
           | 'instance'
+ +
           | 'intersect'
+ +
           | 'is'
+ +
           | 'is-not'
+ +
           | 'key'
+ +
           | 'lax'
+ +
           | 'le'
+ +
           | 'least'
+ +
           | 'let'
+ +
           | 'lt'
+ +
           | 'member'
+ +
           | 'minus-sign'
+ +
           | 'mod'
+ +
           | 'module'
+ +
           | 'namespace'
+ +
           | 'ne'
+ +
           | 'next'
+ +
           | 'no-inherit'
+ +
           | 'no-preserve'
+ +
           | 'of'
+ +
           | 'only'
+ +
           | 'option'
+ +
           | 'or'
+ +
           | 'order'
+ +
           | 'ordered'
+ +
           | 'ordering'
+ +
           | 'otherwise'
+ +
           | 'parent'
+ +
           | 'pattern-separator'
+ +
           | 'per-mille'
+ +
           | 'percent'
+ +
           | 'precedes'
+ +
           | 'preceding'
+ +
           | 'preceding-or-self'
+ +
           | 'preceding-sibling'
+ +
           | 'preceding-sibling-or-self'
+ +
           | 'preserve'
+ +
           | 'previous'
+ +
           | 'return'
+ +
           | 'satisfies'
+ +
           | 'schema'
+ +
           | 'self'
+ +
           | 'sliding'
+ +
           | 'some'
+ +
           | 'stable'
+ +
           | 'start'
+ +
           | 'strict'
+ +
           | 'strip'
+ +
           | 'then'
+ +
           | 'to'
+ +
           | 'treat'
+ +
           | 'true'
+ +
           | 'try'
+ +
           | 'tumbling'
+ +
           | 'union'
+ +
           | 'unordered'
+ +
           | 'validate'
+ +
           | 'value'
+ +
           | 'variable'
+ +
           | 'version'
+ +
           | 'when'
+ +
           | 'where'
+ +
           | 'while'
+ +
           | 'window'
+ +
           | 'xquery'
+ +
           | 'zero-digit'
+

+ +

referenced by: + +

+


DFPropertyName:

+ + + + + + + + + + decimal-separator + + + + + + grouping-separator + + + + + + infinity + + + + + + minus-sign + + + + + + NaN + + + + + + percent + + + + + + per-mille + + + + + + zero-digit + + + + + + digit + + + + + + pattern-separator + + + + + + exponent-separator + + + + + +

+ +

+ + + +
         ::= 'decimal-separator'
+ +
           | 'grouping-separator'
+ +
           | 'infinity'
+ +
           | 'minus-sign'
+ +
           | 'NaN'
+ +
           | 'percent'
+ +
           | 'per-mille'
+ +
           | 'zero-digit'
+ +
           | 'digit'
+ +
           | 'pattern-separator'
+ +
           | 'exponent-separator'
+

+ +

referenced by: + +

+


NamespaceDecl:

+ + + + + + + + + + declare + + + + + + namespace + + + + + + NCName + + + + = + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= 'declare' 'namespace' NCName '=' URILiteral
+

+ +

referenced by: + +

+


Import:

+ + + + + + + + + + SchemaImport + + + + + + ModuleImport + + + +

+ +

+ + + +
           | ModuleImport
+

+ +

referenced by: + +

+


SchemaImport:

+ + + + + + + + + + import + + + + + + schema + + + + + + SchemaPrefix + + + + + + URILiteral + + + + at + + + + + + URILiteral + + + + , + + + + + +

+ +

+ + + +
         ::= 'import' 'schema' SchemaPrefix? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )?
+

+ +

referenced by: + +

+


SchemaPrefix:

+ + + + + + + + + + namespace + + + + + + NCName + + + + = + + + + + + fixed + + + + + + default + + + + + + element + + + + + + namespace + + + + + +

+ +

+ + + +
         ::= 'namespace' NCName '='
+ +
           | 'fixed'? 'default' 'element' 'namespace'
+

+ +

referenced by: + +

+


ModuleImport:

+ + + + + + + + + + import + + + + + + module + + + + + + namespace + + + + + + NCName + + + + = + + + + + + URILiteral + + + + at + + + + + + URILiteral + + + + , + + + + + +

+ +

+ + + +
         ::= 'import' 'module' ( 'namespace' NCName '=' )? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )?
+

+ +

referenced by: + +

+


ContextValueDecl:

+ + + + + + + + + + declare + + + + + + context + + + + + + value + + + + + + as + + + + + + SequenceType + + + + item + + + + + + as + + + + + + ItemType + + + + := + + + + + + VarValue + + + + external + + + + + + := + + + + + + VarDefaultValue + + + +

+ +

+ + + +
         ::= 'declare' 'context' ( 'value' ( 'as' SequenceType )? | 'item' ( 'as' ItemType )? ) ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? )
+

+ +

referenced by: + +

+


SequenceType:

+ + + + + + + + + + empty-sequence + + + + + + ( + + + + + + ) + + + + + + ItemType + + + + + + OccurrenceIndicator + + + +

+ +

+ + + +
         ::= 'empty-sequence' '(' ')'
+ +
           | ItemType ( OccurrenceIndicator | )
+

+ +

referenced by: + +

+


ItemType:

+ + + + + + + + + + RegularItemType + + + + + + FunctionType + + + + + + TypeName + + + + + + ChoiceItemType + + + +

+ +

+ + + +
           | FunctionType
+ +
           | TypeName
+ +
           | ChoiceItemType
+

+ +

referenced by: + +

+


RegularItemType:

+ + + + + + + + + + AnyItemTest + + + + + + NodeKindTest + + + + + + GNodeType + + + + + + JNodeType + + + + + + MapType + + + + + + ArrayType + + + + + + RecordType + + + + + + EnumerationType + + + +

+ +

+ + + +
         ::= AnyItemTest
+ +
           | NodeKindTest
+ +
           | GNodeType
+ +
           | JNodeType
+ +
           | MapType
+ +
           | ArrayType
+ +
           | RecordType
+ +
           | EnumerationType
+

+ +

referenced by: + +

+


AnyItemTest:

+ + + + + + + + + + item + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'item' '(' ')'
+

+ +

referenced by: + +

+


NodeKindTest:

+ + + + + + + + + + DocumentTest + + + + + + ElementTest + + + + + + AttributeTest + + + + + + SchemaElementTest + + + + + + SchemaAttributeTest + + + + + + PITest + + + + + + CommentTest + + + + + + TextTest + + + + + + NamespaceNodeTest + + + + + + AnyNodeKindTest + + + +

+ +

+ + + +
         ::= DocumentTest
+ +
           | ElementTest
+ +
           | AttributeTest
+ +
           | SchemaElementTest
+ +
           | SchemaAttributeTest
+ +
           | PITest
+ +
           | CommentTest
+ +
           | TextTest
+ +
           | NamespaceNodeTest
+ +
           | AnyNodeKindTest
+

+ +

referenced by: + +

+


DocumentTest:

+ + + + + + + + + + document-node + + + + + + ( + + + + + + ElementTest + + + + + + SchemaElementTest + + + + + + NameTestUnion + + + + ) + + + + + +

+ +

+ + + +
         ::= 'document-node' '(' ( ElementTest | SchemaElementTest | NameTestUnion )? ')'
+

+ +

referenced by: + +

+


ElementTest:

+ + + + + + + + + + element + + + + + + ( + + + + + + NameTestUnion + + + + , + + + + + + TypeName + + + + ? + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'element' '(' ( NameTestUnion ( ',' TypeName '?'? )? )? ')'
+

+ +

referenced by: + +

+


NameTestUnion:

+ + + + + + + + + + NameTest + + + + | + + + + + +

+ +

+ + + +
         ::= NameTest ( '|' NameTest )*
+

+ +

referenced by: + +

+


NameTest:

+ + + + + + + + + + EQName + + + + + + Wildcard + + + +

+ +

+ + + +
           | Wildcard
+

+ +

referenced by: + +

+


TypeName:

+ + + + + + + + + + EQName + + + +

+ +

+ +
+

+ +

referenced by: + +

+


SchemaElementTest:

+ + + + + + + + + + schema-element + + + + + + ( + + + + + + ElementName + + + + ) + + + + + +

+ +

+ + + +
         ::= 'schema-element' '(' ElementName ')'
+

+ +

referenced by: + +

+


ElementName:

+ + + + + + + + + + EQName + + + +

+ +

+ + + +
         ::= EQName
+

+ +

referenced by: + +

+


AttributeTest:

+ + + + + + + + + + attribute + + + + + + ( + + + + + + NameTestUnion + + + + , + + + + + + TypeName + + + + ) + + + + + +

+ +

+ + + +
         ::= 'attribute' '(' ( NameTestUnion ( ',' TypeName )? )? ')'
+

+ +

referenced by: + +

+


SchemaAttributeTest:

+ + + + + + + + + + schema-attribute + + + + + + ( + + + + + + AttributeName + + + + ) + + + + + +

+ +

+ + + +
         ::= 'schema-attribute' '(' AttributeName ')'
+

+ +

referenced by: + +

+


AttributeName:

+ + + + + + + + + + EQName + + + +

+ +

+ + + +
         ::= EQName
+

+ +

referenced by: + +

+


PITest:

+ + + + + + + + + + processing-instruction + + + + + + ( + + + + + + NCName + + + + + + StringLiteral + + + + ) + + + + + +

+ +

+ +
PITest   ::= 'processing-instruction' '(' ( NCName | StringLiteral )? ')'
+

+ +

referenced by: + +

+


CommentTest:

+ + + + + + + + + + comment + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'comment' '(' ')'
+

+ +

referenced by: + +

+


TextTest:

+ + + + + + + + + + text + + + + + + ( + + + + + + ) + + + + + +

+ +

+ +
TextTest ::= 'text' '(' ')'
+

+ +

referenced by: + +

+


NamespaceNodeTest:

+ + + + + + + + + + namespace-node + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'namespace-node' '(' ')'
+

+ +

referenced by: + +

+


AnyNodeKindTest:

+ + + + + + + + + + node + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'node' '(' ')'
+

+ +

referenced by: + +

+


GNodeType:

+ + + + + + + + + + gnode + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'gnode' '(' ')'
+

+ +

referenced by: + +

+


JNodeType:

+ + + + + + + + + + jnode + + + + + + ( + + + + + + SequenceType + + + + ) + + + + + +

+ +

+ + + +
         ::= 'jnode' '(' SequenceType? ')'
+

+ +

referenced by: + +

+


MapType:

+ + + + + + + + + + AnyMapType + + + + + + TypedMapType + + + +

+ +

+ + + +
           | TypedMapType
+

+ +

referenced by: + +

+


AnyMapType:

+ + + + + + + + + + map + + + + + + ( + + + + + + * + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'map' '(' '*' ')'
+

+ +

referenced by: + +

+


TypedMapType:

+ + + + + + + + + + map + + + + + + ( + + + + + + ItemType + + + + , + + + + + + SequenceType + + + + ) + + + + + +

+ +

+ + + +
         ::= 'map' '(' ItemType ',' SequenceType ')'
+

+ +

referenced by: + +

+


ArrayType:

+ + + + + + + + + + AnyArrayType + + + + + + TypedArrayType + + + +

+ +

+ + + +
         ::= AnyArrayType
+ +
           | TypedArrayType
+

+ +

referenced by: + +

+


AnyArrayType:

+ + + + + + + + + + array + + + + + + ( + + + + + + * + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'array' '(' '*' ')'
+

+ +

referenced by: + +

+


TypedArrayType:

+ + + + + + + + + + array + + + + + + ( + + + + + + SequenceType + + + + ) + + + + + +

+ +

+ + + +
         ::= 'array' '(' SequenceType ')'
+

+ +

referenced by: + +

+


RecordType:

+ + + + + + + + + + AnyRecordType + + + + + + TypedRecordType + + + +

+ +

+ + + +
         ::= AnyRecordType
+ +
           | TypedRecordType
+

+ +

referenced by: + +

+


AnyRecordType:

+ + + + + + + + + + record + + + + + + ( + + + + + + * + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'record' '(' '*' ')'
+

+ +

referenced by: + +

+


TypedRecordType:

+ + + + + + + + + + record + + + + + + ( + + + + + + FieldDeclaration + + + + , + + + + + + ExtensibleFlag + + + + ) + + + + + +

+ +

+ + + +
         ::= 'record' '(' ( FieldDeclaration ( ',' FieldDeclaration )* )? ExtensibleFlag? ')'
+

+ +

referenced by: + +

+


FieldDeclaration:

+ + + + + + + + + + FieldName + + + + ? + + + + + + as + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= FieldName '?'? ( 'as' SequenceType )?
+

+ +

referenced by: + +

+


FieldName:

+ + + + + + + + + + NCName + + + + + + StringLiteral + + + +

+ +

+ + + +
         ::= NCName
+ +
           | StringLiteral
+

+ +

referenced by: + +

+


ExtensibleFlag:

+ + + + + + + + + + , + + + + + + * + + + + + +

+ +

+ + + +
         ::= ',' '*'
+

+ +

referenced by: + +

+


EnumerationType:

+ + + + + + + + + + enum + + + + + + ( + + + + + + StringLiteral + + + + , + + + + + + ) + + + + + +

+ +

+ + + +
         ::= 'enum' '(' StringLiteral ( ',' StringLiteral )* ')'
+

+ +

referenced by: + +

+


FunctionType:

+ + + + + + + + + + Annotation + + + + + + AnyFunctionType + + + + + + TypedFunctionType + + + +

+ +

+ + + +
         ::= Annotation* ( AnyFunctionType | TypedFunctionType )
+

+ +

referenced by: + +

+


Annotation:

+ + + + + + + + + + % + + + + + + EQName + + + + ( + + + + + + AnnotationValue + + + + , + + + + + + ) + + + + + +

+ +

+ + + +
         ::= '%' EQName ( '(' AnnotationValue ( ',' AnnotationValue )* ')' )?
+

+ +

referenced by: + +

+


AnnotationValue:

+ + + + + + + + + + StringLiteral + + + + - + + + + + + NumericLiteral + + + + + + QNameLiteral + + + + true + + + + + + false + + + + + + ( + + + + + + ) + + + + + +

+ +

+ + + +
         ::= StringLiteral
+ +
           | '-'? NumericLiteral
+ +
           | QNameLiteral
+ +
           | ( 'true' | 'false' ) '(' ')'
+

+ +

referenced by: + +

+


NumericLiteral:

+ + + + + + + + + + IntegerLiteral + + + + + + HexIntegerLiteral + + + + + + BinaryIntegerLiteral + + + + + + DecimalLiteral + + + + + + DoubleLiteral + + + +

+ +

+ + + +
         ::= IntegerLiteral
+ +
           | HexIntegerLiteral
+ +
           | BinaryIntegerLiteral
+ +
           | DecimalLiteral
+ +
           | DoubleLiteral
+

+ +

referenced by: + +

+


QNameLiteral:

+ + + + + + + + + + # + + + + + + EQName + + + +

+ +

+ + + +
         ::= '#' EQName
+

+ +

referenced by: + +

+


AnyFunctionType:

+ + + + + + + + + + function + + + + + + fn + + + + + + ( + + + + + + * + + + + + + ) + + + + + +

+ +

+ + + +
         ::= ( 'function' | 'fn' ) '(' '*' ')'
+

+ +

referenced by: + +

+


TypedFunctionType:

+ + + + + + + + + + function + + + + + + fn + + + + + + ( + + + + + + TypedFunctionParam + + + + , + + + + + + ) + + + + + + as + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= ( 'function' | 'fn' ) '(' ( TypedFunctionParam ( ',' TypedFunctionParam )* )? ')' 'as' SequenceType
+

+ +

referenced by: + +

+


TypedFunctionParam:

+ + + + + + + + + + $ + + + + + + EQName + + + + as + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= ( '$' EQName 'as' )? SequenceType
+

+ +

referenced by: + +

+


ChoiceItemType:

+ + + + + + + + + + ( + + + + + + ItemType + + + + | + + + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' ItemType ( '|' ItemType )* ')'
+

+ +

referenced by: + +

+


OccurrenceIndicator:

+ + + + + + + + + + ? + + + + + + * + + + + + + + + + + + + +

+ +

+ + + +
         ::= '?'
+ +
           | '*'
+ +
           | '+'
+

+ +

referenced by: + +

+


VarValue:

+ + + + + + + + + + ExprSingle + + + +

+ +

+

+ +

referenced by: + +

+


ExprSingle:

+ + + + + + + + + + FLWORExpr + + + + + + QuantifiedExpr + + + + + + SwitchExpr + + + + + + TypeswitchExpr + + + + + + IfExpr + + + + + + TryCatchExpr + + + + + + OrExpr + + + +

+ +

+ + + +
         ::= FLWORExpr
+ +
           | QuantifiedExpr
+ +
           | SwitchExpr
+ +
           | TypeswitchExpr
+ +
           | IfExpr
+ +
           | TryCatchExpr
+ +
           | OrExpr
+

+ +

referenced by: + +

+


FLWORExpr:

+ + + + + + + + + + InitialClause + + + + + + IntermediateClause + + + + + + ReturnClause + + + +

+ +

+ + + +
+

+ +

referenced by: + +

+


InitialClause:

+ + + + + + + + + + ForClause + + + + + + LetClause + + + + + + WindowClause + + + +

+ +

+ + + +
         ::= ForClause
+ +
           | LetClause
+ +
           | WindowClause
+

+ +

referenced by: + +

+


ForClause:

+ + + + + + + + + + for + + + + + + ForBinding + + + + , + + + + + +

+ +

+ + + +
         ::= 'for' ForBinding ( ',' ForBinding )*
+

+ +

referenced by: + +

+


ForBinding:

+ + + + + + + + + + ForItemBinding + + + + + + ForMemberBinding + + + + + + ForEntryBinding + + + +

+ +

+ + + +
         ::= ForItemBinding
+ +
           | ForMemberBinding
+ +
           | ForEntryBinding
+

+ +

referenced by: + +

+


ForItemBinding:

+ + + + + + + + + + VarNameAndType + + + + + + AllowingEmpty + + + + + + PositionalVar + + + + in + + + + + + ExprSingle + + + +

+ +

+

+ +

referenced by: + +

+


VarNameAndType:

+ + + + + + + + + + $ + + + + + + EQName + + + + + + TypeDeclaration + + + +

+ +

+ + + +
         ::= '$' EQName TypeDeclaration?
+

+ +

referenced by: + +

+


TypeDeclaration:

+ + + + + + + + + + as + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= 'as' SequenceType
+

+ +

referenced by: + +

+


AllowingEmpty:

+ + + + + + + + + + allowing + + + + + + empty + + + + + +

+ +

+ + + +
         ::= 'allowing' 'empty'
+

+ +

referenced by: + +

+


PositionalVar:

+ + + + + + + + + + at + + + + + + VarName + + + +

+ +

+ + + +
         ::= 'at' VarName
+

+ +

referenced by: + +

+


VarName:

+ + + + + + + + + + $ + + + + + + EQName + + + +

+ +

+ +
VarName  ::= '$' EQName
+

+ +

referenced by: + +

+


ForMemberBinding:

+ + + + + + + + + + member + + + + + + VarNameAndType + + + + + + PositionalVar + + + + in + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'member' VarNameAndType PositionalVar? 'in' ExprSingle
+

+ +

referenced by: + +

+


ForEntryBinding:

+ + + + + + + + + + ForEntryKeyBinding + + + + + + ForEntryValueBinding + + + + + + ForEntryValueBinding + + + + + + PositionalVar + + + + in + + + + + + ExprSingle + + + +

+ +

+

+ +

referenced by: + +

+


ForEntryKeyBinding:

+ + + + + + + + + + key + + + + + + VarNameAndType + + + +

+ +

+ + + +
         ::= 'key' VarNameAndType
+

+ +

referenced by: + +

+


ForEntryValueBinding:

+ + + + + + + + + + value + + + + + + VarNameAndType + + + +

+ +

+ + + +
         ::= 'value' VarNameAndType
+

+ +

referenced by: + +

+


LetClause:

+ + + + + + + + + + let + + + + + + LetBinding + + + + , + + + + + +

+ +

+ + + +
         ::= 'let' LetBinding ( ',' LetBinding )*
+

+ +

referenced by: + +

+


LetBinding:

+ + + + + + + + + + LetValueBinding + + + + + + LetSequenceBinding + + + + + + LetArrayBinding + + + + + + LetMapBinding + + + +

+ +

+ + + +
         ::= LetValueBinding
+ +
           | LetSequenceBinding
+ +
           | LetArrayBinding
+ +
           | LetMapBinding
+

+ +

referenced by: + +

+


LetValueBinding:

+ + + + + + + + + + VarNameAndType + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= VarNameAndType ':=' ExprSingle
+

+ +

referenced by: + +

+


LetSequenceBinding:

+ + + + + + + + + + $ + + + + + + ( + + + + + + VarNameAndType + + + + , + + + + + + ) + + + + + + TypeDeclaration + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= '$' '(' VarNameAndType ( ',' VarNameAndType )* ')' TypeDeclaration? ':=' ExprSingle
+

+ +

referenced by: + +

+


LetArrayBinding:

+ + + + + + + + + + $ + + + + + + [ + + + + + + VarNameAndType + + + + , + + + + + + ] + + + + + + TypeDeclaration + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= '$' '[' VarNameAndType ( ',' VarNameAndType )* ']' TypeDeclaration? ':=' ExprSingle
+

+ +

referenced by: + +

+


LetMapBinding:

+ + + + + + + + + + $ + + + + + + { + + + + + + VarNameAndType + + + + , + + + + + + } + + + + + + TypeDeclaration + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= '$' '{' VarNameAndType ( ',' VarNameAndType )* '}' TypeDeclaration? ':=' ExprSingle
+

+ +

referenced by: + +

+


WindowClause:

+ + + + + + + + + + for + + + + + + TumblingWindowClause + + + + + + SlidingWindowClause + + + +

+ +

+ + + +
         ::= 'for' ( TumblingWindowClause | SlidingWindowClause )
+

+ +

referenced by: + +

+


TumblingWindowClause:

+ + + + + + + + + + tumbling + + + + + + window + + + + + + VarNameAndType + + + + in + + + + + + ExprSingle + + + + + + WindowStartCondition + + + + + + WindowEndCondition + + + +

+ +

+ + + +
         ::= 'tumbling' 'window' VarNameAndType 'in' ExprSingle WindowStartCondition? WindowEndCondition?
+

+ +

referenced by: + +

+


WindowStartCondition:

+ + + + + + + + + + start + + + + + + WindowVars + + + + when + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'start' WindowVars ( 'when' ExprSingle )?
+

+ +

referenced by: + +

+


WindowVars:

+ + + + + + + + + + CurrentVar + + + + + + PositionalVar + + + + + + PreviousVar + + + + + + NextVar + + + +

+ +

+ + + +
         ::= CurrentVar? PositionalVar? PreviousVar? NextVar?
+

+ +

referenced by: + +

+


CurrentVar:

+ + + + + + + + + + VarName + + + +

+ +

+ + + +
         ::= VarName
+

+ +

referenced by: + +

+


PreviousVar:

+ + + + + + + + + + previous + + + + + + VarName + + + +

+ +

+ + + +
         ::= 'previous' VarName
+

+ +

referenced by: + +

+


NextVar:

+ + + + + + + + + + next + + + + + + VarName + + + +

+ +

+ +
NextVar  ::= 'next' VarName
+

+ +

referenced by: + +

+


WindowEndCondition:

+ + + + + + + + + + only + + + + + + end + + + + + + WindowVars + + + + when + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'only'? 'end' WindowVars ( 'when' ExprSingle )?
+

+ +

referenced by: + +

+


SlidingWindowClause:

+ + + + + + + + + + sliding + + + + + + window + + + + + + VarNameAndType + + + + in + + + + + + ExprSingle + + + + + + WindowStartCondition + + + + + + WindowEndCondition + + + +

+ +

+ + + +
         ::= 'sliding' 'window' VarNameAndType 'in' ExprSingle WindowStartCondition? WindowEndCondition
+

+ +

referenced by: + +

+


IntermediateClause:

+ + + + + + + + + + InitialClause + + + + + + WhereClause + + + + + + WhileClause + + + + + + GroupByClause + + + + + + OrderByClause + + + + + + CountClause + + + +

+ +

+ + + +
         ::= InitialClause
+ +
           | WhereClause
+ +
           | WhileClause
+ +
           | GroupByClause
+ +
           | OrderByClause
+ +
           | CountClause
+

+ +

referenced by: + +

+


WhereClause:

+ + + + + + + + + + where + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'where' ExprSingle
+

+ +

referenced by: + +

+


WhileClause:

+ + + + + + + + + + while + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'while' ExprSingle
+

+ +

referenced by: + +

+


GroupByClause:

+ + + + + + + + + + group + + + + + + by + + + + + + GroupingSpec + + + + , + + + + + +

+ +

+ + + +
         ::= 'group' 'by' GroupingSpec ( ',' GroupingSpec )*
+

+ +

referenced by: + +

+


GroupingSpec:

+ + + + + + + + + + VarName + + + + + + TypeDeclaration + + + + := + + + + + + ExprSingle + + + + collation + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= VarName ( TypeDeclaration? ':=' ExprSingle )? ( 'collation' URILiteral )?
+

+ +

referenced by: + +

+


OrderByClause:

+ + + + + + + + + + stable + + + + + + order + + + + + + by + + + + + + OrderSpec + + + + , + + + + + +

+ +

+ + + +
         ::= 'stable'? 'order' 'by' OrderSpec ( ',' OrderSpec )*
+

+ +

referenced by: + +

+


OrderSpec:

+ + + + + + + + + + ExprSingle + + + + + + OrderModifier + + + +

+ +

+ + + +
         ::= ExprSingle OrderModifier
+

+ +

referenced by: + +

+


OrderModifier:

+ + + + + + + + + + ascending + + + + + + descending + + + + + + empty + + + + + + greatest + + + + + + least + + + + + + collation + + + + + + URILiteral + + + +

+ +

+ + + +
         ::= ( 'ascending' | 'descending' )? ( 'empty' ( 'greatest' | 'least' ) )? + ( 'collation' URILiteral )?
+

+ +

referenced by: + +

+


CountClause:

+ + + + + + + + + + count + + + + + + VarName + + + +

+ +

+ + + +
         ::= 'count' VarName
+

+ +

referenced by: + +

+


ReturnClause:

+ + + + + + + + + + return + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'return' ExprSingle
+

+ +

referenced by: + +

+


QuantifiedExpr:

+ + + + + + + + + + some + + + + + + every + + + + + + QuantifierBinding + + + + , + + + + + + satisfies + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= ( 'some' | 'every' ) QuantifierBinding ( ',' QuantifierBinding )* 'satisfies' ExprSingle
+

+ +

referenced by: + +

+


QuantifierBinding:

+ + + + + + + + + + VarNameAndType + + + + in + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= VarNameAndType 'in' ExprSingle
+

+ +

referenced by: + +

+


SwitchExpr:

+ + + + + + + + + + switch + + + + + + SwitchComparand + + + + + + SwitchCases + + + + + + BracedSwitchCases + + + +

+ +

+ + + +
         ::= 'switch' SwitchComparand ( SwitchCases | BracedSwitchCases )
+

+ +

referenced by: + +

+


SwitchComparand:

+ + + + + + + + + + ( + + + + + + Expr + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' Expr? ')'
+

+ +

referenced by: + +

+


Expr:

+ + + + + + + + + + ExprSingle + + + + , + + + + + +

+ +

+ +
Expr     ::= ExprSingle ( ',' ExprSingle )*
+

+ +

referenced by: + +

+


SwitchCases:

+ + + + + + + + + + SwitchCaseClause + + + + default + + + + + + return + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= SwitchCaseClause+ 'default' 'return' ExprSingle
+

+ +

referenced by: + +

+


SwitchCaseClause:

+ + + + + + + + + + case + + + + + + SwitchCaseOperand + + + + return + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= ( 'case' SwitchCaseOperand )+ 'return' ExprSingle
+

+ +

referenced by: + +

+


SwitchCaseOperand:

+ + + + + + + + + + Expr + + + +

+ +

+ + + +
         ::= Expr
+

+ +

referenced by: + +

+


BracedSwitchCases:

+ + + + + + + + + + { + + + + + + SwitchCases + + + + } + + + + + +

+ +

+ + + +
         ::= '{' SwitchCases '}'
+

+ +

referenced by: + +

+


TypeswitchExpr:

+ + + + + + + + + + typeswitch + + + + + + ( + + + + + + Expr + + + + ) + + + + + + TypeswitchCases + + + + + + BracedTypeswitchCases + + + +

+ +

+ + + +
         ::= 'typeswitch' '(' Expr ')' ( TypeswitchCases | BracedTypeswitchCases )
+

+ +

referenced by: + +

+


TypeswitchCases:

+ + + + + + + + + + CaseClause + + + + default + + + + + + VarName + + + + return + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= CaseClause+ 'default' VarName? 'return' ExprSingle
+

+ +

referenced by: + +

+


CaseClause:

+ + + + + + + + + + case + + + + + + VarName + + + + as + + + + + + SequenceTypeUnion + + + + return + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'case' ( VarName 'as' )? SequenceTypeUnion 'return' ExprSingle
+

+ +

referenced by: + +

+


SequenceTypeUnion:

+ + + + + + + + + + SequenceType + + + + | + + + + + +

+ +

+ + + +
         ::= SequenceType ( '|' SequenceType )*
+

+ +

referenced by: + +

+


BracedTypeswitchCases:

+ + + + + + + + + + { + + + + + + TypeswitchCases + + + + } + + + + + +

+ +

+ + + +
         ::= '{' TypeswitchCases '}'
+

+ +

referenced by: + +

+


IfExpr:

+ + + + + + + + + + if + + + + + + ( + + + + + + Expr + + + + ) + + + + + + UnbracedActions + + + + + + BracedAction + + + +

+ +

+ +
IfExpr   ::= 'if' '(' Expr ')' ( UnbracedActions | BracedAction )
+

+ +

referenced by: + +

+


UnbracedActions:

+ + + + + + + + + + then + + + + + + ExprSingle + + + + else + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= 'then' ExprSingle 'else' ExprSingle
+

+ +

referenced by: + +

+


BracedAction:

+ + + + + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= EnclosedExpr
+

+ +

referenced by: + +

+


EnclosedExpr:

+ + + + + + + + + + { + + + + + + Expr + + + + } + + + + + +

+ +

+ + + +
         ::= '{' Expr? '}'
+

+ +

referenced by: + +

+


TryCatchExpr:

+ + + + + + + + + + TryClause + + + + + + CatchClause + + + + + + FinallyClause + + + + + + FinallyClause + + + +

+ +

+ + + +
         ::= TryClause ( CatchClause+ FinallyClause? | FinallyClause )
+

+ +

referenced by: + +

+


TryClause:

+ + + + + + + + + + try + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'try' EnclosedExpr
+

+ +

referenced by: + +

+


CatchClause:

+ + + + + + + + + + catch + + + + + + NameTestUnion + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'catch' NameTestUnion EnclosedExpr
+

+ +

referenced by: + +

+


FinallyClause:

+ + + + + + + + + + finally + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'finally' EnclosedExpr
+

+ +

referenced by: + +

+


OrExpr:

+ + + + + + + + + + AndExpr + + + + or + + + + + +

+ +

+ +
OrExpr   ::= AndExpr ( 'or' AndExpr )*
+

+ +

referenced by: + +

+


AndExpr:

+ + + + + + + + + + ComparisonExpr + + + + and + + + + + +

+ +

+ +
+

+ +

referenced by: + +

+


ComparisonExpr:

+ + + + + + + + + + OtherwiseExpr + + + + + + ValueComp + + + + + + GeneralComp + + + + + + NodeComp + + + + + + OtherwiseExpr + + + +

+ +

+ + + +
         ::= OtherwiseExpr ( ( ValueComp | GeneralComp | NodeComp ) OtherwiseExpr )?
+

+ +

referenced by: + +

+


OtherwiseExpr:

+ + + + + + + + + + StringConcatExpr + + + + otherwise + + + + + +

+ +

+ + + +
         ::= StringConcatExpr ( 'otherwise' StringConcatExpr )*
+

+ +

referenced by: + +

+


StringConcatExpr:

+ + + + + + + + + + RangeExpr + + + + || + + + + + +

+ +

+ + + +
         ::= RangeExpr ( '||' RangeExpr )*
+

+ +

referenced by: + +

+


RangeExpr:

+ + + + + + + + + + AdditiveExpr + + + + to + + + + + + AdditiveExpr + + + +

+ +

+ + + +
         ::= AdditiveExpr ( 'to' AdditiveExpr )?
+

+ +

referenced by: + +

+


AdditiveExpr:

+ + + + + + + + + + MultiplicativeExpr + + + + + + + + + + + - + + + + + +

+ +

+ + + +
         ::= MultiplicativeExpr ( ( '+' | '-' ) MultiplicativeExpr )*
+

+ +

referenced by: + +

+


MultiplicativeExpr:

+ + + + + + + + + + UnionExpr + + + + * + + + + + + × + + + + + + div + + + + + + ÷ + + + + + + idiv + + + + + + mod + + + + + +

+ +

+ + + +
         ::= UnionExpr ( ( '*' | '×' | 'div' | '÷' | 'idiv' | 'mod' ) UnionExpr )*
+

+ +

referenced by: + +

+


UnionExpr:

+ + + + + + + + + + IntersectExceptExpr + + + + union + + + + + + | + + + + + +

+ +

+ + + +
         ::= IntersectExceptExpr ( ( 'union' | '|' ) IntersectExceptExpr )*
+

+ +

referenced by: + +

+


IntersectExceptExpr:

+ + + + + + + + + + InstanceofExpr + + + + intersect + + + + + + except + + + + + +

+ +

+ + + +
         ::= InstanceofExpr ( ( 'intersect' | 'except' ) InstanceofExpr )*
+

+ +

referenced by: + +

+


InstanceofExpr:

+ + + + + + + + + + TreatExpr + + + + instance + + + + + + of + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= TreatExpr ( 'instance' 'of' SequenceType )?
+

+ +

referenced by: + +

+


TreatExpr:

+ + + + + + + + + + CastableExpr + + + + treat + + + + + + as + + + + + + SequenceType + + + +

+ +

+ + + +
         ::= CastableExpr ( 'treat' 'as' SequenceType )?
+

+ +

referenced by: + +

+


CastableExpr:

+ + + + + + + + + + CastExpr + + + + castable + + + + + + as + + + + + + CastTarget + + + + ? + + + + + +

+ +

+ + + +
         ::= CastExpr ( 'castable' 'as' CastTarget '?'? )?
+

+ +

referenced by: + +

+


CastExpr:

+ + + + + + + + + + PipelineExpr + + + + cast + + + + + + as + + + + + + CastTarget + + + + ? + + + + + +

+ +

+ +
CastExpr ::= PipelineExpr ( 'cast' 'as' CastTarget '?'? )?
+

+ +

referenced by: + +

+


PipelineExpr:

+ + + + + + + + + + ArrowExpr + + + + -> + + + + + +

+ +

+ + + +
         ::= ArrowExpr ( '->' ArrowExpr )*
+

+ +

referenced by: + +

+


ArrowExpr:

+ + + + + + + + + + UnaryExpr + + + + + + SequenceArrowTarget + + + + + + MappingArrowTarget + + + +

+ +

+ + + +
         ::= UnaryExpr ( SequenceArrowTarget | MappingArrowTarget )*
+

+ +

referenced by: + +

+


UnaryExpr:

+ + + + + + + + + + - + + + + + + + + + + + + + ValueExpr + + + +

+ +

+ + + +
         ::= ( '-' | '+' )* ValueExpr
+

+ +

referenced by: + +

+


ValueExpr:

+ + + + + + + + + + ValidateExpr + + + + + + ExtensionExpr + + + + + + SimpleMapExpr + + + +

+ +

+ + + +
         ::= ValidateExpr
+ +
           | ExtensionExpr
+ +
           | SimpleMapExpr
+

+ +

referenced by: + +

+


ValidateExpr:

+ + + + + + + + + + validate + + + + + + ValidationMode + + + + type + + + + + + TypeName + + + + { + + + + + + Expr + + + + } + + + + + +

+ +

+ + + +
         ::= 'validate' ( ValidationMode | 'type' TypeName )? '{' Expr '}'
+

+ +

referenced by: + +

+


ValidationMode:

+ + + + + + + + + + lax + + + + + + strict + + + + + +

+ +

+ + + +
         ::= 'lax'
+ +
           | 'strict'
+

+ +

referenced by: + +

+


ExtensionExpr:

+ + + + + + + + + + Pragma + + + + { + + + + + + Expr + + + + } + + + + + +

+ +

+ + + +
         ::= Pragma+ '{' Expr? '}'
+

+ +

referenced by: + +

+


Pragma:

+ + + + + + + + + + (# + + + + + + S + + + + + + EQName + + + + + + S + + + + + + PragmaContents + + + + #) + + + + + +

+ +

+ +
Pragma   ::= '(#' S EQName ( S PragmaContents )? '#)'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


SimpleMapExpr:

+ + + + + + + + + + PathExpr + + + + ! + + + + + +

+ +

+ + + +
         ::= PathExpr ( '!' PathExpr )*
+

+ +

referenced by: + +

+


PathExpr:

+ + + + + + + + + + AbsolutePathExpr + + + + + + RelativePathExpr + + + +

+ +

+ + + +
           | RelativePathExpr
+

+ +

referenced by: + +

+


AbsolutePathExpr:

+ + + + + + + + + + / + + + + + + RelativePathExpr + + + + // + + + + + + RelativePathExpr + + + +

+ +

+ + + +
         ::= '/' ( RelativePathExpr | )
+ +
           | '//' RelativePathExpr
+

+ +

referenced by: + +

+


RelativePathExpr:

+ + + + + + + + + + StepExpr + + + + / + + + + + + // + + + + + +

+ +

+ + + +
         ::= StepExpr ( ( '/' | '//' ) StepExpr )*
+

+ +

referenced by: + +

+


StepExpr:

+ + + + + + + + + + PostfixExpr + + + + + + AxisStep + + + +

+ +

+ + + +
           | AxisStep
+

+ +

referenced by: + +

+


PostfixExpr:

+ + + + + + + + + + PrimaryExpr + + + + + + FilterExpr + + + + + + DynamicFunctionCall + + + + + + LookupExpr + + + + + + MethodCall + + + + + + FilterExprAM + + + +

+ +

+ + + +
         ::= PrimaryExpr
+ +
           | FilterExpr
+ +
           | DynamicFunctionCall
+ +
           | LookupExpr
+ +
           | MethodCall
+ +
           | FilterExprAM
+

+ +

referenced by: + +

+


PrimaryExpr:

+ + + + + + + + + + Literal + + + + + + VarRef + + + + + + ParenthesizedExpr + + + + . + + + + + + FunctionCall + + + + + + OrderedExpr + + + + + + UnorderedExpr + + + + + + NodeConstructor + + + + + + FunctionItemExpr + + + + + + MapConstructor + + + + + + ArrayConstructor + + + + + + StringTemplate + + + + + + StringConstructor + + + + + + UnaryLookup + + + +

+ +

+ + + +
         ::= Literal
+ +
           | VarRef
+ +
           | ParenthesizedExpr
+ +
           | '.'
+ +
           | FunctionCall
+ +
           | OrderedExpr
+ +
           | UnorderedExpr
+ +
           | NodeConstructor
+ +
           | FunctionItemExpr
+ +
           | MapConstructor
+ +
           | ArrayConstructor
+ +
           | StringTemplate
+ +
           | StringConstructor
+ +
           | UnaryLookup
+

+ +

referenced by: + +

+


Literal:

+ + + + + + + + + + NumericLiteral + + + + + + StringLiteral + + + + + + QNameLiteral + + + +

+ +

+ + + +
           | StringLiteral
+ +
           | QNameLiteral
+

+ +

referenced by: + +

+


VarRef:

+ + + + + + + + + + $ + + + + + + EQName + + + +

+ +

+ +
VarRef   ::= '$' EQName
+

+ +

referenced by: + +

+


ParenthesizedExpr:

+ + + + + + + + + + ( + + + + + + Expr + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' Expr? ')'
+

+ +

referenced by: + +

+


FunctionCall:

+ + + + + + + + + + UnreservedFunctionEQName + + + + + + ArgumentList + + + +

+ +

+ + + +
+

+ +

referenced by: + +

+


UnreservedFunctionEQName:

+ + + + + + + + + + UnreservedFunctionQName + + + + + + URIQualifiedName + + + +

+ +

+ + + +
         ::= UnreservedFunctionQName
+ +
           | URIQualifiedName
+

+ +

referenced by: + +

+


ArgumentList:

+ + + + + + + + + + ( + + + + + + PositionalArguments + + + + , + + + + + + KeywordArguments + + + + + + KeywordArguments + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' ( PositionalArguments ( ',' KeywordArguments )? | KeywordArguments )? ')'
+

+ +

referenced by: + +

+


PositionalArguments:

+ + + + + + + + + + Argument + + + + , + + + + + +

+ +

+ + + +
         ::= Argument ( ',' Argument )*
+

+ +

referenced by: + +

+


Argument:

+ + + + + + + + + + ExprSingle + + + + ? + + + + + +

+ +

+ + + +
           | '?'
+

+ +

referenced by: + +

+


KeywordArguments:

+ + + + + + + + + + KeywordArgument + + + + , + + + + + +

+ +

+ + + +
         ::= KeywordArgument ( ',' KeywordArgument )*
+

+ +

referenced by: + +

+


KeywordArgument:

+ + + + + + + + + + EQName + + + + := + + + + + + Argument + + + +

+ +

+ + + +
         ::= EQName ':=' Argument
+

+ +

referenced by: + +

+


OrderedExpr:

+ + + + + + + + + + ordered + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'ordered' EnclosedExpr
+

+ +

referenced by: + +

+


UnorderedExpr:

+ + + + + + + + + + unordered + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'unordered' EnclosedExpr
+

+ +

referenced by: + +

+


NodeConstructor:

+ + + + + + + + + + DirectConstructor + + + + + + ComputedConstructor + + + +

+ +

+ + + +
         ::= DirectConstructor
+ +
           | ComputedConstructor
+

+ +

referenced by: + +

+


DirectConstructor:

+ + + + + + + + + + DirElemConstructor + + + + + + DirCommentConstructor + + + + + + DirPIConstructor + + + +

+ +

+ + + +
         ::= DirElemConstructor
+ +
           | DirCommentConstructor
+ +
           | DirPIConstructor
+

+ +

referenced by: + +

+


DirElemConstructor:

+ + + + + + + + + + < + + + + + + QName + + + + + + DirAttributeList + + + + > + + + + + + DirElemContent + + + + </ + + + + + + QName + + + + + + S + + + + > + + + + + + /> + + + + + +

+ +

+ + + +
         ::= '<'^DirElemConstructor QName DirAttributeList ( '/>' | '>' DirElemContent* '</' QName S? '>' )
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DirAttributeList:

+ + + + + + + + + + S + + + + + + QName + + + + + + S + + + + = + + + + + + S + + + + + + DirAttributeValue + + + +

+ +

+ + + +
         ::= ( S ( QName S? '=' S? DirAttributeValue )? )*
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DirAttributeValue:

+ + + + + + + + + + " + + + + + + "" + + + + + + QuotAttrValueContent + + + + " + + + + + + ' + + + + + + '' + + + + + + AposAttrValueContent + + + + ' + + + + + +

+ +

+ + + +
         ::= '"' ( '""' | QuotAttrValueContent )* '"'
+ +
           | "'" ( "''" | AposAttrValueContent )* "'"
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


QuotAttrValueContent:

+ + + + + + + + + + QuotAttrContentChar + + + + + + CommonContent + + + +

+ +

+ + + +
         ::= QuotAttrContentChar
+ +
           | CommonContent
+

+ +

referenced by: + +

+


CommonContent:

+ + + + + + + + + + PredefinedEntityRef + + + + + + CharRef + + + + {{ + + + + + + }} + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= PredefinedEntityRef
+ +
           | CharRef
+ +
           | '{{'
+ +
           | '}}'
+ +
           | EnclosedExpr
+

+ +

referenced by: + +

+


AposAttrValueContent:

+ + + + + + + + + + AposAttrContentChar + + + + + + CommonContent + + + +

+ +

+ + + +
         ::= AposAttrContentChar
+ +
           | CommonContent
+

+ +

referenced by: + +

+


DirElemContent:

+ + + + + + + + + + DirectConstructor + + + + + + CDataSection + + + + + + CommonContent + + + + + + ElementContentChar + + + +

+ +

+ + + +
         ::= DirectConstructor
+ +
           | CDataSection
+ +
           | CommonContent
+ +
           | ElementContentChar
+

+ +

referenced by: + +

+


CDataSection:

+ + + + + + + + + + <![CDATA[ + + + + + + CDataSectionContents + + + + ]]> + + + + + +

+ +

+ + + +
         ::= '<![CDATA[' CDataSectionContents ']]>'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DirCommentConstructor:

+ + + + + + + + + + <!-- + + + + + + DirCommentContents + + + + --> + + + + + +

+ +

+ + + +
         ::= '<!--' DirCommentContents '-->'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DirPIConstructor:

+ + + + + + + + + + <? + + + + + + PITarget + + + + + + S + + + + + + DirPIContents + + + + ?> + + + + + +

+ +

+ + + +
         ::= '<?' PITarget ( S DirPIContents )? '?>'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


ComputedConstructor:

+ + + + + + + + + + CompDocConstructor + + + + + + CompElemConstructor + + + + + + CompAttrConstructor + + + + + + CompNamespaceConstructor + + + + + + CompTextConstructor + + + + + + CompCommentConstructor + + + + + + CompPIConstructor + + + +

+ +

+ + + +
         ::= CompDocConstructor
+ +
           | CompElemConstructor
+ +
           | CompAttrConstructor
+ +
           | CompNamespaceConstructor
+ +
           | CompTextConstructor
+ +
           | CompCommentConstructor
+ +
           | CompPIConstructor
+

+ +

referenced by: + +

+


CompDocConstructor:

+ + + + + + + + + + document + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'document' EnclosedExpr
+

+ +

referenced by: + +

+


CompElemConstructor:

+ + + + + + + + + + element + + + + + + CompNodeName + + + + + + EnclosedContentExpr + + + +

+ +

+ + + +
         ::= 'element' CompNodeName EnclosedContentExpr
+

+ +

referenced by: + +

+


CompNodeName:

+ + + + + + + + + + QNameLiteral + + + + + + UnreservedName + + + + { + + + + + + Expr + + + + } + + + + + +

+ +

+ + + +
         ::= QNameLiteral
+ +
           | UnreservedName
+ +
           | '{' Expr '}'
+

+ +

referenced by: + +

+


UnreservedName:

+ + + + + + + + + + UnreservedQName + + + + + + URIQualifiedName + + + +

+ +

+ + + +
         ::= UnreservedQName
+ +
           | URIQualifiedName
+

+ +

referenced by: + +

+


EnclosedContentExpr:

+ + + + + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= EnclosedExpr
+

+ +

referenced by: + +

+


CompAttrConstructor:

+ + + + + + + + + + attribute + + + + + + CompNodeName + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'attribute' CompNodeName EnclosedExpr
+

+ +

referenced by: + +

+


CompNamespaceConstructor:

+ + + + + + + + + + namespace + + + + + + CompNodeNCName + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'namespace' CompNodeNCName EnclosedExpr
+

+ +

referenced by: + +

+


CompNodeNCName:

+ + + + + + + + + + MarkedNCName + + + + + + UnreservedNCName + + + + { + + + + + + Expr + + + + } + + + + + +

+ +

+ + + +
         ::= MarkedNCName
+ +
           | UnreservedNCName
+ +
           | '{' Expr '}'
+

+ +

referenced by: + +

+


MarkedNCName:

+ + + + + + + + + + # + + + + + + NCName + + + +

+ +

+ + + +
         ::= '#' NCName
+

+ +

referenced by: + +

+


CompTextConstructor:

+ + + + + + + + + + text + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'text' EnclosedExpr
+

+ +

referenced by: + +

+


CompCommentConstructor:

+ + + + + + + + + + comment + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'comment' EnclosedExpr
+

+ +

referenced by: + +

+


CompPIConstructor:

+ + + + + + + + + + processing-instruction + + + + + + CompNodeNCName + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'processing-instruction' CompNodeNCName EnclosedExpr
+

+ +

referenced by: + +

+


FunctionItemExpr:

+ + + + + + + + + + NamedFunctionRef + + + + + + InlineFunctionExpr + + + +

+ +

+ + + +
         ::= NamedFunctionRef
+ +
           | InlineFunctionExpr
+

+ +

referenced by: + +

+


NamedFunctionRef:

+ + + + + + + + + + UnreservedFunctionEQName + + + + # + + + + + + IntegerLiteral + + + +

+ +

+ + + +
         ::= UnreservedFunctionEQName '#' IntegerLiteral
+

+ +

referenced by: + +

+


InlineFunctionExpr:

+ + + + + + + + + + Annotation + + + + function + + + + + + fn + + + + + + FunctionSignature + + + + + + FunctionBody + + + +

+ +

+ + + +
         ::= Annotation* ( 'function' | 'fn' ) FunctionSignature? FunctionBody
+

+ +

referenced by: + +

+


FunctionSignature:

+ + + + + + + + + + ( + + + + + + ParamList + + + + ) + + + + + + TypeDeclaration + + + +

+ +

+ + + +
         ::= '(' ParamList ')' TypeDeclaration?
+

+ +

referenced by: + +

+


ParamList:

+ + + + + + + + + + VarNameAndType + + + + , + + + + + +

+ +

+ + + +
         ::= ( VarNameAndType ( ',' VarNameAndType )* )?
+

+ +

referenced by: + +

+


FunctionBody:

+ + + + + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= EnclosedExpr
+

+ +

referenced by: + +

+


MapConstructor:

+ + + + + + + + + + map + + + + + + { + + + + + + MapConstructorEntry + + + + , + + + + + + } + + + + + +

+ +

+ + + +
         ::= 'map'? '{' ( MapConstructorEntry ( ',' MapConstructorEntry )* )? '}'
+

+ +

referenced by: + +

+


MapConstructorEntry:

+ + + + + + + + + + ExprSingle + + + + : + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= ExprSingle ( ':' ExprSingle )?
+

+ +

referenced by: + +

+


ArrayConstructor:

+ + + + + + + + + + SquareArrayConstructor + + + + + + CurlyArrayConstructor + + + +

+ +

+ + + +
         ::= SquareArrayConstructor
+ +
           | CurlyArrayConstructor
+

+ +

referenced by: + +

+


SquareArrayConstructor:

+ + + + + + + + + + [ + + + + + + ExprSingle + + + + , + + + + + + ] + + + + + +

+ +

+ + + +
         ::= '[' ( ExprSingle ( ',' ExprSingle )* )? ']'
+

+ +

referenced by: + +

+


CurlyArrayConstructor:

+ + + + + + + + + + array + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= 'array' EnclosedExpr
+

+ +

referenced by: + +

+


StringTemplate:

+ + + + + + + + + + ` + + + + + + StringTemplateFixedPart + + + + + + StringTemplateVariablePart + + + + ` + + + + + +

+ +

+ + + +
         ::= '`' ( StringTemplateFixedPart | StringTemplateVariablePart )* '`'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


StringTemplateVariablePart:

+ + + + + + + + + + EnclosedExpr + + + +

+ +

+ + + +
         ::= EnclosedExpr
+

+ +

referenced by: + +

+


StringConstructor:

+ + + + + + + + + + ``[ + + + + + + StringConstructorContent + + + + ]`` + + + + + +

+ +

+ + + +
         ::= '``[' StringConstructorContent ']``'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


StringConstructorContent:

+ + + + + + + + + + StringConstructorChars + + + + + + StringInterpolation + + + +

+ +

+ + + + + +
          /* ws: explicit */
+

+ +

referenced by: + +

+


StringInterpolation:

+ + + + + + + + + + ` + + + + + + EnclosedExpr + + + + ` + + + + + +

+ +

+ + + +
         ::= '`' EnclosedExpr '`'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


UnaryLookup:

+ + + + + + + + + + Lookup + + + +

+ +

+ + + +
         ::= Lookup
+

+ +

referenced by: + +

+


Lookup:

+ + + + + + + + + + ? + + + + + + KeySpecifier + + + +

+ +

+ +
Lookup   ::= '?' KeySpecifier
+

+ +

referenced by: + +

+


KeySpecifier:

+ + + + + + + + + + NCName + + + + + + Literal + + + + . + + + + + + VarRef + + + + + + ParenthesizedExpr + + + + * + + + + + +

+ +

+ + + +
         ::= NCName
+ +
           | Literal
+ +
           | '.'
+ +
           | VarRef
+ +
           | ParenthesizedExpr
+ +
           | '*'
+

+ +

referenced by: + +

+


FilterExpr:

+ + + + + + + + + + PostfixExpr + + + + + + Predicate + + + +

+ +

+ + + +
         ::= PostfixExpr Predicate
+

+ +

referenced by: + +

+


Predicate:

+ + + + + + + + + + [ + + + + + + Expr + + + + ] + + + + + +

+ +

+ + + +
         ::= '[' Expr ']'
+

+ +

referenced by: + +

+


DynamicFunctionCall:

+ + + + + + + + + + PostfixExpr + + + + + + PositionalArgumentList + + + +

+ +

+

+ +

referenced by: + +

+


PositionalArgumentList:

+ + + + + + + + + + ( + + + + + + PositionalArguments + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' PositionalArguments? ')'
+

+ +

referenced by: + +

+


LookupExpr:

+ + + + + + + + + + PostfixExpr + + + + + + Lookup + + + +

+ +

+ + + +
         ::= PostfixExpr Lookup
+

+ +

referenced by: + +

+


MethodCall:

+ + + + + + + + + + PostfixExpr + + + + =?> + + + + + + NCName + + + + + + PositionalArgumentList + + + +

+ +

+ + + +
         ::= PostfixExpr '=?>' NCName PositionalArgumentList
+

+ +

referenced by: + +

+


FilterExprAM:

+ + + + + + + + + + PostfixExpr + + + + ?[ + + + + + + Expr + + + + ] + + + + + +

+ +

+ + + +
         ::= PostfixExpr '?[' Expr ']'
+

+ +

referenced by: + +

+


AxisStep:

+ + + + + + + + + + AbbreviatedStep + + + + + + FullStep + + + + + + Predicate + + + +

+ +

+

+ +

referenced by: + +

+


AbbreviatedStep:

+ + + + + + + + + + .. + + + + + + @ + + + + + + NodeTest + + + + + + SimpleNodeTest + + + +

+ +

+ + + +
         ::= '..'
+ +
           | '@' NodeTest
+ +
           | SimpleNodeTest
+

+ +

referenced by: + +

+


NodeTest:

+ + + + + + + + + + UnionNodeTest + + + + + + SimpleNodeTest + + + +

+ +

+ + + +
           | SimpleNodeTest
+

+ +

referenced by: + +

+


UnionNodeTest:

+ + + + + + + + + + ( + + + + + + SimpleNodeTest + + + + | + + + + + + ) + + + + + +

+ +

+ + + +
         ::= '(' SimpleNodeTest ( '|' SimpleNodeTest )* ')'
+

+ +

referenced by: + +

+


SimpleNodeTest:

+ + + + + + + + + + TypeTest + + + + + + Selector + + + +

+ +

+ + + +
         ::= TypeTest
+ +
           | Selector
+

+ +

referenced by: + +

+


TypeTest:

+ + + + + + + + + + RegularItemType + + + + type + + + + + + ( + + + + + + SequenceType + + + + ) + + + + + +

+ +

+ + + +
           | 'type' '(' SequenceType ')'
+

+ +

referenced by: + +

+


Selector:

+ + + + + + + + + + EQName + + + + + + Wildcard + + + + get + + + + + + ( + + + + + + ExprSingle + + + + ) + + + + + +

+ +

+ + + +
           | Wildcard
+ +
           | 'get' '(' ExprSingle ')'
+

+ +

referenced by: + +

+


FullStep:

+ + + + + + + + + + Axis + + + + + + NodeTest + + + +

+ +

+

+ +

referenced by: + +

+


Axis:

+ + + + + + + + + + ancestor + + + + + + ancestor-or-self + + + + + + attribute + + + + + + child + + + + + + descendant + + + + + + descendant-or-self + + + + + + following + + + + + + following-or-self + + + + + + following-sibling + + + + + + following-sibling-or-self + + + + + + parent + + + + + + preceding + + + + + + preceding-or-self + + + + + + preceding-sibling + + + + + + preceding-sibling-or-self + + + + + + self + + + + + + :: + + + + + +

+ +

+ +
Axis     ::= ( 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' + | 'descendant-or-self' | 'following' | 'following-or-self' | 'following-sibling' | + 'following-sibling-or-self' | 'parent' | 'preceding' | 'preceding-or-self' | 'preceding-sibling' + | 'preceding-sibling-or-self' | 'self' ) '::'
+

+ +

referenced by: + +

+


SequenceArrowTarget:

+ + + + + + + + + + => + + + + + + ArrowTarget + + + +

+ +

+ + + +
         ::= '=>' ArrowTarget
+

+ +

referenced by: + +

+


ArrowTarget:

+ + + + + + + + + + FunctionCall + + + + + + RestrictedDynamicCall + + + +

+ +

+ + + +
         ::= FunctionCall
+ +
           | RestrictedDynamicCall
+

+ +

referenced by: + +

+


RestrictedDynamicCall:

+ + + + + + + + + + VarRef + + + + + + ParenthesizedExpr + + + + + + FunctionItemExpr + + + + + + MapConstructor + + + + + + ArrayConstructor + + + + + + PositionalArgumentList + + + +

+ +

+

+ +

referenced by: + +

+


MappingArrowTarget:

+ + + + + + + + + + =!> + + + + + + ArrowTarget + + + +

+ +

+ + + +
         ::= '=!>' ArrowTarget
+

+ +

referenced by: + +

+


CastTarget:

+ + + + + + + + + + TypeName + + + + + + ChoiceItemType + + + + + + EnumerationType + + + +

+ +

+ + + +
         ::= TypeName
+ +
           | ChoiceItemType
+ +
           | EnumerationType
+

+ +

referenced by: + +

+


ValueComp:

+ + + + + + + + + + eq + + + + + + ne + + + + + + lt + + + + + + le + + + + + + gt + + + + + + ge + + + + + +

+ +

+ + + +
         ::= 'eq'
+ +
           | 'ne'
+ +
           | 'lt'
+ +
           | 'le'
+ +
           | 'gt'
+ +
           | 'ge'
+

+ +

referenced by: + +

+


GeneralComp:

+ + + + + + + + + + = + + + + + + != + + + + + + < + + + + + + <= + + + + + + > + + + + + + >= + + + + + +

+ +

+ + + +
         ::= '='
+ +
           | '!='
+ +
           | '<'^GeneralComp
+ +
           | '<='
+ +
           | '>'
+ +
           | '>='
+

+ +

referenced by: + +

+


NodeComp:

+ + + + + + + + + + is + + + + + + is-not + + + + + + NodePrecedes + + + + + + NodeFollows + + + +

+ +

+ +
NodeComp ::= 'is'
+ +
           | 'is-not'
+ +
           | NodePrecedes
+ +
           | NodeFollows
+

+ +

referenced by: + +

+


NodePrecedes:

+ + + + + + + + + + << + + + + + + precedes + + + + + +

+ +

+ + + +
         ::= '<<'
+ +
           | 'precedes'
+

+ +

referenced by: + +

+


NodeFollows:

+ + + + + + + + + + >> + + + + + + follows + + + + + +

+ +

+ + + +
         ::= '>>'
+ +
           | 'follows'
+

+ +

referenced by: + +

+


VarDefaultValue:

+ + + + + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= ExprSingle
+

+ +

referenced by: + +

+


VarDecl:

+ + + + + + + + + + declare + + + + + + Annotation + + + + variable + + + + + + VarNameAndType + + + + := + + + + + + VarValue + + + + external + + + + + + := + + + + + + VarDefaultValue + + + +

+ +

+ +
VarDecl  ::= 'declare' Annotation* 'variable' VarNameAndType ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? )
+

+ +

referenced by: + +

+


FunctionDecl:

+ + + + + + + + + + declare + + + + + + Annotation + + + + function + + + + + + UnreservedFunctionEQName + + + + ( + + + + + + ParamListWithDefaults + + + + ) + + + + + + TypeDeclaration + + + + + + FunctionBody + + + + external + + + + + +

+ +

+ + + +
         ::= 'declare' Annotation* 'function' UnreservedFunctionEQName '(' ParamListWithDefaults? ')' TypeDeclaration? ( FunctionBody | 'external' )
+

+ +

referenced by: + +

+


ParamListWithDefaults:

+ + + + + + + + + + ParamWithDefault + + + + , + + + + + +

+ +

+ + + +
         ::= ParamWithDefault ( ',' ParamWithDefault )*
+

+ +

referenced by: + +

+


ParamWithDefault:

+ + + + + + + + + + VarNameAndType + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= VarNameAndType ( ':=' ExprSingle )?
+

+ +

referenced by: + +

+


ItemTypeDecl:

+ + + + + + + + + + declare + + + + + + Annotation + + + + type + + + + + + EQName + + + + as + + + + + + ItemType + + + +

+ +

+ + + +
         ::= 'declare' Annotation* 'type' EQName 'as' ItemType
+

+ +

referenced by: + +

+


NamedRecordTypeDecl:

+ + + + + + + + + + declare + + + + + + Annotation + + + + record + + + + + + EQName + + + + ( + + + + + + ExtendedFieldDeclaration + + + + , + + + + + + ExtensibleFlag + + + + ) + + + + + +

+ +

+ + + +
         ::= 'declare' Annotation* 'record' EQName '(' ( ExtendedFieldDeclaration ( ',' ExtendedFieldDeclaration )* )? ExtensibleFlag? ')'
+

+ +

referenced by: + +

+


ExtendedFieldDeclaration:

+ + + + + + + + + + FieldDeclaration + + + + := + + + + + + ExprSingle + + + +

+ +

+ + + +
         ::= FieldDeclaration ( ':=' ExprSingle )?
+

+ +

referenced by: + +

+


OptionDecl:

+ + + + + + + + + + declare + + + + + + option + + + + + + EQName + + + + + + StringLiteral + + + +

+ +

+ + + +
         ::= 'declare' 'option' EQName StringLiteral
+

+ +

referenced by: + +

+


MainModule:

+ + + + + + + + + + Prolog + + + + + + QueryBody + + + +

+ +

+ + + +
         ::= Prolog QueryBody
+

+ +

referenced by: + +

+


QueryBody:

+ + + + + + + + + + Expr + + + +

+ +

+ + + +
         ::= Expr
+

+ +

referenced by: + +

+


Whitespace:

+ + + + + + + + + + S + + + + + + Comment + + + +

+ +

+ + + +
         ::= S^WS
+ +
           | Comment
+ +
          /* ws: definition */
+

+ +

no references


Comment:

+ + + + + + + + + + (: + + + + + + CommentContents + + + + + + Comment + + + + :) + + + + + +

+ +

+ +
Comment  ::= '(:' ( CommentContents | Comment )* ':)'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


StringLiteral:

+ + + + + + + + + + AposStringLiteral + + + + + + QuotStringLiteral + + + +

+ +

+ + + +
         ::= AposStringLiteral
+ +
           | QuotStringLiteral
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


AposStringLiteral:

+ + + + + + + + + + ' + + + + + + PredefinedEntityRef + + + + + + CharRef + + + + '' + + + + + + [^'&] + + + + + + ' + + + + + +

+ +

+ + + +
         ::= "'" ( PredefinedEntityRef | CharRef | "''" | [^'&] )* "'"
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


PredefinedEntityRef:

+ + + + + + + + + + & + + + + + + lt + + + + + + gt + + + + + + amp + + + + + + quot + + + + + + apos + + + + + + ; + + + + + +

+ +

+ + + +
         ::= '&' ( 'lt' | 'gt' | 'amp' | 'quot' | 'apos' ) ';'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


CharRef:

+ + + + + + + + + + &# + + + + + + [0-9] + + + + + + &#x + + + + + + [0-9] + + + + + + [a-f] + + + + + + [A-F] + + + + + + ; + + + + + +

+ +

+ +
CharRef  ::= ( '&#' [0-9]+ | '&#x' [0-9a-fA-F]+ ) ';'
+

+ +

referenced by: + +

+


QuotStringLiteral:

+ + + + + + + + + + " + + + + + + PredefinedEntityRef + + + + + + CharRef + + + + "" + + + + + + [^"&] + + + + + + " + + + + + +

+ +

+ + + +
         ::= '"' ( PredefinedEntityRef | CharRef | '""' | [^"&] )* '"'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


AposAttrContentChar:

+ + + + + + + + + + Char - ['{}<&] + + + + + +

+ +

+ + + +
         ::= Char - ['{}<&]
+

+ +

referenced by: + +

+


Char:

+ + + + + + + + + + [#x9] + + + + + + [#xA] + + + + + + [#xD] + + + + + + [#x20-#xD7FF] + + + + + + [#xE000-#xFFFD] + + + + + + [#x10000-#x10FFFF] + + + + + +

+ +

+ +
Char     ::= [#x9#xA#xD#x20-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
+

+ +

referenced by: + +

+


CDataSectionContents:

+ + + + + + + + + + Char* - ( Char* ']]>' Char* ) & ']]' + + + + + +

+ +

+ + + +
         ::= Char* - ( Char* ']]>' Char* ) & ']]'
+

+ +

referenced by: + +

+


UnreservedNCName:

+ + + + + + + + + + NCName - ReservedName + + + + + +

+ +

+ + + +
         ::= NCName - ReservedName
+

+ +

referenced by: + +

+


NCName:

+ + + + + + + + + + Name - ( Char* ':' Char* ) + + + + + +

+ +

+ +
NCName   ::= Name - ( Char* ':' Char* )
+

+ +

referenced by: + +

+


Name:

+ + + + + + + + + + NameStartChar + + + + + + NameChar + + + +

+ +

+ +
+

+ +

referenced by: + +

+


NameStartChar:

+ + + + + + + + + + : + + + + + + [A-Z] + + + + + + _ + + + + + + [a-z] + + + + + + [#xC0-#xD6] + + + + + + [#xD8-#xF6] + + + + + + [#xF8-#x2FF] + + + + + + [#x370-#x37D] + + + + + + [#x37F-#x1FFF] + + + + + + [#x200C-#x200D] + + + + + + [#x2070-#x218F] + + + + + + [#x2C00-#x2FEF] + + + + + + [#x3001-#xD7FF] + + + + + + [#xF900-#xFDCF] + + + + + + [#xFDF0-#xFFFD] + + + + + + [#x10000-#xEFFFF] + + + + + +

+ +

+ + + +
         ::= [:A-Z_a-z#xC0-#xD6#xD8-#xF6#xF8-#x2FF#x370-#x37D#x37F-#x1FFF#x200C-#x200D#x2070-#x218F#x2C00-#x2FEF#x3001-#xD7FF#xF900-#xFDCF#xFDF0-#xFFFD#x10000-#xEFFFF]
+

+ +

referenced by: + +

+


NameChar:

+ + + + + + + + + + NameStartChar + + + + - + + + + + + . + + + + + + [0-9] + + + + + + [#xB7] + + + + + + [#x0300-#x036F] + + + + + + [#x203F-#x2040] + + + + + +

+ +

+ + + +
           | [-.0-9#xB7#x0300-#x036F#x203F-#x2040]
+

+ +

referenced by: + +

+


ReservedName:

+ + + + + + + + + + NaN + + + + + + allowing + + + + + + ancestor + + + + + + ancestor-or-self + + + + + + and + + + + + + array + + + + + + as + + + + + + ascending + + + + + + at + + + + + + attribute + + + + + + base-uri + + + + + + boundary-space + + + + + + by + + + + + + case + + + + + + cast + + + + + + castable + + + + + + catch + + + + + + child + + + + + + collation + + + + + + comment + + + + + + construction + + + + + + context + + + + + + copy-namespaces + + + + + + count + + + + + + decimal-format + + + + + + decimal-separator + + + + + + declare + + + + + + default + + + + + + descendant + + + + + + descendant-or-self + + + + + + descending + + + + + + digit + + + + + + div + + + + + + document + + + + + + document-node + + + + + + element + + + + + + else + + + + + + empty + + + + + + empty-sequence + + + + + + encoding + + + + + + end + + + + + + enum + + + + + + eq + + + + + + every + + + + + + except + + + + + + exponent-separator + + + + + + external + + + + + + false + + + + + + finally + + + + + + fixed + + + + + + fn + + + + + + following + + + + + + following-or-self + + + + + + following-sibling + + + + + + following-sibling-or-self + + + + + + follows + + + + + + for + + + + + + function + + + + + + ge + + + + + + get + + + + + + gnode + + + + + + greatest + + + + + + group + + + + + + grouping-separator + + + + + + gt + + + + + + idiv + + + + + + if + + + + + + import + + + + + + in + + + + + + infinity + + + + + + inherit + + + + + + instance + + + + + + intersect + + + + + + is + + + + + + is-not + + + + + + item + + + + + + jnode + + + + + + key + + + + + + lax + + + + + + le + + + + + + least + + + + + + let + + + + + + lt + + + + + + map + + + + + + member + + + + + + minus-sign + + + + + + mod + + + + + + module + + + + + + namespace + + + + + + namespace-node + + + + + + ne + + + + + + next + + + + + + no-inherit + + + + + + no-preserve + + + + + + node + + + + + + of + + + + + + only + + + + + + option + + + + + + or + + + + + + order + + + + + + ordered + + + + + + ordering + + + + + + otherwise + + + + + + parent + + + + + + pattern-separator + + + + + + per-mille + + + + + + percent + + + + + + precedes + + + + + + preceding + + + + + + preceding-or-self + + + + + + preceding-sibling + + + + + + preceding-sibling-or-self + + + + + + preserve + + + + + + previous + + + + + + processing-instruction + + + + + + record + + + + + + return + + + + + + satisfies + + + + + + schema + + + + + + schema-attribute + + + + + + schema-element + + + + + + self + + + + + + sliding + + + + + + some + + + + + + stable + + + + + + start + + + + + + strict + + + + + + strip + + + + + + switch + + + + + + text + + + + + + then + + + + + + to + + + + + + treat + + + + + + true + + + + + + try + + + + + + tumbling + + + + + + type + + + + + + typeswitch + + + + + + union + + + + + + unordered + + + + + + validate + + + + + + value + + + + + + variable + + + + + + version + + + + + + when + + + + + + where + + + + + + while + + + + + + window + + + + + + xquery + + + + + + zero-digit + + + + + +

+ +

+ + + +
         ::= 'NaN'
+ +
           | 'allowing'
+ +
           | 'ancestor'
+ +
           | 'ancestor-or-self'
+ +
           | 'and'
+ +
           | 'array'
+ +
           | 'as'
+ +
           | 'ascending'
+ +
           | 'at'
+ +
           | 'attribute'
+ +
           | 'base-uri'
+ +
           | 'boundary-space'
+ +
           | 'by'
+ +
           | 'case'
+ +
           | 'cast'
+ +
           | 'castable'
+ +
           | 'catch'
+ +
           | 'child'
+ +
           | 'collation'
+ +
           | 'comment'
+ +
           | 'construction'
+ +
           | 'context'
+ +
           | 'copy-namespaces'
+ +
           | 'count'
+ +
           | 'decimal-format'
+ +
           | 'decimal-separator'
+ +
           | 'declare'
+ +
           | 'default'
+ +
           | 'descendant'
+ +
           | 'descendant-or-self'
+ +
           | 'descending'
+ +
           | 'digit'
+ +
           | 'div'
+ +
           | 'document'
+ +
           | 'document-node'
+ +
           | 'element'
+ +
           | 'else'
+ +
           | 'empty'
+ +
           | 'empty-sequence'
+ +
           | 'encoding'
+ +
           | 'end'
+ +
           | 'enum'
+ +
           | 'eq'
+ +
           | 'every'
+ +
           | 'except'
+ +
           | 'exponent-separator'
+ +
           | 'external'
+ +
           | 'false'
+ +
           | 'finally'
+ +
           | 'fixed'
+ +
           | 'fn'
+ +
           | 'following'
+ +
           | 'following-or-self'
+ +
           | 'following-sibling'
+ +
           | 'following-sibling-or-self'
+ +
           | 'follows'
+ +
           | 'for'
+ +
           | 'function'
+ +
           | 'ge'
+ +
           | 'get'
+ +
           | 'gnode'
+ +
           | 'greatest'
+ +
           | 'group'
+ +
           | 'grouping-separator'
+ +
           | 'gt'
+ +
           | 'idiv'
+ +
           | 'if'
+ +
           | 'import'
+ +
           | 'in'
+ +
           | 'infinity'
+ +
           | 'inherit'
+ +
           | 'instance'
+ +
           | 'intersect'
+ +
           | 'is'
+ +
           | 'is-not'
+ +
           | 'item'
+ +
           | 'jnode'
+ +
           | 'key'
+ +
           | 'lax'
+ +
           | 'le'
+ +
           | 'least'
+ +
           | 'let'
+ +
           | 'lt'
+ +
           | 'map'
+ +
           | 'member'
+ +
           | 'minus-sign'
+ +
           | 'mod'
+ +
           | 'module'
+ +
           | 'namespace'
+ +
           | 'namespace-node'
+ +
           | 'ne'
+ +
           | 'next'
+ +
           | 'no-inherit'
+ +
           | 'no-preserve'
+ +
           | 'node'
+ +
           | 'of'
+ +
           | 'only'
+ +
           | 'option'
+ +
           | 'or'
+ +
           | 'order'
+ +
           | 'ordered'
+ +
           | 'ordering'
+ +
           | 'otherwise'
+ +
           | 'parent'
+ +
           | 'pattern-separator'
+ +
           | 'per-mille'
+ +
           | 'percent'
+ +
           | 'precedes'
+ +
           | 'preceding'
+ +
           | 'preceding-or-self'
+ +
           | 'preceding-sibling'
+ +
           | 'preceding-sibling-or-self'
+ +
           | 'preserve'
+ +
           | 'previous'
+ +
           | 'processing-instruction'
+ +
           | 'record'
+ +
           | 'return'
+ +
           | 'satisfies'
+ +
           | 'schema'
+ +
           | 'schema-attribute'
+ +
           | 'schema-element'
+ +
           | 'self'
+ +
           | 'sliding'
+ +
           | 'some'
+ +
           | 'stable'
+ +
           | 'start'
+ +
           | 'strict'
+ +
           | 'strip'
+ +
           | 'switch'
+ +
           | 'text'
+ +
           | 'then'
+ +
           | 'to'
+ +
           | 'treat'
+ +
           | 'true'
+ +
           | 'try'
+ +
           | 'tumbling'
+ +
           | 'type'
+ +
           | 'typeswitch'
+ +
           | 'union'
+ +
           | 'unordered'
+ +
           | 'validate'
+ +
           | 'value'
+ +
           | 'variable'
+ +
           | 'version'
+ +
           | 'when'
+ +
           | 'where'
+ +
           | 'while'
+ +
           | 'window'
+ +
           | 'xquery'
+ +
           | 'zero-digit'
+

+ +

referenced by: + +

+


S:

+ + + + + + + + + + [#x20] + + + + + + [#x9] + + + + + + [#xD] + + + + + + [#xA] + + + + + +

+ +

+ +
S        ::= [#x20#x9#xD#xA]+
+

+ +

referenced by: + +

+


DirCommentContents:

+ + + + + + + + + + - + + + + + + Char - '-' + + + + + +

+ +

+ + + +
         ::= ( '-'? ( Char - '-' ) )*
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


ElementContentChar:

+ + + + + + + + + + Char - [{}<&] + + + + + +

+ +

+ + + +
         ::= Char - [{}<&]
+

+ +

referenced by: + +

+


PITarget:

+ + + + + + + + + + NCName - ( ( 'X' | 'x' ) ( 'M' | 'm' ) ( 'L' | 'l' ) ) + + + + + +

+ +

+ +
PITarget ::= NCName - ( ( 'X' | 'x' ) ( 'M' | 'm' ) ( 'L' | 'l' ) )
+

+ +

referenced by: + +

+


DirPIContents:

+ + + + + + + + + + Char* - ( Char* '?>' Char* ) & '?' + + + + + +

+ +

+ + + +
         ::= Char* - ( Char* '?>' Char* ) & '?'
+

+ +

referenced by: + +

+


URIQualifiedName:

+ + + + + + + + + + BracedURILiteral + + + + + + NCName + + + +

+ +

+ + + +
         ::= BracedURILiteral NCName
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


BracedURILiteral:

+ + + + + + + + + + Q + + + + + + { + + + + + + PredefinedEntityRef + + + + + + CharRef + + + + [^&{}] + + + + + + } + + + + + +

+ +

+ + + +
         ::= 'Q' '{' ( PredefinedEntityRef | CharRef | [^&{}] )* '}'
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


EOF:

+ + + + + + + + + + $ + + + + + +

+ +

+ +
EOF      ::= $
+

+ +

referenced by: + +

+


IntegerLiteral:

+ + + + + + + + + + Digits + + + +

+ +

+ + + +
         ::= Digits
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


Digits:

+ + + + + + + + + + DecDigit + + + + + + DecDigit + + + + _ + + + + + + DecDigit + + + +

+ +

+ +
Digits   ::= DecDigit ( ( DecDigit | '_' )* DecDigit )?
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DecDigit:

+ + + + + + + + + + [0-9] + + + + + +

+ +

+ +
DecDigit ::= [0-9]
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


Wildcard:

+ + + + + + + + + + BracedURILiteral + + + + * + + + + + + NCName + + + + :* + + + + + + *: + + + + + + NCName + + + +

+ +

+ + + +
           | NCName ':*'
+ +
           | '*:' NCName
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


HexIntegerLiteral:

+ + + + + + + + + + 0x + + + + + + HexDigits + + + +

+ +

+ + + +
         ::= '0x' HexDigits
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


HexDigits:

+ + + + + + + + + + HexDigit + + + + + + HexDigit + + + + _ + + + + + + HexDigit + + + +

+ +

+ + + +
         ::= HexDigit ( ( HexDigit | '_' )* HexDigit )?
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


HexDigit:

+ + + + + + + + + + [0-9] + + + + + + [a-f] + + + + + + [A-F] + + + + + +

+ +

+ +
HexDigit ::= [0-9a-fA-F]
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


BinaryIntegerLiteral:

+ + + + + + + + + + 0b + + + + + + BinaryDigits + + + +

+ +

+ + + +
         ::= '0b' BinaryDigits
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


BinaryDigits:

+ + + + + + + + + + BinaryDigit + + + + + + BinaryDigit + + + + _ + + + + + + BinaryDigit + + + +

+ +

+ + + +
         ::= BinaryDigit ( ( BinaryDigit | '_' )* BinaryDigit )?
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


BinaryDigit:

+ + + + + + + + + + [0-1] + + + + + +

+ +

+ + + +
         ::= [0-1]
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DecimalLiteral:

+ + + + + + + + + + . + + + + + + Digits + + + + + + Digits + + + + . + + + + + + Digits + + + +

+ +

+ + + +
         ::= '.' Digits
+ +
           | Digits '.' Digits?
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


DoubleLiteral:

+ + + + + + + + + + . + + + + + + Digits + + + + + + Digits + + + + . + + + + + + Digits + + + + e + + + + + + E + + + + + + + + + + + + + [#x2D] + + + + + + Digits + + + +

+ +

+ + + +
         ::= ( '.' Digits | Digits ( '.' Digits? )? ) [eE] [+#x2D]? Digits
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


PragmaContents:

+ + + + + + + + + + Char* - ( Char* '#)' Char* ) & '#' + + + + + +

+ +

+ + + +
         ::= Char* - ( Char* '#)' Char* ) & '#'
+

+ +

referenced by: + +

+


QuotAttrContentChar:

+ + + + + + + + + + Char - ["{}<&] + + + + + +

+ +

+ + + +
         ::= Char - ["{}<&]
+

+ +

referenced by: + +

+


StringConstructorChars:

+ + + + + + + + + + Char* - ( Char* ( '`{' | ']``' ) Char* ) & ( '`{' | ']`' ) + + + + + +

+ +

+ + + +
         ::= Char* - ( Char* ( '`{' | ']``' ) Char* ) & ( '`{' | ']`' )
+

+ +

referenced by: + +

+


StringTemplateFixedPart:

+ + + + + + + + + + Char - ( '{' | '}' | '`' ) + + + + + + {{ + + + + + + }} + + + + + + `` + + + + + +

+ +

+ + + +
         ::= ( Char - ( '{' | '}' | '`' ) | '{{' | '}}' | '``' )+
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


UnreservedQName:

+ + + + + + + + + + QName - ReservedName + + + + + +

+ +

+ + + +
         ::= QName - ReservedName
+

+ +

referenced by: + +

+


QName:

+ + + + + + + + + + PrefixedName + + + + + + UnprefixedName + + + +

+ +

+ +
QName    ::= PrefixedName
+ +
           | UnprefixedName
+

+ +

referenced by: + +

+


PrefixedName:

+ + + + + + + + + + Prefix + + + + : + + + + + + LocalPart + + + +

+ +

+ + + +
         ::= Prefix ':' LocalPart
+

+ +

referenced by: + +

+


Prefix:

+ + + + + + + + + + NCName + + + +

+ +

+ +
Prefix   ::= NCName
+

+ +

referenced by: + +

+


LocalPart:

+ + + + + + + + + + NCName + + + +

+ +

+ + + +
         ::= NCName
+

+ +

referenced by: + +

+


UnprefixedName:

+ + + + + + + + + + LocalPart + + + +

+ +

+ + + +
         ::= LocalPart
+

+ +

referenced by: + +

+


CommentContents:

+ + + + + + + + + + ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) - ( Char* '(' ) & ':' + + + + + + Char+ - ( Char* ( '(:' | ':)' ) Char* ) & '(' + + + + + +

+ +

+ + + +
         ::= ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) - ( Char* '(' ) & ':'
+ +
           | Char+ - ( Char* ( '(:' | ':)' ) Char* ) & '('
+ +
          /* ws: explicit */
+

+ +

referenced by: + +

+


QNameOrKeywordDelimiter:

+ + + + + + + + + + $ + + + + + + : + + + + + + Char - NameChar + + + + + +

+ +

+ + + +
         ::= $
+ +
           | ':'
+ +
           | Char - NameChar
+

+ +

referenced by: + +

+


NCNameDelimiter:

+ + + + + + + + + + $ + + + + + + $ + + + + + + Char - NameChar + + + + + + $ + + + + + + Char + + + + : + + + + + + Char - NameStartChar + + + + + +

+ +

+ + + +
         ::= $ $
+ +
           | ( Char - NameChar ) ( $ | Char )
+ +
           | ':' ( Char - NameStartChar )
+

+ +

no references


NumericLiteralDelimiter:

+ + + + + + + + + + QNameOrKeywordDelimiter + + + + - + + + + + +

+ +

+ + + +
         ::= QNameOrKeywordDelimiter
+ +
           | '-'
+

+ +

no references


GeneralCompDelimiter:

+ + + + + + + + + + [^?] + + + + + +

+ +

+ + + +
         ::= [^?]
+

+ +

no references


DirElemConstructorDelimiter:

+ + + + + + + + + + QName + + + + + + S + + + + + + QName + + + + + + S + + + + = + + + + + + S + + + + / + + + + + + > + + + + + +

+ +

+ + + +
         ::= QName ( S QName S? '=' | S? [/>] )
+

+ +

no references



+ +

+ + + + + + + +
  + + ... generated by RR - Railroad Diagram Generator + + + + + + + + + + + + + R + + R +
+

+
+
+ \ No newline at end of file diff --git a/docs/notes.md b/docs/notes.md index 4900941..e78cb5d 100644 --- a/docs/notes.md +++ b/docs/notes.md @@ -1,19 +1,19 @@ -# Pipelines -## Scripts -### Update local ebnf and fos catalog -`scripts/update-sources.xq` -### Update xq4.java -`scripts/rex.xq` -### Build `jar` -npm script `javac` - -## Others -https://github.com/GuntherRademacher/rex-parser-generator/blob/main/docs/sample-grammars/XQuery-40.ebnf - - -:= -$p update  -replace node //token[.=':='][preceding-siblings::*[1]/element()][following-siblings::*[1]/element()]with (' ',.,' ')........................... - - +# Pipelines +## Scripts +### Update local ebnf and fos catalog +`scripts/update-sources.xq` +### Update xq4.java +`scripts/rex.xq` +### Build `jar` +npm script `javac` + +## Others +https://github.com/GuntherRademacher/rex-parser-generator/blob/main/docs/sample-grammars/XQuery-40.ebnf + + +:= +$p update  +replace node //token[.=':='][preceding-siblings::*[1]/element()][following-siblings::*[1]/element()]with (' ',.,' ')........................... + + ---------------Nico Verwer: SMAX (Separated Markup API for XML). SMAX (Separated Markup API for XML) https://github.com/nverwer/SMAX \ No newline at end of file diff --git a/docs/protocol.md b/docs/protocol.md index 9706b10..42e0042 100644 --- a/docs/protocol.md +++ b/docs/protocol.md @@ -1,25 +1,25 @@ -lsp websocket messages - -```json -{"jsonrpc":"2.0","id":0, -"method":"initialize", -"params":{"capabilities":{"textDocument":{"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"synchronization":{"dynamicRegistration":true,"willSave":false,"didSave":false,"willSaveWaitUntil":false},"formatting":{"dynamicRegistration":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":false,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":false,"preselectSupport":false},"contextSupport":false},"signatureHelp":{"signatureInformation":{"documentationFormat":["markdown","plaintext"],"activeParameterSupport":true}},"documentHighlight":{"dynamicRegistration":true},"semanticTokens":{"multilineTokenSupport":false,"overlappingTokenSupport":false,"tokenTypes":[],"tokenModifiers":[],"formats":["relative"],"requests":{"full":{"delta":false},"range":true},"augmentsSyntaxTokens":true}},"workspace":{"didChangeConfiguration":{"dynamicRegistration":true}}},"processId":null,"rootUri":"","workspaceFolders":null} -} -``` -<= -{"jsonrpc":"2.0","id":0, -"result":{"capabilities":{"textDocumentSync":2,"completionProvider":{"resolveProvider":false,"triggerCharacters":["\"",":"]},"hoverProvider":true,"documentSymbolProvider":true,"documentRangeFormattingProvider":false,"colorProvider":{},"foldingRangeProvider":true,"selectionRangeProvider":true,"documentLinkProvider":{}}} -} - -{"jsonrpc":"2.0","method":"initialized","params":{}} - -{"jsonrpc":"2.0","method":"workspace/didChangeConfiguration","params":{"settings":{}}} - - -<= -{"jsonrpc":"2.0", -"method":"textDocument/publishDiagnostics", -"params":{"uri":"session1.json","diagnostics":[]} -} -<= +lsp websocket messages + +```json +{"jsonrpc":"2.0","id":0, +"method":"initialize", +"params":{"capabilities":{"textDocument":{"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"synchronization":{"dynamicRegistration":true,"willSave":false,"didSave":false,"willSaveWaitUntil":false},"formatting":{"dynamicRegistration":true},"completion":{"dynamicRegistration":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":false,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":false,"preselectSupport":false},"contextSupport":false},"signatureHelp":{"signatureInformation":{"documentationFormat":["markdown","plaintext"],"activeParameterSupport":true}},"documentHighlight":{"dynamicRegistration":true},"semanticTokens":{"multilineTokenSupport":false,"overlappingTokenSupport":false,"tokenTypes":[],"tokenModifiers":[],"formats":["relative"],"requests":{"full":{"delta":false},"range":true},"augmentsSyntaxTokens":true}},"workspace":{"didChangeConfiguration":{"dynamicRegistration":true}}},"processId":null,"rootUri":"","workspaceFolders":null} +} +``` +<= +{"jsonrpc":"2.0","id":0, +"result":{"capabilities":{"textDocumentSync":2,"completionProvider":{"resolveProvider":false,"triggerCharacters":["\"",":"]},"hoverProvider":true,"documentSymbolProvider":true,"documentRangeFormattingProvider":false,"colorProvider":{},"foldingRangeProvider":true,"selectionRangeProvider":true,"documentLinkProvider":{}}} +} + +{"jsonrpc":"2.0","method":"initialized","params":{}} + +{"jsonrpc":"2.0","method":"workspace/didChangeConfiguration","params":{"settings":{}}} + + +<= +{"jsonrpc":"2.0", +"method":"textDocument/publishDiagnostics", +"params":{"uri":"session1.json","diagnostics":[]} +} +<= {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"uri":"session1.json","diagnostics":[{"range":{"start":{"line":2,"character":7},"end":{"line":2,"character":16}},"message":"Expected comma","severity":1,"code":514,"source":"json"}]}} \ No newline at end of file diff --git a/get-docker.sh b/get-docker.sh new file mode 100644 index 0000000..94fb1da --- /dev/null +++ b/get-docker.sh @@ -0,0 +1,720 @@ +#!/bin/sh +set -e +# Docker Engine for Linux installation script. +# +# This script is intended as a convenient way to configure docker's package +# repositories and to install Docker Engine, This script is not recommended +# for production environments. Before running this script, make yourself familiar +# with potential risks and limitations, and refer to the installation manual +# at https://docs.docker.com/engine/install/ for alternative installation methods. +# +# The script: +# +# - Requires `root` or `sudo` privileges to run. +# - Attempts to detect your Linux distribution and version and configure your +# package management system for you. +# - Doesn't allow you to customize most installation parameters. +# - Installs dependencies and recommendations without asking for confirmation. +# - Installs the latest stable release (by default) of Docker CLI, Docker Engine, +# Docker Buildx, Docker Compose, containerd, and runc. When using this script +# to provision a machine, this may result in unexpected major version upgrades +# of these packages. Always test upgrades in a test environment before +# deploying to your production systems. +# - Isn't designed to upgrade an existing Docker installation. When using the +# script to update an existing installation, dependencies may not be updated +# to the expected version, resulting in outdated versions. +# +# Source code is available at https://github.com/docker/docker-install/ +# +# Usage +# ============================================================================== +# +# To install the latest stable versions of Docker CLI, Docker Engine, and their +# dependencies: +# +# 1. download the script +# +# $ curl -fsSL https://get.docker.com -o install-docker.sh +# +# 2. verify the script's content +# +# $ cat install-docker.sh +# +# 3. run the script with --dry-run to verify the steps it executes +# +# $ sh install-docker.sh --dry-run +# +# 4. run the script either as root, or using sudo to perform the installation. +# +# $ sudo sh install-docker.sh +# +# Command-line options +# ============================================================================== +# +# --version +# Use the --version option to install a specific version, for example: +# +# $ sudo sh install-docker.sh --version 23.0 +# +# --channel +# +# Use the --channel option to install from an alternative installation channel. +# The following example installs the latest versions from the "test" channel, +# which includes pre-releases (alpha, beta, rc): +# +# $ sudo sh install-docker.sh --channel test +# +# Alternatively, use the script at https://test.docker.com, which uses the test +# channel as default. +# +# --mirror +# +# Use the --mirror option to install from a mirror supported by this script. +# Available mirrors are "Aliyun" (https://mirrors.aliyun.com/docker-ce), and +# "AzureChinaCloud" (https://mirror.azure.cn/docker-ce), for example: +# +# $ sudo sh install-docker.sh --mirror AzureChinaCloud +# +# --setup-repo +# +# Use the --setup-repo option to configure Docker's package repositories without +# installing Docker packages. This is useful when you want to add the repository +# but install packages separately: +# +# $ sudo sh install-docker.sh --setup-repo +# +# ============================================================================== + + +# Git commit from https://github.com/docker/docker-install when +# the script was uploaded (Should only be modified by upload job): +SCRIPT_COMMIT_SHA="7d96bd3c5235ab2121bcb855dd7b3f3f37128ed4" + +# strip "v" prefix if present +VERSION="${VERSION#v}" + +# The channel to install from: +# * stable +# * test +DEFAULT_CHANNEL_VALUE="stable" +if [ -z "$CHANNEL" ]; then + CHANNEL=$DEFAULT_CHANNEL_VALUE +fi + +DEFAULT_DOWNLOAD_URL="https://download.docker.com" +if [ -z "$DOWNLOAD_URL" ]; then + DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL +fi + +DEFAULT_REPO_FILE="docker-ce.repo" +if [ -z "$REPO_FILE" ]; then + REPO_FILE="$DEFAULT_REPO_FILE" + # Automatically default to a staging repo fora + # a staging download url (download-stage.docker.com) + case "$DOWNLOAD_URL" in + *-stage*) REPO_FILE="docker-ce-staging.repo";; + esac +fi + +mirror='' +DRY_RUN=${DRY_RUN:-} +REPO_ONLY=${REPO_ONLY:-0} +while [ $# -gt 0 ]; do + case "$1" in + --channel) + CHANNEL="$2" + shift + ;; + --dry-run) + DRY_RUN=1 + ;; + --mirror) + mirror="$2" + shift + ;; + --version) + VERSION="${2#v}" + shift + ;; + --setup-repo) + REPO_ONLY=1 + shift + ;; + --*) + echo "Illegal option $1" + ;; + esac + shift $(( $# > 0 ? 1 : 0 )) +done + +case "$mirror" in + Aliyun) + DOWNLOAD_URL="https://mirrors.aliyun.com/docker-ce" + ;; + AzureChinaCloud) + DOWNLOAD_URL="https://mirror.azure.cn/docker-ce" + ;; + "") + ;; + *) + >&2 echo "unknown mirror '$mirror': use either 'Aliyun', or 'AzureChinaCloud'." + exit 1 + ;; +esac + +case "$CHANNEL" in + stable|test) + ;; + *) + >&2 echo "unknown CHANNEL '$CHANNEL': use either stable or test." + exit 1 + ;; +esac + +command_exists() { + command -v "$@" > /dev/null 2>&1 +} + +# version_gte checks if the version specified in $VERSION is at least the given +# SemVer (Maj.Minor[.Patch]), or CalVer (YY.MM) version.It returns 0 (success) +# if $VERSION is either unset (=latest) or newer or equal than the specified +# version, or returns 1 (fail) otherwise. +# +# examples: +# +# VERSION=23.0 +# version_gte 23.0 // 0 (success) +# version_gte 20.10 // 0 (success) +# version_gte 19.03 // 0 (success) +# version_gte 26.1 // 1 (fail) +version_gte() { + if [ -z "$VERSION" ]; then + return 0 + fi + version_compare "$VERSION" "$1" +} + +# version_compare compares two version strings (either SemVer (Major.Minor.Path), +# or CalVer (YY.MM) version strings. It returns 0 (success) if version A is newer +# or equal than version B, or 1 (fail) otherwise. Patch releases and pre-release +# (-alpha/-beta) are not taken into account +# +# examples: +# +# version_compare 23.0.0 20.10 // 0 (success) +# version_compare 23.0 20.10 // 0 (success) +# version_compare 20.10 19.03 // 0 (success) +# version_compare 20.10 20.10 // 0 (success) +# version_compare 19.03 20.10 // 1 (fail) +version_compare() ( + set +x + + yy_a="$(echo "$1" | cut -d'.' -f1)" + yy_b="$(echo "$2" | cut -d'.' -f1)" + if [ "$yy_a" -lt "$yy_b" ]; then + return 1 + fi + if [ "$yy_a" -gt "$yy_b" ]; then + return 0 + fi + mm_a="$(echo "$1" | cut -d'.' -f2)" + mm_b="$(echo "$2" | cut -d'.' -f2)" + + # trim leading zeros to accommodate CalVer + mm_a="${mm_a#0}" + mm_b="${mm_b#0}" + + if [ "${mm_a:-0}" -lt "${mm_b:-0}" ]; then + return 1 + fi + + return 0 +) + +is_dry_run() { + if [ -z "$DRY_RUN" ]; then + return 1 + else + return 0 + fi +} + +is_wsl() { + case "$(uname -r)" in + *microsoft* ) true ;; # WSL 2 + *Microsoft* ) true ;; # WSL 1 + * ) false;; + esac +} + +is_darwin() { + case "$(uname -s)" in + *darwin* ) true ;; + *Darwin* ) true ;; + * ) false;; + esac +} + +deprecation_notice() { + distro=$1 + distro_version=$2 + echo + printf "\033[91;1mDEPRECATION WARNING\033[0m\n" + printf " This Linux distribution (\033[1m%s %s\033[0m) reached end-of-life and is no longer supported by this script.\n" "$distro" "$distro_version" + echo " No updates or security fixes will be released for this distribution, and users are recommended" + echo " to upgrade to a currently maintained version of $distro." + echo + printf "Press \033[1mCtrl+C\033[0m now to abort this script, or wait for the installation to continue." + echo + sleep 10 +} + +get_distribution() { + lsb_dist="" + # Every system that we officially support has /etc/os-release + if [ -r /etc/os-release ]; then + lsb_dist="$(. /etc/os-release && echo "$ID")" + fi + # Returning an empty string here should be alright since the + # case statements don't act unless you provide an actual value + echo "$lsb_dist" +} + +echo_docker_as_nonroot() { + if is_dry_run; then + return + fi + if command_exists docker && [ -e /var/run/docker.sock ]; then + ( + set -x + $sh_c 'docker version' + ) || true + fi + + # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-EOF", spaces are kept in the output + echo + echo "================================================================================" + echo + if version_gte "20.10"; then + echo "To run Docker as a non-privileged user, consider setting up the" + echo "Docker daemon in rootless mode for your user:" + echo + echo " dockerd-rootless-setuptool.sh install" + echo + echo "Visit https://docs.docker.com/go/rootless/ to learn about rootless mode." + echo + fi + echo + echo "To run the Docker daemon as a fully privileged service, but granting non-root" + echo "users access, refer to https://docs.docker.com/go/daemon-access/" + echo + echo "WARNING: Access to the remote API on a privileged Docker daemon is equivalent" + echo " to root access on the host. Refer to the 'Docker daemon attack surface'" + echo " documentation for details: https://docs.docker.com/go/attack-surface/" + echo + echo "================================================================================" + echo +} + +# Check if this is a forked Linux distro +check_forked() { + + # Check for lsb_release command existence, it usually exists in forked distros + if command_exists lsb_release; then + # Check if the `-u` option is supported + set +e + lsb_release -a -u > /dev/null 2>&1 + lsb_release_exit_code=$? + set -e + + # Check if the command has exited successfully, it means we're in a forked distro + if [ "$lsb_release_exit_code" = "0" ]; then + # Print info about current distro + cat <<-EOF + You're using '$lsb_dist' version '$dist_version'. + EOF + + # Get the upstream release info + lsb_dist=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[:space:]') + dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[:space:]') + + # Print info about upstream distro + cat <<-EOF + Upstream release is '$lsb_dist' version '$dist_version'. + EOF + else + if [ -r /etc/debian_version ] && [ "$lsb_dist" != "ubuntu" ] && [ "$lsb_dist" != "raspbian" ]; then + if [ "$lsb_dist" = "osmc" ]; then + # OSMC runs Raspbian + lsb_dist=raspbian + else + # We're Debian and don't even know it! + lsb_dist=debian + fi + dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')" + case "$dist_version" in + 13) + dist_version="trixie" + ;; + 12) + dist_version="bookworm" + ;; + 11) + dist_version="bullseye" + ;; + 10) + dist_version="buster" + ;; + 9) + dist_version="stretch" + ;; + 8) + dist_version="jessie" + ;; + esac + fi + fi + fi +} + +do_install() { + echo "# Executing docker install script, commit: $SCRIPT_COMMIT_SHA" + + if command_exists docker; then + cat >&2 <<-'EOF' + Warning: the "docker" command appears to already exist on this system. + + If you already have Docker installed, this script can cause trouble, which is + why we're displaying this warning and provide the opportunity to cancel the + installation. + + If you installed the current Docker package using this script and are using it + again to update Docker, you can ignore this message, but be aware that the + script resets any custom changes in the deb and rpm repo configuration + files to match the parameters passed to the script. + + You may press Ctrl+C now to abort this script. + EOF + ( set -x; sleep 20 ) + fi + + user="$(id -un 2>/dev/null || true)" + + sh_c='sh -c' + if [ "$user" != 'root' ]; then + if command_exists sudo; then + sh_c='sudo -E sh -c' + elif command_exists su; then + sh_c='su -c' + else + cat >&2 <<-'EOF' + Error: this installer needs the ability to run commands as root. + We are unable to find either "sudo" or "su" available to make this happen. + EOF + exit 1 + fi + fi + + if is_dry_run; then + sh_c="echo" + fi + + # perform some very rudimentary platform detection + lsb_dist=$( get_distribution ) + lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')" + + if is_wsl; then + echo + echo "WSL DETECTED: We recommend using Docker Desktop for Windows." + echo "Please get Docker Desktop from https://www.docker.com/products/docker-desktop/" + echo + cat >&2 <<-'EOF' + + You may press Ctrl+C now to abort this script. + EOF + ( set -x; sleep 20 ) + fi + + case "$lsb_dist" in + + ubuntu) + if command_exists lsb_release; then + dist_version="$(lsb_release --codename | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then + dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")" + fi + ;; + + debian|raspbian) + dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')" + case "$dist_version" in + 13) + dist_version="trixie" + ;; + 12) + dist_version="bookworm" + ;; + 11) + dist_version="bullseye" + ;; + 10) + dist_version="buster" + ;; + 9) + dist_version="stretch" + ;; + 8) + dist_version="jessie" + ;; + esac + ;; + + centos|rhel) + if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then + dist_version="$(. /etc/os-release && echo "$VERSION_ID")" + fi + ;; + + *) + if command_exists lsb_release; then + dist_version="$(lsb_release --release | cut -f2)" + fi + if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then + dist_version="$(. /etc/os-release && echo "$VERSION_ID")" + fi + ;; + + esac + + # Check if this is a forked Linux distro + check_forked + + # Print deprecation warnings for distro versions that recently reached EOL, + # but may still be commonly used (especially LTS versions). + case "$lsb_dist.$dist_version" in + centos.8|centos.7|rhel.7) + deprecation_notice "$lsb_dist" "$dist_version" + ;; + debian.buster|debian.stretch|debian.jessie) + deprecation_notice "$lsb_dist" "$dist_version" + ;; + raspbian.buster|raspbian.stretch|raspbian.jessie) + deprecation_notice "$lsb_dist" "$dist_version" + ;; + ubuntu.focal|ubuntu.bionic|ubuntu.xenial|ubuntu.trusty) + deprecation_notice "$lsb_dist" "$dist_version" + ;; + ubuntu.oracular|ubuntu.mantic|ubuntu.lunar|ubuntu.kinetic|ubuntu.impish|ubuntu.hirsute|ubuntu.groovy|ubuntu.eoan|ubuntu.disco|ubuntu.cosmic) + deprecation_notice "$lsb_dist" "$dist_version" + ;; + fedora.*) + if [ "$dist_version" -lt 41 ]; then + deprecation_notice "$lsb_dist" "$dist_version" + fi + ;; + esac + + # Run setup for each distro accordingly + case "$lsb_dist" in + ubuntu|debian|raspbian) + pre_reqs="ca-certificates curl" + apt_repo="deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] $DOWNLOAD_URL/linux/$lsb_dist $dist_version $CHANNEL" + ( + if ! is_dry_run; then + set -x + fi + $sh_c 'apt-get -qq update >/dev/null' + $sh_c "DEBIAN_FRONTEND=noninteractive apt-get -y -qq install $pre_reqs >/dev/null" + $sh_c 'install -m 0755 -d /etc/apt/keyrings' + $sh_c "curl -fsSL \"$DOWNLOAD_URL/linux/$lsb_dist/gpg\" -o /etc/apt/keyrings/docker.asc" + $sh_c "chmod a+r /etc/apt/keyrings/docker.asc" + $sh_c "echo \"$apt_repo\" > /etc/apt/sources.list.d/docker.list" + $sh_c 'apt-get -qq update >/dev/null' + ) + + if [ "$REPO_ONLY" = "1" ]; then + exit 0 + fi + + pkg_version="" + if [ -n "$VERSION" ]; then + if is_dry_run; then + echo "# WARNING: VERSION pinning is not supported in DRY_RUN" + else + # Will work for incomplete versions IE (17.12), but may not actually grab the "latest" if in the test channel + pkg_pattern="$(echo "$VERSION" | sed 's/-ce-/~ce~.*/g' | sed 's/-/.*/g')" + search_command="apt-cache madison docker-ce | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3" + pkg_version="$($sh_c "$search_command")" + echo "INFO: Searching repository for VERSION '$VERSION'" + echo "INFO: $search_command" + if [ -z "$pkg_version" ]; then + echo + echo "ERROR: '$VERSION' not found amongst apt-cache madison results" + echo + exit 1 + fi + if version_gte "18.09"; then + search_command="apt-cache madison docker-ce-cli | grep '$pkg_pattern' | head -1 | awk '{\$1=\$1};1' | cut -d' ' -f 3" + echo "INFO: $search_command" + cli_pkg_version="=$($sh_c "$search_command")" + fi + pkg_version="=$pkg_version" + fi + fi + ( + pkgs="docker-ce${pkg_version%=}" + if version_gte "18.09"; then + # older versions didn't ship the cli and containerd as separate packages + pkgs="$pkgs docker-ce-cli${cli_pkg_version%=} containerd.io" + fi + if version_gte "20.10"; then + pkgs="$pkgs docker-compose-plugin docker-ce-rootless-extras$pkg_version" + fi + if version_gte "23.0"; then + pkgs="$pkgs docker-buildx-plugin" + fi + if version_gte "28.2"; then + pkgs="$pkgs docker-model-plugin" + fi + if ! is_dry_run; then + set -x + fi + $sh_c "DEBIAN_FRONTEND=noninteractive apt-get -y -qq install $pkgs >/dev/null" + ) + echo_docker_as_nonroot + exit 0 + ;; + centos|fedora|rhel) + if [ "$(uname -m)" = "s390x" ]; then + echo "Effective v27.5, please consult RHEL distro statement for s390x support." + exit 1 + fi + repo_file_url="$DOWNLOAD_URL/linux/$lsb_dist/$REPO_FILE" + ( + if ! is_dry_run; then + set -x + fi + if command_exists dnf5; then + $sh_c "dnf -y -q --setopt=install_weak_deps=False install dnf-plugins-core" + $sh_c "dnf5 config-manager addrepo --overwrite --save-filename=docker-ce.repo --from-repofile='$repo_file_url'" + + if [ "$CHANNEL" != "stable" ]; then + $sh_c "dnf5 config-manager setopt \"docker-ce-*.enabled=0\"" + $sh_c "dnf5 config-manager setopt \"docker-ce-$CHANNEL.enabled=1\"" + fi + $sh_c "dnf makecache" + elif command_exists dnf; then + $sh_c "dnf -y -q --setopt=install_weak_deps=False install dnf-plugins-core" + $sh_c "rm -f /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce-staging.repo" + $sh_c "dnf config-manager --add-repo $repo_file_url" + + if [ "$CHANNEL" != "stable" ]; then + $sh_c "dnf config-manager --set-disabled \"docker-ce-*\"" + $sh_c "dnf config-manager --set-enabled \"docker-ce-$CHANNEL\"" + fi + $sh_c "dnf makecache" + else + $sh_c "yum -y -q install yum-utils" + $sh_c "rm -f /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce-staging.repo" + $sh_c "yum-config-manager --add-repo $repo_file_url" + + if [ "$CHANNEL" != "stable" ]; then + $sh_c "yum-config-manager --disable \"docker-ce-*\"" + $sh_c "yum-config-manager --enable \"docker-ce-$CHANNEL\"" + fi + $sh_c "yum makecache" + fi + ) + + if [ "$REPO_ONLY" = "1" ]; then + exit 0 + fi + + pkg_version="" + if command_exists dnf; then + pkg_manager="dnf" + pkg_manager_flags="-y -q --best" + else + pkg_manager="yum" + pkg_manager_flags="-y -q" + fi + if [ -n "$VERSION" ]; then + if is_dry_run; then + echo "# WARNING: VERSION pinning is not supported in DRY_RUN" + else + if [ "$lsb_dist" = "fedora" ]; then + pkg_suffix="fc$dist_version" + else + pkg_suffix="el" + fi + pkg_pattern="$(echo "$VERSION" | sed 's/-ce-/\\\\.ce.*/g' | sed 's/-/.*/g').*$pkg_suffix" + search_command="$pkg_manager list --showduplicates docker-ce | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'" + pkg_version="$($sh_c "$search_command")" + echo "INFO: Searching repository for VERSION '$VERSION'" + echo "INFO: $search_command" + if [ -z "$pkg_version" ]; then + echo + echo "ERROR: '$VERSION' not found amongst $pkg_manager list results" + echo + exit 1 + fi + if version_gte "18.09"; then + # older versions don't support a cli package + search_command="$pkg_manager list --showduplicates docker-ce-cli | grep '$pkg_pattern' | tail -1 | awk '{print \$2}'" + cli_pkg_version="$($sh_c "$search_command" | cut -d':' -f 2)" + fi + # Cut out the epoch and prefix with a '-' + pkg_version="-$(echo "$pkg_version" | cut -d':' -f 2)" + fi + fi + ( + pkgs="docker-ce$pkg_version" + if version_gte "18.09"; then + # older versions didn't ship the cli and containerd as separate packages + if [ -n "$cli_pkg_version" ]; then + pkgs="$pkgs docker-ce-cli-$cli_pkg_version containerd.io" + else + pkgs="$pkgs docker-ce-cli containerd.io" + fi + fi + if version_gte "20.10"; then + pkgs="$pkgs docker-compose-plugin docker-ce-rootless-extras$pkg_version" + fi + if version_gte "23.0"; then + pkgs="$pkgs docker-buildx-plugin docker-model-plugin" + fi + if ! is_dry_run; then + set -x + fi + $sh_c "$pkg_manager $pkg_manager_flags install $pkgs" + ) + echo_docker_as_nonroot + exit 0 + ;; + sles) + echo "Effective v27.5, please consult SLES distro statement for s390x support." + exit 1 + ;; + *) + if [ -z "$lsb_dist" ]; then + if is_darwin; then + echo + echo "ERROR: Unsupported operating system 'macOS'" + echo "Please get Docker Desktop from https://www.docker.com/products/docker-desktop" + echo + exit 1 + fi + fi + echo + echo "ERROR: Unsupported distribution '$lsb_dist'" + echo + exit 1 + ;; + esac + exit 1 +} + +# wrapped up in a function so that we have some protection against only getting +# half the file during "curl | sh" +do_install diff --git a/package-lock.json b/package-lock.json index 06b1131..365276f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2133 +1,2133 @@ -{ - "name": "basex-lsp", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@codemirror/commands": "^6.10.0", - "@codemirror/lang-javascript": "^6.2.4", - "@codemirror/lang-markdown": "^6.5.0", - "@codemirror/lang-xml": "^6.1.0", - "@codemirror/language-data": "^6.5.2", - "@codemirror/legacy-modes": "^6.5.2", - "@codemirror/lint": "^6.9.1", - "@codemirror/lsp-client": "^6.2.0", - "@codemirror/search": "^6.5.11", - "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.6", - "@quietui/quiet-browser": "^1.6.1", - "@replit/codemirror-minimap": "^0.5.2", - "@zenfs/core": "^2.4.2", - "@zenfs/dom": "^1.2.5", - "ace-builds": "^1.43.4", - "ace-linters": "^1.8.5", - "beercss": "^3.12.13" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@rollup/plugin-typescript": "^12.1.4", - "minify": "^9.1.0", - "rollup": "4", - "rollup-plugin-tla": "^0.0.2" - } - }, - "node_modules/@codemirror/autocomplete": { - "version": "6.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.1.tgz", - "integrity": "sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@codemirror/commands": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.0.tgz", - "integrity": "sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.4.0", - "@codemirror/view": "^6.27.0", - "@lezer/common": "^1.1.0" - } - }, - "node_modules/@codemirror/lang-angular": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz", - "integrity": "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-html": "^6.0.0", - "@codemirror/lang-javascript": "^6.1.2", - "@codemirror/language": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.3" - } - }, - "node_modules/@codemirror/lang-cpp": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz", - "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/cpp": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-css": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", - "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.0.2", - "@lezer/css": "^1.1.7" - } - }, - "node_modules/@codemirror/lang-go": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@codemirror/lang-go/-/lang-go-6.0.1.tgz", - "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.6.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/go": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-html": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", - "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/lang-css": "^6.0.0", - "@codemirror/lang-javascript": "^6.0.0", - "@codemirror/language": "^6.4.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0", - "@lezer/css": "^1.1.0", - "@lezer/html": "^1.3.12" - } - }, - "node_modules/@codemirror/lang-java": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.2.tgz", - "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/java": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-javascript": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.4.tgz", - "integrity": "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.6.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0", - "@lezer/javascript": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-jinja": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz", - "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-html": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.2.0", - "@lezer/lr": "^1.4.0" - } - }, - "node_modules/@codemirror/lang-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", - "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/json": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-less": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-less/-/lang-less-6.0.2.tgz", - "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-css": "^6.2.0", - "@codemirror/language": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-liquid": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-liquid/-/lang-liquid-6.3.0.tgz", - "integrity": "sha512-fY1YsUExcieXRTsCiwX/bQ9+PbCTA/Fumv7C7mTUZHoFkibfESnaXwpr2aKH6zZVwysEunsHHkaIpM/pl3xETQ==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/lang-html": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.1" - } - }, - "node_modules/@codemirror/lang-markdown": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", - "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.7.1", - "@codemirror/lang-html": "^6.0.0", - "@codemirror/language": "^6.3.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.2.1", - "@lezer/markdown": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-php": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-php/-/lang-php-6.0.2.tgz", - "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-html": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/php": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-python": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.2.1.tgz", - "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.3.2", - "@codemirror/language": "^6.8.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.2.1", - "@lezer/python": "^1.1.4" - } - }, - "node_modules/@codemirror/lang-rust": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz", - "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/rust": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-sass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz", - "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-css": "^6.2.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.0.2", - "@lezer/sass": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-sql": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz", - "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-vue": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz", - "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-html": "^6.0.0", - "@codemirror/lang-javascript": "^6.1.2", - "@codemirror/language": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.1" - } - }, - "node_modules/@codemirror/lang-wast": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz", - "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-xml": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", - "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.4.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/xml": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-yaml": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.2.tgz", - "integrity": "sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.2.0", - "@lezer/lr": "^1.0.0", - "@lezer/yaml": "^1.0.0" - } - }, - "node_modules/@codemirror/language": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", - "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/language-data": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz", - "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==", - "license": "MIT", - "dependencies": { - "@codemirror/lang-angular": "^0.1.0", - "@codemirror/lang-cpp": "^6.0.0", - "@codemirror/lang-css": "^6.0.0", - "@codemirror/lang-go": "^6.0.0", - "@codemirror/lang-html": "^6.0.0", - "@codemirror/lang-java": "^6.0.0", - "@codemirror/lang-javascript": "^6.0.0", - "@codemirror/lang-jinja": "^6.0.0", - "@codemirror/lang-json": "^6.0.0", - "@codemirror/lang-less": "^6.0.0", - "@codemirror/lang-liquid": "^6.0.0", - "@codemirror/lang-markdown": "^6.0.0", - "@codemirror/lang-php": "^6.0.0", - "@codemirror/lang-python": "^6.0.0", - "@codemirror/lang-rust": "^6.0.0", - "@codemirror/lang-sass": "^6.0.0", - "@codemirror/lang-sql": "^6.0.0", - "@codemirror/lang-vue": "^0.1.1", - "@codemirror/lang-wast": "^6.0.0", - "@codemirror/lang-xml": "^6.0.0", - "@codemirror/lang-yaml": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/legacy-modes": "^6.4.0" - } - }, - "node_modules/@codemirror/legacy-modes": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz", - "integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0" - } - }, - "node_modules/@codemirror/lint": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.1.tgz", - "integrity": "sha512-te7To1EQHePBQQzasDKWmK2xKINIXpk+xAiSYr9ZN+VB4KaT+/Hi2PEkeErTk5BV3PTz1TLyQL4MtJfPkKZ9sw==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.35.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/lsp-client": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.2.0.tgz", - "integrity": "sha512-RHUgJCiuthJpIqXefsr1fKNWarC0tBLQ7anh2UynVRYhXHXt0OwP/pIGcMUOMCVVuKB/tmy//2Yp7WbLKorksA==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.18.6", - "@codemirror/language": "^6.11.0", - "@codemirror/lint": "^6.8.5", - "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.37.0", - "@lezer/highlight": "^1.2.1", - "marked": "^15.0.12", - "vscode-languageserver-protocol": "^3.17.5" - } - }, - "node_modules/@codemirror/search": { - "version": "6.5.11", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", - "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", - "license": "MIT", - "dependencies": { - "@marijn/find-cluster-break": "^1.0.0" - } - }, - "node_modules/@codemirror/theme-one-dark": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz", - "integrity": "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/highlight": "^1.0.0" - } - }, - "node_modules/@codemirror/view": { - "version": "6.38.6", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", - "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.5.0", - "crelt": "^1.0.6", - "style-mod": "^4.1.0", - "w3c-keyname": "^2.2.4" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lezer/common": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.3.0.tgz", - "integrity": "sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==", - "license": "MIT" - }, - "node_modules/@lezer/cpp": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.3.tgz", - "integrity": "sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/css": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.0.tgz", - "integrity": "sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.0" - } - }, - "node_modules/@lezer/go": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@lezer/go/-/go-1.0.1.tgz", - "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.3.0" - } - }, - "node_modules/@lezer/highlight": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", - "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.3.0" - } - }, - "node_modules/@lezer/html": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.12.tgz", - "integrity": "sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/java": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.1.3.tgz", - "integrity": "sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/javascript": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", - "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.1.3", - "@lezer/lr": "^1.3.0" - } - }, - "node_modules/@lezer/json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", - "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@lezer/markdown": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.5.1.tgz", - "integrity": "sha512-F3ZFnIfNAOy/jPSk6Q0e3bs7e9grfK/n5zerkKoc5COH6Guy3Zb0vrJwXzdck79K16goBhYBRAvhf+ksqe0cMg==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.0.0", - "@lezer/highlight": "^1.0.0" - } - }, - "node_modules/@lezer/php": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@lezer/php/-/php-1.0.5.tgz", - "integrity": "sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.1.0" - } - }, - "node_modules/@lezer/python": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.18.tgz", - "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/rust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.2.tgz", - "integrity": "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/sass": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lezer/sass/-/sass-1.1.0.tgz", - "integrity": "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/xml": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", - "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0" - } - }, - "node_modules/@lezer/yaml": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.3.tgz", - "integrity": "sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==", - "license": "MIT", - "dependencies": { - "@lezer/common": "^1.2.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.4.0" - } - }, - "node_modules/@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", - "license": "MIT" - }, - "node_modules/@material/material-color-utilities": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@material/material-color-utilities/-/material-color-utilities-0.2.7.tgz", - "integrity": "sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==", - "license": "Apache-2.0" - }, - "node_modules/@quietui/quiet-browser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@quietui/quiet-browser/-/quiet-browser-1.6.1.tgz", - "integrity": "sha512-t398SI83bVmIuM6rQZTfQkMop8lMGdPmcSPhd6AUg2tpBVorQXUNTTQnFotevAHKU5kXch9amTKNnW44GBcUaw==", - "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/quietui" - } - }, - "node_modules/@replit/codemirror-minimap": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@replit/codemirror-minimap/-/codemirror-minimap-0.5.2.tgz", - "integrity": "sha512-eNAtpr0hOG09/5zqAQ5PkgZEb3V/MHi30zentCxiR73r+utR2m9yVMCpBmfsWbb8mWxUWhMGPiHxM5hFtnscQA==", - "license": "MIT", - "dependencies": { - "crelt": "^1.0.5" - }, - "peerDependencies": { - "@codemirror/language": "^6.9.1", - "@codemirror/lint": "^6.4.2", - "@codemirror/state": "^6.3.1", - "@codemirror/view": "^6.21.3", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.1.6" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", - "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-typescript": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", - "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.14.0||^3.0.0||^4.0.0", - "tslib": "*", - "typescript": ">=3.7.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - }, - "tslib": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@xterm/xterm": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", - "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", - "license": "MIT", - "optional": true - }, - "node_modules/@zenfs/core": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@zenfs/core/-/core-2.4.2.tgz", - "integrity": "sha512-vqSX3Og0vz92uUkC2/FTZTp8zoP+5A0ZRyUKpdxBmpBASJsaM/2xEeYtT+OTfv5RVxgAGFnaK4g2EzBST6KOYA==", - "license": "LGPL-3.0-or-later", - "dependencies": { - "@types/node": "^24.1.0", - "buffer": "^6.0.3", - "eventemitter3": "^5.0.1", - "kerium": "^1.3.4", - "memium": "^0.3.10", - "readable-stream": "^4.5.2", - "utilium": "^2.5.0" - }, - "bin": { - "make-index": "scripts/make-index.js", - "zci": "scripts/ci-cli.js", - "zenfs-test": "scripts/test.js" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/james-pre" - } - }, - "node_modules/@zenfs/dom": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@zenfs/dom/-/dom-1.2.5.tgz", - "integrity": "sha512-DdQzmROGvgen3JmBVdovnaIyAexPPlCNJ5Tb0e48N8W9TQJA5IuVsBgohBKGwDiGEDPquEMxzoycFD4RC6kjzA==", - "license": "LGPL-3.0-or-later", - "engines": { - "node": ">= 22" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/james-pre" - }, - "peerDependencies": { - "@zenfs/core": "^2.3.11", - "kerium": "^1.3.4", - "utilium": "^2.5.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/ace-builds": { - "version": "1.43.4", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.4.tgz", - "integrity": "sha512-8hAxVfo2ImICd69BWlZwZlxe9rxDGDjuUhh+WeWgGDvfBCE+r3lkynkQvIovDz4jcMi8O7bsEaFygaDT+h9sBA==", - "license": "BSD-3-Clause" - }, - "node_modules/ace-linters": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/ace-linters/-/ace-linters-1.8.5.tgz", - "integrity": "sha512-obRrUTmPez9odXVTeP8QvNSvVGbWxlrYF2+kFsq2MfCfzwWZxo5P7Y9Z/uLDDsAs1yyzKEDaIbUr7UYyeEAUcg==", - "license": "MIT", - "dependencies": { - "vscode-languageserver-protocol": "^3.17.5", - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-languageserver-types": "^3.17.5" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/beercss": { - "version": "3.12.13", - "resolved": "https://registry.npmjs.org/beercss/-/beercss-3.12.13.tgz", - "integrity": "sha512-zsg15us8pSLTupIOzFFJqpJ7eJDLV6whsxT6GcRYGnYaF0ka45+HQ/u3+ldSUkCeyA5J24g6csEuMW8tqrI/0w==", - "license": "MIT", - "dependencies": { - "material-dynamic-colors": "^1.1.2" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "license": "MIT" - }, - "node_modules/css-b64-images": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", - "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==", - "dev": true, - "bin": { - "css-b64-images": "bin/css-b64-images" - }, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true, - "license": "MIT" - }, - "node_modules/kerium": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/kerium/-/kerium-1.3.8.tgz", - "integrity": "sha512-tOtOOsTZ85Wt4h8TwV4ItgTi6paj2U1buOC/v9Rdon0ndtqASm5fn/rBRfEsif1czW4+u73T7XPbQAIBUF4tzg==", - "license": "MIT", - "dependencies": { - "utilium": "^2.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/james-pre" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/material-dynamic-colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/material-dynamic-colors/-/material-dynamic-colors-1.1.2.tgz", - "integrity": "sha512-8KD0jrPTFs2x06UJWbvkg6E0HyzFjrvS5oOc2DsXzIEOqZTbb3ruLMUhNuPSl8WeHA/O/RTAlTLcxqYXJzYwPA==", - "license": "MIT", - "dependencies": { - "@material/material-color-utilities": "^0.2.7" - }, - "bin": { - "material-dynamic-colors": "cli.js" - } - }, - "node_modules/memium": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/memium/-/memium-0.3.11.tgz", - "integrity": "sha512-CwmIpLVSG7UToDj2sYAZFDkpco30OPsXpaCnt+7Z7JQaulCjH5UvwJIctTIHmgQdFqk8pliBsPLnH5OZcDLZyQ==", - "license": "LGPL-3.0-or-later", - "dependencies": { - "kerium": "^1.3.2", - "utilium": "^2.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/james-pre" - } - }, - "node_modules/minify": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/minify/-/minify-9.2.0.tgz", - "integrity": "sha512-dfVx8j27TIZy2EE/nVMAhTVmUo6tdO4gYbKXaCYPUmpqWN2QJBgQtPfofsoA658L3Ee7e5OcyFIncJRgFtZcqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-css": "^5.0.1", - "css-b64-images": "~0.2.5", - "debug": "^4.1.0", - "find-up": "^6.1.0", - "html-minifier-terser": "^7.1.0", - "readjson": "^2.2.2", - "simport": "^1.2.0", - "terser": "^5.3.2", - "try-catch": "^3.0.0", - "try-to-catch": "^3.0.0" - }, - "bin": { - "minify": "bin/minify.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/readjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", - "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jju": "^1.4.0", - "try-catch": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-tla": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-tla/-/rollup-plugin-tla-0.0.2.tgz", - "integrity": "sha512-Z0P100crQTAjmQIXEC5J6ECupL4G8M3CTwTRK0D4J+5rMakimVa58n06kE3vnLSy/xZHnuerEpXdUW6s5G4HYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn-walk": "^8.2.0", - "magic-string": "^0.30.3" - }, - "engines": { - "node": "^14.18 || >= 16", - "pnpm": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simport": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", - "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readjson": "^2.2.0", - "try-to-catch": "^3.0.0" - }, - "engines": { - "node": ">=12.2" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/style-mod": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", - "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", - "license": "MIT" - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/try-catch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", - "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/try-to-catch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", - "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/utilium": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/utilium/-/utilium-2.5.8.tgz", - "integrity": "sha512-RNXAYoYH7hefayCW/2LU3SYCwDGQlDc8f4gPCRbMO6dJsYGGlzAhyHqYQGp73ox41JtPKjdqzddAbDhWQ9MrXQ==", - "license": "LGPL-3.0-or-later", - "dependencies": { - "eventemitter3": "^5.0.1" - }, - "bin": { - "lice": "scripts/lice.js" - }, - "engines": { - "node": ">=22.0.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/james-pre" - }, - "optionalDependencies": { - "@xterm/xterm": "^5.5.0" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "license": "MIT" - }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "license": "MIT" - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} +{ + "name": "basex-lsp", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@codemirror/commands": "^6.10.0", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-xml": "^6.1.0", + "@codemirror/language-data": "^6.5.2", + "@codemirror/legacy-modes": "^6.5.2", + "@codemirror/lint": "^6.9.1", + "@codemirror/lsp-client": "^6.2.0", + "@codemirror/search": "^6.5.11", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.38.6", + "@quietui/quiet-browser": "^1.6.1", + "@replit/codemirror-minimap": "^0.5.2", + "@zenfs/core": "^2.4.2", + "@zenfs/dom": "^1.2.5", + "ace-builds": "^1.43.4", + "ace-linters": "^1.8.5", + "beercss": "^3.12.13" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-typescript": "^12.1.4", + "minify": "^9.1.0", + "rollup": "4", + "rollup-plugin-tla": "^0.0.2" + } + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.1.tgz", + "integrity": "sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.0.tgz", + "integrity": "sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-angular": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@codemirror/lang-angular/-/lang-angular-0.1.4.tgz", + "integrity": "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.3" + } + }, + "node_modules/@codemirror/lang-cpp": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.3.tgz", + "integrity": "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/cpp": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-css": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", + "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/css": "^1.1.7" + } + }, + "node_modules/@codemirror/lang-go": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-go/-/lang-go-6.0.1.tgz", + "integrity": "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/go": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-html": { + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", + "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.12" + } + }, + "node_modules/@codemirror/lang-java": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.2.tgz", + "integrity": "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/java": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.4.tgz", + "integrity": "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-jinja": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz", + "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-less": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-less/-/lang-less-6.0.2.tgz", + "integrity": "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-liquid": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-liquid/-/lang-liquid-6.3.0.tgz", + "integrity": "sha512-fY1YsUExcieXRTsCiwX/bQ9+PbCTA/Fumv7C7mTUZHoFkibfESnaXwpr2aKH6zZVwysEunsHHkaIpM/pl3xETQ==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-markdown": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", + "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.7.1", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.3.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/markdown": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-php": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-php/-/lang-php-6.0.2.tgz", + "integrity": "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/php": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-python": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.2.1.tgz", + "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.3.2", + "@codemirror/language": "^6.8.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.1", + "@lezer/python": "^1.1.4" + } + }, + "node_modules/@codemirror/lang-rust": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.2.tgz", + "integrity": "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/rust": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sass": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sass/-/lang-sass-6.0.2.tgz", + "integrity": "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-css": "^6.2.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.0.2", + "@lezer/sass": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-sql": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.10.0.tgz", + "integrity": "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-vue": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/lang-vue/-/lang-vue-0.1.3.tgz", + "integrity": "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-javascript": "^6.1.2", + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.1" + } + }, + "node_modules/@codemirror/lang-wast": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-wast/-/lang-wast-6.0.2.tgz", + "integrity": "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-xml": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", + "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.4.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/xml": "^1.0.0" + } + }, + "node_modules/@codemirror/lang-yaml": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.2.tgz", + "integrity": "sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.2.0", + "@lezer/lr": "^1.0.0", + "@lezer/yaml": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", + "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/language-data": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz", + "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==", + "license": "MIT", + "dependencies": { + "@codemirror/lang-angular": "^0.1.0", + "@codemirror/lang-cpp": "^6.0.0", + "@codemirror/lang-css": "^6.0.0", + "@codemirror/lang-go": "^6.0.0", + "@codemirror/lang-html": "^6.0.0", + "@codemirror/lang-java": "^6.0.0", + "@codemirror/lang-javascript": "^6.0.0", + "@codemirror/lang-jinja": "^6.0.0", + "@codemirror/lang-json": "^6.0.0", + "@codemirror/lang-less": "^6.0.0", + "@codemirror/lang-liquid": "^6.0.0", + "@codemirror/lang-markdown": "^6.0.0", + "@codemirror/lang-php": "^6.0.0", + "@codemirror/lang-python": "^6.0.0", + "@codemirror/lang-rust": "^6.0.0", + "@codemirror/lang-sass": "^6.0.0", + "@codemirror/lang-sql": "^6.0.0", + "@codemirror/lang-vue": "^0.1.1", + "@codemirror/lang-wast": "^6.0.0", + "@codemirror/lang-xml": "^6.0.0", + "@codemirror/lang-yaml": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/legacy-modes": "^6.4.0" + } + }, + "node_modules/@codemirror/legacy-modes": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/legacy-modes/-/legacy-modes-6.5.2.tgz", + "integrity": "sha512-/jJbwSTazlQEDOQw2FJ8LEEKVS72pU0lx6oM54kGpL8t/NJ2Jda3CZ4pcltiKTdqYSRk3ug1B3pil1gsjA6+8Q==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.1.tgz", + "integrity": "sha512-te7To1EQHePBQQzasDKWmK2xKINIXpk+xAiSYr9ZN+VB4KaT+/Hi2PEkeErTk5BV3PTz1TLyQL4MtJfPkKZ9sw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.35.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/lsp-client": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.2.0.tgz", + "integrity": "sha512-RHUgJCiuthJpIqXefsr1fKNWarC0tBLQ7anh2UynVRYhXHXt0OwP/pIGcMUOMCVVuKB/tmy//2Yp7WbLKorksA==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.18.6", + "@codemirror/language": "^6.11.0", + "@codemirror/lint": "^6.8.5", + "@codemirror/state": "^6.5.2", + "@codemirror/view": "^6.37.0", + "@lezer/highlight": "^1.2.1", + "marked": "^15.0.12", + "vscode-languageserver-protocol": "^3.17.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.11", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", + "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", + "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz", + "integrity": "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.38.6", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", + "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.5.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lezer/common": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.3.0.tgz", + "integrity": "sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==", + "license": "MIT" + }, + "node_modules/@lezer/cpp": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.1.3.tgz", + "integrity": "sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/css": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.0.tgz", + "integrity": "sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/go": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/go/-/go-1.0.1.tgz", + "integrity": "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/highlight": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/html": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.12.tgz", + "integrity": "sha512-RJ7eRWdaJe3bsiiLLHjCFT1JMk8m1YP9kaUbvu2rMLEoOnke9mcTVDyfOslsln0LtujdWespjJ39w6zo+RsQYw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/java": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.1.3.tgz", + "integrity": "sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/javascript": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", + "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.1.3", + "@lezer/lr": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/markdown": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.5.1.tgz", + "integrity": "sha512-F3ZFnIfNAOy/jPSk6Q0e3bs7e9grfK/n5zerkKoc5COH6Guy3Zb0vrJwXzdck79K16goBhYBRAvhf+ksqe0cMg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@lezer/php": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@lezer/php/-/php-1.0.5.tgz", + "integrity": "sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.1.0" + } + }, + "node_modules/@lezer/python": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.18.tgz", + "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/rust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.2.tgz", + "integrity": "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/sass": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lezer/sass/-/sass-1.1.0.tgz", + "integrity": "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/xml": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", + "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/yaml": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.3.tgz", + "integrity": "sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.4.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" + }, + "node_modules/@material/material-color-utilities": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@material/material-color-utilities/-/material-color-utilities-0.2.7.tgz", + "integrity": "sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==", + "license": "Apache-2.0" + }, + "node_modules/@quietui/quiet-browser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@quietui/quiet-browser/-/quiet-browser-1.6.1.tgz", + "integrity": "sha512-t398SI83bVmIuM6rQZTfQkMop8lMGdPmcSPhd6AUg2tpBVorQXUNTTQnFotevAHKU5kXch9amTKNnW44GBcUaw==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/quietui" + } + }, + "node_modules/@replit/codemirror-minimap": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@replit/codemirror-minimap/-/codemirror-minimap-0.5.2.tgz", + "integrity": "sha512-eNAtpr0hOG09/5zqAQ5PkgZEb3V/MHi30zentCxiR73r+utR2m9yVMCpBmfsWbb8mWxUWhMGPiHxM5hFtnscQA==", + "license": "MIT", + "dependencies": { + "crelt": "^1.0.5" + }, + "peerDependencies": { + "@codemirror/language": "^6.9.1", + "@codemirror/lint": "^6.4.2", + "@codemirror/state": "^6.3.1", + "@codemirror/view": "^6.21.3", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.1.6" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", + "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", + "license": "MIT", + "optional": true + }, + "node_modules/@zenfs/core": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@zenfs/core/-/core-2.4.2.tgz", + "integrity": "sha512-vqSX3Og0vz92uUkC2/FTZTp8zoP+5A0ZRyUKpdxBmpBASJsaM/2xEeYtT+OTfv5RVxgAGFnaK4g2EzBST6KOYA==", + "license": "LGPL-3.0-or-later", + "dependencies": { + "@types/node": "^24.1.0", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "kerium": "^1.3.4", + "memium": "^0.3.10", + "readable-stream": "^4.5.2", + "utilium": "^2.5.0" + }, + "bin": { + "make-index": "scripts/make-index.js", + "zci": "scripts/ci-cli.js", + "zenfs-test": "scripts/test.js" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + } + }, + "node_modules/@zenfs/dom": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@zenfs/dom/-/dom-1.2.5.tgz", + "integrity": "sha512-DdQzmROGvgen3JmBVdovnaIyAexPPlCNJ5Tb0e48N8W9TQJA5IuVsBgohBKGwDiGEDPquEMxzoycFD4RC6kjzA==", + "license": "LGPL-3.0-or-later", + "engines": { + "node": ">= 22" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + }, + "peerDependencies": { + "@zenfs/core": "^2.3.11", + "kerium": "^1.3.4", + "utilium": "^2.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/ace-builds": { + "version": "1.43.4", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.4.tgz", + "integrity": "sha512-8hAxVfo2ImICd69BWlZwZlxe9rxDGDjuUhh+WeWgGDvfBCE+r3lkynkQvIovDz4jcMi8O7bsEaFygaDT+h9sBA==", + "license": "BSD-3-Clause" + }, + "node_modules/ace-linters": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/ace-linters/-/ace-linters-1.8.5.tgz", + "integrity": "sha512-obRrUTmPez9odXVTeP8QvNSvVGbWxlrYF2+kFsq2MfCfzwWZxo5P7Y9Z/uLDDsAs1yyzKEDaIbUr7UYyeEAUcg==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "^3.17.5", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/beercss": { + "version": "3.12.13", + "resolved": "https://registry.npmjs.org/beercss/-/beercss-3.12.13.tgz", + "integrity": "sha512-zsg15us8pSLTupIOzFFJqpJ7eJDLV6whsxT6GcRYGnYaF0ka45+HQ/u3+ldSUkCeyA5J24g6csEuMW8tqrI/0w==", + "license": "MIT", + "dependencies": { + "material-dynamic-colors": "^1.1.2" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, + "node_modules/css-b64-images": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", + "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==", + "dev": true, + "bin": { + "css-b64-images": "bin/css-b64-images" + }, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "node_modules/kerium": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/kerium/-/kerium-1.3.8.tgz", + "integrity": "sha512-tOtOOsTZ85Wt4h8TwV4ItgTi6paj2U1buOC/v9Rdon0ndtqASm5fn/rBRfEsif1czW4+u73T7XPbQAIBUF4tzg==", + "license": "MIT", + "dependencies": { + "utilium": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/material-dynamic-colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/material-dynamic-colors/-/material-dynamic-colors-1.1.2.tgz", + "integrity": "sha512-8KD0jrPTFs2x06UJWbvkg6E0HyzFjrvS5oOc2DsXzIEOqZTbb3ruLMUhNuPSl8WeHA/O/RTAlTLcxqYXJzYwPA==", + "license": "MIT", + "dependencies": { + "@material/material-color-utilities": "^0.2.7" + }, + "bin": { + "material-dynamic-colors": "cli.js" + } + }, + "node_modules/memium": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/memium/-/memium-0.3.11.tgz", + "integrity": "sha512-CwmIpLVSG7UToDj2sYAZFDkpco30OPsXpaCnt+7Z7JQaulCjH5UvwJIctTIHmgQdFqk8pliBsPLnH5OZcDLZyQ==", + "license": "LGPL-3.0-or-later", + "dependencies": { + "kerium": "^1.3.2", + "utilium": "^2.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + } + }, + "node_modules/minify": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/minify/-/minify-9.2.0.tgz", + "integrity": "sha512-dfVx8j27TIZy2EE/nVMAhTVmUo6tdO4gYbKXaCYPUmpqWN2QJBgQtPfofsoA658L3Ee7e5OcyFIncJRgFtZcqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-css": "^5.0.1", + "css-b64-images": "~0.2.5", + "debug": "^4.1.0", + "find-up": "^6.1.0", + "html-minifier-terser": "^7.1.0", + "readjson": "^2.2.2", + "simport": "^1.2.0", + "terser": "^5.3.2", + "try-catch": "^3.0.0", + "try-to-catch": "^3.0.0" + }, + "bin": { + "minify": "bin/minify.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", + "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jju": "^1.4.0", + "try-catch": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-tla": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-tla/-/rollup-plugin-tla-0.0.2.tgz", + "integrity": "sha512-Z0P100crQTAjmQIXEC5J6ECupL4G8M3CTwTRK0D4J+5rMakimVa58n06kE3vnLSy/xZHnuerEpXdUW6s5G4HYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn-walk": "^8.2.0", + "magic-string": "^0.30.3" + }, + "engines": { + "node": "^14.18 || >= 16", + "pnpm": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", + "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readjson": "^2.2.0", + "try-to-catch": "^3.0.0" + }, + "engines": { + "node": ">=12.2" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/style-mod": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", + "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", + "license": "MIT" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/try-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", + "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/utilium": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/utilium/-/utilium-2.5.8.tgz", + "integrity": "sha512-RNXAYoYH7hefayCW/2LU3SYCwDGQlDc8f4gPCRbMO6dJsYGGlzAhyHqYQGp73ox41JtPKjdqzddAbDhWQ9MrXQ==", + "license": "LGPL-3.0-or-later", + "dependencies": { + "eventemitter3": "^5.0.1" + }, + "bin": { + "lice": "scripts/lice.js" + }, + "engines": { + "node": ">=22.0.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/james-pre" + }, + "optionalDependencies": { + "@xterm/xterm": "^5.5.0" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 3e6b727..b4f97b1 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,37 @@ -{ - "dependencies": { - "@codemirror/commands": "^6.10.0", - "@codemirror/lang-javascript": "^6.2.4", - "@codemirror/lang-markdown": "^6.5.0", - "@codemirror/lang-xml": "^6.1.0", - "@codemirror/language-data": "^6.5.2", - "@codemirror/legacy-modes": "^6.5.2", - "@codemirror/lint": "^6.9.1", - "@codemirror/lsp-client": "^6.2.0", - "@codemirror/search": "^6.5.11", - "@codemirror/theme-one-dark": "^6.1.3", - "@codemirror/view": "^6.38.6", - "@quietui/quiet-browser": "^1.6.1", - "@replit/codemirror-minimap": "^0.5.2", - "@zenfs/core": "^2.4.2", - "@zenfs/dom": "^1.2.5", - "ace-builds": "^1.43.4", - "ace-linters": "^1.8.5", - "beercss": "^3.12.13" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@rollup/plugin-typescript": "^12.1.4", - "minify": "^9.1.0", - "rollup": "4", - "rollup-plugin-tla": "^0.0.2" - }, - "scripts": { - "build": "rollup cm6/index.js -m true -f iife -o dist/cm6.bundle.js -p node-resolve,tla --output.name cm6", - "lsp-build": "rollup bundles/cm6/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp", - "lsp-min": "cd webapp/static/clients/codemirror && npx minify lsp.bundle.js > lsp.bundle.min.js ", - "min": "cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js && npx minify lsp.bundle.js > lsp.bundle.min.js", - "javac": "cd bundles/grammar && javac --release 17 -cp %BASEX12%\\BaseX.jar -d build xq4.java && cd build && jar cf ../../../webapp/custom/xq4.jar . ", - "railroad server": "cd C:/Users/mrwhe/apps/rr-2.5-java11 && java -jar rr.war -gui -port:5555" - } -} +{ + "dependencies": { + "@codemirror/commands": "^6.10.0", + "@codemirror/lang-javascript": "^6.2.4", + "@codemirror/lang-markdown": "^6.5.0", + "@codemirror/lang-xml": "^6.1.0", + "@codemirror/language-data": "^6.5.2", + "@codemirror/legacy-modes": "^6.5.2", + "@codemirror/lint": "^6.9.1", + "@codemirror/lsp-client": "^6.2.0", + "@codemirror/search": "^6.5.11", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.38.6", + "@quietui/quiet-browser": "^1.6.1", + "@replit/codemirror-minimap": "^0.5.2", + "@zenfs/core": "^2.4.2", + "@zenfs/dom": "^1.2.5", + "ace-builds": "^1.43.4", + "ace-linters": "^1.8.5", + "beercss": "^3.12.13" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-typescript": "^12.1.4", + "minify": "^9.1.0", + "rollup": "4", + "rollup-plugin-tla": "^0.0.2" + }, + "scripts": { + "build": "rollup cm6/index.js -m true -f iife -o dist/cm6.bundle.js -p node-resolve,tla --output.name cm6", + "lsp-build": "rollup bundles/cm6/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp", + "lsp-min": "cd webapp/static/clients/codemirror && npx minify lsp.bundle.js > lsp.bundle.min.js ", + "min": "cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js && npx minify lsp.bundle.js > lsp.bundle.min.js", + "javac": "cd bundles/grammar && javac --release 17 -cp %BASEX12%\\BaseX.jar -d build xq4.java && cd build && jar cf ../../../webapp/custom/xq4.jar . ", + "railroad server": "cd C:/Users/mrwhe/apps/rr-2.5-java11 && java -jar rr.war -gui -port:5555" + } +} diff --git a/rollup.config.js b/rollup.config.js index 0a83d3c..94e208c 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,14 +1,14 @@ - -import tla from 'rollup-plugin-tla'; -import nodeResolve from 'rollup-node-resolve'; -export default defineConfig({ - input: 'src/editor.js', - output: { - format: 'iife', - dir: './dist', - file:"acm6.bundle.js", - name: `__Expose`, - sourcemap: true, - }, - plugins: [ nodeResolve(),tla()], + +import tla from 'rollup-plugin-tla'; +import nodeResolve from 'rollup-node-resolve'; +export default defineConfig({ + input: 'src/editor.js', + output: { + format: 'iife', + dir: './dist', + file:"acm6.bundle.js", + name: `__Expose`, + sourcemap: true, + }, + plugins: [ nodeResolve(),tla()], }); \ No newline at end of file diff --git a/test/sample.docs/parse-pdfbox.xml b/test/sample.docs/parse-pdfbox.xml index 430180b..e05da4f 100644 --- a/test/sample.docs/parse-pdfbox.xml +++ b/test/sample.docs/parse-pdfbox.xml @@ -1,524 +1,524 @@ -xquery version '3.1'; -(:~ -requires pdfbox jars on classpath, in lib/custom or xar -@note following the java source the terms outline and bookmark -refer to the same concept. Also label and (page)range are used interchangably -@note tested with pdfbox-app-3.0.5.jar -@see https://pdfbox.apache.org/download.cgi -@javadoc https://javadoc.io/static/org.apache.pdfbox/pdfbox/3.0.5/ -@author Andy Bunce 2025 -:) - -module namespace pdfbox="org.expkg_zone58.Pdfbox3"; - -declare namespace Loader ="java:org.apache.pdfbox.Loader"; -declare namespace PDFTextStripper = "java:org.apache.pdfbox.text.PDFTextStripper"; -declare namespace PDDocument ="java:org.apache.pdfbox.pdmodel.PDDocument"; -declare namespace PDDocumentCatalog ="java:org.apache.pdfbox.pdmodel.PDDocumentCatalog"; -declare namespace PDPageLabels ="java:org.apache.pdfbox.pdmodel.common.PDPageLabels"; -declare namespace PDPageLabelRange="java:org.apache.pdfbox.pdmodel.common.PDPageLabelRange"; - -declare namespace PageExtractor ="java:org.apache.pdfbox.multipdf.PageExtractor"; -declare namespace PDPage ="java:org.apache.pdfbox.pdmodel.PDPage"; -declare namespace PDPageTree ="java:org.apache.pdfbox.pdmodel.PDPageTree"; -declare namespace PDDocumentOutline ="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline"; -declare namespace PDDocumentInformation ="java:org.apache.pdfbox.pdmodel.PDDocumentInformation"; -declare namespace PDOutlineItem="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem"; -declare namespace PDFRenderer="java:org.apache.pdfbox.rendering.PDFRenderer"; -declare namespace PDMetadata="java:org.apache.pdfbox.pdmodel.common.PDMetadata"; -declare namespace COSInputStream="java:org.apache.pdfbox.cos.COSInputStream"; - - -declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; - - -declare namespace RandomAccessReadBuffer="java:org.apache.pdfbox.io.RandomAccessReadBuffer"; -declare namespace RandomAccessReadBufferedFile = "java:org.apache.pdfbox.io.RandomAccessReadBufferedFile"; -declare namespace PDRectangle="org.apache.pdfbox.pdmodel.common.PDRectangle"; - -declare namespace File ="java:java.io.File"; - - - -(:~ "With-document" pattern: open pdf,apply $fn function, close pdf - creates a local pdfobject and ensures it is closed after use -e.g pdfbox:with-pdf("path...",pdfbox:page-text(?,5)) -:) -declare function pdfbox:with-pdf($src as xs:string, - $fn as function(item())as item()*) -as item()*{ - let $pdf:=pdfbox:open($src) - return try{ - $fn($pdf),pdfbox:close($pdf) - } catch *{ - pdfbox:close($pdf),fn:error($err:code,$src || " " || $err:description) - } - -}; - - -(:~ open pdf using fetch:binary, returns pdf object :) -declare function pdfbox:open($pdfsrc as item()) -as item(){ -pdfbox:open($pdfsrc, map{}) -}; - -(:~ open pdf from file/url/binary, opts may have password , returns pdf object -@param $pdfsrc a fetchable url or filepath, or xs:base64Binary item -@param $opts options options include map {"password":} -@note fetch:binary for https will use a lot of memory here -:) -declare function pdfbox:open($pdfsrc as item(), $opts as map(*)) -as item(){ - try{ - - if($pdfsrc instance of xs:base64Binary) - then Loader:loadPDF( $pdfsrc,string($opts?password)) - else if(starts-with($pdfsrc,"http")) - then Loader:loadPDF( fetch:binary($pdfsrc),string($opts?password)) - else Loader:loadPDF(RandomAccessReadBufferedFile:new($pdfsrc),string($opts?password)) - -} catch *{ - let $loc:=if($pdfsrc instance of xs:base64Binary) - then "xs:base64Binary" - else $pdfsrc - return error(xs:QName("pdfbox:open"),"Failed PDF load " || $loc || " " || $err:description) -} -}; - -(:~ The version of the PDF specification used by $pdf e.g "1.4" -returned as string to avoid float rounding issues - :) -declare function pdfbox:specification($pdf as item()) -as xs:string{ - PDDocument:getVersion($pdf)=>xs:decimal()=>round(4)=>string() -}; - -(:~ Save pdf $pdf to filesystem at $savepath , returns $savepath :) -declare function pdfbox:pdf-save($pdf as item(),$savepath as xs:string) -as xs:string{ - PDDocument:save($pdf, File:new($savepath)),$savepath -}; - -(:~ Create binary representation of $pdf object as xs:base64Binary :) -declare function pdfbox:binary($pdf as item()) -as xs:base64Binary{ - let $bytes:=Q{java:java.io.ByteArrayOutputStream}new() - let $_:=PDDocument:save($pdf, $bytes) - return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) - =>convert:integers-to-base64() -}; - -(:~ Release any resources related to $pdf:) -declare function pdfbox:close($pdf as item()) -as empty-sequence(){ - (# db:wrapjava void #) { - PDDocument:close($pdf) - } -}; - -(:~ Number of pages in PDF:) -declare function pdfbox:number-of-pages($pdf as item()) -as xs:integer{ - PDDocument:getNumberOfPages($pdf) -}; - -(:~ Pdf page as image (zero is cover) -options.format="bmp jpg png gif" etc, options.scale= 1 is 72 dpi?? :) -declare function pdfbox:page-render($pdf as item(),$pageNo as xs:integer,$options as map(*)) -as xs:base64Binary{ - let $options := map:merge(($options,map{"format":"jpg","scale":1})) - let $bufferedImage := PDFRenderer:new($pdf) - =>PDFRenderer:renderImage($pageNo,$options?scale) - let $bytes := Q{java:java.io.ByteArrayOutputStream}new() - let $_ := Q{java:javax.imageio.ImageIO}write($bufferedImage ,$options?format, $bytes) - return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) - =>convert:integers-to-base64() - -}; - - -(:~ Defines a map from property names to evaluation method. - Keys are property names, - values are sequences of functions to get property value starting from a $pdf object. -:) -declare %private variable $pdfbox:property-map:=map{ - "#pages": pdfbox:number-of-pages#1, - - "#bookmarks": pdfbox:number-of-bookmarks#1, - - "#labels": pdfbox:number-of-labels#1, - - "specification":pdfbox:specification#1, - - "title": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getTitle#1) , - - "author": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getAuthor#1 ), - - "creator": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getCreator#1), - - "producer": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getProducer#1), - - "subject": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getSubject#1), - - "keywords": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getKeywords#1), - - "creationDate": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getCreationDate#1, - pdfbox:gregToISO#1), - - "modificationDate": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getModificationDate#1, - pdfbox:gregToISO#1), - - "labels": pdfbox:labels-as-string#1 -}; - -(:~ Defined property names, sorted :) -declare function pdfbox:property-names() -as xs:string*{ - $pdfbox:property-map=>map:keys()=>sort() -}; - -(:~ Return the value of $property for $pdf :) -declare function pdfbox:property($pdf as item(),$property as xs:string) -as item()*{ - let $fns:= $pdfbox:property-map($property) - return if(exists($fns)) - then fold-left($fns, - $pdf, - function($result,$this as function(*)){$result!$this(.)}) - else error(xs:QName('pdfbox:property'),concat("Property '",$property,"' not defined.")) -}; - -(:~ summary CSV style info for all properties for $pdfpaths -:) -declare function pdfbox:report($pdfpaths as xs:string*) -as map(*){ - pdfbox:report($pdfpaths,pdfbox:property-names()) -}; - -(:~ summary CSV style info for named $properties for PDFs in $pdfpaths -@see https://docs.basex.org/main/CSV_Functions#xquery -:) -declare function pdfbox:report($pdfpaths as item()*, $properties as xs:string*) -as map(*){ - map{"names": array{"path",$properties}, - - "records": for $path in $pdfpaths - let $name:=if($path instance of xs:base64Binary) then "binary" else $path - return try{ - let $pdf:=pdfbox:open($path) - return (fold-left($properties, - array{$name}, - function($result as array(*),$prop as xs:string){ - array:append($result, string(pdfbox:property($pdf, $prop)))} - ), pdfbox:close($pdf) - ) - } catch *{ - fold-left($properties, - array{$name}, - function($result as array(*),$prop as xs:string){ - array:append($result, "#ERROR")} - ) - } - - } -}; - -(:~ Convenience function to save report() data to file :) -declare function pdfbox:report-save($data as map(*),$dest as xs:string) -as empty-sequence(){ - let $opts := map { "format":"xquery", "header":"yes", "separator" : "," } - return file:write-text($dest,csv:serialize($data,$opts)) -}; - -(:~ The number of outline items defined in $pdf :) -declare function pdfbox:number-of-bookmarks($pdf as item()) -as xs:integer{ - let $xml:=pdfbox:outline-xml($pdf) - return count($xml//bookmark) -}; - -(:~ XMP metadata as "RDF" document -@note usually rdf:RDF root, but sometimes x:xmpmeta -:) -declare function pdfbox:metadata($pdf as item()) -as document-node(element(*))? -{ - let $m:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getMetadata() - return if(exists($m)) - then - let $is:=PDMetadata:exportXMPMetadata($m) - return pdfbox:do-until( - map{"n":0,"data":""}, - - function($input,$pos ) { pdfbox:read-stream($is,$input?data)}, - - function($output,$pos) { $output?n eq -1 } - )?data=>parse-xml() - else () -}; - -(:~ read next block from XMP stream :) -declare %private function pdfbox:read-stream($is,$read as xs:string) -as map(*){ - let $blen:=4096 - let $buff:=Q{java:java.util.Arrays}copyOf(array{xs:byte(0)},$blen) - let $n:= COSInputStream:read($is,$buff,xs:int(0),xs:int($blen)) - let $data:=convert:integers-to-base64(subsequence($buff,1,$n))=>convert:binary-to-string() - return map{"n":$n, "data": $read || $data} -}; - -(:~ Return outline for $pdf as map()* :) -declare function pdfbox:outline($pdf as item()) -as map(*)*{ - (# db:wrapjava some #) { - let $outline:= - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getDocumentOutline() - - return if(exists($outline)) - then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline)) - else () - } -}; - -(:~ return bookmark info for children of $outlineItem as seq of maps :) -declare %private function pdfbox:outline($pdf as item(),$outlineItem as item()?) -as map(*)*{ - let $find as map(*):=pdfbox:outline_($pdf ,$outlineItem) - return map:get($find,"list") -}; - -(:~ outline helper. BaseX bug 10.7? error if inlined in outline :) -declare %private function pdfbox:outline_($pdf as item(),$outlineItem as item()?) -as map(*){ - pdfbox:do-until( - - map{"list":(),"this":$outlineItem}, - - function($input,$pos ) { - let $bk:= pdfbox:bookmark($input?this,$pdf) - let $bk:= if($bk?hasChildren) - then let $kids:=pdfbox:outline($pdf,PDOutlineItem:getFirstChild($input?this)) - return map:merge(($bk,map:entry("children",$kids))) - else $bk - return map{ - "list": ($input?list, $bk), - "this": PDOutlineItem:getNextSibling($input?this)} - }, - - function($output,$pos) { empty($output?this) } - ) -}; - -(:~ PDF outline in xml format :) -declare function pdfbox:outline-xml($pdf as item()) -as element(outline)?{ - let $outline:=pdfbox:outline($pdf) - return if(exists($outline)) - then <outline>{$outline!pdfbox:bookmark-xml(.)}</outline> - else () -}; - -(:~ Convert outline map to XML :) -declare %private function pdfbox:bookmark-xml($outline as map(*)*) -as element(bookmark)* -{ - $outline! - <bookmark title="{?title}" index="{?index}"> - {?children!pdfbox:bookmark-xml(.)} - </bookmark> -}; - -(:~ Return bookmark info for $bookmark -@return map{index:..,title:..,hasChildren:..} -:) -declare %private function pdfbox:bookmark($bookmark as item(),$pdf as item()) -as map(*) -{ - map{ - "index": PDOutlineItem:findDestinationPage($bookmark,$pdf)=>pdfbox:find-page($pdf), - "title": (# db:checkstrings #) {PDOutlineItem:getTitle($bookmark)} - (:=>translate("�",""), :), - "hasChildren": PDOutlineItem:hasChildren($bookmark) - } -}; - - -(:~ pageIndex of $page in $pdf :) -declare function pdfbox:find-page( - $page as item()? (: as java:org.apache.pdfbox.pdmodel.PDPage :), - $pdf as item()) -as item()? -{ - if(exists($page)) - then PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPages() - =>PDPageTree:indexOf($page) - else () -}; - -(:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based) -@param $start first page to include -@param $end last page to include -:) -declare function pdfbox:extract-range($pdf as item(), - $start as xs:integer,$end as xs:integer) -as xs:base64Binary -{ - let $a:=PageExtractor:new($pdf, $start, $end) =>PageExtractor:extract() - return (pdfbox:binary($a),pdfbox:close($a)) -}; - -(:~ The number of labels defined in PDF :) -declare function pdfbox:number-of-labels($pdf as item()) -as xs:integer -{ - let $labels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return if(exists($labels)) - then PDPageLabels:getPageRangeCount($labels) - else 0 -}; - -(:~ pageLabel for every page from derived from page-ranges -The returned sequence will contain at MOST as much entries as the document has pages. -@see https://www.w3.org/TR/WCAG20-TECHS/PDF17.html#PDF17-examples -@see https://codereview.stackexchange.com/questions/286078/java-code-showing-page-labels-from-pdf-files -:) -declare function pdfbox:labels-by-page($pdf as item()) -as xs:string* -{ - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - =>PDPageLabels:getLabelsByPageIndices() -}; - -(:~ sequence of label ranges defined in PDF as formatted strings -@return a custom representation of the labels e.g "0-*Cover,1r,11D" -:) -declare function pdfbox:labels-as-string($pdf as item()) -as xs:string{ - let $pagelabels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return $pagelabels - !(0 to pdfbox:number-of-pages($pdf)-1) - !pdfbox:label-as-string($pagelabels,.)=>string-join("&#10;") - -}; - -(:~ get pagelabels exist :) -declare function pdfbox:page-labels($pdf) -{ - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() -}; - -(:~ label for $page formated as string, empty if none :) -declare function pdfbox:label-as-string($pagelabels,$page as xs:integer) -as xs:string?{ - let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) - return if(empty($label)) - then () - else - let $start:= PDPageLabelRange:getStart($label) - let $style := PDPageLabelRange:getStyle($label) - let $prefix:= PDPageLabelRange:getPrefix($label) - return string-join(($page, - if(empty($style)) then "-" else $style, - if(($start eq 1)) then "" else $start, - if(exists($prefix)) then '*' || $prefix else () (:TODO double " :) - )) -}; - -(:~ sequence of maps for each label/page range defined in $pdf:) -declare function pdfbox:labels-as-map($pdf as item()) -as map(*)*{ - let $pagelabels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return $pagelabels - !(0 to pdfbox:number-of-pages($pdf)-1) - !pdfbox:label-as-map($pagelabels,.) -}; - -(:~ label/page-range for $page as map :) -declare function pdfbox:label-as-map($pagelabels,$page as xs:integer) -as map(*) -{ - let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) - return if(empty($label)) - then () - else map{ - "index": $page, - "prefix": PDPageLabelRange:getPrefix($label), - "start": PDPageLabelRange:getStart($label), - "style": PDPageLabelRange:getStyle($label) - } -}; - - - -(:~ return text on $pageNo :) -declare function pdfbox:page-text($pdf as item(), $pageNo as xs:integer) -as xs:string{ - let $tStripper := (# db:wrapjava instance #) { - PDFTextStripper:new() - => PDFTextStripper:setStartPage($pageNo) - => PDFTextStripper:setEndPage($pageNo) - } - return (# db:checkstrings #) {PDFTextStripper:getText($tStripper,$pdf)} -}; - -(:~ Return size of $pageNo (zero based) -@return e.g. [0.0,0.0,168.0,239.52] - :) -declare function pdfbox:page-media-box($pdf as item(), $pageNo as xs:integer) -as xs:string{ - PDDocument:getPage($pdf, $pageNo) - =>PDPage:getMediaBox() - =>PDRectangle:toString() -}; - -(:~ Version of Apache Pdfbox in use e.g. "3.0.4" :) -declare function pdfbox:version() -as xs:string{ - Q{java:org.apache.pdfbox.util.Version}getVersion() -}; - -(:~ Convert date :) -declare %private -function pdfbox:gregToISO($item as item()?) -as xs:string?{ - if(exists($item)) - then Q{java:java.util.GregorianCalendar}toZonedDateTime($item)=>string() - else () -}; - -(:~ fn:do-until shim for BaseX 9+10 -if fn:do-until not found use hof:until, note: $pos always zero -:) -declare %private function pdfbox:do-until( - $input as item()*, - $action as function(item()*, xs:integer) as item()*, - $predicate as function(item()*, xs:integer) as xs:boolean? -) as item()* -{ - let $fn:=function-lookup(QName('http://www.w3.org/2005/xpath-functions','do-until'), 3) - return if(exists($fn)) - then $fn($input,$action,$predicate) - else let $hof:=function-lookup(QName('http://basex.org/modules/hof','until'), 3) - return if(exists($hof)) - then $hof($predicate(?,0),$action(?,0),$input) - else error(xs:QName('pdfbox:do-until'),"No implementation do-until found") - -}; +xquery version '3.1'; +(:~ +requires pdfbox jars on classpath, in lib/custom or xar +@note following the java source the terms outline and bookmark +refer to the same concept. Also label and (page)range are used interchangably +@note tested with pdfbox-app-3.0.5.jar +@see https://pdfbox.apache.org/download.cgi +@javadoc https://javadoc.io/static/org.apache.pdfbox/pdfbox/3.0.5/ +@author Andy Bunce 2025 +:) + +module namespace pdfbox="org.expkg_zone58.Pdfbox3"; + +declare namespace Loader ="java:org.apache.pdfbox.Loader"; +declare namespace PDFTextStripper = "java:org.apache.pdfbox.text.PDFTextStripper"; +declare namespace PDDocument ="java:org.apache.pdfbox.pdmodel.PDDocument"; +declare namespace PDDocumentCatalog ="java:org.apache.pdfbox.pdmodel.PDDocumentCatalog"; +declare namespace PDPageLabels ="java:org.apache.pdfbox.pdmodel.common.PDPageLabels"; +declare namespace PDPageLabelRange="java:org.apache.pdfbox.pdmodel.common.PDPageLabelRange"; + +declare namespace PageExtractor ="java:org.apache.pdfbox.multipdf.PageExtractor"; +declare namespace PDPage ="java:org.apache.pdfbox.pdmodel.PDPage"; +declare namespace PDPageTree ="java:org.apache.pdfbox.pdmodel.PDPageTree"; +declare namespace PDDocumentOutline ="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline"; +declare namespace PDDocumentInformation ="java:org.apache.pdfbox.pdmodel.PDDocumentInformation"; +declare namespace PDOutlineItem="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem"; +declare namespace PDFRenderer="java:org.apache.pdfbox.rendering.PDFRenderer"; +declare namespace PDMetadata="java:org.apache.pdfbox.pdmodel.common.PDMetadata"; +declare namespace COSInputStream="java:org.apache.pdfbox.cos.COSInputStream"; + + +declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + + +declare namespace RandomAccessReadBuffer="java:org.apache.pdfbox.io.RandomAccessReadBuffer"; +declare namespace RandomAccessReadBufferedFile = "java:org.apache.pdfbox.io.RandomAccessReadBufferedFile"; +declare namespace PDRectangle="org.apache.pdfbox.pdmodel.common.PDRectangle"; + +declare namespace File ="java:java.io.File"; + + + +(:~ "With-document" pattern: open pdf,apply $fn function, close pdf + creates a local pdfobject and ensures it is closed after use +e.g pdfbox:with-pdf("path...",pdfbox:page-text(?,5)) +:) +declare function pdfbox:with-pdf($src as xs:string, + $fn as function(item())as item()*) +as item()*{ + let $pdf:=pdfbox:open($src) + return try{ + $fn($pdf),pdfbox:close($pdf) + } catch *{ + pdfbox:close($pdf),fn:error($err:code,$src || " " || $err:description) + } + +}; + + +(:~ open pdf using fetch:binary, returns pdf object :) +declare function pdfbox:open($pdfsrc as item()) +as item(){ +pdfbox:open($pdfsrc, map{}) +}; + +(:~ open pdf from file/url/binary, opts may have password , returns pdf object +@param $pdfsrc a fetchable url or filepath, or xs:base64Binary item +@param $opts options options include map {"password":} +@note fetch:binary for https will use a lot of memory here +:) +declare function pdfbox:open($pdfsrc as item(), $opts as map(*)) +as item(){ + try{ + + if($pdfsrc instance of xs:base64Binary) + then Loader:loadPDF( $pdfsrc,string($opts?password)) + else if(starts-with($pdfsrc,"http")) + then Loader:loadPDF( fetch:binary($pdfsrc),string($opts?password)) + else Loader:loadPDF(RandomAccessReadBufferedFile:new($pdfsrc),string($opts?password)) + +} catch *{ + let $loc:=if($pdfsrc instance of xs:base64Binary) + then "xs:base64Binary" + else $pdfsrc + return error(xs:QName("pdfbox:open"),"Failed PDF load " || $loc || " " || $err:description) +} +}; + +(:~ The version of the PDF specification used by $pdf e.g "1.4" +returned as string to avoid float rounding issues + :) +declare function pdfbox:specification($pdf as item()) +as xs:string{ + PDDocument:getVersion($pdf)=>xs:decimal()=>round(4)=>string() +}; + +(:~ Save pdf $pdf to filesystem at $savepath , returns $savepath :) +declare function pdfbox:pdf-save($pdf as item(),$savepath as xs:string) +as xs:string{ + PDDocument:save($pdf, File:new($savepath)),$savepath +}; + +(:~ Create binary representation of $pdf object as xs:base64Binary :) +declare function pdfbox:binary($pdf as item()) +as xs:base64Binary{ + let $bytes:=Q{java:java.io.ByteArrayOutputStream}new() + let $_:=PDDocument:save($pdf, $bytes) + return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) + =>convert:integers-to-base64() +}; + +(:~ Release any resources related to $pdf:) +declare function pdfbox:close($pdf as item()) +as empty-sequence(){ + (# db:wrapjava void #) { + PDDocument:close($pdf) + } +}; + +(:~ Number of pages in PDF:) +declare function pdfbox:number-of-pages($pdf as item()) +as xs:integer{ + PDDocument:getNumberOfPages($pdf) +}; + +(:~ Pdf page as image (zero is cover) +options.format="bmp jpg png gif" etc, options.scale= 1 is 72 dpi?? :) +declare function pdfbox:page-render($pdf as item(),$pageNo as xs:integer,$options as map(*)) +as xs:base64Binary{ + let $options := map:merge(($options,map{"format":"jpg","scale":1})) + let $bufferedImage := PDFRenderer:new($pdf) + =>PDFRenderer:renderImage($pageNo,$options?scale) + let $bytes := Q{java:java.io.ByteArrayOutputStream}new() + let $_ := Q{java:javax.imageio.ImageIO}write($bufferedImage ,$options?format, $bytes) + return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) + =>convert:integers-to-base64() + +}; + + +(:~ Defines a map from property names to evaluation method. + Keys are property names, + values are sequences of functions to get property value starting from a $pdf object. +:) +declare %private variable $pdfbox:property-map:=map{ + "#pages": pdfbox:number-of-pages#1, + + "#bookmarks": pdfbox:number-of-bookmarks#1, + + "#labels": pdfbox:number-of-labels#1, + + "specification":pdfbox:specification#1, + + "title": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getTitle#1) , + + "author": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getAuthor#1 ), + + "creator": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getCreator#1), + + "producer": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getProducer#1), + + "subject": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getSubject#1), + + "keywords": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getKeywords#1), + + "creationDate": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getCreationDate#1, + pdfbox:gregToISO#1), + + "modificationDate": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getModificationDate#1, + pdfbox:gregToISO#1), + + "labels": pdfbox:labels-as-string#1 +}; + +(:~ Defined property names, sorted :) +declare function pdfbox:property-names() +as xs:string*{ + $pdfbox:property-map=>map:keys()=>sort() +}; + +(:~ Return the value of $property for $pdf :) +declare function pdfbox:property($pdf as item(),$property as xs:string) +as item()*{ + let $fns:= $pdfbox:property-map($property) + return if(exists($fns)) + then fold-left($fns, + $pdf, + function($result,$this as function(*)){$result!$this(.)}) + else error(xs:QName('pdfbox:property'),concat("Property '",$property,"' not defined.")) +}; + +(:~ summary CSV style info for all properties for $pdfpaths +:) +declare function pdfbox:report($pdfpaths as xs:string*) +as map(*){ + pdfbox:report($pdfpaths,pdfbox:property-names()) +}; + +(:~ summary CSV style info for named $properties for PDFs in $pdfpaths +@see https://docs.basex.org/main/CSV_Functions#xquery +:) +declare function pdfbox:report($pdfpaths as item()*, $properties as xs:string*) +as map(*){ + map{"names": array{"path",$properties}, + + "records": for $path in $pdfpaths + let $name:=if($path instance of xs:base64Binary) then "binary" else $path + return try{ + let $pdf:=pdfbox:open($path) + return (fold-left($properties, + array{$name}, + function($result as array(*),$prop as xs:string){ + array:append($result, string(pdfbox:property($pdf, $prop)))} + ), pdfbox:close($pdf) + ) + } catch *{ + fold-left($properties, + array{$name}, + function($result as array(*),$prop as xs:string){ + array:append($result, "#ERROR")} + ) + } + + } +}; + +(:~ Convenience function to save report() data to file :) +declare function pdfbox:report-save($data as map(*),$dest as xs:string) +as empty-sequence(){ + let $opts := map { "format":"xquery", "header":"yes", "separator" : "," } + return file:write-text($dest,csv:serialize($data,$opts)) +}; + +(:~ The number of outline items defined in $pdf :) +declare function pdfbox:number-of-bookmarks($pdf as item()) +as xs:integer{ + let $xml:=pdfbox:outline-xml($pdf) + return count($xml//bookmark) +}; + +(:~ XMP metadata as "RDF" document +@note usually rdf:RDF root, but sometimes x:xmpmeta +:) +declare function pdfbox:metadata($pdf as item()) +as document-node(element(*))? +{ + let $m:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getMetadata() + return if(exists($m)) + then + let $is:=PDMetadata:exportXMPMetadata($m) + return pdfbox:do-until( + map{"n":0,"data":""}, + + function($input,$pos ) { pdfbox:read-stream($is,$input?data)}, + + function($output,$pos) { $output?n eq -1 } + )?data=>parse-xml() + else () +}; + +(:~ read next block from XMP stream :) +declare %private function pdfbox:read-stream($is,$read as xs:string) +as map(*){ + let $blen:=4096 + let $buff:=Q{java:java.util.Arrays}copyOf(array{xs:byte(0)},$blen) + let $n:= COSInputStream:read($is,$buff,xs:int(0),xs:int($blen)) + let $data:=convert:integers-to-base64(subsequence($buff,1,$n))=>convert:binary-to-string() + return map{"n":$n, "data": $read || $data} +}; + +(:~ Return outline for $pdf as map()* :) +declare function pdfbox:outline($pdf as item()) +as map(*)*{ + (# db:wrapjava some #) { + let $outline:= + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getDocumentOutline() + + return if(exists($outline)) + then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline)) + else () + } +}; + +(:~ return bookmark info for children of $outlineItem as seq of maps :) +declare %private function pdfbox:outline($pdf as item(),$outlineItem as item()?) +as map(*)*{ + let $find as map(*):=pdfbox:outline_($pdf ,$outlineItem) + return map:get($find,"list") +}; + +(:~ outline helper. BaseX bug 10.7? error if inlined in outline :) +declare %private function pdfbox:outline_($pdf as item(),$outlineItem as item()?) +as map(*){ + pdfbox:do-until( + + map{"list":(),"this":$outlineItem}, + + function($input,$pos ) { + let $bk:= pdfbox:bookmark($input?this,$pdf) + let $bk:= if($bk?hasChildren) + then let $kids:=pdfbox:outline($pdf,PDOutlineItem:getFirstChild($input?this)) + return map:merge(($bk,map:entry("children",$kids))) + else $bk + return map{ + "list": ($input?list, $bk), + "this": PDOutlineItem:getNextSibling($input?this)} + }, + + function($output,$pos) { empty($output?this) } + ) +}; + +(:~ PDF outline in xml format :) +declare function pdfbox:outline-xml($pdf as item()) +as element(outline)?{ + let $outline:=pdfbox:outline($pdf) + return if(exists($outline)) + then <outline>{$outline!pdfbox:bookmark-xml(.)}</outline> + else () +}; + +(:~ Convert outline map to XML :) +declare %private function pdfbox:bookmark-xml($outline as map(*)*) +as element(bookmark)* +{ + $outline! + <bookmark title="{?title}" index="{?index}"> + {?children!pdfbox:bookmark-xml(.)} + </bookmark> +}; + +(:~ Return bookmark info for $bookmark +@return map{index:..,title:..,hasChildren:..} +:) +declare %private function pdfbox:bookmark($bookmark as item(),$pdf as item()) +as map(*) +{ + map{ + "index": PDOutlineItem:findDestinationPage($bookmark,$pdf)=>pdfbox:find-page($pdf), + "title": (# db:checkstrings #) {PDOutlineItem:getTitle($bookmark)} + (:=>translate("�",""), :), + "hasChildren": PDOutlineItem:hasChildren($bookmark) + } +}; + + +(:~ pageIndex of $page in $pdf :) +declare function pdfbox:find-page( + $page as item()? (: as java:org.apache.pdfbox.pdmodel.PDPage :), + $pdf as item()) +as item()? +{ + if(exists($page)) + then PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPages() + =>PDPageTree:indexOf($page) + else () +}; + +(:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based) +@param $start first page to include +@param $end last page to include +:) +declare function pdfbox:extract-range($pdf as item(), + $start as xs:integer,$end as xs:integer) +as xs:base64Binary +{ + let $a:=PageExtractor:new($pdf, $start, $end) =>PageExtractor:extract() + return (pdfbox:binary($a),pdfbox:close($a)) +}; + +(:~ The number of labels defined in PDF :) +declare function pdfbox:number-of-labels($pdf as item()) +as xs:integer +{ + let $labels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return if(exists($labels)) + then PDPageLabels:getPageRangeCount($labels) + else 0 +}; + +(:~ pageLabel for every page from derived from page-ranges +The returned sequence will contain at MOST as much entries as the document has pages. +@see https://www.w3.org/TR/WCAG20-TECHS/PDF17.html#PDF17-examples +@see https://codereview.stackexchange.com/questions/286078/java-code-showing-page-labels-from-pdf-files +:) +declare function pdfbox:labels-by-page($pdf as item()) +as xs:string* +{ + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + =>PDPageLabels:getLabelsByPageIndices() +}; + +(:~ sequence of label ranges defined in PDF as formatted strings +@return a custom representation of the labels e.g "0-*Cover,1r,11D" +:) +declare function pdfbox:labels-as-string($pdf as item()) +as xs:string{ + let $pagelabels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return $pagelabels + !(0 to pdfbox:number-of-pages($pdf)-1) + !pdfbox:label-as-string($pagelabels,.)=>string-join("&#10;") + +}; + +(:~ get pagelabels exist :) +declare function pdfbox:page-labels($pdf) +{ + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() +}; + +(:~ label for $page formated as string, empty if none :) +declare function pdfbox:label-as-string($pagelabels,$page as xs:integer) +as xs:string?{ + let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) + return if(empty($label)) + then () + else + let $start:= PDPageLabelRange:getStart($label) + let $style := PDPageLabelRange:getStyle($label) + let $prefix:= PDPageLabelRange:getPrefix($label) + return string-join(($page, + if(empty($style)) then "-" else $style, + if(($start eq 1)) then "" else $start, + if(exists($prefix)) then '*' || $prefix else () (:TODO double " :) + )) +}; + +(:~ sequence of maps for each label/page range defined in $pdf:) +declare function pdfbox:labels-as-map($pdf as item()) +as map(*)*{ + let $pagelabels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return $pagelabels + !(0 to pdfbox:number-of-pages($pdf)-1) + !pdfbox:label-as-map($pagelabels,.) +}; + +(:~ label/page-range for $page as map :) +declare function pdfbox:label-as-map($pagelabels,$page as xs:integer) +as map(*) +{ + let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) + return if(empty($label)) + then () + else map{ + "index": $page, + "prefix": PDPageLabelRange:getPrefix($label), + "start": PDPageLabelRange:getStart($label), + "style": PDPageLabelRange:getStyle($label) + } +}; + + + +(:~ return text on $pageNo :) +declare function pdfbox:page-text($pdf as item(), $pageNo as xs:integer) +as xs:string{ + let $tStripper := (# db:wrapjava instance #) { + PDFTextStripper:new() + => PDFTextStripper:setStartPage($pageNo) + => PDFTextStripper:setEndPage($pageNo) + } + return (# db:checkstrings #) {PDFTextStripper:getText($tStripper,$pdf)} +}; + +(:~ Return size of $pageNo (zero based) +@return e.g. [0.0,0.0,168.0,239.52] + :) +declare function pdfbox:page-media-box($pdf as item(), $pageNo as xs:integer) +as xs:string{ + PDDocument:getPage($pdf, $pageNo) + =>PDPage:getMediaBox() + =>PDRectangle:toString() +}; + +(:~ Version of Apache Pdfbox in use e.g. "3.0.4" :) +declare function pdfbox:version() +as xs:string{ + Q{java:org.apache.pdfbox.util.Version}getVersion() +}; + +(:~ Convert date :) +declare %private +function pdfbox:gregToISO($item as item()?) +as xs:string?{ + if(exists($item)) + then Q{java:java.util.GregorianCalendar}toZonedDateTime($item)=>string() + else () +}; + +(:~ fn:do-until shim for BaseX 9+10 +if fn:do-until not found use hof:until, note: $pos always zero +:) +declare %private function pdfbox:do-until( + $input as item()*, + $action as function(item()*, xs:integer) as item()*, + $predicate as function(item()*, xs:integer) as xs:boolean? +) as item()* +{ + let $fn:=function-lookup(QName('http://www.w3.org/2005/xpath-functions','do-until'), 3) + return if(exists($fn)) + then $fn($input,$action,$predicate) + else let $hof:=function-lookup(QName('http://basex.org/modules/hof','until'), 3) + return if(exists($hof)) + then $hof($predicate(?,0),$action(?,0),$input) + else error(xs:QName('pdfbox:do-until'),"No implementation do-until found") + +}; \ No newline at end of file diff --git a/test/sample.docs/pdfbox.xqm b/test/sample.docs/pdfbox.xqm index 474d450..4e61f64 100644 --- a/test/sample.docs/pdfbox.xqm +++ b/test/sample.docs/pdfbox.xqm @@ -1,523 +1,523 @@ -xquery version '3.1'; -(:~ -requires pdfbox jars on classpath, in lib/custom or xar -@note following the java source the terms outline and bookmark -refer to the same concept. Also label and (page)range are used interchangably -@note tested with pdfbox-app-3.0.5.jar -@see https://pdfbox.apache.org/download.cgi -@javadoc https://javadoc.io/static/org.apache.pdfbox/pdfbox/3.0.5/ -@author Andy Bunce 2025 -:) - -module namespace pdfbox="org.expkg_zone58.Pdfbox3"; - -declare namespace Loader ="java:org.apache.pdfbox.Loader"; -declare namespace PDFTextStripper = "java:org.apache.pdfbox.text.PDFTextStripper"; -declare namespace PDDocument ="java:org.apache.pdfbox.pdmodel.PDDocument"; -declare namespace PDDocumentCatalog ="java:org.apache.pdfbox.pdmodel.PDDocumentCatalog"; -declare namespace PDPageLabels ="java:org.apache.pdfbox.pdmodel.common.PDPageLabels"; -declare namespace PDPageLabelRange="java:org.apache.pdfbox.pdmodel.common.PDPageLabelRange"; - -declare namespace PageExtractor ="java:org.apache.pdfbox.multipdf.PageExtractor"; -declare namespace PDPage ="java:org.apache.pdfbox.pdmodel.PDPage"; -declare namespace PDPageTree ="java:org.apache.pdfbox.pdmodel.PDPageTree"; -declare namespace PDDocumentOutline ="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline"; -declare namespace PDDocumentInformation ="java:org.apache.pdfbox.pdmodel.PDDocumentInformation"; -declare namespace PDOutlineItem="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem"; -declare namespace PDFRenderer="java:org.apache.pdfbox.rendering.PDFRenderer"; -declare namespace PDMetadata="java:org.apache.pdfbox.pdmodel.common.PDMetadata"; -declare namespace COSInputStream="java:org.apache.pdfbox.cos.COSInputStream"; - - -declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; - - -declare namespace RandomAccessReadBuffer="java:org.apache.pdfbox.io.RandomAccessReadBuffer"; -declare namespace RandomAccessReadBufferedFile = "java:org.apache.pdfbox.io.RandomAccessReadBufferedFile"; -declare namespace PDRectangle="java:org.apache.pdfbox.pdmodel.common.PDRectangle"; - -declare namespace File ="java:java.io.File"; - - - -(:~ "With-document" pattern: open pdf,apply $fn function, close pdf - creates a local pdfobject and ensures it is closed after use -e.g pdfbox:with-pdf("path...",pdfbox:page-text(?,5)) -:) -declare function pdfbox:with-pdf($src as xs:string, - $fn as function(item())as item()*) -as item()*{ - let $pdf:=pdfbox:open($src) - return try{ - $fn($pdf),pdfbox:close($pdf) - } catch *{ - pdfbox:close($pdf),fn:error($err:code,$src || " " || $err:description) - } - -}; - - -(:~ open pdf using fetch:binary, returns pdf object :) -declare function pdfbox:open($pdfsrc as item()) -as item(){ -pdfbox:open($pdfsrc, map{}) -}; - -(:~ open pdf from file/url/binary, opts may have password , returns pdf object -@param $pdfsrc a fetchable url or filepath, or xs:base64Binary item -@param $opts options options include map {"password":} -@note fetch:binary for https will use a lot of memory here -:) -declare function pdfbox:open($pdfsrc as item(), $opts as map(*)) -as item(){ - try{ - - if($pdfsrc instance of xs:base64Binary) - then Loader:loadPDF( $pdfsrc,string($opts?password)) - else if(starts-with($pdfsrc,"http")) - then Loader:loadPDF( fetch:binary($pdfsrc),string($opts?password)) - else Loader:loadPDF(RandomAccessReadBufferedFile:new($pdfsrc),string($opts?password)) - -} catch *{ - let $loc:=if($pdfsrc instance of xs:base64Binary) - then "xs:base64Binary" - else $pdfsrc - return error(xs:QName("pdfbox:open"),"Failed PDF load " || $loc || " " || $err:description) -} -}; - -(:~ The version of the PDF specification used by $pdf e.g "1.4" -returned as string to avoid float rounding issues - :) -declare function pdfbox:specification($pdf as item()) -as xs:string{ - PDDocument:getVersion($pdf)=>xs:decimal()=>round(4)=>string() -}; - -(:~ Save pdf $pdf to filesystem at $savepath , returns $savepath :) -declare function pdfbox:pdf-save($pdf as item(),$savepath as xs:string) -as xs:string{ - PDDocument:save($pdf, File:new($savepath)),$savepath -}; - -(:~ Create binary representation of $pdf object as xs:base64Binary :) -declare function pdfbox:binary($pdf as item()) -as xs:base64Binary{ - let $bytes:=Q{java:java.io.ByteArrayOutputStream}new() - let $_:=PDDocument:save($pdf, $bytes) - return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) - =>convert:integers-to-base64() -}; - -(:~ Release any resources related to $pdf:) -declare function pdfbox:close($pdf as item()) -as empty-sequence(){ - (# db:wrapjava void #) { - PDDocument:close($pdf) - } -}; - -(:~ Number of pages in PDF:) -declare function pdfbox:number-of-pages($pdf as item()) -as xs:integer{ - PDDocument:getNumberOfPages($pdf) -}; - -(:~ Pdf page as image (zero is cover) -options.format="bmp jpg png gif" etc, options.scale= 1 is 72 dpi?? :) -declare function pdfbox:page-render($pdf as item(),$pageNo as xs:integer,$options as map(*)) -as xs:base64Binary{ - let $options := map:merge(($options,map{"format":"jpg","scale":1})) - let $bufferedImage := PDFRenderer:new($pdf) - =>PDFRenderer:renderImage($pageNo,$options?scale) - let $bytes := Q{java:java.io.ByteArrayOutputStream}new() - let $_ := Q{java:javax.imageio.ImageIO}write($bufferedImage ,$options?format, $bytes) - return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) - =>convert:integers-to-base64() - -}; - - -(:~ Defines a map from property names to evaluation method. - Keys are property names, - values are sequences of functions to get property value starting from a $pdf object. -:) -declare %private variable $pdfbox:property-map:=map{ - "#pages": pdfbox:number-of-pages#1, - - "#bookmarks": pdfbox:number-of-bookmarks#1, - - "#labels": pdfbox:number-of-labels#1, - - "specification":pdfbox:specification#1, - - "title": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getTitle#1) , - - "author": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getAuthor#1 ), - - "creator": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getCreator#1), - - "producer": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getProducer#1), - - "subject": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getSubject#1), - - "keywords": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getKeywords#1), - - "creationDate": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getCreationDate#1, - pdfbox:gregToISO#1), - - "modificationDate": (PDDocument:getDocumentInformation#1, - PDDocumentInformation:getModificationDate#1, - pdfbox:gregToISO#1), - - "labels": pdfbox:labels-as-string#1 -}; - -(:~ Defined property names, sorted :) -declare function pdfbox:property-names() -as xs:string*{ - $pdfbox:property-map=>map:keys()=>sort() -}; - -(:~ Return the value of $property for $pdf :) -declare function pdfbox:property($pdf as item(),$property as xs:string) -as item()*{ - let $fns:= $pdfbox:property-map($property) - return if(exists($fns)) - then fold-left($fns, - $pdf, - function($result,$this as function(*)){$result!$this(.)}) - else error(xs:QName('pdfbox:property'),concat("Property '",$property,"' not defined.")) -}; - -(:~ summary CSV style info for all properties for $pdfpaths -:) -declare function pdfbox:report($pdfpaths as xs:string*) -as map(*){ - pdfbox:report($pdfpaths,pdfbox:property-names()) -}; - -(:~ summary CSV style info for named $properties for PDFs in $pdfpaths -@see https://docs.basex.org/main/CSV_Functions#xquery -:) -declare function pdfbox:report($pdfpaths as item()*, $properties as xs:string*) -as map(*){ - map{"names": array{"path",$properties}, - - "records": for $path in $pdfpaths - let $name:=if($path instance of xs:base64Binary) then "binary" else $path - return try{ - let $pdf:=pdfbox:open($path) - return (fold-left($properties, - array{$name}, - function($result as array(*),$prop as xs:string){ - array:append($result, string(pdfbox:property($pdf, $prop)))} - ), pdfbox:close($pdf) - ) - } catch *{ - fold-left($properties, - array{$name}, - function($result as array(*),$prop as xs:string){ - array:append($result, "#ERROR")} - ) - } - - } -}; - -(:~ Convenience function to save report() data to file :) -declare function pdfbox:report-save($data as map(*),$dest as xs:string) -as empty-sequence(){ - let $opts := map { "format":"xquery", "header":"yes", "separator" : "," } - return file:write-text($dest,csv:serialize($data,$opts)) -}; - -(:~ The number of outline items defined in $pdf :) -declare function pdfbox:number-of-bookmarks($pdf as item()) -as xs:integer{ - let $xml:=pdfbox:outline-xml($pdf) - return count($xml//bookmark) -}; - -(:~ XMP metadata as "RDF" document -@note usually rdf:RDF root, but sometimes x:xmpmeta -:) -declare function pdfbox:metadata($pdf as item()) -as document-node(element(*))? -{ - let $m:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getMetadata() - return if(exists($m)) - then - let $is:=PDMetadata:exportXMPMetadata($m) - return pdfbox:do-until( - map{"n":0,"data":""}, - - function($input,$pos ) { pdfbox:read-stream($is,$input?data)}, - - function($output,$pos) { $output?n eq -1 } - )?data=>parse-xml() - else () -}; - -(:~ read next block from XMP stream :) -declare %private function pdfbox:read-stream($is,$read as xs:string) -as map(*){ - let $blen:=4096 - let $buff:=Q{java:java.util.Arrays}copyOf(array{xs:byte(0)},$blen) - let $n:= COSInputStream:read($is,$buff,xs:int(0),xs:int($blen)) - let $data:=convert:integers-to-base64(subsequence($buff,1,$n))=>convert:binary-to-string() - return map{"n":$n, "data": $read || $data} -}; - -(:~ Return outline for $pdf as map()* :) -declare function pdfbox:outline($pdf as item()) -as map(*)*{ - (# db:wrapjava some #) { - let $outline:= - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getDocumentOutline() - - return if(exists($outline)) - then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline)) - else () - } -}; - -(:~ return bookmark info for children of $outlineItem as seq of maps :) -declare %private function pdfbox:outline($pdf as item(),$outlineItem as item()?) -as map(*)*{ - let $find as map(*):=pdfbox:outline_($pdf ,$outlineItem) - return map:get($find,"list") -}; - -(:~ outline helper. BaseX bug 10.7? error if inlined in outline :) -declare %private function pdfbox:outline_($pdf as item(),$outlineItem as item()?) -as map(*){ - pdfbox:do-until( - - map{"list":(),"this":$outlineItem}, - - function($input,$pos ) { - let $bk:= pdfbox:bookmark($input?this,$pdf) - let $bk:= if($bk?hasChildren) - then let $kids:=pdfbox:outline($pdf,PDOutlineItem:getFirstChild($input?this)) - return map:merge(($bk,map:entry("children",$kids))) - else $bk - return map{ - "list": ($input?list, $bk), - "this": PDOutlineItem:getNextSibling($input?this)} - }, - - function($output,$pos) { empty($output?this) } - ) -}; - -(:~ PDF outline in xml format :) -declare function pdfbox:outline-xml($pdf as item()) -as element(outline)?{ - let $outline:=pdfbox:outline($pdf) - return if(exists($outline)) - then {$outline!pdfbox:bookmark-xml(.)} - else () -}; - -(:~ Convert outline map to XML :) -declare %private function pdfbox:bookmark-xml($outline as map(*)*) -as element(bookmark)* -{ - $outline! - - {?children!pdfbox:bookmark-xml(.)} - -}; - -(:~ Return bookmark info for $bookmark -@return map{index:..,title:..,hasChildren:..} -:) -declare %private function pdfbox:bookmark($bookmark as item(),$pdf as item()) -as map(*) -{ - map{ - "index": PDOutlineItem:findDestinationPage($bookmark,$pdf)=>pdfbox:find-page($pdf), - "title": (# db:checkstrings #) {PDOutlineItem:getTitle($bookmark)} - (:=>translate("�",""), :), - "hasChildren": PDOutlineItem:hasChildren($bookmark) - } -}; - - -(:~ pageIndex of $page in $pdf :) -declare function pdfbox:find-page( - $page as item()? (: as java:org.apache.pdfbox.pdmodel.PDPage :), - $pdf as item()) -as item()? -{ - if(exists($page)) - then PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPages() - =>PDPageTree:indexOf($page) - else () -}; - -(:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based) -@param $start first page to include -@param $end last page to include -:) -declare function pdfbox:extract-range($pdf as item(), - $start as xs:integer,$end as xs:integer) -as xs:base64Binary -{ - let $a:=PageExtractor:new($pdf, $start, $end) =>PageExtractor:extract() - return (pdfbox:binary($a),pdfbox:close($a)) -}; - -(:~ The number of labels defined in PDF :) -declare function pdfbox:number-of-labels($pdf as item()) -as xs:integer -{ - let $labels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return if(exists($labels)) - then PDPageLabels:getPageRangeCount($labels) - else 0 -}; - -(:~ pageLabel for every page from derived from page-ranges -The returned sequence will contain at MOST as much entries as the document has pages. -@see https://www.w3.org/TR/WCAG20-TECHS/PDF17.html#PDF17-examples -@see https://codereview.stackexchange.com/questions/286078/java-code-showing-page-labels-from-pdf-files -:) -declare function pdfbox:labels-by-page($pdf as item()) -as xs:string* -{ - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - =>PDPageLabels:getLabelsByPageIndices() -}; - -(:~ sequence of label ranges defined in PDF as formatted strings -@return a custom representation of the labels e.g "0-*Cover,1r,11D" -:) -declare function pdfbox:labels-as-string($pdf as item()) -as xs:string{ - let $pagelabels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return $pagelabels - !(0 to pdfbox:number-of-pages($pdf)-1) - !pdfbox:label-as-string($pagelabels,.)=>string-join(" ") - -}; - -(:~ get pagelabels exist :) -declare function pdfbox:page-labels($pdf) -{ - PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() -}; - -(:~ label for $page formated as string, empty if none :) -declare function pdfbox:label-as-string($pagelabels,$page as xs:integer) -as xs:string?{ - let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) - return if(empty($label)) - then () - else - let $start:= PDPageLabelRange:getStart($label) - let $style := PDPageLabelRange:getStyle($label) - let $prefix:= PDPageLabelRange:getPrefix($label) - return string-join(($page, - if(empty($style)) then "-" else $style, - if(($start eq 1)) then "" else $start, - if(exists($prefix)) then '*' || $prefix else () (:TODO double " :) - )) -}; - -(:~ sequence of maps for each label/page range defined in $pdf:) -declare function pdfbox:labels-as-map($pdf as item()) -as map(*)*{ - let $pagelabels:=PDDocument:getDocumentCatalog($pdf) - =>PDDocumentCatalog:getPageLabels() - return $pagelabels - !(0 to pdfbox:number-of-pages($pdf)-1) - !pdfbox:label-as-map($pagelabels,.) -}; - -(:~ label/page-range for $page as map :) -declare function pdfbox:label-as-map($pagelabels,$page as xs:integer) -as map(*) -{ - let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) - return if(empty($label)) - then () - else map{ - "index": $page, - "prefix": PDPageLabelRange:getPrefix($label), - "start": PDPageLabelRange:getStart($label), - "style": PDPageLabelRange:getStyle($label) - } -}; - - - -(:~ return text on $pageNo :) -declare function pdfbox:page-text($pdf as item(), $pageNo as xs:integer) -as xs:string{ - let $tStripper := (# db:wrapjava instance #) { - PDFTextStripper:new() - => PDFTextStripper:setStartPage($pageNo) - => PDFTextStripper:setEndPage($pageNo) - } - return (# db:checkstrings #) {PDFTextStripper:getText($tStripper,$pdf)} -}; - -(:~ Return size of $pageNo (zero based) -@return e.g. [0.0,0.0,168.0,239.52] - :) -declare function pdfbox:page-media-box($pdf as item(), $pageNo as xs:integer) -as xs:string{ - PDDocument:getPage($pdf, $pageNo) - =>PDPage:getMediaBox() - =>PDRectangle:toString() -}; - -(:~ Version of Apache Pdfbox in use e.g. "3.0.4" :) -declare function pdfbox:version() -as xs:string{ - Q{java:org.apache.pdfbox.util.Version}getVersion() -}; - -(:~ Convert date :) -declare %private -function pdfbox:gregToISO($item as item()?) -as xs:string?{ - if(exists($item)) - then Q{java:java.util.GregorianCalendar}toZonedDateTime($item)=>string() - else () -}; - -(:~ fn:do-until shim for BaseX 9+10 -if fn:do-until not found use hof:until, note: $pos always zero -:) -declare %private function pdfbox:do-until( - $input as item()*, - $action as function(item()*, xs:integer) as item()*, - $predicate as function(item()*, xs:integer) as xs:boolean? -) as item()* -{ - let $fn:=function-lookup(QName('http://www.w3.org/2005/xpath-functions','do-until'), 3) - return if(exists($fn)) - then $fn($input,$action,$predicate) - else let $hof:=function-lookup(QName('http://basex.org/modules/hof','until'), 3) - return if(exists($hof)) - then $hof($predicate(?,0),$action(?,0),$input) - else error(xs:QName('pdfbox:do-until'),"No implementation do-until found") - -}; +xquery version '3.1'; +(:~ +requires pdfbox jars on classpath, in lib/custom or xar +@note following the java source the terms outline and bookmark +refer to the same concept. Also label and (page)range are used interchangably +@note tested with pdfbox-app-3.0.5.jar +@see https://pdfbox.apache.org/download.cgi +@javadoc https://javadoc.io/static/org.apache.pdfbox/pdfbox/3.0.5/ +@author Andy Bunce 2025 +:) + +module namespace pdfbox="org.expkg_zone58.Pdfbox3"; + +declare namespace Loader ="java:org.apache.pdfbox.Loader"; +declare namespace PDFTextStripper = "java:org.apache.pdfbox.text.PDFTextStripper"; +declare namespace PDDocument ="java:org.apache.pdfbox.pdmodel.PDDocument"; +declare namespace PDDocumentCatalog ="java:org.apache.pdfbox.pdmodel.PDDocumentCatalog"; +declare namespace PDPageLabels ="java:org.apache.pdfbox.pdmodel.common.PDPageLabels"; +declare namespace PDPageLabelRange="java:org.apache.pdfbox.pdmodel.common.PDPageLabelRange"; + +declare namespace PageExtractor ="java:org.apache.pdfbox.multipdf.PageExtractor"; +declare namespace PDPage ="java:org.apache.pdfbox.pdmodel.PDPage"; +declare namespace PDPageTree ="java:org.apache.pdfbox.pdmodel.PDPageTree"; +declare namespace PDDocumentOutline ="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline"; +declare namespace PDDocumentInformation ="java:org.apache.pdfbox.pdmodel.PDDocumentInformation"; +declare namespace PDOutlineItem="java:org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem"; +declare namespace PDFRenderer="java:org.apache.pdfbox.rendering.PDFRenderer"; +declare namespace PDMetadata="java:org.apache.pdfbox.pdmodel.common.PDMetadata"; +declare namespace COSInputStream="java:org.apache.pdfbox.cos.COSInputStream"; + + +declare namespace rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + + +declare namespace RandomAccessReadBuffer="java:org.apache.pdfbox.io.RandomAccessReadBuffer"; +declare namespace RandomAccessReadBufferedFile = "java:org.apache.pdfbox.io.RandomAccessReadBufferedFile"; +declare namespace PDRectangle="java:org.apache.pdfbox.pdmodel.common.PDRectangle"; + +declare namespace File ="java:java.io.File"; + + + +(:~ "With-document" pattern: open pdf,apply $fn function, close pdf + creates a local pdfobject and ensures it is closed after use +e.g pdfbox:with-pdf("path...",pdfbox:page-text(?,5)) +:) +declare function pdfbox:with-pdf($src as xs:string, + $fn as function(item())as item()*) +as item()*{ + let $pdf:=pdfbox:open($src) + return try{ + $fn($pdf),pdfbox:close($pdf) + } catch *{ + pdfbox:close($pdf),fn:error($err:code,$src || " " || $err:description) + } + +}; + + +(:~ open pdf using fetch:binary, returns pdf object :) +declare function pdfbox:open($pdfsrc as item()) +as item(){ +pdfbox:open($pdfsrc, map{}) +}; + +(:~ open pdf from file/url/binary, opts may have password , returns pdf object +@param $pdfsrc a fetchable url or filepath, or xs:base64Binary item +@param $opts options options include map {"password":} +@note fetch:binary for https will use a lot of memory here +:) +declare function pdfbox:open($pdfsrc as item(), $opts as map(*)) +as item(){ + try{ + + if($pdfsrc instance of xs:base64Binary) + then Loader:loadPDF( $pdfsrc,string($opts?password)) + else if(starts-with($pdfsrc,"http")) + then Loader:loadPDF( fetch:binary($pdfsrc),string($opts?password)) + else Loader:loadPDF(RandomAccessReadBufferedFile:new($pdfsrc),string($opts?password)) + +} catch *{ + let $loc:=if($pdfsrc instance of xs:base64Binary) + then "xs:base64Binary" + else $pdfsrc + return error(xs:QName("pdfbox:open"),"Failed PDF load " || $loc || " " || $err:description) +} +}; + +(:~ The version of the PDF specification used by $pdf e.g "1.4" +returned as string to avoid float rounding issues + :) +declare function pdfbox:specification($pdf as item()) +as xs:string{ + PDDocument:getVersion($pdf)=>xs:decimal()=>round(4)=>string() +}; + +(:~ Save pdf $pdf to filesystem at $savepath , returns $savepath :) +declare function pdfbox:pdf-save($pdf as item(),$savepath as xs:string) +as xs:string{ + PDDocument:save($pdf, File:new($savepath)),$savepath +}; + +(:~ Create binary representation of $pdf object as xs:base64Binary :) +declare function pdfbox:binary($pdf as item()) +as xs:base64Binary{ + let $bytes:=Q{java:java.io.ByteArrayOutputStream}new() + let $_:=PDDocument:save($pdf, $bytes) + return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) + =>convert:integers-to-base64() +}; + +(:~ Release any resources related to $pdf:) +declare function pdfbox:close($pdf as item()) +as empty-sequence(){ + (# db:wrapjava void #) { + PDDocument:close($pdf) + } +}; + +(:~ Number of pages in PDF:) +declare function pdfbox:number-of-pages($pdf as item()) +as xs:integer{ + PDDocument:getNumberOfPages($pdf) +}; + +(:~ Pdf page as image (zero is cover) +options.format="bmp jpg png gif" etc, options.scale= 1 is 72 dpi?? :) +declare function pdfbox:page-render($pdf as item(),$pageNo as xs:integer,$options as map(*)) +as xs:base64Binary{ + let $options := map:merge(($options,map{"format":"jpg","scale":1})) + let $bufferedImage := PDFRenderer:new($pdf) + =>PDFRenderer:renderImage($pageNo,$options?scale) + let $bytes := Q{java:java.io.ByteArrayOutputStream}new() + let $_ := Q{java:javax.imageio.ImageIO}write($bufferedImage ,$options?format, $bytes) + return Q{java:java.io.ByteArrayOutputStream}toByteArray($bytes) + =>convert:integers-to-base64() + +}; + + +(:~ Defines a map from property names to evaluation method. + Keys are property names, + values are sequences of functions to get property value starting from a $pdf object. +:) +declare %private variable $pdfbox:property-map:=map{ + "#pages": pdfbox:number-of-pages#1, + + "#bookmarks": pdfbox:number-of-bookmarks#1, + + "#labels": pdfbox:number-of-labels#1, + + "specification":pdfbox:specification#1, + + "title": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getTitle#1) , + + "author": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getAuthor#1 ), + + "creator": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getCreator#1), + + "producer": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getProducer#1), + + "subject": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getSubject#1), + + "keywords": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getKeywords#1), + + "creationDate": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getCreationDate#1, + pdfbox:gregToISO#1), + + "modificationDate": (PDDocument:getDocumentInformation#1, + PDDocumentInformation:getModificationDate#1, + pdfbox:gregToISO#1), + + "labels": pdfbox:labels-as-string#1 +}; + +(:~ Defined property names, sorted :) +declare function pdfbox:property-names() +as xs:string*{ + $pdfbox:property-map=>map:keys()=>sort() +}; + +(:~ Return the value of $property for $pdf :) +declare function pdfbox:property($pdf as item(),$property as xs:string) +as item()*{ + let $fns:= $pdfbox:property-map($property) + return if(exists($fns)) + then fold-left($fns, + $pdf, + function($result,$this as function(*)){$result!$this(.)}) + else error(xs:QName('pdfbox:property'),concat("Property '",$property,"' not defined.")) +}; + +(:~ summary CSV style info for all properties for $pdfpaths +:) +declare function pdfbox:report($pdfpaths as xs:string*) +as map(*){ + pdfbox:report($pdfpaths,pdfbox:property-names()) +}; + +(:~ summary CSV style info for named $properties for PDFs in $pdfpaths +@see https://docs.basex.org/main/CSV_Functions#xquery +:) +declare function pdfbox:report($pdfpaths as item()*, $properties as xs:string*) +as map(*){ + map{"names": array{"path",$properties}, + + "records": for $path in $pdfpaths + let $name:=if($path instance of xs:base64Binary) then "binary" else $path + return try{ + let $pdf:=pdfbox:open($path) + return (fold-left($properties, + array{$name}, + function($result as array(*),$prop as xs:string){ + array:append($result, string(pdfbox:property($pdf, $prop)))} + ), pdfbox:close($pdf) + ) + } catch *{ + fold-left($properties, + array{$name}, + function($result as array(*),$prop as xs:string){ + array:append($result, "#ERROR")} + ) + } + + } +}; + +(:~ Convenience function to save report() data to file :) +declare function pdfbox:report-save($data as map(*),$dest as xs:string) +as empty-sequence(){ + let $opts := map { "format":"xquery", "header":"yes", "separator" : "," } + return file:write-text($dest,csv:serialize($data,$opts)) +}; + +(:~ The number of outline items defined in $pdf :) +declare function pdfbox:number-of-bookmarks($pdf as item()) +as xs:integer{ + let $xml:=pdfbox:outline-xml($pdf) + return count($xml//bookmark) +}; + +(:~ XMP metadata as "RDF" document +@note usually rdf:RDF root, but sometimes x:xmpmeta +:) +declare function pdfbox:metadata($pdf as item()) +as document-node(element(*))? +{ + let $m:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getMetadata() + return if(exists($m)) + then + let $is:=PDMetadata:exportXMPMetadata($m) + return pdfbox:do-until( + map{"n":0,"data":""}, + + function($input,$pos ) { pdfbox:read-stream($is,$input?data)}, + + function($output,$pos) { $output?n eq -1 } + )?data=>parse-xml() + else () +}; + +(:~ read next block from XMP stream :) +declare %private function pdfbox:read-stream($is,$read as xs:string) +as map(*){ + let $blen:=4096 + let $buff:=Q{java:java.util.Arrays}copyOf(array{xs:byte(0)},$blen) + let $n:= COSInputStream:read($is,$buff,xs:int(0),xs:int($blen)) + let $data:=convert:integers-to-base64(subsequence($buff,1,$n))=>convert:binary-to-string() + return map{"n":$n, "data": $read || $data} +}; + +(:~ Return outline for $pdf as map()* :) +declare function pdfbox:outline($pdf as item()) +as map(*)*{ + (# db:wrapjava some #) { + let $outline:= + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getDocumentOutline() + + return if(exists($outline)) + then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline)) + else () + } +}; + +(:~ return bookmark info for children of $outlineItem as seq of maps :) +declare %private function pdfbox:outline($pdf as item(),$outlineItem as item()?) +as map(*)*{ + let $find as map(*):=pdfbox:outline_($pdf ,$outlineItem) + return map:get($find,"list") +}; + +(:~ outline helper. BaseX bug 10.7? error if inlined in outline :) +declare %private function pdfbox:outline_($pdf as item(),$outlineItem as item()?) +as map(*){ + pdfbox:do-until( + + map{"list":(),"this":$outlineItem}, + + function($input,$pos ) { + let $bk:= pdfbox:bookmark($input?this,$pdf) + let $bk:= if($bk?hasChildren) + then let $kids:=pdfbox:outline($pdf,PDOutlineItem:getFirstChild($input?this)) + return map:merge(($bk,map:entry("children",$kids))) + else $bk + return map{ + "list": ($input?list, $bk), + "this": PDOutlineItem:getNextSibling($input?this)} + }, + + function($output,$pos) { empty($output?this) } + ) +}; + +(:~ PDF outline in xml format :) +declare function pdfbox:outline-xml($pdf as item()) +as element(outline)?{ + let $outline:=pdfbox:outline($pdf) + return if(exists($outline)) + then {$outline!pdfbox:bookmark-xml(.)} + else () +}; + +(:~ Convert outline map to XML :) +declare %private function pdfbox:bookmark-xml($outline as map(*)*) +as element(bookmark)* +{ + $outline! + + {?children!pdfbox:bookmark-xml(.)} + +}; + +(:~ Return bookmark info for $bookmark +@return map{index:..,title:..,hasChildren:..} +:) +declare %private function pdfbox:bookmark($bookmark as item(),$pdf as item()) +as map(*) +{ + map{ + "index": PDOutlineItem:findDestinationPage($bookmark,$pdf)=>pdfbox:find-page($pdf), + "title": (# db:checkstrings #) {PDOutlineItem:getTitle($bookmark)} + (:=>translate("�",""), :), + "hasChildren": PDOutlineItem:hasChildren($bookmark) + } +}; + + +(:~ pageIndex of $page in $pdf :) +declare function pdfbox:find-page( + $page as item()? (: as java:org.apache.pdfbox.pdmodel.PDPage :), + $pdf as item()) +as item()? +{ + if(exists($page)) + then PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPages() + =>PDPageTree:indexOf($page) + else () +}; + +(:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based) +@param $start first page to include +@param $end last page to include +:) +declare function pdfbox:extract-range($pdf as item(), + $start as xs:integer,$end as xs:integer) +as xs:base64Binary +{ + let $a:=PageExtractor:new($pdf, $start, $end) =>PageExtractor:extract() + return (pdfbox:binary($a),pdfbox:close($a)) +}; + +(:~ The number of labels defined in PDF :) +declare function pdfbox:number-of-labels($pdf as item()) +as xs:integer +{ + let $labels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return if(exists($labels)) + then PDPageLabels:getPageRangeCount($labels) + else 0 +}; + +(:~ pageLabel for every page from derived from page-ranges +The returned sequence will contain at MOST as much entries as the document has pages. +@see https://www.w3.org/TR/WCAG20-TECHS/PDF17.html#PDF17-examples +@see https://codereview.stackexchange.com/questions/286078/java-code-showing-page-labels-from-pdf-files +:) +declare function pdfbox:labels-by-page($pdf as item()) +as xs:string* +{ + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + =>PDPageLabels:getLabelsByPageIndices() +}; + +(:~ sequence of label ranges defined in PDF as formatted strings +@return a custom representation of the labels e.g "0-*Cover,1r,11D" +:) +declare function pdfbox:labels-as-string($pdf as item()) +as xs:string{ + let $pagelabels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return $pagelabels + !(0 to pdfbox:number-of-pages($pdf)-1) + !pdfbox:label-as-string($pagelabels,.)=>string-join(" ") + +}; + +(:~ get pagelabels exist :) +declare function pdfbox:page-labels($pdf) +{ + PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() +}; + +(:~ label for $page formated as string, empty if none :) +declare function pdfbox:label-as-string($pagelabels,$page as xs:integer) +as xs:string?{ + let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) + return if(empty($label)) + then () + else + let $start:= PDPageLabelRange:getStart($label) + let $style := PDPageLabelRange:getStyle($label) + let $prefix:= PDPageLabelRange:getPrefix($label) + return string-join(($page, + if(empty($style)) then "-" else $style, + if(($start eq 1)) then "" else $start, + if(exists($prefix)) then '*' || $prefix else () (:TODO double " :) + )) +}; + +(:~ sequence of maps for each label/page range defined in $pdf:) +declare function pdfbox:labels-as-map($pdf as item()) +as map(*)*{ + let $pagelabels:=PDDocument:getDocumentCatalog($pdf) + =>PDDocumentCatalog:getPageLabels() + return $pagelabels + !(0 to pdfbox:number-of-pages($pdf)-1) + !pdfbox:label-as-map($pagelabels,.) +}; + +(:~ label/page-range for $page as map :) +declare function pdfbox:label-as-map($pagelabels,$page as xs:integer) +as map(*) +{ + let $label:=PDPageLabels:getPageLabelRange($pagelabels,$page) + return if(empty($label)) + then () + else map{ + "index": $page, + "prefix": PDPageLabelRange:getPrefix($label), + "start": PDPageLabelRange:getStart($label), + "style": PDPageLabelRange:getStyle($label) + } +}; + + + +(:~ return text on $pageNo :) +declare function pdfbox:page-text($pdf as item(), $pageNo as xs:integer) +as xs:string{ + let $tStripper := (# db:wrapjava instance #) { + PDFTextStripper:new() + => PDFTextStripper:setStartPage($pageNo) + => PDFTextStripper:setEndPage($pageNo) + } + return (# db:checkstrings #) {PDFTextStripper:getText($tStripper,$pdf)} +}; + +(:~ Return size of $pageNo (zero based) +@return e.g. [0.0,0.0,168.0,239.52] + :) +declare function pdfbox:page-media-box($pdf as item(), $pageNo as xs:integer) +as xs:string{ + PDDocument:getPage($pdf, $pageNo) + =>PDPage:getMediaBox() + =>PDRectangle:toString() +}; + +(:~ Version of Apache Pdfbox in use e.g. "3.0.4" :) +declare function pdfbox:version() +as xs:string{ + Q{java:org.apache.pdfbox.util.Version}getVersion() +}; + +(:~ Convert date :) +declare %private +function pdfbox:gregToISO($item as item()?) +as xs:string?{ + if(exists($item)) + then Q{java:java.util.GregorianCalendar}toZonedDateTime($item)=>string() + else () +}; + +(:~ fn:do-until shim for BaseX 9+10 +if fn:do-until not found use hof:until, note: $pos always zero +:) +declare %private function pdfbox:do-until( + $input as item()*, + $action as function(item()*, xs:integer) as item()*, + $predicate as function(item()*, xs:integer) as xs:boolean? +) as item()* +{ + let $fn:=function-lookup(QName('http://www.w3.org/2005/xpath-functions','do-until'), 3) + return if(exists($fn)) + then $fn($input,$action,$predicate) + else let $hof:=function-lookup(QName('http://basex.org/modules/hof','until'), 3) + return if(exists($hof)) + then $hof($predicate(?,0),$action(?,0),$input) + else error(xs:QName('pdfbox:do-until'),"No implementation do-until found") + +}; diff --git a/test/sample.msg/didChange/client.json b/test/sample.msg/didChange/client.json index e68ce2d..193edd3 100644 --- a/test/sample.msg/didChange/client.json +++ b/test/sample.msg/didChange/client.json @@ -1,15 +1,15 @@ -{ - "jsonrpc": "2.0", - "method": "textDocument/didChange", - "params": { - "textDocument": { - "uri": "file:///some/file.xml", - "version": 1 - }, - "contentChanges": [ - { - "text": "3+1f" - } - ] - } +{ + "jsonrpc": "2.0", + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///some/file.xml", + "version": 1 + }, + "contentChanges": [ + { + "text": "3+1f" + } + ] + } } \ No newline at end of file diff --git a/test/sample.msg/didChange/client2.json b/test/sample.msg/didChange/client2.json index c644f21..4ebbace 100644 --- a/test/sample.msg/didChange/client2.json +++ b/test/sample.msg/didChange/client2.json @@ -1,25 +1,25 @@ -{ - "jsonrpc": "2.0", - "method": "textDocument/didChange", - "params": { - "textDocument": { - "uri": "file:///some/file.xml", - "version": 2 - }, - "contentChanges": [ - { - "range": { - "start": { - "line": 1, - "character": 4 - }, - "end": { - "line": 1, - "character": 4 - } - }, - "text": "d" - } - ] - } +{ + "jsonrpc": "2.0", + "method": "textDocument/didChange", + "params": { + "textDocument": { + "uri": "file:///some/file.xml", + "version": 2 + }, + "contentChanges": [ + { + "range": { + "start": { + "line": 1, + "character": 4 + }, + "end": { + "line": 1, + "character": 4 + } + }, + "text": "d" + } + ] + } } \ No newline at end of file diff --git a/test/sample.msg/didopen/client.json b/test/sample.msg/didopen/client.json index 6b4ebcc..15f3f73 100644 --- a/test/sample.msg/didopen/client.json +++ b/test/sample.msg/didopen/client.json @@ -1,12 +1,12 @@ -{ - "jsonrpc": "2.0", - "method": "textDocument/didOpen", - "params": { - "textDocument": { - "uri": "file:///some/file.xml", - "languageId": "xml", - "text": "testvvvbvbvbvbvbv\nvv\n\nvcccccccccccccc\n", - "version": 0 - } - } +{ + "jsonrpc": "2.0", + "method": "textDocument/didOpen", + "params": { + "textDocument": { + "uri": "file:///some/file.xml", + "languageId": "xml", + "text": "testvvvbvbvbvbvbv\nvv\n\nvcccccccccccccc\n", + "version": 0 + } + } } \ No newline at end of file diff --git a/test/sample.msg/hover/client.json b/test/sample.msg/hover/client.json index ea8e50b..7e97141 100644 --- a/test/sample.msg/hover/client.json +++ b/test/sample.msg/hover/client.json @@ -1,14 +1,14 @@ -{ - "jsonrpc": "2.0", - "id": 2, - "method": "textDocument/hover", - "params": { - "textDocument": { - "uri": "file:///session1.json" - }, - "position": { - "line": 2, - "character": 22 - } - } +{ + "jsonrpc": "2.0", + "id": 2, + "method": "textDocument/hover", + "params": { + "textDocument": { + "uri": "file:///session1.json" + }, + "position": { + "line": 2, + "character": 22 + } + } } \ No newline at end of file diff --git a/test/sample.msg/initialize/client.json b/test/sample.msg/initialize/client.json index e64a392..fe3ccff 100644 --- a/test/sample.msg/initialize/client.json +++ b/test/sample.msg/initialize/client.json @@ -1,68 +1,68 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "method": "initialize", - "params": { - "processId": null, - "clientInfo": { - "name": "@codemirror/lsp-client" - }, - "rootUri": null, - "capabilities": { - "general": { - "markdown": { - "parser": "marked" - } - }, - "textDocument": { - "completion": { - "completionItem": { - "snippetSupport": true, - "documentationFormat": [ - "plaintext", - "markdown" - ], - "insertReplaceSupport": false - }, - "completionList": { - "itemDefaults": [ - "commitCharacters", - "editRange", - "insertTextFormat" - ] - }, - "completionItemKind": { - "valueSet": [] - }, - "contextSupport": true - }, - "hover": { - "contentFormat": [ - "markdown", - "plaintext" - ] - }, - "formatting": {}, - "rename": {}, - "signatureHelp": { - "contextSupport": true, - "signatureInformation": { - "documentationFormat": [ - "markdown", - "plaintext" - ], - "parameterInformation": { - "labelOffsetSupport": true - }, - "activeParameterSupport": true - } - }, - "definition": {}, - "declaration": {}, - "implementation": {}, - "typeDefinition": {}, - "references": {} - } - } - } +{ + "jsonrpc": "2.0", + "id": 1, + "method": "initialize", + "params": { + "processId": null, + "clientInfo": { + "name": "@codemirror/lsp-client" + }, + "rootUri": null, + "capabilities": { + "general": { + "markdown": { + "parser": "marked" + } + }, + "textDocument": { + "completion": { + "completionItem": { + "snippetSupport": true, + "documentationFormat": [ + "plaintext", + "markdown" + ], + "insertReplaceSupport": false + }, + "completionList": { + "itemDefaults": [ + "commitCharacters", + "editRange", + "insertTextFormat" + ] + }, + "completionItemKind": { + "valueSet": [] + }, + "contextSupport": true + }, + "hover": { + "contentFormat": [ + "markdown", + "plaintext" + ] + }, + "formatting": {}, + "rename": {}, + "signatureHelp": { + "contextSupport": true, + "signatureInformation": { + "documentationFormat": [ + "markdown", + "plaintext" + ], + "parameterInformation": { + "labelOffsetSupport": true + }, + "activeParameterSupport": true + } + }, + "definition": {}, + "declaration": {}, + "implementation": {}, + "typeDefinition": {}, + "references": {} + } + } + } } \ No newline at end of file diff --git a/test/sample.msg/initialize/server.json b/test/sample.msg/initialize/server.json index 362628c..0ecc79b 100644 --- a/test/sample.msg/initialize/server.json +++ b/test/sample.msg/initialize/server.json @@ -1,32 +1,32 @@ -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "capabilities": { - "textDocumentSync": 2, - "completionProvider": { - "resolveProvider": false, - "triggerCharacters": [ - "\"", - ":" - ], - "documentSelector": [ - { - "language": "xquery" - } - ] - }, - "hoverProvider": true, - "documentSymbolProvider": true, - "documentRangeFormattingProvider": false, - "colorProvider": {}, - "foldingRangeProvider": true, - "selectionRangeProvider": true, - "documentLinkProvider": {}, - "serverInfo": { - "name": "My Custom Language Server", - "version": "1.0.0" - } - } - } +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "capabilities": { + "textDocumentSync": 2, + "completionProvider": { + "resolveProvider": false, + "triggerCharacters": [ + "\"", + ":" + ], + "documentSelector": [ + { + "language": "xquery" + } + ] + }, + "hoverProvider": true, + "documentSymbolProvider": true, + "documentRangeFormattingProvider": false, + "colorProvider": {}, + "foldingRangeProvider": true, + "selectionRangeProvider": true, + "documentLinkProvider": {}, + "serverInfo": { + "name": "My Custom Language Server", + "version": "1.0.0" + } + } + } } \ No newline at end of file diff --git a/test/sample.msg/logMessage/server.json b/test/sample.msg/logMessage/server.json index ba3dac5..b86f671 100644 --- a/test/sample.msg/logMessage/server.json +++ b/test/sample.msg/logMessage/server.json @@ -1,5 +1,5 @@ -{ - "jsonrpc": "2.0" - - +{ + "jsonrpc": "2.0" + + } \ No newline at end of file diff --git a/webapp/lsp-manager/api-sockets.xqm b/webapp/lsp-manager/api-sockets.xqm index 8b5d2d7..c25454e 100644 --- a/webapp/lsp-manager/api-sockets.xqm +++ b/webapp/lsp-manager/api-sockets.xqm @@ -1,19 +1,19 @@ -module namespace wsa = 'app/sockets'; -import module namespace ws="http://basex.org/modules/ws"; - - -declare function wsa:wsids() -as xs:string* -{ - ws:ids() -}; - -declare %rest:path('/app/api/sockets') -function wsa:list() -as element(ul) -{ -
    { - wsa:wsids()!
  • {.}
  • - }
- +module namespace wsa = 'app/sockets'; +import module namespace ws="http://basex.org/modules/ws"; + + +declare function wsa:wsids() +as xs:string* +{ + ws:ids() +}; + +declare %rest:path('/app/api/sockets') +function wsa:list() +as element(ul) +{ +
    { + wsa:wsids()!
  • {.}
  • + }
+ }; \ No newline at end of file diff --git a/webapp/lsp-manager/error-reporting.xqm b/webapp/lsp-manager/error-reporting.xqm index 32a2a02..eb1e8b9 100644 --- a/webapp/lsp-manager/error-reporting.xqm +++ b/webapp/lsp-manager/error-reporting.xqm @@ -1,26 +1,26 @@ -module namespace _ = 'app/error-reporting'; -import module namespace cm = "app/cm" at "common.xqm"; - - -declare - %rest:error("*") - %rest:error-param("code", "{$code}") - %rest:error-param("description", "{$description}") - %rest:error-param("value", "{$value}") - %rest:error-param("module", "{$module}") - %rest:error-param("line-number", "{$line-number}") - %rest:error-param("column-number","{$column-number}") - %rest:error-param("additional", "{$additional}") -function _:error($code,$description,$value, - $module,$line-number,$column-number,$additional) { - let $err:=map{"code":$code, "description":$description, - "value": _:format($value), "module": $module, - "line-number": $line-number, "column-number": $column-number, - "additional": _:format($additional)} - return cm:htmx2("error.htm", $err) -}; - -declare function _:format($item) -as xs:string{ - serialize($item,map{"method":"basex"}) +module namespace _ = 'app/error-reporting'; +import module namespace cm = "app/cm" at "common.xqm"; + + +declare + %rest:error("*") + %rest:error-param("code", "{$code}") + %rest:error-param("description", "{$description}") + %rest:error-param("value", "{$value}") + %rest:error-param("module", "{$module}") + %rest:error-param("line-number", "{$line-number}") + %rest:error-param("column-number","{$column-number}") + %rest:error-param("additional", "{$additional}") +function _:error($code,$description,$value, + $module,$line-number,$column-number,$additional) { + let $err:=map{"code":$code, "description":$description, + "value": _:format($value), "module": $module, + "line-number": $line-number, "column-number": $column-number, + "additional": _:format($additional)} + return cm:htmx2("error.htm", $err) +}; + +declare function _:format($item) +as xs:string{ + serialize($item,map{"method":"basex"}) }; \ No newline at end of file diff --git a/webapp/lsp-manager/lib.xq/outlet.xqm b/webapp/lsp-manager/lib.xq/outlet.xqm index 193a33a..94934ae 100644 --- a/webapp/lsp-manager/lib.xq/outlet.xqm +++ b/webapp/lsp-manager/lib.xq/outlet.xqm @@ -1,102 +1,102 @@ -xquery version '3.1'; -(:~ save conversion outputs to file -ensures target folders created -save multiple docs when root found -optionally serialize XML with default namespace -@author quodatum Andy Bunce -:) -module namespace outlet = 'urn:conversion:outlet'; - -(: serialization options - key is arbitary name, value is BaseX serialization option map -for xml serializations the non-standard 'ns' option supplies a namespace to use as default ' :) -declare variable $outlet:serial:=map{ - "xvrl": map{"method":"xml","ns":"http://www.xproc.org/ns/xvrl"}, - "docbook":map{"method":"xml","ns":"http://docbook.org/ns/docbook"}, - "csv": map{"method":"text"}, - "xml": map{"method":"xml"} -}; - -(:~save $doc to $dest unless empty,will create directories as required -@param $opts serialization options and ns to set a default namespace :) -declare function outlet:save($doc as item(),$dest as xs:string?,$opts as map(*)?) -as xs:string?{ - if (exists($dest)) - then - let $doc:=if($opts?ns) - then outlet:change-element-ns-deep($doc,$opts?ns,"") - else $doc - return ( - file:create-dir(file:parent($dest)), - file:write($dest,$doc,map:remove($opts,"ns")), - $dest - ) -}; - -(:~ save file or files if node is wrapper -@return paths to saved files -:) -declare function outlet:save-wrapper($doc as item(),$dest as xs:string?,$opts as map(*)?) -as xs:string*{ - if ($doc/wrapper) - then $doc/wrapper/result! outlet:save(*,file:resolve-path(@href,$dest),$opts) - else outlet:save($doc,$dest,$opts) -}; - -(:~ from functx http://www.xqueryfunctions.com/xq/functx_change-element-ns-deep.html :) -declare function outlet:change-element-ns-deep - ( $nodes as node()* , - $newns as xs:string , - $prefix as xs:string ) as node()* { - - for $node in $nodes - return if ($node instance of element()) - then (element - {QName ($newns, - concat($prefix, - if ($prefix = '') - then '' - else ':', - local-name($node)))} - {$node/@*, - outlet:change-element-ns-deep($node/node(), - $newns, $prefix)}) - else if ($node instance of document-node()) - then outlet:change-element-ns-deep($node/node(), - $newns, $prefix) - else $node - } ; - -(:~ @see https://stackoverflow.com/a/8600987/3210344 :) - declare function outlet:remove-prefixes($node as node(), $prefixes as xs:string*) - as node(){ - typeswitch ($node) - case element() - return - if ($prefixes = ('#all', prefix-from-QName(node-name($node)))) then - element {QName(namespace-uri($node), local-name($node))} { - $node/@*, - $node/node()/outlet:remove-prefixes(., $prefixes) - } - else - element {node-name($node)} { - $node/@*, - $node/node()/outlet:remove-prefixes(., $prefixes) - } - case document-node() - return - document { - $node/node()/outlet:remove-prefixes(., $prefixes) - } - default - return $node -}; - -(:~ relative file paths below folder $path, matching $selector :) -declare function outlet:select($path as xs:string,$selector as map(xs:string,item()*)) -as xs:string* -{ -file:list($path,true(),$selector?pattern) -[some $i in $selector?include satisfies contains(.,$i)] -[every $x in $selector?exclude satisfies not(contains(.,$x))] +xquery version '3.1'; +(:~ save conversion outputs to file +ensures target folders created +save multiple docs when root found +optionally serialize XML with default namespace +@author quodatum Andy Bunce +:) +module namespace outlet = 'urn:conversion:outlet'; + +(: serialization options + key is arbitary name, value is BaseX serialization option map +for xml serializations the non-standard 'ns' option supplies a namespace to use as default ' :) +declare variable $outlet:serial:=map{ + "xvrl": map{"method":"xml","ns":"http://www.xproc.org/ns/xvrl"}, + "docbook":map{"method":"xml","ns":"http://docbook.org/ns/docbook"}, + "csv": map{"method":"text"}, + "xml": map{"method":"xml"} +}; + +(:~save $doc to $dest unless empty,will create directories as required +@param $opts serialization options and ns to set a default namespace :) +declare function outlet:save($doc as item(),$dest as xs:string?,$opts as map(*)?) +as xs:string?{ + if (exists($dest)) + then + let $doc:=if($opts?ns) + then outlet:change-element-ns-deep($doc,$opts?ns,"") + else $doc + return ( + file:create-dir(file:parent($dest)), + file:write($dest,$doc,map:remove($opts,"ns")), + $dest + ) +}; + +(:~ save file or files if node is wrapper +@return paths to saved files +:) +declare function outlet:save-wrapper($doc as item(),$dest as xs:string?,$opts as map(*)?) +as xs:string*{ + if ($doc/wrapper) + then $doc/wrapper/result! outlet:save(*,file:resolve-path(@href,$dest),$opts) + else outlet:save($doc,$dest,$opts) +}; + +(:~ from functx http://www.xqueryfunctions.com/xq/functx_change-element-ns-deep.html :) +declare function outlet:change-element-ns-deep + ( $nodes as node()* , + $newns as xs:string , + $prefix as xs:string ) as node()* { + + for $node in $nodes + return if ($node instance of element()) + then (element + {QName ($newns, + concat($prefix, + if ($prefix = '') + then '' + else ':', + local-name($node)))} + {$node/@*, + outlet:change-element-ns-deep($node/node(), + $newns, $prefix)}) + else if ($node instance of document-node()) + then outlet:change-element-ns-deep($node/node(), + $newns, $prefix) + else $node + } ; + +(:~ @see https://stackoverflow.com/a/8600987/3210344 :) + declare function outlet:remove-prefixes($node as node(), $prefixes as xs:string*) + as node(){ + typeswitch ($node) + case element() + return + if ($prefixes = ('#all', prefix-from-QName(node-name($node)))) then + element {QName(namespace-uri($node), local-name($node))} { + $node/@*, + $node/node()/outlet:remove-prefixes(., $prefixes) + } + else + element {node-name($node)} { + $node/@*, + $node/node()/outlet:remove-prefixes(., $prefixes) + } + case document-node() + return + document { + $node/node()/outlet:remove-prefixes(., $prefixes) + } + default + return $node +}; + +(:~ relative file paths below folder $path, matching $selector :) +declare function outlet:select($path as xs:string,$selector as map(xs:string,item()*)) +as xs:string* +{ +file:list($path,true(),$selector?pattern) +[some $i in $selector?include satisfies contains(.,$i)] +[every $x in $selector?exclude satisfies not(contains(.,$x))] }; \ No newline at end of file diff --git a/webapp/lsp-manager/lib.xq/wrangler.xqm b/webapp/lsp-manager/lib.xq/wrangler.xqm index 570d2ef..e272357 100644 --- a/webapp/lsp-manager/lib.xq/wrangler.xqm +++ b/webapp/lsp-manager/lib.xq/wrangler.xqm @@ -1,199 +1,199 @@ -xquery version '3.1'; -(:~ -Library to manage running multiple jobs using BaseX job:eval, -where the jobs are the execution of one function for a set of arguments - -The function will have signature `fn($key as xs:string) as element()` -The function will typically create outputs and have side effects. - -State information is persisted with the storage module, using the key '_wrangle' -It is a map{$wid: {"jobs":}} -requires basex 10+ -@licence BSD -@author: quodatum -@date: 2023/02/12 -:) -module namespace wrangle = 'urn:quodatum:wrangler'; -(:~ semantic version :) -declare variable $wrangle:version:="1.0.0"; -(:~ used in bindings to indicate a wrangle job and as store key :) -declare variable $wrangle:id:="_wrangle"; - -(:~ -submit wrangle jobs for each $item -@param wrangle data{xq:...,bindings:..} -@return unique id for the job set -:) -declare function wrangle:queue($items as item()*,$wrangle as map(*)) -as xs:string{ -let $wid := random:uuid() -let $jobs := $items!job:eval($wrangle?xq, - map:merge(($wrangle?bindings(.),map:entry($wrangle:id,$wid))), - map{"cache":true()} - ) - -let $this := map:entry($wid,map:entry("jobs",$jobs!map:entry(., - map{ - "complete":false(), - "details":job:list-details(.) - }))) - -let $_:=store:put($wrangle:id,map:merge((($this,wrangle:store())))) -return $wid -}; - -(:~ active wrangle ids :) -declare function wrangle:active() -as xs:string*{ - job:list()!job:bindings(.)?($wrangle:id)=>distinct-values() -}; - -(:~ known wrangles :) -declare function wrangle:list() -as xs:string*{ - wrangle:store()=>map:keys() -}; - -(:~ details for $wid wrangle :) -declare function wrangle:list-details($wid as xs:string) -as map(*){ - wrangle:store()=>map:get($wid) -}; - -(:~ all wrangled jobs :) -declare function wrangle:job-list() -as xs:string*{ - job:list()[job:bindings(.)=>map:contains($wrangle:id)] -}; - -(:~ jobs for wrangle id :) -declare function wrangle:job-list($wid as xs:string) - as xs:string*{ - job:list()[job:bindings(.)?($wrangle:id) eq $wid] -}; - -(:~ is wrangle id finished (or unknown) :) -declare function wrangle:finished($wid as xs:string) - as xs:string*{ - every $job in job:list()[job:bindings(.)?($wrangle:id) eq $wid] satisfies job:finished($job) -}; - -(:~ wait wrangle id finished (or unknown) :) -declare function wrangle:wait($wid as xs:string) - as empty-sequence(){ - let $done:=every $job in job:list()[job:bindings(.)?($wrangle:id) eq $wid] - satisfies empty(job:wait($job)) - return if($done) then () -}; - -(:~ cancel wrangle id :) -declare function wrangle:remove($wid as xs:string) -as empty-sequence(){ - job:list()[job:bindings(.)?($wrangle:id) eq $wid]!job:remove(.), - store:put($wrangle:id,wrangle:store()=>map:remove($wid)) -}; - -(:~ tally of non-zero job status for $wid "scheduled", "queued", "running", "cached" :) -declare function wrangle:status($wid as xs:string) -as map(*){ - wrangle:job-list($wid)!job:list-details(.)/@state/string() - =>fold-left(map{},wrangle:tally-count#2) -}; - -(:~ job-results with no error as sequence:) -declare function wrangle:results($wid as xs:string) -as item()*{ - wrangle:job-list($wid)!wrangle:job-result(.)[not(?error)]?result -}; - -(:~ error counts keyed on $err:code :) -declare function wrangle:errors($wid as xs:string) -as map(*){ - wrangle:job-list($wid)!wrangle:job-result(.)[?error]?result?code!string() - =>fold-left(map{},wrangle:tally-count#2) -}; - -(:~ key is $err:code values are joblists :) -declare function wrangle:jobs-by-error($wid as xs:string) -as map(*){ - (for $jobId in wrangle:job-list($wid) - let $result:=wrangle:job-result($jobId)[?error] - where exists($result) - return map:entry($result?result?code!string(),$jobId) - ) -=> map:merge( map{"duplicates":"combine"}) -}; - -(:~ return key for job:) -declare function wrangle:job-key($jobId as xs:string) -as xs:string{ -let $b:=job:bindings($jobId) -return $b?(map:keys($b)[. ne $wrangle:id]) -}; - -(:~ return map from peek at result:) -declare function wrangle:job-result($jobId as xs:string) -as map(*){ - try{ - map{ - "error":false(), - "result": job:result($jobId,map{"keep":true()}) - } - }catch *{ - map{ - "error":true(), - "result": map{"description": $err:description, - "code": $err:code, - "line": $err:column-number, - "additional": $err:additional, - "value":$err:value - } - } - } -}; - -(:~ XQuery for background service :) -declare function wrangle:service() -as xs:string{ -``[ -import module namespace wrangle = 'urn:quodatum:wrangler:v1'; at "`{ static-base-uri() }`"; -let $done:=wrangle:job-list()[job:finished(.)] -if(exists($done)) -then let $w:=store:get($wrangle:id) - for $job in $done - group by $wid= job:bindings($job)?($wrangle:id) - for $job in $job - let $_:=store:put($wrangle:id) -]`` - -}; -(:~ schedule as service :) -declare function wrangle:schedule-service() -as xs:string{ - wrangle:service() - =>job:eval((), map { 'id':$wrangle:id, 'service':true(), - 'interval': 'PT1S','log': $wrangle:id}) -}; - -(:~ cached data as map :) -declare function wrangle:store() -as map(*){ - store:get-or-put($wrangle:id,function(){map{}}) -}; - -(:~ @return map string->count for fold-left :) -declare %private function wrangle:tally-count($r as map(*),$this as xs:string) -as map(*){ - map:merge( - (map:entry($this,if(map:contains($r,$this)) then $r($this)+1 else 1),$r), - map{"duplicates":"use-first"} - ) -}; -(:~ @return map string->(string*) for fold-left :) -declare %private function wrangle:tally-list($r as map(*),$key as xs:string,$value as xs:string) -as map(*){ - map:merge( - (map:entry($key,$value),$r), - map{"duplicates":"combine"} - ) +xquery version '3.1'; +(:~ +Library to manage running multiple jobs using BaseX job:eval, +where the jobs are the execution of one function for a set of arguments + +The function will have signature `fn($key as xs:string) as element()` +The function will typically create outputs and have side effects. + +State information is persisted with the storage module, using the key '_wrangle' +It is a map{$wid: {"jobs":}} +requires basex 10+ +@licence BSD +@author: quodatum +@date: 2023/02/12 +:) +module namespace wrangle = 'urn:quodatum:wrangler'; +(:~ semantic version :) +declare variable $wrangle:version:="1.0.0"; +(:~ used in bindings to indicate a wrangle job and as store key :) +declare variable $wrangle:id:="_wrangle"; + +(:~ +submit wrangle jobs for each $item +@param wrangle data{xq:...,bindings:..} +@return unique id for the job set +:) +declare function wrangle:queue($items as item()*,$wrangle as map(*)) +as xs:string{ +let $wid := random:uuid() +let $jobs := $items!job:eval($wrangle?xq, + map:merge(($wrangle?bindings(.),map:entry($wrangle:id,$wid))), + map{"cache":true()} + ) + +let $this := map:entry($wid,map:entry("jobs",$jobs!map:entry(., + map{ + "complete":false(), + "details":job:list-details(.) + }))) + +let $_:=store:put($wrangle:id,map:merge((($this,wrangle:store())))) +return $wid +}; + +(:~ active wrangle ids :) +declare function wrangle:active() +as xs:string*{ + job:list()!job:bindings(.)?($wrangle:id)=>distinct-values() +}; + +(:~ known wrangles :) +declare function wrangle:list() +as xs:string*{ + wrangle:store()=>map:keys() +}; + +(:~ details for $wid wrangle :) +declare function wrangle:list-details($wid as xs:string) +as map(*){ + wrangle:store()=>map:get($wid) +}; + +(:~ all wrangled jobs :) +declare function wrangle:job-list() +as xs:string*{ + job:list()[job:bindings(.)=>map:contains($wrangle:id)] +}; + +(:~ jobs for wrangle id :) +declare function wrangle:job-list($wid as xs:string) + as xs:string*{ + job:list()[job:bindings(.)?($wrangle:id) eq $wid] +}; + +(:~ is wrangle id finished (or unknown) :) +declare function wrangle:finished($wid as xs:string) + as xs:string*{ + every $job in job:list()[job:bindings(.)?($wrangle:id) eq $wid] satisfies job:finished($job) +}; + +(:~ wait wrangle id finished (or unknown) :) +declare function wrangle:wait($wid as xs:string) + as empty-sequence(){ + let $done:=every $job in job:list()[job:bindings(.)?($wrangle:id) eq $wid] + satisfies empty(job:wait($job)) + return if($done) then () +}; + +(:~ cancel wrangle id :) +declare function wrangle:remove($wid as xs:string) +as empty-sequence(){ + job:list()[job:bindings(.)?($wrangle:id) eq $wid]!job:remove(.), + store:put($wrangle:id,wrangle:store()=>map:remove($wid)) +}; + +(:~ tally of non-zero job status for $wid "scheduled", "queued", "running", "cached" :) +declare function wrangle:status($wid as xs:string) +as map(*){ + wrangle:job-list($wid)!job:list-details(.)/@state/string() + =>fold-left(map{},wrangle:tally-count#2) +}; + +(:~ job-results with no error as sequence:) +declare function wrangle:results($wid as xs:string) +as item()*{ + wrangle:job-list($wid)!wrangle:job-result(.)[not(?error)]?result +}; + +(:~ error counts keyed on $err:code :) +declare function wrangle:errors($wid as xs:string) +as map(*){ + wrangle:job-list($wid)!wrangle:job-result(.)[?error]?result?code!string() + =>fold-left(map{},wrangle:tally-count#2) +}; + +(:~ key is $err:code values are joblists :) +declare function wrangle:jobs-by-error($wid as xs:string) +as map(*){ + (for $jobId in wrangle:job-list($wid) + let $result:=wrangle:job-result($jobId)[?error] + where exists($result) + return map:entry($result?result?code!string(),$jobId) + ) +=> map:merge( map{"duplicates":"combine"}) +}; + +(:~ return key for job:) +declare function wrangle:job-key($jobId as xs:string) +as xs:string{ +let $b:=job:bindings($jobId) +return $b?(map:keys($b)[. ne $wrangle:id]) +}; + +(:~ return map from peek at result:) +declare function wrangle:job-result($jobId as xs:string) +as map(*){ + try{ + map{ + "error":false(), + "result": job:result($jobId,map{"keep":true()}) + } + }catch *{ + map{ + "error":true(), + "result": map{"description": $err:description, + "code": $err:code, + "line": $err:column-number, + "additional": $err:additional, + "value":$err:value + } + } + } +}; + +(:~ XQuery for background service :) +declare function wrangle:service() +as xs:string{ +``[ +import module namespace wrangle = 'urn:quodatum:wrangler:v1'; at "`{ static-base-uri() }`"; +let $done:=wrangle:job-list()[job:finished(.)] +if(exists($done)) +then let $w:=store:get($wrangle:id) + for $job in $done + group by $wid= job:bindings($job)?($wrangle:id) + for $job in $job + let $_:=store:put($wrangle:id) +]`` + +}; +(:~ schedule as service :) +declare function wrangle:schedule-service() +as xs:string{ + wrangle:service() + =>job:eval((), map { 'id':$wrangle:id, 'service':true(), + 'interval': 'PT1S','log': $wrangle:id}) +}; + +(:~ cached data as map :) +declare function wrangle:store() +as map(*){ + store:get-or-put($wrangle:id,function(){map{}}) +}; + +(:~ @return map string->count for fold-left :) +declare %private function wrangle:tally-count($r as map(*),$this as xs:string) +as map(*){ + map:merge( + (map:entry($this,if(map:contains($r,$this)) then $r($this)+1 else 1),$r), + map{"duplicates":"use-first"} + ) +}; +(:~ @return map string->(string*) for fold-left :) +declare %private function wrangle:tally-list($r as map(*),$key as xs:string,$value as xs:string) +as map(*){ + map:merge( + (map:entry($key,$value),$r), + map{"duplicates":"combine"} + ) }; \ No newline at end of file diff --git a/webapp/lsp-manager/views/dev/dba-iframe.htm b/webapp/lsp-manager/views/dev/dba-iframe.htm index 1f76fb4..13de3d5 100644 --- a/webapp/lsp-manager/views/dev/dba-iframe.htm +++ b/webapp/lsp-manager/views/dev/dba-iframe.htm @@ -1,21 +1,21 @@ - - - - - dev - - - -
- - DEV - dba - - - -
- - + + + + + dev + + + +
+ + DEV + dba + + + +
+ + \ No newline at end of file diff --git a/webapp/lsp-manager/views/dev/home.htm b/webapp/lsp-manager/views/dev/home.htm index 729ddc8..1e09fb5 100644 --- a/webapp/lsp-manager/views/dev/home.htm +++ b/webapp/lsp-manager/views/dev/home.htm @@ -1,40 +1,40 @@ - - - - - Dev home - - - -
- - - list tasks etc -
- - + + + + + Dev home + + + +
+ + + list tasks etc +
+ + \ No newline at end of file diff --git a/webapp/lsp-manager/views/dev/job.htm b/webapp/lsp-manager/views/dev/job.htm index e31942c..01f563a 100644 --- a/webapp/lsp-manager/views/dev/job.htm +++ b/webapp/lsp-manager/views/dev/job.htm @@ -1,28 +1,28 @@ - - - - - Jobs - - - -
-
- - Jobs home - jobs 4 - - Refresh -
- -

Jobs

-
-
- Nothing Yet! -
- -
- - + + + + + Jobs + + + +
+
+ + Jobs home + jobs 4 + + Refresh +
+ +

Jobs

+
+
+ Nothing Yet! +
+ +
+ + \ No newline at end of file diff --git a/webapp/lsp-manager/views/error.htm b/webapp/lsp-manager/views/error.htm index 3f5c2de..36e1d34 100644 --- a/webapp/lsp-manager/views/error.htm +++ b/webapp/lsp-manager/views/error.htm @@ -1,27 +1,27 @@ - - - - - Error - - - -
-

Error:

-
-
Description
-
-
Value
-
-
Module
-
[,]
-
Additional
-
-

-      
-
-
- - + + + + + Error + + + +
+

Error:

+
+
Description
+
+
Value
+
+
Module
+
[,]
+
Additional
+
+

+      
+
+
+ + \ No newline at end of file diff --git a/webapp/lsp-manager/views/home.htm b/webapp/lsp-manager/views/home.htm index 13cb0d7..bf8e35a 100644 --- a/webapp/lsp-manager/views/home.htm +++ b/webapp/lsp-manager/views/home.htm @@ -1,64 +1,64 @@ - - - - -Home - - -
- -
-

ver

- - Joke - -

-
-
- -
-
- - -
-
- - -
-
- - -
- - -
-
-

Contacts

- - - - - - - - - - -
NameEmail
-

Add A Contact

-
- - -
-
- -
- + + + + +Home + + +
+ +
+

ver

+ + Joke + +

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+

Contacts

+ + + + + + + + + + +
NameEmail
+

Add A Contact

+
+ + +
+
+ +
+ \ No newline at end of file diff --git a/webapp/lsp-manager/views/layout.htm b/webapp/lsp-manager/views/layout.htm index d6da21f..b6aa81d 100644 --- a/webapp/lsp-manager/views/layout.htm +++ b/webapp/lsp-manager/views/layout.htm @@ -1,68 +1,68 @@ - - - - - - - - LSP manager - - - - - - - - - - - -
- -
-

MAIN

-
-
- - - LoggedIn: ?? - - - - -
-
- - - - + + + + + + + + LSP manager + + + + + + + + + + + +
+ +
+

MAIN

+
+
+ + + LoggedIn: ?? + + + + +
+
+ + + + \ No newline at end of file diff --git a/webapp/lsp-manager/views/login.htm b/webapp/lsp-manager/views/login.htm index 3eb4da1..a1daf70 100644 --- a/webapp/lsp-manager/views/login.htm +++ b/webapp/lsp-manager/views/login.htm @@ -1,25 +1,25 @@ - - - - - Login - - - -
-
-
- - - - -
- - -
-
- + + + + + Login + + + +
+
+
+ + + + +
+ + +
+
+ \ No newline at end of file diff --git a/webapp/lsp-manager/views/test.htm b/webapp/lsp-manager/views/test.htm index aa7c478..57daedd 100644 --- a/webapp/lsp-manager/views/test.htm +++ b/webapp/lsp-manager/views/test.htm @@ -1,42 +1,42 @@ - - - - - test - - - -
- - -
- -
path
- {pdf.index} -
- - {pdf} - - - - -
- -
-
- - A kitten sits patiently. - -
-
- slug:
{pdf.id}
-
-
-
-
- - + + + + + test + + + +
+ + +
+ +
path
+ {pdf.index} +
+ + {pdf} + + + + +
+ +
+
+ + A kitten sits patiently. + +
+
+ slug:
{pdf.id}
+
+
+
+
+ + \ No newline at end of file diff --git a/webapp/lsp-manager/views/unknown.htm b/webapp/lsp-manager/views/unknown.htm index 6c0fa95..d4fe76f 100644 --- a/webapp/lsp-manager/views/unknown.htm +++ b/webapp/lsp-manager/views/unknown.htm @@ -1,19 +1,19 @@ - - - - - 404 - - - -
-

Page not found:

-
    -
  • Page: pdf2/${ path }
  • -
  • Method: ${ method }
  • -
-
- - + + + + + 404 + + + +
+

Page not found:

+
    +
  • Page: pdf2/${ path }
  • +
  • Method: ${ method }
  • +
+
+ + \ No newline at end of file diff --git a/webapp/lsp/etc/capabilities.json b/webapp/lsp/etc/capabilities.json index ba6a2d3..33e60bc 100644 --- a/webapp/lsp/etc/capabilities.json +++ b/webapp/lsp/etc/capabilities.json @@ -1,28 +1,28 @@ -{ - "capabilities": { - "textDocumentSync": 2, - "completionProvider": { - "resolveProvider": false, - "triggerCharacters": [ - "\"", - ":" - ], - "documentSelector": [ - { - "language": "xquery" - } - ] - }, - "hoverProvider": true, - "documentSymbolProvider": true, - "documentRangeFormattingProvider": false, - "colorProvider": false, - "foldingRangeProvider": false, - "selectionRangeProvider": false, - "documentLinkProvider": {}, - "serverInfo": { - "name": "XQuery 4.0b Language Server", - "version": "0.0.2" - } - } +{ + "capabilities": { + "textDocumentSync": 2, + "completionProvider": { + "resolveProvider": false, + "triggerCharacters": [ + "\"", + ":" + ], + "documentSelector": [ + { + "language": "xquery" + } + ] + }, + "hoverProvider": true, + "documentSymbolProvider": true, + "documentRangeFormattingProvider": false, + "colorProvider": false, + "foldingRangeProvider": false, + "selectionRangeProvider": false, + "documentLinkProvider": {}, + "serverInfo": { + "name": "XQuery 4.0b Language Server", + "version": "0.0.2" + } + } } \ No newline at end of file diff --git a/webapp/lsp/etc/format-defaults.json b/webapp/lsp/etc/format-defaults.json index 159bc39..0052742 100644 --- a/webapp/lsp/etc/format-defaults.json +++ b/webapp/lsp/etc/format-defaults.json @@ -1,7 +1,7 @@ -{ - "tabSize": 2, - "insertSpaces": true, - "trimTrailingWhitespace": true, - "insertFinalNewline": true, - "trimFinalNewlines": true +{ + "tabSize": 2, + "insertSpaces": true, + "trimTrailingWhitespace": true, + "insertFinalNewline": true, + "trimFinalNewlines": true } \ No newline at end of file diff --git a/webapp/lsp/etc/snippets.json b/webapp/lsp/etc/snippets.json index 3eb5801..838b99e 100644 --- a/webapp/lsp/etc/snippets.json +++ b/webapp/lsp/etc/snippets.json @@ -1,266 +1,266 @@ -{ - "new library module": { - "isFileTemplate": true, - "prefix": "library module", - "body": [ - "xquery version '3.1';", - "(:~", - "@author: ", - "@date: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE", - ":)", - "module namespace ${1:prefix} = '${2:http://www.example.com/}';", - "" - ], - "description": "New library module template" - }, - "new main module": { - "isFileTemplate": true, - "prefix": "main module", - "body": [ - "xquery version '3.1';", - "(:~", - ":)", - "${1:expr}", - "" - ], - "description": "New main module template" - }, - "flowr": { - "prefix": [ - "for", - "flowr" - ], - "body": [ - "for \\$${1:var} at \\$${2:pos} in ${3:expr}", - "let \\$${4:var2} := ${5:expr}", - "where ${6:boolean}", - "order by ${7:expr}", - "return ${8:expr2}" - ], - "description": "Full FLOWR expression" - }, - "return": { - "prefix": "return", - "body": "return ${1:expr}" - }, - "import": { - "prefix": "import", - "body": "import module namespace ${1:ns} = '${2:http://www.example.com/}';", - "description": "Import module" - }, - "if": { - "prefix": "if", - "body": [ - "if (${1:boolean})", - "then ${2:expr1}", - "else ${3:expr2}" - ], - "description": "If then else expression" - }, - "module": { - "prefix": "module", - "body": "module namespace ${1:ns} = '${2:http://www.example.com}';" - }, - "every": { - "prefix": "every", - "body": "every \\$${1:varname} in ${2:expr} satisfies ${3:expr}" - }, - "some": { - "prefix": "some", - "body": "some \\$${1:varname} in ${2:expr} satisfies ${3:expr}" - }, - "declare namespace": { - "prefix": [ - "declare", - "namespace" - ], - "body": [ - "declare ${1:prefix}='${2:namespace}';", - "" - ], - "description": "declare namespace" - }, - "declare base-uri": { - "prefix": [ - "declare", - "baseuri" - ], - "body": [ - "declare base-uri '${1:uriliteral}';", - "" - ], - "description": "declare base-uri" - }, - "declare option": { - "prefix": [ - "declare", - "option" - ], - "body": [ - "declare option ${1:eqname} '${2:string}';", - "" - ], - "description": "declare option" - }, - "declare function": { - "prefix": [ - "declare", - "function" - ], - "body": [ - "(:~ ${1:name} :)", - "declare function ${2:ns}:${1:name}()", - "as ${3:type}{", - "${3:expr}", - "};", - "" - ], - "description": "declare function" - }, - "declare variable": { - "prefix": [ - "declare", - "variable" - ], - "body": [ - "(:~ \\$${1:varname} :)", - "declare variable \\$${1:varname} := ${2:expr};", - "" - ], - "description": "declare variable" - }, - "switch": { - "prefix": "switch", - "body": [ - "switch(${1:foo})", - "case ${2:foo} return ${3:true}", - "default return ${4:false}" - ], - "description": "switch statement" - }, - "typeswitch": { - "prefix": "type", - "body": [ - "typeswitch(${1:foo})", - "case ${2:foo} return ${3:true}", - "default return ${4:false}" - ], - "description": "typeswitch statement" - }, - "try": { - "prefix": "try", - "body": [ - "try {", - " ${1:expr}", - "} catch ${2:*}", - " { ${3:expr}", - "}" - ], - "description": "try catch" - }, - "tumbling": { - "prefix": [ - "for", - "tumbling", - "window" - ], - "body": [ - "for tumbling window \\$${1:varname} in ${2:expr}", - "start at \\$${3:start} when ${4:expr}", - "end at \\$${5:end} when ${6:expr}", - "return ${7:expr}" - ], - "description": "tumbling window" - }, - "sliding": { - "prefix": [ - "for", - "sliding", - "window" - ], - "body": [ - "for sliding window \\$${1:varname} in ${2:expr}", - "start at \\$${3:start} when ${4:expr}", - "end at \\$${5:end} when ${6:expr}", - "return ${7:expr}" - ], - "description": "sliding window" - }, - "let": { - "prefix": "let", - "body": "let \\$${1:varname} := ${2:expr}" - }, - "castable": { - "body": "castable as ${1:atomicType}" - }, - "cast": { - "body": "cast as ${1:atomicType}" - }, - - "update insert": { - "prefix": [ - "update", - "insert" - ], - "body": "insert node ${1:expr} into ${2:xpath}" - }, - "update delete": { - "prefix": ["delete","update"], - "body": "delete node ${1:xpath}" - }, - "update replace node": { - "prefix":["update","replace"], - "body": "replace node ${1:xpath} with ${2:expr}" - }, - "update replace value": { - "prefix": [ "update", - "replace", - "value" - ], - "body": "replace value of node ${1:xpath} with ${2:expr}" - }, - "update rename": { - "prefix": [ - "update", - "rename" - ], - "body": "rename node ${1:xpath} as ${2:eqname}" - }, - "copy modify return": { - "prefix": [ - "copy", - "modify", - "return" - ], - "body": [ - "copy \\$${1:varname} := ${2:node}", - "modify ${3:updates}", - "return \\$${1:varname}" - ] - }, - "transform with": { - "prefix": [ - "transform", - "with", - "update" - ], - "body": [ - "${1:node} transform with {", - " ${2:update}", - "}" - ] - }, - "transform update": { - "prefix": [ - "transform", - "update" - ], - "body": [ - "${1:node} update {", - "${2:update}", - "}" - ] - } -} - - +{ + "new library module": { + "isFileTemplate": true, + "prefix": "library module", + "body": [ + "xquery version '3.1';", + "(:~", + "@author: ", + "@date: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE", + ":)", + "module namespace ${1:prefix} = '${2:http://www.example.com/}';", + "" + ], + "description": "New library module template" + }, + "new main module": { + "isFileTemplate": true, + "prefix": "main module", + "body": [ + "xquery version '3.1';", + "(:~", + ":)", + "${1:expr}", + "" + ], + "description": "New main module template" + }, + "flowr": { + "prefix": [ + "for", + "flowr" + ], + "body": [ + "for \\$${1:var} at \\$${2:pos} in ${3:expr}", + "let \\$${4:var2} := ${5:expr}", + "where ${6:boolean}", + "order by ${7:expr}", + "return ${8:expr2}" + ], + "description": "Full FLOWR expression" + }, + "return": { + "prefix": "return", + "body": "return ${1:expr}" + }, + "import": { + "prefix": "import", + "body": "import module namespace ${1:ns} = '${2:http://www.example.com/}';", + "description": "Import module" + }, + "if": { + "prefix": "if", + "body": [ + "if (${1:boolean})", + "then ${2:expr1}", + "else ${3:expr2}" + ], + "description": "If then else expression" + }, + "module": { + "prefix": "module", + "body": "module namespace ${1:ns} = '${2:http://www.example.com}';" + }, + "every": { + "prefix": "every", + "body": "every \\$${1:varname} in ${2:expr} satisfies ${3:expr}" + }, + "some": { + "prefix": "some", + "body": "some \\$${1:varname} in ${2:expr} satisfies ${3:expr}" + }, + "declare namespace": { + "prefix": [ + "declare", + "namespace" + ], + "body": [ + "declare ${1:prefix}='${2:namespace}';", + "" + ], + "description": "declare namespace" + }, + "declare base-uri": { + "prefix": [ + "declare", + "baseuri" + ], + "body": [ + "declare base-uri '${1:uriliteral}';", + "" + ], + "description": "declare base-uri" + }, + "declare option": { + "prefix": [ + "declare", + "option" + ], + "body": [ + "declare option ${1:eqname} '${2:string}';", + "" + ], + "description": "declare option" + }, + "declare function": { + "prefix": [ + "declare", + "function" + ], + "body": [ + "(:~ ${1:name} :)", + "declare function ${2:ns}:${1:name}()", + "as ${3:type}{", + "${3:expr}", + "};", + "" + ], + "description": "declare function" + }, + "declare variable": { + "prefix": [ + "declare", + "variable" + ], + "body": [ + "(:~ \\$${1:varname} :)", + "declare variable \\$${1:varname} := ${2:expr};", + "" + ], + "description": "declare variable" + }, + "switch": { + "prefix": "switch", + "body": [ + "switch(${1:foo})", + "case ${2:foo} return ${3:true}", + "default return ${4:false}" + ], + "description": "switch statement" + }, + "typeswitch": { + "prefix": "type", + "body": [ + "typeswitch(${1:foo})", + "case ${2:foo} return ${3:true}", + "default return ${4:false}" + ], + "description": "typeswitch statement" + }, + "try": { + "prefix": "try", + "body": [ + "try {", + " ${1:expr}", + "} catch ${2:*}", + " { ${3:expr}", + "}" + ], + "description": "try catch" + }, + "tumbling": { + "prefix": [ + "for", + "tumbling", + "window" + ], + "body": [ + "for tumbling window \\$${1:varname} in ${2:expr}", + "start at \\$${3:start} when ${4:expr}", + "end at \\$${5:end} when ${6:expr}", + "return ${7:expr}" + ], + "description": "tumbling window" + }, + "sliding": { + "prefix": [ + "for", + "sliding", + "window" + ], + "body": [ + "for sliding window \\$${1:varname} in ${2:expr}", + "start at \\$${3:start} when ${4:expr}", + "end at \\$${5:end} when ${6:expr}", + "return ${7:expr}" + ], + "description": "sliding window" + }, + "let": { + "prefix": "let", + "body": "let \\$${1:varname} := ${2:expr}" + }, + "castable": { + "body": "castable as ${1:atomicType}" + }, + "cast": { + "body": "cast as ${1:atomicType}" + }, + + "update insert": { + "prefix": [ + "update", + "insert" + ], + "body": "insert node ${1:expr} into ${2:xpath}" + }, + "update delete": { + "prefix": ["delete","update"], + "body": "delete node ${1:xpath}" + }, + "update replace node": { + "prefix":["update","replace"], + "body": "replace node ${1:xpath} with ${2:expr}" + }, + "update replace value": { + "prefix": [ "update", + "replace", + "value" + ], + "body": "replace value of node ${1:xpath} with ${2:expr}" + }, + "update rename": { + "prefix": [ + "update", + "rename" + ], + "body": "rename node ${1:xpath} as ${2:eqname}" + }, + "copy modify return": { + "prefix": [ + "copy", + "modify", + "return" + ], + "body": [ + "copy \\$${1:varname} := ${2:node}", + "modify ${3:updates}", + "return \\$${1:varname}" + ] + }, + "transform with": { + "prefix": [ + "transform", + "with", + "update" + ], + "body": [ + "${1:node} transform with {", + " ${2:update}", + "}" + ] + }, + "transform update": { + "prefix": [ + "transform", + "update" + ], + "body": [ + "${1:node} update {", + "${2:update}", + "}" + ] + } +} + + diff --git a/webapp/lsp/etc/snippets.jsonc b/webapp/lsp/etc/snippets.jsonc index d326b07..65755e4 100644 --- a/webapp/lsp/etc/snippets.jsonc +++ b/webapp/lsp/etc/snippets.jsonc @@ -1,279 +1,279 @@ -{ - "new library module": { - "isFileTemplate": true, - "prefix": "library module", - "body": [ - "xquery version '3.1';", - "(:~", - "@author: ", - "@date: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE", - ":)", - "module namespace ${1:prefix} = '${2:http://www.example.com/}';", - "" - ], - "description": "New library module template" - }, - "new main module": { - "isFileTemplate": true, - "prefix": "main module", - "body": [ - "xquery version '3.1';", - "(:~", - ":)", - "${1:expr}", - "" - ], - "description": "New main module template" - }, - "flowr": { - "prefix": [ - "for", - "flowr" - ], - "body": [ - "for \\$${1:var} at \\$${2:pos} in ${3:expr}", - "let \\$${4:var2} := ${5:expr}", - "where ${6:boolean}", - "order by ${7:expr}", - "return ${8:expr2}" - ], - "description": "Full FLOWR expression" - }, - "return": { - "prefix": "return", - "body": "return ${1:expr}" - }, - "import": { - "prefix": "import", - "body": "import module namespace ${1:ns} = '${2:http://www.example.com/}';", - "description": "Import module" - }, - "if": { - "prefix": "if", - "body": [ - "if (${1:boolean})", - "then ${2:expr1}", - "else ${3:expr2}" - ], - "description": "If then else expression" - }, - "module": { - "prefix": "module", - "body": "module namespace ${1:ns} = '${2:http://www.example.com}';" - }, - "every": { - "prefix": "every", - "body": "every \\$${1:varname} in ${2:expr} satisfies ${3:expr}" - }, - "some": { - "prefix": "some", - "body": "some \\$${1:varname} in ${2:expr} satisfies ${3:expr}" - }, - "declare namespace": { - "prefix": [ - "declare", - "namespace" - ], - "body": [ - "declare ${1:prefix}='${2:namespace}';", - "" - ], - "description": "declare namespace" - }, - "declare base-uri": { - "prefix": [ - "declare", - "baseuri" - ], - "body": [ - "declare base-uri '${1:uriliteral}';", - "" - ], - "description": "declare base-uri" - }, - "declare option": { - "prefix": [ - "declare", - "option" - ], - "body": [ - "declare option ${1:eqname} '${2:string}';", - "" - ], - "description": "declare option" - }, - "declare function": { - "prefix": [ - "declare", - "function" - ], - "body": [ - "(:~ ${1:name} :)", - "declare function ${2:ns}:${1:name}()", - "as ${3:type}{", - "${3:expr}", - "};", - "" - ], - "description": "declare function" - }, - "declare variable": { - "prefix": [ - "declare", - "variable" - ], - "body": [ - "(:~ \\$${1:varname} :)", - "declare variable \\$${1:varname} := ${2:expr};", - "" - ], - "description": "declare variable" - }, - "switch": { - "prefix": "switch", - "body": [ - "switch(${1:foo})", - "case ${2:foo} return ${3:true}", - "default return ${4:false}" - ], - "description": "switch statement" - }, - "typeswitch": { - "prefix": "type", - "body": [ - "typeswitch(${1:foo})", - "case ${2:foo} return ${3:true}", - "default return ${4:false}" - ], - "description": "typeswitch statement" - }, - "try": { - "prefix": "try", - "body": [ - "try {", - " ${1:expr}", - "} catch ${2:*}", - " { ${3:expr}", - "}" - ], - "description": "try catch" - }, - "tumbling": { - "prefix": [ - "for", - "tumbling", - "window" - ], - "body": [ - "for tumbling window \\$${1:varname} in ${2:expr}", - "start at \\$${3:start} when ${4:expr}", - "end at \\$${5:end} when ${6:expr}", - "return ${7:expr}" - ], - "description": "tumbling window" - }, - "sliding": { - "prefix": [ - "for", - "sliding", - "window" - ], - "body": [ - "for sliding window \\$${1:varname} in ${2:expr}", - "start at \\$${3:start} when ${4:expr}", - "end at \\$${5:end} when ${6:expr}", - "return ${7:expr}" - ], - "description": "sliding window" - }, - "let": { - "prefix": "let", - "body": "let \\$${1:varname} := ${2:expr}" - }, - "castable": { - "body": "castable as ${1:atomicType}" - }, - "cast": { - "body": "cast as ${1:atomicType}" - }, - // Updates *************** - "update insert": { - "prefix": [ - "update", - "insert" - ], - "body": "insert node ${1:expr} into ${2:xpath}" - }, - "update delete": { - "prefix": ["delete","update"], - "body": "delete node ${1:xpath}" - }, - "update replace node": { - "prefix":["update","replace"], - "body": "replace node ${1:xpath} with ${2:expr}" - }, - "update replace value": { - "prefix": [ "update", - "replace", - "value" - ], - "body": "replace value of node ${1:xpath} with ${2:expr}" - }, - "update rename": { - "prefix": [ - "update", - "rename" - ], - "body": "rename node ${1:xpath} as ${2:eqname}" - }, - "copy modify return": { - "prefix": [ - "copy", - "modify", - "return" - ], - "body": [ - "copy \\$${1:varname} := ${2:node}", - "modify ${3:updates}", - "return \\$${1:varname}" - ] - }, - "transform with": { - "prefix": [ - "transform", - "with", - "update" - ], - "body": [ - "${1:node} transform with {", - " ${2:update}", - "}" - ] - }, - "transform update": { - "prefix": [ - "transform", - "update" - ], - "body": [ - "${1:node} update {", - "${2:update}", - "}" - ] - } -} - -//snippet group -// group by $${1:varname} := ${2:expr} -//snippet order -// order by ${1:expr} ${2:descending} -//snippet stable -// stable order by ${1:expr} -//snippet count -// count $${1:varname} -//snippet ordered -// ordered { ${1:expr} } -//snippet unordered -// unordered { ${1:expr} } -//snippet treat -// treat as ${1:expr} +{ + "new library module": { + "isFileTemplate": true, + "prefix": "library module", + "body": [ + "xquery version '3.1';", + "(:~", + "@author: ", + "@date: $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE", + ":)", + "module namespace ${1:prefix} = '${2:http://www.example.com/}';", + "" + ], + "description": "New library module template" + }, + "new main module": { + "isFileTemplate": true, + "prefix": "main module", + "body": [ + "xquery version '3.1';", + "(:~", + ":)", + "${1:expr}", + "" + ], + "description": "New main module template" + }, + "flowr": { + "prefix": [ + "for", + "flowr" + ], + "body": [ + "for \\$${1:var} at \\$${2:pos} in ${3:expr}", + "let \\$${4:var2} := ${5:expr}", + "where ${6:boolean}", + "order by ${7:expr}", + "return ${8:expr2}" + ], + "description": "Full FLOWR expression" + }, + "return": { + "prefix": "return", + "body": "return ${1:expr}" + }, + "import": { + "prefix": "import", + "body": "import module namespace ${1:ns} = '${2:http://www.example.com/}';", + "description": "Import module" + }, + "if": { + "prefix": "if", + "body": [ + "if (${1:boolean})", + "then ${2:expr1}", + "else ${3:expr2}" + ], + "description": "If then else expression" + }, + "module": { + "prefix": "module", + "body": "module namespace ${1:ns} = '${2:http://www.example.com}';" + }, + "every": { + "prefix": "every", + "body": "every \\$${1:varname} in ${2:expr} satisfies ${3:expr}" + }, + "some": { + "prefix": "some", + "body": "some \\$${1:varname} in ${2:expr} satisfies ${3:expr}" + }, + "declare namespace": { + "prefix": [ + "declare", + "namespace" + ], + "body": [ + "declare ${1:prefix}='${2:namespace}';", + "" + ], + "description": "declare namespace" + }, + "declare base-uri": { + "prefix": [ + "declare", + "baseuri" + ], + "body": [ + "declare base-uri '${1:uriliteral}';", + "" + ], + "description": "declare base-uri" + }, + "declare option": { + "prefix": [ + "declare", + "option" + ], + "body": [ + "declare option ${1:eqname} '${2:string}';", + "" + ], + "description": "declare option" + }, + "declare function": { + "prefix": [ + "declare", + "function" + ], + "body": [ + "(:~ ${1:name} :)", + "declare function ${2:ns}:${1:name}()", + "as ${3:type}{", + "${3:expr}", + "};", + "" + ], + "description": "declare function" + }, + "declare variable": { + "prefix": [ + "declare", + "variable" + ], + "body": [ + "(:~ \\$${1:varname} :)", + "declare variable \\$${1:varname} := ${2:expr};", + "" + ], + "description": "declare variable" + }, + "switch": { + "prefix": "switch", + "body": [ + "switch(${1:foo})", + "case ${2:foo} return ${3:true}", + "default return ${4:false}" + ], + "description": "switch statement" + }, + "typeswitch": { + "prefix": "type", + "body": [ + "typeswitch(${1:foo})", + "case ${2:foo} return ${3:true}", + "default return ${4:false}" + ], + "description": "typeswitch statement" + }, + "try": { + "prefix": "try", + "body": [ + "try {", + " ${1:expr}", + "} catch ${2:*}", + " { ${3:expr}", + "}" + ], + "description": "try catch" + }, + "tumbling": { + "prefix": [ + "for", + "tumbling", + "window" + ], + "body": [ + "for tumbling window \\$${1:varname} in ${2:expr}", + "start at \\$${3:start} when ${4:expr}", + "end at \\$${5:end} when ${6:expr}", + "return ${7:expr}" + ], + "description": "tumbling window" + }, + "sliding": { + "prefix": [ + "for", + "sliding", + "window" + ], + "body": [ + "for sliding window \\$${1:varname} in ${2:expr}", + "start at \\$${3:start} when ${4:expr}", + "end at \\$${5:end} when ${6:expr}", + "return ${7:expr}" + ], + "description": "sliding window" + }, + "let": { + "prefix": "let", + "body": "let \\$${1:varname} := ${2:expr}" + }, + "castable": { + "body": "castable as ${1:atomicType}" + }, + "cast": { + "body": "cast as ${1:atomicType}" + }, + // Updates *************** + "update insert": { + "prefix": [ + "update", + "insert" + ], + "body": "insert node ${1:expr} into ${2:xpath}" + }, + "update delete": { + "prefix": ["delete","update"], + "body": "delete node ${1:xpath}" + }, + "update replace node": { + "prefix":["update","replace"], + "body": "replace node ${1:xpath} with ${2:expr}" + }, + "update replace value": { + "prefix": [ "update", + "replace", + "value" + ], + "body": "replace value of node ${1:xpath} with ${2:expr}" + }, + "update rename": { + "prefix": [ + "update", + "rename" + ], + "body": "rename node ${1:xpath} as ${2:eqname}" + }, + "copy modify return": { + "prefix": [ + "copy", + "modify", + "return" + ], + "body": [ + "copy \\$${1:varname} := ${2:node}", + "modify ${3:updates}", + "return \\$${1:varname}" + ] + }, + "transform with": { + "prefix": [ + "transform", + "with", + "update" + ], + "body": [ + "${1:node} transform with {", + " ${2:update}", + "}" + ] + }, + "transform update": { + "prefix": [ + "transform", + "update" + ], + "body": [ + "${1:node} update {", + "${2:update}", + "}" + ] + } +} + +//snippet group +// group by $${1:varname} := ${2:expr} +//snippet order +// order by ${1:expr} ${2:descending} +//snippet stable +// stable order by ${1:expr} +//snippet count +// count $${1:varname} +//snippet ordered +// ordered { ${1:expr} } +//snippet unordered +// unordered { ${1:expr} } +//snippet treat +// treat as ${1:expr} diff --git a/webapp/lsp/lint.xqm b/webapp/lsp/lint.xqm index 843a98e..93fe61a 100644 --- a/webapp/lsp/lint.xqm +++ b/webapp/lsp/lint.xqm @@ -1,18 +1,18 @@ -module namespace lint="lsp/lint"; -(: - Describes a problem or hint for a piece of code. - - from: number The start position of the relevant text. - to: number The end position. May be equal to from, though actually covering text is preferable. - severity: "error" | "hint" | "info" | "warning". The severity of the problem. This will influence how it is displayed. - - markClass⁠?: string When given, add an extra CSS class to parts of the code that this diagnostic applies to. - - source⁠?: string An optional source string indicating where the diagnostic is coming from. You can put the name of your linter here, if applicable. - - message: string The message associated with this diagnostic. - - renderMessage⁠?: fn(view: EditorView) → Node An optional custom rendering function that displays the message as a DOM node. - - actions⁠?: readonly Action[] An optional array of actions that can be taken on this diagnostic. +module namespace lint="lsp/lint"; +(: + Describes a problem or hint for a piece of code. + + from: number The start position of the relevant text. + to: number The end position. May be equal to from, though actually covering text is preferable. + severity: "error" | "hint" | "info" | "warning". The severity of the problem. This will influence how it is displayed. + + markClass⁠?: string When given, add an extra CSS class to parts of the code that this diagnostic applies to. + + source⁠?: string An optional source string indicating where the diagnostic is coming from. You can put the name of your linter here, if applicable. + + message: string The message associated with this diagnostic. + + renderMessage⁠?: fn(view: EditorView) → Node An optional custom rendering function that displays the message as a DOM node. + + actions⁠?: readonly Action[] An optional array of actions that can be taken on this diagnostic. :) \ No newline at end of file diff --git a/webapp/lsp/smoke.xq b/webapp/lsp/smoke.xq index d52c7f0..cec89cd 100644 --- a/webapp/lsp/smoke.xq +++ b/webapp/lsp/smoke.xq @@ -1,4 +1,4 @@ -job:eval(xs:anyURI("parse.xq"), - {"textDocument":"2+3","webSocket":ws:id()}, - { 'cache': true() } +job:eval(xs:anyURI("parse.xq"), + {"textDocument":"2+3","webSocket":ws:id()}, + { 'cache': true() } ) \ No newline at end of file diff --git a/webapp/static/clients/ace/acego.js b/webapp/static/clients/ace/acego.js index afb01c0..3e3e929 100644 --- a/webapp/static/clients/ace/acego.js +++ b/webapp/static/clients/ace/acego.js @@ -1,28 +1,28 @@ -import * as aceBuilds from 'https://esm.run/ace-builds'; - -import ace from 'https://cdn.jsdelivr.net/npm/ace/+esm' - -/* import 'ace-builds/src-noconflict/mode-javascript'; -import 'ace-builds/src-noconflict/theme-chrome'; */ - -/* import {AceLanguageClient} from "ace-linters/build/ace-language-client"; - -const serverData = { - module: () => import("ace-linters/build/language-client"), - modes: "json|json5", - type: "socket", - socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address -} - */ - // Initialize the editor - const editor = ace.edit("editor", { - theme: "ace/theme/chrome", - mode: "ace/mode/javascript", - fontSize: "14px", - showPrintMargin: false, - useWorker: false // Disable web worker for this simple demo -}); - -// Create a language provider for WebSocket -//let languageProvider = AceLanguageClient.for(serverData); +import * as aceBuilds from 'https://esm.run/ace-builds'; + +import ace from 'https://cdn.jsdelivr.net/npm/ace/+esm' + +/* import 'ace-builds/src-noconflict/mode-javascript'; +import 'ace-builds/src-noconflict/theme-chrome'; */ + +/* import {AceLanguageClient} from "ace-linters/build/ace-language-client"; + +const serverData = { + module: () => import("ace-linters/build/language-client"), + modes: "json|json5", + type: "socket", + socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address +} + */ + // Initialize the editor + const editor = ace.edit("editor", { + theme: "ace/theme/chrome", + mode: "ace/mode/javascript", + fontSize: "14px", + showPrintMargin: false, + useWorker: false // Disable web worker for this simple demo +}); + +// Create a language provider for WebSocket +//let languageProvider = AceLanguageClient.for(serverData); //languageProvider.registerEditor(editor); \ No newline at end of file diff --git a/webapp/static/clients/ace/index copy.html b/webapp/static/clients/ace/index copy.html index 6aceabc..cf21495 100644 --- a/webapp/static/clients/ace/index copy.html +++ b/webapp/static/clients/ace/index copy.html @@ -1,52 +1,52 @@ - - - - - - BaseX LSP - - - - - - - - - - -
somethingdba
-
some text
- - - - - + + + + + + BaseX LSP + + + + + + + + + + +
somethingdba
+
some text
+ + + + + \ No newline at end of file diff --git a/webapp/static/clients/ace/index.html b/webapp/static/clients/ace/index.html index 0c356e5..afd042f 100644 --- a/webapp/static/clients/ace/index.html +++ b/webapp/static/clients/ace/index.html @@ -1,29 +1,29 @@ - - - - - - - BaseX LSP Demo WIP - - - - - - - - -
something - - - dba -
-
-
sett
-
some text
-
- - - - + + + + + + + BaseX LSP Demo WIP + + + + + + + + +
something + + + dba +
+
+
sett
+
some text
+
+ + + + \ No newline at end of file diff --git a/webapp/static/clients/ace/script.js b/webapp/static/clients/ace/script.js index 54eae22..9a54a50 100644 --- a/webapp/static/clients/ace/script.js +++ b/webapp/static/clients/ace/script.js @@ -1,42 +1,42 @@ -ace.require("ace/ext/language_tools"); //To allow autocompletion -var editor = ace.edit("editor", { - enableBasicAutocompletion: true, - enableLiveAutocompletion: true, - theme: "ace/theme/chrome", - mode: "ace/mode/html", - fontSize: "14px", - showPrintMargin: false, - useWorker: false // Disable web worker for this simple demo -}); - -ace.require('ace/ext/settings_menu'); -editor.setTheme("ace/theme/github"); -//editor.session.setMode("ace/mode/html"); -editor.commands.addCommands([ - { - name: "showSettingsMenu", - bindKey: { - win: "Ctrl-q", - mac: "Ctrl-q" - }, - exec: function (editor) { - editor.showSettingsMenu(); - }, - readOnly: true - } -]); -var provider = LanguageProvider.fromCdn("https://www.unpkg.com/ace-linters@latest/build/"); -provider.registerEditor(editor); - -const serverData = { - module: () => import("https://www.unpkg.com/ace-linters@latest/build/language-client"), - modes: "json|json5", - type: "socket", - socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address -} - -function opts(editor) { - const modes=editor.session.$modes; - console.log(editor.session.$modeId); - console.log(Object.keys(modes)); +ace.require("ace/ext/language_tools"); //To allow autocompletion +var editor = ace.edit("editor", { + enableBasicAutocompletion: true, + enableLiveAutocompletion: true, + theme: "ace/theme/chrome", + mode: "ace/mode/html", + fontSize: "14px", + showPrintMargin: false, + useWorker: false // Disable web worker for this simple demo +}); + +ace.require('ace/ext/settings_menu'); +editor.setTheme("ace/theme/github"); +//editor.session.setMode("ace/mode/html"); +editor.commands.addCommands([ + { + name: "showSettingsMenu", + bindKey: { + win: "Ctrl-q", + mac: "Ctrl-q" + }, + exec: function (editor) { + editor.showSettingsMenu(); + }, + readOnly: true + } +]); +var provider = LanguageProvider.fromCdn("https://www.unpkg.com/ace-linters@latest/build/"); +provider.registerEditor(editor); + +const serverData = { + module: () => import("https://www.unpkg.com/ace-linters@latest/build/language-client"), + modes: "json|json5", + type: "socket", + socket: new WebSocket("ws://127.0.0.1:3000/ws/lsp"), // your websocket server address +} + +function opts(editor) { + const modes=editor.session.$modes; + console.log(editor.session.$modeId); + console.log(Object.keys(modes)); } \ No newline at end of file diff --git a/webapp/static/clients/ace/socket.html b/webapp/static/clients/ace/socket.html index 8d75280..881f1ed 100644 --- a/webapp/static/clients/ace/socket.html +++ b/webapp/static/clients/ace/socket.html @@ -1,33 +1,33 @@ - - - - - - - BaseX LSP - - - - -
Socket dba
- - - + + + + + + + BaseX LSP + + + + +
Socket dba
+ + + \ No newline at end of file diff --git a/webapp/static/clients/ace/styles.css b/webapp/static/clients/ace/styles.css index 52d2757..a28601c 100644 --- a/webapp/static/clients/ace/styles.css +++ b/webapp/static/clients/ace/styles.css @@ -1,7 +1,7 @@ -header { - background-color: aqua; - } - .box { - border: 2px dotted rgb(96 139 168); - display: flex; +header { + background-color: aqua; + } + .box { + border: 2px dotted rgb(96 139 168); + display: flex; } \ No newline at end of file diff --git a/webapp/static/clients/codemirror/grail.css b/webapp/static/clients/codemirror/grail.css index ee85dc8..697f367 100644 --- a/webapp/static/clients/codemirror/grail.css +++ b/webapp/static/clients/codemirror/grail.css @@ -1,122 +1,122 @@ -@import url("../codicon@0.0.40/codicon.css"); - -:root { - color-scheme: light dark; - --quiet-primary-seed: #e98d61; - --quiet-content-spacing: 0.75rem; - --quiet-form-control-height-md:0.9rem; - --quiet-focus-width: 2px; - --quiet-focus-offset: 0px; -} - - - - -form header { - background-color: burlywood; -} - -.page-wrap { - background: white; - height: 100vh ; - - - display: grid; - grid-template-columns: minmax(10px, 1fr) minmax(10px, 4fr); - grid-template-rows: min-content min-content 1fr min-content; - - - - - details { - - } - - details[open] { - flex-grow: 1; - overflow: hidden; - } - - summary { - background-color: var(--quiet-neutral-fill-softer); - } - - /* Set editor dimensions */ - #editor { - max-width: 100%; - overflow: hidden; - height: 75cqh; - } - - /* Stretch editor to fit inside its containing div */ - .cm-editor { - height: 100%; - width: 100%; - overflow: auto; - } - - details[open]::details-content { - padding: 0.1em; - border: thin solid grey; - overflow: auto; - } - - ::backdrop { - backdrop-filter: blur(2px); - } - - @media (max-width: 600px) { - grid-template-columns: 100%; - grid-template-rows: auto; - - >* { - grid-column: 1 / -1 !important; - grid-row: auto !important; - } - } -} - -#tConnect:state(unchecked) { - outline: dashed 4px deeppink; - outline-offset: 4px; -} - -.page-header { - grid-column: 1 / -1; - display: flex; - justify-content: space-between; - background: #ffecb3; -} - -.page-sidebar { - grid-column: 1 / 2; - grid-row: 2 / 4; - display: flex; - flex-direction: column; - - details { - display: flex; - flex-direction: column; - - } -} - -.page-nav { - grid-column: 2 / 3; - background: red; - -} - -.page-main { - grid-column: 2 / 3; - display: flex; - flex-direction: column; -} - -.page-footer { - grid-column: 1 / -1; - background: #ffecb3; - display: flex; - justify-content: space-between; - padding:2px; +@import url("../codicon@0.0.40/codicon.css"); + +:root { + color-scheme: light dark; + --quiet-primary-seed: #e98d61; + --quiet-content-spacing: 0.75rem; + --quiet-form-control-height-md:0.9rem; + --quiet-focus-width: 2px; + --quiet-focus-offset: 0px; +} + + + + +form header { + background-color: burlywood; +} + +.page-wrap { + background: white; + height: 100vh ; + + + display: grid; + grid-template-columns: minmax(10px, 1fr) minmax(10px, 4fr); + grid-template-rows: min-content min-content 1fr min-content; + + + + + details { + + } + + details[open] { + flex-grow: 1; + overflow: hidden; + } + + summary { + background-color: var(--quiet-neutral-fill-softer); + } + + /* Set editor dimensions */ + #editor { + max-width: 100%; + overflow: hidden; + height: 75cqh; + } + + /* Stretch editor to fit inside its containing div */ + .cm-editor { + height: 100%; + width: 100%; + overflow: auto; + } + + details[open]::details-content { + padding: 0.1em; + border: thin solid grey; + overflow: auto; + } + + ::backdrop { + backdrop-filter: blur(2px); + } + + @media (max-width: 600px) { + grid-template-columns: 100%; + grid-template-rows: auto; + + >* { + grid-column: 1 / -1 !important; + grid-row: auto !important; + } + } +} + +#tConnect:state(unchecked) { + outline: dashed 4px deeppink; + outline-offset: 4px; +} + +.page-header { + grid-column: 1 / -1; + display: flex; + justify-content: space-between; + background: #ffecb3; +} + +.page-sidebar { + grid-column: 1 / 2; + grid-row: 2 / 4; + display: flex; + flex-direction: column; + + details { + display: flex; + flex-direction: column; + + } +} + +.page-nav { + grid-column: 2 / 3; + background: red; + +} + +.page-main { + grid-column: 2 / 3; + display: flex; + flex-direction: column; +} + +.page-footer { + grid-column: 1 / -1; + background: #ffecb3; + display: flex; + justify-content: space-between; + padding:2px; } \ No newline at end of file diff --git a/webapp/static/clients/codemirror/grail.html b/webapp/static/clients/codemirror/grail.html index 75b1aa1..e4eae68 100644 --- a/webapp/static/clients/codemirror/grail.html +++ b/webapp/static/clients/codemirror/grail.html @@ -1,307 +1,307 @@ - - - - - - - Codemirror6 example using BaseX LSP - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
- -
- - - - - -
-
- - -
-
- - - - -
-
Load a document from the web
- - - -
- -
- - - - - - - - - Fetch -
- -
- - - - - - - -
-
Connect to LSP - -
- - -
-
- - -
-
Commands and keys - -
- - -
-
- -
-
Help
- - -
-
- - - -
-
Editor configuration - -
- - -
-
- - - - - - - + + + + + + + Codemirror6 example using BaseX LSP + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ +
+ + + + + +
+
+ + +
+
+ + + + +
+
Load a document from the web
+ + + +
+ +
+ + + + + + + + + Fetch +
+ +
+ + + + + + + +
+
Connect to LSP + +
+ + +
+
+ + +
+
Commands and keys + +
+ + +
+
+ +
+
Help
+ + +
+
+ + + +
+
Editor configuration + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/webapp/static/clients/codemirror/icons.js b/webapp/static/clients/codemirror/icons.js index 06a958f..26b1d8c 100644 --- a/webapp/static/clients/codemirror/icons.js +++ b/webapp/static/clients/codemirror/icons.js @@ -1,6 +1,6 @@ -import { registerIconLibrary } from '/static/clients/quietui@1.6.2/dist/quiet.loader.js'; - - registerIconLibrary('codicon', { - resolve: (name, family) => { - return `/static/clients/codicon@0.0.40/icons/${name}.svg` +import { registerIconLibrary } from '/static/clients/quietui@1.6.2/dist/quiet.loader.js'; + + registerIconLibrary('codicon', { + resolve: (name, family) => { + return `/static/clients/codicon@0.0.40/icons/${name}.svg` }}); \ No newline at end of file diff --git a/webapp/static/clients/codemirror/index.html b/webapp/static/clients/codemirror/index.html index 384c687..39a63c9 100644 --- a/webapp/static/clients/codemirror/index.html +++ b/webapp/static/clients/codemirror/index.html @@ -1,196 +1,196 @@ - - - - - - - Codemirror6 example using BaseX LSP - - - - - - - -
- - - -
- -
-
- - - -
- Footer - -
-
- - -
Connect to LSP - -
- - -
- - - - -
-
Editor configuration - -
- - -
-
- - - - - - - + + + + + + + Codemirror6 example using BaseX LSP + + + + + + + +
+ + + +
+ +
+
+ + + +
+ Footer + +
+
+ + +
Connect to LSP + +
+ + +
+ + + + +
+
Editor configuration + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/webapp/static/clients/codemirror/lsp.bundle.js b/webapp/static/clients/codemirror/lsp.bundle.js index 1fc998b..ce9f80f 100644 --- a/webapp/static/clients/codemirror/lsp.bundle.js +++ b/webapp/static/clients/codemirror/lsp.bundle.js @@ -31344,103 +31344,103 @@ ${text} }, }); - let create = (v) => { - const dom = document.createElement('div'); - return { dom } - }; - const compartment = new Compartment(); - let curOpts = { - lineWrap: true, - minimap: true, - highlightWhitespace: true - }; - // array of extensions reflecting opts - function optExts(opts) { - let exts = []; - if (opts.lineWrap) exts.push(EditorView.lineWrapping); - if (opts.highlightWhitespace) exts.push(highlightWhitespace()); - if (opts.minimap) exts.push( - showMinimap.compute(['doc'], (state) => { - return { - create, - /* optional showOverlay: 'mouse-over' */ - displayText: 'characters' - - } - })); - return exts - } - - function updateCompartment(opts) { - view.dispatch({ - effects: [compartment.reconfigure(optExts(opts))] - }); - } - - // return promise with socket map or reject if no connect - function simpleWebSocketTransport(uri) { - let handlers = []; - return new Promise(function (resolve, reject) { - let sock = new WebSocket(uri); - - sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; - sock.onerror = e => reject(e); - sock.onopen = () => resolve({ - socket: sock, - send: (message) => sock.send(message), - subscribe: (handler) => handlers.push(handler), - unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) - }); - } - ); - } - const baseExts = [ - lineNumbers(), - highlightActiveLineGutter(), - history(), - foldGutter(), - lintGutter(), - drawSelection(), - dropCursor(), - EditorState.allowMultipleSelections.of(true), - tooltips({ }), // clipped - keymap.of([indentWithTab]), - indentOnInput(), - syntaxHighlighting(defaultHighlightStyle, { fallback: true }), - bracketMatching(), - closeBrackets(), - autocompletion(), - rectangularSelection(), - crosshairCursor(), - highlightActiveLine(), - highlightSelectionMatches(), - keymap.of([ - ...closeBracketsKeymap, - ...defaultKeymap, - ...searchKeymap, - ...historyKeymap, - ...foldKeymap, - ...completionKeymap, - ...lintKeymap - ]), - StreamLanguage.define(xQuery), - compartment.of(optExts(curOpts)) - ]; - - - - // map cmd->{keybings,fn} - function listCommands(view) { - const commands = new Map(); - const keymaps = view.state.facet(keymap); - for (let km of keymaps) { - for (let binding of km) { - if (binding.run && binding.run.name) { - commands.set(binding.run.name, { key: binding.key, fn: binding.run }); - } - } - } - return commands; + let create = (v) => { + const dom = document.createElement('div'); + return { dom } + }; + const compartment = new Compartment(); + let curOpts = { + lineWrap: true, + minimap: true, + highlightWhitespace: true + }; + // array of extensions reflecting opts + function optExts(opts) { + let exts = []; + if (opts.lineWrap) exts.push(EditorView.lineWrapping); + if (opts.highlightWhitespace) exts.push(highlightWhitespace()); + if (opts.minimap) exts.push( + showMinimap.compute(['doc'], (state) => { + return { + create, + /* optional showOverlay: 'mouse-over' */ + displayText: 'characters' + + } + })); + return exts + } + + function updateCompartment(opts) { + view.dispatch({ + effects: [compartment.reconfigure(optExts(opts))] + }); + } + + // return promise with socket map or reject if no connect + function simpleWebSocketTransport(uri) { + let handlers = []; + return new Promise(function (resolve, reject) { + let sock = new WebSocket(uri); + + sock.onmessage = e => { for (let h of handlers) h(e.data.toString()); }; + sock.onerror = e => reject(e); + sock.onopen = () => resolve({ + socket: sock, + send: (message) => sock.send(message), + subscribe: (handler) => handlers.push(handler), + unsubscribe: (handler) => handlers = handlers.filter(h => h != handler) + }); + } + ); + } + const baseExts = [ + lineNumbers(), + highlightActiveLineGutter(), + history(), + foldGutter(), + lintGutter(), + drawSelection(), + dropCursor(), + EditorState.allowMultipleSelections.of(true), + tooltips({ }), // clipped + keymap.of([indentWithTab]), + indentOnInput(), + syntaxHighlighting(defaultHighlightStyle, { fallback: true }), + bracketMatching(), + closeBrackets(), + autocompletion(), + rectangularSelection(), + crosshairCursor(), + highlightActiveLine(), + highlightSelectionMatches(), + keymap.of([ + ...closeBracketsKeymap, + ...defaultKeymap, + ...searchKeymap, + ...historyKeymap, + ...foldKeymap, + ...completionKeymap, + ...lintKeymap + ]), + StreamLanguage.define(xQuery), + compartment.of(optExts(curOpts)) + ]; + + + + // map cmd->{keybings,fn} + function listCommands(view) { + const commands = new Map(); + const keymaps = view.state.facet(keymap); + for (let km of keymaps) { + for (let binding of km) { + if (binding.run && binding.run.name) { + commands.set(binding.run.name, { key: binding.key, fn: binding.run }); + } + } + } + return commands; } exports.EditorState = EditorState; diff --git a/webapp/static/clients/codemirror/script.js b/webapp/static/clients/codemirror/script.js index 3e283f6..1299d40 100644 --- a/webapp/static/clients/codemirror/script.js +++ b/webapp/static/clients/codemirror/script.js @@ -1,246 +1,246 @@ - -const view = new lsp.EditorView({ - extensions: lsp.baseExts, - parent: document.getElementById("editor") -}); -let doc = "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n"; -var client; // https://codemirror.net/docs/ref/#lsp-client - -var workspace = { - "file:///some/file.xqm": null -}; - -function $(id) { return document.getElementById(id) }; - -// Load saved content from localStorage when the page loads -window.addEventListener('load', () => { - - const savedText = localStorage.getItem('code'); - if (savedText) doc = savedText; - let svr = localStorage.getItem('lsp'); - if (!svr) { - let x = new URL(window.location.href); - x.protocol = "ws"; - x.pathname = "ws/lsp" - svr = x.href; - } - $("iServer").value = svr; - formFromStore('fSettings'); - view.setState(lsp.EditorState.create({ doc: doc, extensions: lsp.baseExts })); - lsp.updateCompartment(objectFromForm('fSettings')) - connect(); -}); - -// Save content to localStorage when the page is about to unload -window.addEventListener('beforeunload', () => { - const doc = view.state.doc.toString(); - localStorage.setItem('code', doc); - localStorage.setItem('lsp', $("iServer").value); -}); - -$("connect").onclick = e => { e.preventDefault(); connect() }; - -$("symTrigger").onclick = e => { e.preventDefault(); }; -$("symOptions").onclick = e => { e.preventDefault(); }; -$("bnNew").onclick = e => { - let name = prompt("New file name?", "untitled.xq"); - if (name === null) return; - docSwitch("", name); -}; - -$("search").onclick = e => lsp.openSearchPanel(view); - -$("fullscreen").onclick = e => $("editor").requestFullscreen(); - -$("bnWordAt").onclick = e => { - let pos = view.state.selection.main.head; - let w = view.state.wordAt(pos); - alert("wordAt " + JSON.stringify(w)); -}; - -$("symbols2").onclick = e => { - client.sync(); - client.request("textDocument/documentSymbol", { "textDocument": { "uri": $("iFile").value } }) - .then(r => { - console.log("symbols", r) - $("symPanel").open = true; - $("symList").setData(r); - }); -}; - -$("cmdList").onclick = e => { - let cmds = lsp.listCommands(view); - let result = ""; - [...cmds.keys()].sort().forEach(key => { - result += `
  • ${key} ${cmds.get(key).key}
  • ` - }); - $("popHelpInfo").innerHTML = `
      ${result}
    ` - $("popCmds").showPopover() -}; - -$("symList").addEventListener("itemSelected", e => { - const plugin = lsp.LSPPlugin.get(view) - if (!plugin) return; - const sel = e.detail.range // or selectionRange; - console.log("SYM selection range", sel); - const an = plugin.fromPosition(sel.start) - const hd = plugin.fromPosition(sel.end) - view.dispatch({ selection: { anchor: an, head: hd }, scrollIntoView: true }); -}); - -$("lint").onclick = async e => { - console.log("word", view.state.wordAt(1)); - lsp.openLintPanel(view); -}; - -$("sync").onclick = e => { client.sync(); console.log("XXXsync"); }; -// state a state -$("bnSave").onclick = e => { workspace[iFile] = view.state; }; -$("bnLoad").onclick = e => { const v = workspace[iFile]; if (v) view.setState(v) }; - - -// select local file -$("bnRead").onclick = e => { $("fileElem").click(); }; -$("fileElem").onchange = e => { - let file = e.target.files[0] - let fr = new FileReader(); - fr.onload = () => docSwitch(fr.result, file.name); - fr.readAsText(file); -}; - -$("format").onclick = e => { console.log("FMT", lsp.formatDocument(view)); }; - -$("popUrl").onsubmit = e => { - e.preventDefault(); - const f = objectFromForm("popUrl"); - fetch(f.url) - .then(response => response.text()) - .then(t => { - docSwitch(t, f.url) - $("popWeb").open = false; - }) - .catch(error => { - alert("CORS?: " + error) - }); -}; -$("bnDebug").onclick = e => { debugger; }; - - -$("tConnect").addEventListener('quiet-change', e => { - e.preventDefault(); - $("popConnect").showPopover() -}); -$("msgIcon").onclick = e => { - e.preventDefault(); - alert("NOT YET") -}; - - -function updateSettings(event) { - event.preventDefault(); - - console.log("COPTS", lsp.curOpts); - const opts = { - lineWrap: $("lineWrap").checked, - highlightWhitespace: $("highlightWhitespace").checked, - minimap: $("minimap").checked - } - console.log(opts) - lsp.updateCompartment(opts); - $('popSettings').hidePopover(); - formToStore("fSettings"); -}; - -$("fSettings").addEventListener("submit", updateSettings); - -function connect() { - const server = $("iServer").value; - const file = $("iFile").value; - lsp.simpleWebSocketTransport(server) - .then(transport => { - transport.socket.onclose = (event) => $("tConnect").checked = false; - transport.socket.oneror = (event) => $("msg").innerText = "sock error!"; - transport.subscribe(incoming); - client = new lsp.LSPClient({ extensions: lsp.languageServerExtensions() }); - client.connect(transport); - $("popConnect").hidePopover(); - $("tConnect").checked = true; - $("tipConnect").innerText=server; - const extLsp = client.plugin(file, "xquery"); - - view.dispatch({ - effects: lsp.StateEffect.appendConfig.of( - [lsp.linter(null, { autoPanel: true }), ...extLsp, - lsp.keymap.of([...lsp.formatKeymap])]) - }) - }) - .catch(e => { - console.log(e); - $("tConnect").checked = false; - alert("connection failed: " + server) - }); - -}; - -// change active doc -function docSwitch(text,urlNew) { - const urlOld=$("iFile").value; - client.workspace.closeFile(urlOld); - view.dispatch({ - changes: { - from: 0, - to: view.state.doc.length, - insert: text - } - }) - client.workspace.openFile(urlNew,"xquery",view) - $("iFile").value = urlNew; -}; - - -function incoming(msg) { - const rpc = JSON.parse(msg); - log(rpc); -}; - - -function log(rpc) { - console.log("<-", rpc) - const when = (new Date()).toISOString(); - const msg = { name: rpc.method ?? rpc.id, detail: when.substring(1 + when.indexOf("T")), kind: 23 /* event */ }; - //name,details,kind - $("msgList").setData([msg], true) - $("relative-time__live").date=new Date(); -}; - -function formFromStore(name) { - let v = localStorage.getItem(name) - if (!!v) formDeserialize($(name), v); -}; - -function formToStore(name) { - localStorage.setItem(name, formSerialize($(name))); -}; - -function objectFromForm(name) { - const data = new FormData($(name)); - //https://stackabuse.com/convert-form-data-to-javascript-object/ - return Object.fromEntries(data.entries()); -} -function formSerialize(form) { - const data = new FormData(form); - //https://stackoverflow.com/a/44033425/1869660 - return new URLSearchParams(data).toString(); -} - -function formDeserialize(form, data) { - const entries = (new URLSearchParams(data)).entries(); - for (const [key, val] of entries) { - //http://javascript-coder.com/javascript-form/javascript-form-value.phtml - const input = form.elements[key]; - switch (input.type) { - case 'checkbox': input.checked = !!val; break; - default: input.value = val; break; - } - } + +const view = new lsp.EditorView({ + extensions: lsp.baseExts, + parent: document.getElementById("editor") +}); +let doc = "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n"; +var client; // https://codemirror.net/docs/ref/#lsp-client + +var workspace = { + "file:///some/file.xqm": null +}; + +function $(id) { return document.getElementById(id) }; + +// Load saved content from localStorage when the page loads +window.addEventListener('load', () => { + + const savedText = localStorage.getItem('code'); + if (savedText) doc = savedText; + let svr = localStorage.getItem('lsp'); + if (!svr) { + let x = new URL(window.location.href); + x.protocol = "ws"; + x.pathname = "ws/lsp" + svr = x.href; + } + $("iServer").value = svr; + formFromStore('fSettings'); + view.setState(lsp.EditorState.create({ doc: doc, extensions: lsp.baseExts })); + lsp.updateCompartment(objectFromForm('fSettings')) + connect(); +}); + +// Save content to localStorage when the page is about to unload +window.addEventListener('beforeunload', () => { + const doc = view.state.doc.toString(); + localStorage.setItem('code', doc); + localStorage.setItem('lsp', $("iServer").value); +}); + +$("connect").onclick = e => { e.preventDefault(); connect() }; + +$("symTrigger").onclick = e => { e.preventDefault(); }; +$("symOptions").onclick = e => { e.preventDefault(); }; +$("bnNew").onclick = e => { + let name = prompt("New file name?", "untitled.xq"); + if (name === null) return; + docSwitch("", name); +}; + +$("search").onclick = e => lsp.openSearchPanel(view); + +$("fullscreen").onclick = e => $("editor").requestFullscreen(); + +$("bnWordAt").onclick = e => { + let pos = view.state.selection.main.head; + let w = view.state.wordAt(pos); + alert("wordAt " + JSON.stringify(w)); +}; + +$("symbols2").onclick = e => { + client.sync(); + client.request("textDocument/documentSymbol", { "textDocument": { "uri": $("iFile").value } }) + .then(r => { + console.log("symbols", r) + $("symPanel").open = true; + $("symList").setData(r); + }); +}; + +$("cmdList").onclick = e => { + let cmds = lsp.listCommands(view); + let result = ""; + [...cmds.keys()].sort().forEach(key => { + result += `
  • ${key} ${cmds.get(key).key}
  • ` + }); + $("popHelpInfo").innerHTML = `
      ${result}
    ` + $("popCmds").showPopover() +}; + +$("symList").addEventListener("itemSelected", e => { + const plugin = lsp.LSPPlugin.get(view) + if (!plugin) return; + const sel = e.detail.range // or selectionRange; + console.log("SYM selection range", sel); + const an = plugin.fromPosition(sel.start) + const hd = plugin.fromPosition(sel.end) + view.dispatch({ selection: { anchor: an, head: hd }, scrollIntoView: true }); +}); + +$("lint").onclick = async e => { + console.log("word", view.state.wordAt(1)); + lsp.openLintPanel(view); +}; + +$("sync").onclick = e => { client.sync(); console.log("XXXsync"); }; +// state a state +$("bnSave").onclick = e => { workspace[iFile] = view.state; }; +$("bnLoad").onclick = e => { const v = workspace[iFile]; if (v) view.setState(v) }; + + +// select local file +$("bnRead").onclick = e => { $("fileElem").click(); }; +$("fileElem").onchange = e => { + let file = e.target.files[0] + let fr = new FileReader(); + fr.onload = () => docSwitch(fr.result, file.name); + fr.readAsText(file); +}; + +$("format").onclick = e => { console.log("FMT", lsp.formatDocument(view)); }; + +$("popUrl").onsubmit = e => { + e.preventDefault(); + const f = objectFromForm("popUrl"); + fetch(f.url) + .then(response => response.text()) + .then(t => { + docSwitch(t, f.url) + $("popWeb").open = false; + }) + .catch(error => { + alert("CORS?: " + error) + }); +}; +$("bnDebug").onclick = e => { debugger; }; + + +$("tConnect").addEventListener('quiet-change', e => { + e.preventDefault(); + $("popConnect").showPopover() +}); +$("msgIcon").onclick = e => { + e.preventDefault(); + alert("NOT YET") +}; + + +function updateSettings(event) { + event.preventDefault(); + + console.log("COPTS", lsp.curOpts); + const opts = { + lineWrap: $("lineWrap").checked, + highlightWhitespace: $("highlightWhitespace").checked, + minimap: $("minimap").checked + } + console.log(opts) + lsp.updateCompartment(opts); + $('popSettings').hidePopover(); + formToStore("fSettings"); +}; + +$("fSettings").addEventListener("submit", updateSettings); + +function connect() { + const server = $("iServer").value; + const file = $("iFile").value; + lsp.simpleWebSocketTransport(server) + .then(transport => { + transport.socket.onclose = (event) => $("tConnect").checked = false; + transport.socket.oneror = (event) => $("msg").innerText = "sock error!"; + transport.subscribe(incoming); + client = new lsp.LSPClient({ extensions: lsp.languageServerExtensions() }); + client.connect(transport); + $("popConnect").hidePopover(); + $("tConnect").checked = true; + $("tipConnect").innerText=server; + const extLsp = client.plugin(file, "xquery"); + + view.dispatch({ + effects: lsp.StateEffect.appendConfig.of( + [lsp.linter(null, { autoPanel: true }), ...extLsp, + lsp.keymap.of([...lsp.formatKeymap])]) + }) + }) + .catch(e => { + console.log(e); + $("tConnect").checked = false; + alert("connection failed: " + server) + }); + +}; + +// change active doc +function docSwitch(text,urlNew) { + const urlOld=$("iFile").value; + client.workspace.closeFile(urlOld); + view.dispatch({ + changes: { + from: 0, + to: view.state.doc.length, + insert: text + } + }) + client.workspace.openFile(urlNew,"xquery",view) + $("iFile").value = urlNew; +}; + + +function incoming(msg) { + const rpc = JSON.parse(msg); + log(rpc); +}; + + +function log(rpc) { + console.log("<-", rpc) + const when = (new Date()).toISOString(); + const msg = { name: rpc.method ?? rpc.id, detail: when.substring(1 + when.indexOf("T")), kind: 23 /* event */ }; + //name,details,kind + $("msgList").setData([msg], true) + $("relative-time__live").date=new Date(); +}; + +function formFromStore(name) { + let v = localStorage.getItem(name) + if (!!v) formDeserialize($(name), v); +}; + +function formToStore(name) { + localStorage.setItem(name, formSerialize($(name))); +}; + +function objectFromForm(name) { + const data = new FormData($(name)); + //https://stackabuse.com/convert-form-data-to-javascript-object/ + return Object.fromEntries(data.entries()); +} +function formSerialize(form) { + const data = new FormData(form); + //https://stackoverflow.com/a/44033425/1869660 + return new URLSearchParams(data).toString(); +} + +function formDeserialize(form, data) { + const entries = (new URLSearchParams(data)).entries(); + for (const [key, val] of entries) { + //http://javascript-coder.com/javascript-form/javascript-form-value.phtml + const input = form.elements[key]; + switch (input.type) { + case 'checkbox': input.checked = !!val; break; + default: input.value = val; break; + } + } } \ No newline at end of file diff --git a/webapp/static/clients/codemirror/styles.css b/webapp/static/clients/codemirror/styles.css index c2afd83..3104643 100644 --- a/webapp/static/clients/codemirror/styles.css +++ b/webapp/static/clients/codemirror/styles.css @@ -1,35 +1,35 @@ - -@import url("../bootstrap-icons.min.css"); -html { height: 100%;} -body { min-height: 100vh; } - - /* Set editor dimensions */ - #editor { - height: 400px; - max-width: 100%; - overflow: hidden; - background-color: burlywood; -} - -/* Stretch editor to fit inside its containing div */ -.cm-editor { - height: 100%; - width: 100%; - overflow: auto; - - -} - /* header */ - nav { - background-color: burlywood!; -} -.nav-pills > li > a -{ - /* adjust padding for height*/ - padding-top: 4px; - padding-bottom: 4px; -} -dialog > header -{ - background-color: burlywood; + +@import url("../bootstrap-icons.min.css"); +html { height: 100%;} +body { min-height: 100vh; } + + /* Set editor dimensions */ + #editor { + height: 400px; + max-width: 100%; + overflow: hidden; + background-color: burlywood; +} + +/* Stretch editor to fit inside its containing div */ +.cm-editor { + height: 100%; + width: 100%; + overflow: auto; + + +} + /* header */ + nav { + background-color: burlywood!; +} +.nav-pills > li > a +{ + /* adjust padding for height*/ + padding-top: 4px; + padding-bottom: 4px; +} +dialog > header +{ + background-color: burlywood; } \ No newline at end of file diff --git a/webapp/static/clients/codemirror/wc-qd-list.js b/webapp/static/clients/codemirror/wc-qd-list.js index 69e34b8..d69288d 100644 --- a/webapp/static/clients/codemirror/wc-qd-list.js +++ b/webapp/static/clients/codemirror/wc-qd-list.js @@ -1,204 +1,204 @@ -/* Define a web component providing a settable and selectable list - $("symList").setData(r, append = false); - where r is array of objects with properties name,detail,kind - -https://stackoverflow.com/questions/50404970/web-components-pass-data-to-and-from -https://www.w3schools.com/howto/howto_js_treeview.asp -*/ -class ListComponent extends HTMLElement { - #shadow; - #data; - #iconKinds; //array from kind integer to codicon name - constructor() { - super(); - this.#shadow = this.attachShadow({ mode: "open", delegatesFocus: true }); - this.#data = []; - // codicons kind - this.#iconKinds = [ - 'symbol-file', - 'symbol-class', - 'symbol-namespace', - 'symbol-structure', - 'symbol-class', - 'symbol-method', - 'symbol-property', - 'symbol-field', - 'symbol-method-arrow', - 'symbol-enum', - 'symbol-interface', - 'symbol-method', - 'symbol-variable', - 'symbol-constant', - 'symbol-string', - 'symbol-numeric', - 'symbol-boolean', - 'symbol-array', - 'symbol-structure', - 'symbol-key', - 'dash', - 'symbol-enum-member', - 'symbol-misc', - 'symbol-event', - 'symbol-operator', - 'symbol-parameter' - ]; - this.render(); - } - - setData(newData, append = false) { - if (!Array.isArray(newData)) { - console.warn("Invalid format, expected an array."); - return; - } - - this.#data = append ? this.#data.concat(newData) : structuredClone(newData); - this.render(); - } - - set data(value) { - this.setData(value, false); - } - get data() { - return this.#data; - } - - /* Render the list items #data */ - render() { - // eventhandler for click and keyboard, updates usage of selected class and raises event - const select = e => { - if(e.type ==="keyup" && !(e.key==="Enter" )) return; - this.#shadow.querySelectorAll('li.selected').forEach(item => { item.className = ''; }); - e.currentTarget.className = 'selected'; - const i=e.currentTarget.getAttribute("data-index") - console.log('Item index clicked:', i,this.#data[i]); - // You can dispatch a custom event here if needed. - this.dispatchEvent(new CustomEvent('itemSelected', { - detail: this.#data[i], - bubbles: true, - composed: true - })); - }; - // create list and items - const list = document.createElement('ul'); - list.style = "overflow: auto;"; - this.#data.forEach((item, index) => { - const listItem = document.createElement('li'); - const icon=this.#iconKinds[item.kind]; - listItem.setAttribute("tabindex", "0") - listItem.setAttribute("data-index", index) - listItem.innerHTML = ` - ${item.name} - ${item.detail}`; - - listItem.addEventListener('click', select); - listItem.addEventListener('keyup', select); - list.appendChild(listItem); - }); - - this.#shadow.innerHTML = ''; - const style = document.createElement('style'); - style.textContent = ` - @import url("../codicon@0.0.40/codicon.css"); - ul { list-style-type: none; padding:0;margin:0;overflow: auto; - background-color: #f8f9fa;font-size: 80%;} - li { padding: 0 0 0 2px; cursor: pointer; width:100%; } - li:not(.selected) :hover { background-color: #ccc; } - .selected { background-color: #0d6efd;color: #ffff;} - i {vertical-align: middle;} - `; - this.#shadow.appendChild(style); - this.#shadow.appendChild(list); - } - - /* Render an error message if JSON fetching fails */ - renderError(error) { - this.#shadow.innerHTML = `

    Error loading data: ${error.message}

    `; - } -} - -/* Define the new custom element */ -customElements.define('qd-list', ListComponent); - -class PanelComponent extends HTMLElement { - #shadow; - #data; - #iconKinds; //array from kind integer to codicon name - constructor() { - super(); - this.#shadow = this.attachShadow({ mode: "open", delegatesFocus: true }); - this.#data = []; - this.#iconKinds = []; - this.render(); - } - - setData(newData, append = false) { - if (!Array.isArray(newData)) { - console.warn("Invalid format, expected an array."); - return; - } - this.#data = append ? this.#data.concat(newData) : structuredClone(newData); - this.render(); - } - - set data(value) { - this.setData(value, false); - } - get data() { - return this.#data; - } - - /* Render the list items #data */ - render() { - const list = document.createElement('ul'); - list.style = "overflow: auto;"; - - const select = e => { - if(e.type ==="keyup" && !(e.key==="Enter" )) return; - this.#shadow.querySelectorAll('li.selected').forEach(item => { item.className = ''; }); - e.currentTarget.className = 'selected'; - const i=e.currentTarget.getAttribute("data-index") - console.log('Item index clicked:', i,this.#data[i]); - // You can dispatch a custom event here if needed. - this.dispatchEvent(new CustomEvent('itemSelected', { - detail: this.#data[i], - bubbles: true, - composed: true - })); - }; - this.#data.forEach((item, index) => { - const listItem = document.createElement('li'); - const icon=this.#iconKinds[item.kind]; - listItem.setAttribute("tabindex", "0") - listItem.setAttribute("data-index", index) - listItem.innerHTML = `XX* - ${item.name} - ${item.detail}`; - - listItem.addEventListener('click', select); - listItem.addEventListener('keyup', select); - list.appendChild(listItem); - }); - - this.#shadow.innerHTML = ''; - const style = document.createElement('style'); - style.textContent = ` - @import url("../codicon@0.0.40/codicon.css"); - ul { list-style-type: none; padding:0;margin:0; - background-color: #e3e4e4ff;font-size: 80%; scrollbar-color: #000077 #bada55;} - li { padding: 0 0 0 2px; border-bottom: 1px solid #ccc; cursor: pointer; width:100%; } - li:not(.selected) :hover { background-color: #ccc; } - .selected { background-color: #0d6efd;color: #ffff;} - i {vertical-align: middle;} - `; - this.#shadow.appendChild(style); - this.#shadow.appendChild(list); - } - - /* Render an error message if JSON fetching fails */ - renderError(error) { - this.#shadow.innerHTML = `

    Error loading data: ${error.message}

    `; - } -} - -/* Define the new custom element */ -customElements.define('qd-panel', PanelComponent); - +/* Define a web component providing a settable and selectable list + $("symList").setData(r, append = false); + where r is array of objects with properties name,detail,kind + +https://stackoverflow.com/questions/50404970/web-components-pass-data-to-and-from +https://www.w3schools.com/howto/howto_js_treeview.asp +*/ +class ListComponent extends HTMLElement { + #shadow; + #data; + #iconKinds; //array from kind integer to codicon name + constructor() { + super(); + this.#shadow = this.attachShadow({ mode: "open", delegatesFocus: true }); + this.#data = []; + // codicons kind + this.#iconKinds = [ + 'symbol-file', + 'symbol-class', + 'symbol-namespace', + 'symbol-structure', + 'symbol-class', + 'symbol-method', + 'symbol-property', + 'symbol-field', + 'symbol-method-arrow', + 'symbol-enum', + 'symbol-interface', + 'symbol-method', + 'symbol-variable', + 'symbol-constant', + 'symbol-string', + 'symbol-numeric', + 'symbol-boolean', + 'symbol-array', + 'symbol-structure', + 'symbol-key', + 'dash', + 'symbol-enum-member', + 'symbol-misc', + 'symbol-event', + 'symbol-operator', + 'symbol-parameter' + ]; + this.render(); + } + + setData(newData, append = false) { + if (!Array.isArray(newData)) { + console.warn("Invalid format, expected an array."); + return; + } + + this.#data = append ? this.#data.concat(newData) : structuredClone(newData); + this.render(); + } + + set data(value) { + this.setData(value, false); + } + get data() { + return this.#data; + } + + /* Render the list items #data */ + render() { + // eventhandler for click and keyboard, updates usage of selected class and raises event + const select = e => { + if(e.type ==="keyup" && !(e.key==="Enter" )) return; + this.#shadow.querySelectorAll('li.selected').forEach(item => { item.className = ''; }); + e.currentTarget.className = 'selected'; + const i=e.currentTarget.getAttribute("data-index") + console.log('Item index clicked:', i,this.#data[i]); + // You can dispatch a custom event here if needed. + this.dispatchEvent(new CustomEvent('itemSelected', { + detail: this.#data[i], + bubbles: true, + composed: true + })); + }; + // create list and items + const list = document.createElement('ul'); + list.style = "overflow: auto;"; + this.#data.forEach((item, index) => { + const listItem = document.createElement('li'); + const icon=this.#iconKinds[item.kind]; + listItem.setAttribute("tabindex", "0") + listItem.setAttribute("data-index", index) + listItem.innerHTML = ` + ${item.name} - ${item.detail}`; + + listItem.addEventListener('click', select); + listItem.addEventListener('keyup', select); + list.appendChild(listItem); + }); + + this.#shadow.innerHTML = ''; + const style = document.createElement('style'); + style.textContent = ` + @import url("../codicon@0.0.40/codicon.css"); + ul { list-style-type: none; padding:0;margin:0;overflow: auto; + background-color: #f8f9fa;font-size: 80%;} + li { padding: 0 0 0 2px; cursor: pointer; width:100%; } + li:not(.selected) :hover { background-color: #ccc; } + .selected { background-color: #0d6efd;color: #ffff;} + i {vertical-align: middle;} + `; + this.#shadow.appendChild(style); + this.#shadow.appendChild(list); + } + + /* Render an error message if JSON fetching fails */ + renderError(error) { + this.#shadow.innerHTML = `

    Error loading data: ${error.message}

    `; + } +} + +/* Define the new custom element */ +customElements.define('qd-list', ListComponent); + +class PanelComponent extends HTMLElement { + #shadow; + #data; + #iconKinds; //array from kind integer to codicon name + constructor() { + super(); + this.#shadow = this.attachShadow({ mode: "open", delegatesFocus: true }); + this.#data = []; + this.#iconKinds = []; + this.render(); + } + + setData(newData, append = false) { + if (!Array.isArray(newData)) { + console.warn("Invalid format, expected an array."); + return; + } + this.#data = append ? this.#data.concat(newData) : structuredClone(newData); + this.render(); + } + + set data(value) { + this.setData(value, false); + } + get data() { + return this.#data; + } + + /* Render the list items #data */ + render() { + const list = document.createElement('ul'); + list.style = "overflow: auto;"; + + const select = e => { + if(e.type ==="keyup" && !(e.key==="Enter" )) return; + this.#shadow.querySelectorAll('li.selected').forEach(item => { item.className = ''; }); + e.currentTarget.className = 'selected'; + const i=e.currentTarget.getAttribute("data-index") + console.log('Item index clicked:', i,this.#data[i]); + // You can dispatch a custom event here if needed. + this.dispatchEvent(new CustomEvent('itemSelected', { + detail: this.#data[i], + bubbles: true, + composed: true + })); + }; + this.#data.forEach((item, index) => { + const listItem = document.createElement('li'); + const icon=this.#iconKinds[item.kind]; + listItem.setAttribute("tabindex", "0") + listItem.setAttribute("data-index", index) + listItem.innerHTML = `XX* + ${item.name} - ${item.detail}`; + + listItem.addEventListener('click', select); + listItem.addEventListener('keyup', select); + list.appendChild(listItem); + }); + + this.#shadow.innerHTML = ''; + const style = document.createElement('style'); + style.textContent = ` + @import url("../codicon@0.0.40/codicon.css"); + ul { list-style-type: none; padding:0;margin:0; + background-color: #e3e4e4ff;font-size: 80%; scrollbar-color: #000077 #bada55;} + li { padding: 0 0 0 2px; border-bottom: 1px solid #ccc; cursor: pointer; width:100%; } + li:not(.selected) :hover { background-color: #ccc; } + .selected { background-color: #0d6efd;color: #ffff;} + i {vertical-align: middle;} + `; + this.#shadow.appendChild(style); + this.#shadow.appendChild(list); + } + + /* Render an error message if JSON fetching fails */ + renderError(error) { + this.#shadow.innerHTML = `

    Error loading data: ${error.message}

    `; + } +} + +/* Define the new custom element */ +customElements.define('qd-panel', PanelComponent); + diff --git a/webapp/static/clients/codemirror/wc-qd-popover.js b/webapp/static/clients/codemirror/wc-qd-popover.js index 85b0acc..9ddd209 100644 --- a/webapp/static/clients/codemirror/wc-qd-popover.js +++ b/webapp/static/clients/codemirror/wc-qd-popover.js @@ -1,33 +1,33 @@ -// a popover dialog NOT WORKING -class PopupInfo extends HTMLElement { - constructor() { - // Always call super first in constructor - super(); - } - - connectedCallback() { - // Create a shadow root - const shadow = this.attachShadow({ mode: "open" }); - - // Create spans - const dialog = document.createElement("dialog"); - dialog.setAttribute("id", this.getAttribute("id")); - dialog.setAttribute("popover","popover"); - const header = document.createElement("header"); - header.innerText="HEADE" - const main = document.createElement("main"); - main.innerText="MAIN" - const footer = document.createElement("footer"); - footer.innerText="WWW" - dialog.appendChild(header); - dialog.appendChild(main); - dialog.appendChild(footer) - // Attach the created elements to the shadow dom - shadow.appendChild(dialog); - - } - } - - // Define the new element - customElements.define("popup-info", PopupInfo); +// a popover dialog NOT WORKING +class PopupInfo extends HTMLElement { + constructor() { + // Always call super first in constructor + super(); + } + + connectedCallback() { + // Create a shadow root + const shadow = this.attachShadow({ mode: "open" }); + + // Create spans + const dialog = document.createElement("dialog"); + dialog.setAttribute("id", this.getAttribute("id")); + dialog.setAttribute("popover","popover"); + const header = document.createElement("header"); + header.innerText="HEADE" + const main = document.createElement("main"); + main.innerText="MAIN" + const footer = document.createElement("footer"); + footer.innerText="WWW" + dialog.appendChild(header); + dialog.appendChild(main); + dialog.appendChild(footer) + // Attach the created elements to the shadow dom + shadow.appendChild(dialog); + + } + } + + // Define the new element + customElements.define("popup-info", PopupInfo); \ No newline at end of file diff --git a/webapp/static/clients/codicon@0.0.40/readme.md b/webapp/static/clients/codicon@0.0.40/readme.md index 0be0b5b..08ee49b 100644 --- a/webapp/static/clients/codicon@0.0.40/readme.md +++ b/webapp/static/clients/codicon@0.0.40/readme.md @@ -1,7 +1,7 @@ -```html - -``` - -* [search codicon icons](https://microsoft.github.io/vscode-codicons/dist/codicon.html) -* https://github.com/microsoft/vscode-codicons +```html + +``` + +* [search codicon icons](https://microsoft.github.io/vscode-codicons/dist/codicon.html) +* https://github.com/microsoft/vscode-codicons * https://github.com/microsoft/vscode-codicons/releases/tag/v0.0.40 \ No newline at end of file