-
Notifications
You must be signed in to change notification settings - Fork 809
SOLR-7632 TikaServer as pluggable backend to existing extraction handler #3670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
117 commits
Select commit
Hold shift + click to select a range
26bde10
Introduce ExtractionBackend interface
janhoy 57d8d4e
Move some tika tests to new test file
janhoy dc151c5
ExtractingRequestHandler and ExtractingDocumentLoader not depend on T…
janhoy 5a19251
Use a factory to create the backend to keep it DRY
janhoy 35fef11
Add TikaServerExtractionBackend
janhoy 196dcdc
Change testing to use TestContainers
janhoy 11ea400
Draft docs
janhoy a3794ce
Use json response from Tika
janhoy cf97169
Allow testcontainers to read config
janhoy 87cb45c
Disable JSM
epugh 7ebed82
IntelliJ prompted me.. and I couldn't resist.
epugh f25631d
lint
epugh 5aa381f
Split test in two sub classes
janhoy ef7850d
Some error handling
janhoy f297514
Properly skip test if Docker not available
janhoy b1840ee
Fix precommit
janhoy 6ec9dda
Review feedback. ID -> NAME
janhoy 902355d
Review feedback. Simplify metadata add code
janhoy 1cfcce9
Error handling for factory
janhoy b769c06
More documentation
janhoy 83296a9
* Refactor some logic back to ExtractingDocumentLoader
janhoy 14b556b
Fix forbiddenAPI
janhoy 45e7e41
better back-compat metadata logic
janhoy 5ba9391
More tests pass
janhoy dbca234
Fix test testLiteralsOverride
janhoy e6ee706
Rewrite tests to use h1 instead of div
janhoy 5863118
Add support for recursive parsing in TikaServer impl ("recursive=true…
janhoy d5fef5e
Attempt of a github workflow to run the extraction tests
janhoy 413bcfd
Merge branch 'main' into refactor-extraction-handler-clone
janhoy 488b6bc
Undeprecate handler, deprecate local backend
janhoy 1ef879c
Do not create another corecontainer in tika test
janhoy 6472d7e
Hygiene fixes
janhoy 4397fe6
Use JUnit @ClassRule for cleaning up container
janhoy d2e2ffe
Merge branch 'main' into refactor-extraction-handler-clone
janhoy 1a80ca8
Lockfile
janhoy 8822fba
Move threadFilter into default SolrIgnoredThreadsFilter
janhoy 06ee124
Update jar checksums
janhoy f3b8345
Tidy
janhoy ad4b815
Update license and notice files
janhoy 2a40798
Remove Dummy backend
janhoy 326e28a
Refactor duplicated code
janhoy 7b81edf
Remove unused code and add docs to ExtractingDocumentLoader
janhoy 8743428
Better naming of backCompat and recursive flags
janhoy 1b67618
Docs for ExtractionRequest
janhoy 2803323
Avoid copying content string unnecessary
janhoy 9a26b2e
Docs for ExtractionBackend
janhoy 4444764
LocalTikaExtractionBackend simplification
janhoy d60395f
Decouple SolrContentHandler from tika dependencies
janhoy 80c480a
Javadocs for TikaServerExtractionBackend
janhoy 2d45472
Merge branch 'main' into refactor-extraction-handler-clone
janhoy 898fa24
Tidy
janhoy 91d332f
Refactor and document ExtractionMetadata
janhoy a5eab49
Ignore test ExtractingRequestHandlerTikaServerTest if Docker not avai…
janhoy f902817
Use Jetty HTTP client
janhoy f34a423
Eliminate overly complex ExtractionBackendFactory.java
janhoy f39ac4b
Precommit
janhoy 45a7763
Rename some variables, better docs
janhoy 0a0becf
More compact XmlSanitizingReader with test
janhoy 44e382a
Revert some TODOs
janhoy dc8a2b4
Remove misleading comment
janhoy 0317b79
Make ExtractionBackend independent from Tika classes
janhoy 0889026
Finalize ref guide page
janhoy 33ec39a
RefGuide: Move some config out of "defaults" section
janhoy 064be77
Rename ExtractionRequest parameters used only by TikaServer.
janhoy b7e98ee
More fine grained error handling with TikaServer
janhoy d07b062
Make tikaserver timeout configurable
janhoy da17723
Update solr/modules/extraction/src/java/org/apache/solr/handler/extra…
janhoy 5b771fd
Rename param extraction.tikaserver.recursive as tikaserer.recursive
janhoy dc29376
Comment for EXTRACTION_BACKEND
janhoy 6d1ff34
Review comment. tikaserver.url is required
janhoy bb9ea57
Merge branch 'main' into refactor-extraction-handler-clone
janhoy d6d903c
CHANGES for 9.10
janhoy bf6850e
Smaller implementation of XmlSanitizingReader
janhoy 6603715
Update solr/solr-ref-guide/modules/indexing-guide/pages/indexing-with…
janhoy 6565645
Unify JNA version
janhoy 0dc6e82
Read metadata backcompat from initMap, not request
janhoy c378eae
Merge branch 'main' into refactor-extraction-handler-clone
janhoy 4f50a73
Hide documentation of tikaserver.metadata.compatibility
janhoy 1ad103d
Tikaserver backend supports encrypted docs, remove doc comment
janhoy f9a5855
New param tikaserver.maxChars to limit size of response
janhoy c7d35df
Merge branch 'main' into refactor-extraction-handler-clone
janhoy c7d20e9
Lockfiles
janhoy e5dc654
Remove default mention in ExtractingParams
janhoy f96f843
Rephrase CHANGES entry
janhoy 30b8587
Changes once again
janhoy 54d7889
Run extraction module test in github only when code changes
janhoy 33e2c5e
Major changes in 9.x update
janhoy a65b805
Review comment, remove semicolon
janhoy d43fa5f
Consistent maxCharLimit constant
janhoy 9c482cf
Merge branch 'main' into refactor-extraction-handler-clone
janhoy f267852
Merge branch 'main' into refactor-extraction-handler-clone
janhoy a77586c
Ref-count users of shared http client
janhoy ce4a196
Validate baseUrl in TikaServerExtractionBackend
janhoy 078c0f6
Document tikaServerTimeoutSeconds in code
janhoy 3c66c7c
Validate extraction.backend is valid and don't fallback silently to '…
janhoy 5d72b89
Fix edge case in XmlSanitizingReader
janhoy f857160
Document thread-safe requirement for backends
janhoy 79986d8
Deprecated for removal
janhoy 3f7a6a2
Document choice of maxchars default
janhoy a16b1e9
Print the raw input parameter for maxCharsLimit in exception
janhoy b2452a3
Use builder pattern in ExtractionRequest
janhoy 975ecba
New test testXPathWithTikaServer()
janhoy 2443997
Supress deprecated warnings for now
janhoy 473be7e
Suppress deprecation warnings in LocalTikaExtractionBackendTest
janhoy 60d5e2d
Use Solr's RefCounted class for keeping track of users of shared reso…
janhoy 62bff71
Merge branch 'refs/heads/main' into refactor-extraction-handler-clone
janhoy 23b2359
Core extraction classes should not import any Tika classes
janhoy 075c363
Remove jna 5.12 sha file
janhoy acaa6a7
Merge branch 'main' into refactor-extraction-handler-clone
janhoy a8d30c0
Make TikaServerExtractionBackendTest.java not import tika classes
janhoy 9d5a17a
Remove yet a tika import, from RegexRulesPasswordProvider
janhoy 059b80a
Add doc comments to the copied TIKA files
janhoy ff452fd
Merge branch 'refs/heads/main' into refactor-extraction-handler-clone
janhoy ec013f0
Libs update
janhoy 2235647
Revert BoduContentHandler changes
janhoy 99d95ab
Merge branch 'main' into refactor-extraction-handler
janhoy eacc932
Merge branch 'main' into refactor-extraction-handler
janhoy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # This test covers TikaServer tests for SolrCell, since crave does not support docker yet. | ||
| name: Extraction module tests with Docker | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: | ||
| - '*' | ||
| paths: | ||
| - 'solr/modules/extraction/**' | ||
|
|
||
| jobs: | ||
| test: | ||
| name: extraction module tests with docker | ||
|
|
||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 15 | ||
|
|
||
| env: | ||
| DEVELOCITY_ACCESS_KEY: ${{ secrets.SOLR_DEVELOCITY_ACCESS_KEY }} | ||
|
|
||
| steps: | ||
| - name: Checkout code | ||
| uses: actions/checkout@v5 | ||
|
|
||
| - uses: ./.github/actions/prepare-for-build | ||
|
|
||
| - name: Run extraction module tests | ||
| run: ./gradlew --no-daemon solr:modules:extraction:check | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,202 @@ | ||
|
|
||
| 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 [2013] [docker-java@googlegroups.com] | ||
|
|
||
| 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. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| This product includes software developed by the docker-java project. | ||
|
|
||
| Copyright (c) 2013, docker-java project contributors | ||
|
|
||
| Project: https://github.com/docker-java/docker-java | ||
|
|
||
| Licensed under the Apache License, Version 2.0. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 9ef23dcc93693f15e69b64632be096c38e31bc44 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| c058705684d782effc4b2edfdef1a87544ba4af8 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| c4ce6d8695cfdb0027872f99cc20f8f679f8a969 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 92edc22a9ab2f3e17c9bf700aaee377d50e8b530 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| The MIT License (MIT) | ||
|
|
||
| Copyright (c) 2014 Richard North | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 1200e7ebeedbe0d10062093f32925a912020e747 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ee2fe3afc9fa6cb2e6a43233998f3633f761692f |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| The MIT License (MIT) | ||
|
|
||
| Copyright (c) 2015-2019 Richard North | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.