Skip to content
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

2024-05-02, Version 22.1.0 (Current) #52768

Merged
merged 98 commits into from
May 2, 2024
Merged
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
014bf01
lib: replace string prototype usage with alternatives
avivkeller Apr 11, 2024
61e1ac0
crypto: enable NODE_EXTRA_CA_CERTS with BoringSSL
codebytere Apr 11, 2024
8738b89
deps: upgrade npm to 10.5.2
npm-cli-bot Apr 12, 2024
44ee04c
buffer: improve `base64` and `base64url` performance
anonrig Apr 12, 2024
f6145aa
lib: convert WeakMaps in cjs loader with private symbol properties
legendecas Apr 12, 2024
fdcde84
lib: refactor lazy loading of undici for fetch method
Apr 12, 2024
9b18df9
url: implement parse method for safer URL parsing
thisalihassan Apr 13, 2024
8ae1507
tools: add a linter for README lists
aduh95 Apr 13, 2024
dfda6fe
buffer: add missing ARG_TYPE(ArrayBuffer) for isUtf8
Apr 13, 2024
7b82c17
benchmark: add ipc support to spawn stdio config
thisalihassan Apr 10, 2024
7cdfe8a
benchmark: inherit stdio/stderr instead of pipe
thisalihassan Apr 10, 2024
b00766d
module: tidy code and comments
JakobJingleheimer Apr 13, 2024
b4ccb6c
test_runner: move end of work check to finalize()
cjihrig Apr 12, 2024
3287553
test_runner: don't exceed call stack when filtering
cjihrig Apr 12, 2024
e70d8a4
meta: move one or more collaborators to emeritus
nodejs-github-bot Apr 14, 2024
dc399dd
lib, doc: rename readme.md to README.md
avivkeller Apr 14, 2024
15c5686
tools: update minimatch index path
marco-ippolito Apr 15, 2024
e34e0a9
test: write tests for assertIsArray http2 util
sinansonmez Apr 15, 2024
e066ba2
test_runner: better error handing for test hook
himself65 Apr 15, 2024
4e5ce3a
tools: use stylistic ESLint plugin for formatting
targos Apr 15, 2024
1fca8ba
node-api: copy external type tags when they are set
Koromix Apr 15, 2024
7e93c48
doc: update test runner coverage limitations
MoLow Apr 15, 2024
6b4bbfb
tools: update lint-md-dependencies to rollup@4.14.2 vfile-reporter@8.1.1
nodejs-github-bot Apr 16, 2024
d67a9a5
deps: update minimatch to 9.0.4
nodejs-github-bot Apr 16, 2024
9794d21
module: fix submodules loaded by require() and import()
joyeecheung Apr 16, 2024
f283d27
src: fix loadEnvFile ENOENT error
fahrradflucht Apr 17, 2024
ac04c64
src: remove regex usage for env file parsing
IlyasShabi Apr 17, 2024
d79ae74
net: add CLI option for autoSelectFamilyAttemptTimeout
ShogunPanda Apr 17, 2024
df61feb
tools: fix heading spaces for osx-entitlements.plist
JacksonTian Apr 17, 2024
18aa5d6
test: split wasi poll test for windows
huseyinacacak-janea Apr 17, 2024
3c37ce5
dns: add order option and support ipv6first
ShogunPanda Apr 17, 2024
63cc2b8
doc: fix issue detected in markdown lint update
Trott Apr 17, 2024
35643c1
benchmark: reduce the buffer size for blob
debadree25 Apr 17, 2024
9a44059
deps: update zlib to 1.3.0.1-motley-7d77fb7
nodejs-github-bot Apr 17, 2024
4d77fd2
module: implement NODE_COMPILE_CACHE for automatic on-disk code caching
joyeecheung Feb 29, 2024
c8c6173
test: fix test-tls-ticket-cluster.js
huseyinacacak-janea Apr 18, 2024
e247a61
test_runner: add --test-skip-pattern cli option
avivkeller Apr 18, 2024
ed080d8
test: ensure that all worker servers are ready
lpinca Apr 19, 2024
a7e03d3
fs: fixes recursive fs.watch crash on Linux when deleting files
mcollina Apr 19, 2024
a56faff
src: parse inspector profiles with simdjson
joyeecheung Feb 16, 2024
3df3afc
module: detect ESM syntax by trying to recompile as SourceTextModule
joyeecheung Apr 19, 2024
80cbe72
deps: update undici to 6.13.0
nodejs-github-bot Apr 19, 2024
552642a
tools: update lint-md-dependencies
Trott Apr 19, 2024
27ffa35
doc: add RedYetiDev to triage team
avivkeller Apr 20, 2024
910533f
crypto: simplify assertions in Safe*Print
davidben Apr 20, 2024
9ffdcad
lib: use predefined variable instead of bit operation
deokjinkim Apr 20, 2024
a93f5d4
doc: correct stream.finished changes
climba03003 Apr 20, 2024
5b52a48
deps: update icu to 75.1
nodejs-github-bot Apr 21, 2024
fb4edf7
quic: rework TLSContext, additional cleanups
jasnell Dec 31, 2023
d40e4d4
deps: update ada to 2.7.8
nodejs-github-bot Apr 14, 2024
31831e9
doc: sort options alphabetically
lpinca Apr 21, 2024
c83526a
doc: replace U+00A0 with U+0020
lpinca Apr 21, 2024
eeb80ad
doc: correct unsafe URL example in http docs
mlegenhausen Apr 21, 2024
f9ddd77
tools: add lint rule to keep primordials in ASCII order
aduh95 Apr 21, 2024
3552829
doc: add info on contributor spotlight program
mhdawson Apr 19, 2024
f23fa1d
fs: fix read / readSync positional offset types
ruyadorno Apr 22, 2024
3b422dd
deps: update corepack to 0.28.0
nodejs-github-bot Apr 23, 2024
382d951
tools: update lint-md-dependencies to rollup@4.15.0
nodejs-github-bot Apr 23, 2024
3026401
events,doc: mark CustomEvent as stable
daeyeon Apr 23, 2024
01103a8
tools: fix invalid escape sequence in mkssldef
targos Apr 23, 2024
d1adc9b
lib: enforce ASCII order in error code imports
aduh95 Apr 23, 2024
04c8e11
doc: run license-builder
github-actions[bot] Apr 24, 2024
20c07e9
meta: move one or more collaborators to emeritus
nodejs-github-bot Apr 24, 2024
4d577fa
doc: add .gitattributes for md files
huseyinacacak-janea Mar 26, 2024
b2f754c
test: skip test-fs-watch-recursive-delete.js on IBM i
abmusse Apr 24, 2024
43fa6a1
src: add `string_view` overload to snapshot FromBlob
addaleax Apr 24, 2024
4baeb7b
build: fix arm64 cross-compilation bug on non-arm machines
devraymondsh Apr 24, 2024
90c6e77
doc: fix info string causing duplicated code blocks
mleenhardt Apr 24, 2024
64428dc
lib, url: add a `windows` option to path parsing
avivkeller Apr 24, 2024
0b97031
typings: fix invalid JSDoc declarations
anonrig Apr 24, 2024
10596e2
test: fix backtick usage in docs
avivkeller Apr 24, 2024
9a032cf
doc: remove relative limitation to pm
RafaelGSS Apr 24, 2024
9b2b6ab
lib,src: iterate module requests of a module wrap in JS
legendecas Apr 25, 2024
4f713fb
build: fix headers install for shared mode on Win
segevfiner Mar 30, 2024
544c602
module: skip NODE_COMPILE_CACHE when policy is enabled
joyeecheung Apr 25, 2024
e20d2f1
src: cast to v8::Value before using v8::EmbedderGraph::V8Node
joyeecheung Apr 25, 2024
d33131a
vm: fix ASCII-betical order
avivkeller Apr 25, 2024
d5cd468
build,tools,node-api: fix building node-api tests for Windows Debug
vmoroz Apr 26, 2024
b17cfea
node-api: address coverity report
mhdawson Apr 26, 2024
db421bd
tools: take co-authors into account in `find-inactive-collaborators`
aduh95 Apr 26, 2024
45f7002
test: mark test as flaky
mhdawson Apr 26, 2024
27a5f94
deps: V8: cherry-pick 500de8bd371b
richardlau Apr 26, 2024
c6e0fe2
fs: allow setting Stat date properties
nicolo-ribaudo Apr 28, 2024
9f9eca9
stream: update ongoing promise in async iterator return() method
MattiasBuelens Apr 28, 2024
d5ecb6c
http2: fix excessive CPU usage when using `allowHTTP1=true`
eugene1g Apr 28, 2024
d568a9a
test: mark `test-error-serdes` as flaky
aduh95 Apr 28, 2024
c64a1a3
build: fix typo in node.gyp
targos Apr 29, 2024
d086ab4
quic: address recent coverity warnings
mhdawson Apr 22, 2024
20ab8f2
module: support ESM detection in the CJS loader
joyeecheung Apr 29, 2024
896a80e
meta: standardize regex
avivkeller Apr 29, 2024
2ef9380
tools: update lint-md-dependencies to rollup@4.17.0
nodejs-github-bot Apr 30, 2024
c6fe433
src,permission: throw async errors on async APIs
RafaelGSS Apr 30, 2024
8e4fd28
deps,src: simplify base64 encoding
lemire Apr 30, 2024
c0b58e0
doc: remove mold use on mac for speeding up build
congzhangzh Mar 28, 2024
3987a28
doc: update process.versions properties
IlyasShabi Apr 30, 2024
0c58d03
src: remove misplaced windows code under posix guard in node.cc
thisalihassan Apr 15, 2024
6e98eee
deps: upgrade npm to 10.7.0
npm-cli-bot May 1, 2024
87b87a8
2024-05-02, Version 22.1.0 (Current)
aduh95 Apr 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
139 changes: 72 additions & 67 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@ const hacks = [
'eslint-plugin-markdown',
'@babel/eslint-parser',
'@babel/plugin-syntax-import-attributes',
'@stylistic/eslint-plugin-js',
];
Module._findPath = (request, paths, isMain) => {
const r = ModuleFindPath(request, paths, isMain);
@@ -39,7 +40,7 @@ module.exports = {
es2022: true,
},
extends: ['eslint:recommended', 'plugin:jsdoc/recommended'],
plugins: ['jsdoc', 'markdown', 'node-core'],
plugins: ['jsdoc', 'markdown', 'node-core', '@stylistic/js'],
parser: '@babel/eslint-parser',
parserOptions: {
babelOptions: {
@@ -57,6 +58,8 @@ module.exports = {
'test/es-module/test-esm-example-loader.js',
'test/es-module/test-esm-type-flag.js',
'test/es-module/test-esm-type-flag-alias.js',
'test/es-module/test-require-module-detect-entry-point.js',
'test/es-module/test-require-module-detect-entry-point-aou.js',
],
parserOptions: { sourceType: 'module' },
},
@@ -133,11 +136,7 @@ module.exports = {
// https://eslint.org/docs/rules/
'accessor-pairs': 'error',
'array-callback-return': 'error',
'arrow-parens': 'error',
'arrow-spacing': 'error',
'block-scoped-var': 'error',
'block-spacing': 'error',
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
'capitalized-comments': ['error', 'always', {
line: {
// Ignore all lines that have less characters than 20 and all lines that
@@ -150,49 +149,17 @@ module.exports = {
ignorePattern: '.*',
},
}],
'comma-dangle': ['error', 'always-multiline'],
'comma-spacing': 'error',
'comma-style': 'error',
'computed-property-spacing': 'error',
'default-case-last': 'error',
'dot-location': ['error', 'property'],
'dot-notation': 'error',
'eol-last': 'error',
'eqeqeq': ['error', 'smart'],
'func-call-spacing': 'error',
'func-name-matching': 'error',
'func-style': ['error', 'declaration', { allowArrowFunctions: true }],
'indent': ['error', 2, {
ArrayExpression: 'first',
CallExpression: { arguments: 'first' },
FunctionDeclaration: { parameters: 'first' },
FunctionExpression: { parameters: 'first' },
MemberExpression: 'off',
ObjectExpression: 'first',
SwitchCase: 1,
}],
'key-spacing': 'error',
'keyword-spacing': 'error',
'linebreak-style': 'error',
'max-len': ['error', {
code: 120,
ignorePattern: '^// Flags:',
ignoreRegExpLiterals: true,
ignoreTemplateLiterals: true,
ignoreUrls: true,
tabWidth: 2,
}],
'new-parens': 'error',
'no-confusing-arrow': 'error',
'no-constant-condition': ['error', { checkLoops: false }],
'no-constructor-return': 'error',
'no-duplicate-imports': 'error',
'no-else-return': 'error',
'no-extra-parens': ['error', 'functions'],
'no-lonely-if': 'error',
'no-mixed-requires': 'error',
'no-multi-spaces': ['error', { ignoreEOLComments: true }],
'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 0, maxBOF: 0 }],
'no-new-require': 'error',
'no-path-concat': 'error',
'no-proto': 'error',
@@ -257,10 +224,8 @@ module.exports = {
},
],
'no-self-compare': 'error',
'no-tabs': 'error',
'no-template-curly-in-string': 'error',
'no-throw-literal': 'error',
'no-trailing-spaces': 'error',
'no-undef': ['error', { typeof: true }],
'no-undef-init': 'error',
'no-unused-expressions': ['error', { allowShortCircuit: true }],
@@ -276,39 +241,11 @@ module.exports = {
'no-useless-return': 'error',
'no-var': 'error',
'no-void': 'error',
'no-whitespace-before-property': 'error',
'object-curly-newline': 'error',
'object-curly-spacing': ['error', 'always'],
'one-var': ['error', { initialized: 'never' }],
'one-var-declaration-per-line': 'error',
'operator-linebreak': ['error', 'after'],
'padding-line-between-statements': [
'error',
{ blankLine: 'always', prev: 'function', next: 'function' },
],
'prefer-const': ['error', { ignoreReadBeforeAssign: true }],
'prefer-object-has-own': 'error',
'quotes': ['error', 'single', { avoidEscape: true }],
'quote-props': ['error', 'consistent'],
'rest-spread-spacing': 'error',
'semi': 'error',
'semi-spacing': 'error',
'space-before-blocks': ['error', 'always'],
'space-before-function-paren': ['error', {
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
}],
'space-in-parens': 'error',
'space-infix-ops': 'error',
'space-unary-ops': 'error',
'spaced-comment': ['error', 'always', {
'block': { 'balanced': true },
'exceptions': ['-'],
}],
'strict': ['error', 'global'],
'symbol-description': 'error',
'template-curly-spacing': 'error',
'unicode-bom': 'error',
'valid-typeof': ['error', { requireStringLiterals: true }],

@@ -327,6 +264,74 @@ module.exports = {
'jsdoc/check-tag-names': 'off',
'jsdoc/require-returns': 'off',

// Stylistic rules
'@stylistic/js/arrow-parens': 'error',
'@stylistic/js/arrow-spacing': 'error',
'@stylistic/js/block-spacing': 'error',
'@stylistic/js/brace-style': ['error', '1tbs', { allowSingleLine: true }],
'@stylistic/js/comma-dangle': ['error', 'always-multiline'],
'@stylistic/js/comma-spacing': 'error',
'@stylistic/js/comma-style': 'error',
'@stylistic/js/computed-property-spacing': 'error',
'@stylistic/js/dot-location': ['error', 'property'],
'@stylistic/js/eol-last': 'error',
'@stylistic/js/func-call-spacing': 'error',
'@stylistic/js/indent': ['error', 2, {
ArrayExpression: 'first',
CallExpression: { arguments: 'first' },
FunctionDeclaration: { parameters: 'first' },
FunctionExpression: { parameters: 'first' },
MemberExpression: 'off',
ObjectExpression: 'first',
SwitchCase: 1,
}],
'@stylistic/js/key-spacing': 'error',
'@stylistic/js/keyword-spacing': 'error',
'@stylistic/js/linebreak-style': 'error',
'@stylistic/js/max-len': ['error', {
code: 120,
ignorePattern: '^// Flags:',
ignoreRegExpLiterals: true,
ignoreTemplateLiterals: true,
ignoreUrls: true,
tabWidth: 2,
}],
'@stylistic/js/new-parens': 'error',
'@stylistic/js/no-confusing-arrow': 'error',
'@stylistic/js/no-extra-parens': ['error', 'functions'],
'@stylistic/js/no-multi-spaces': ['error', { ignoreEOLComments: true }],
'@stylistic/js/no-multiple-empty-lines': ['error', { max: 2, maxEOF: 0, maxBOF: 0 }],
'@stylistic/js/no-tabs': 'error',
'@stylistic/js/no-trailing-spaces': 'error',
'@stylistic/js/no-whitespace-before-property': 'error',
'@stylistic/js/object-curly-newline': 'error',
'@stylistic/js/object-curly-spacing': ['error', 'always'],
'@stylistic/js/one-var-declaration-per-line': 'error',
'@stylistic/js/operator-linebreak': ['error', 'after'],
'@stylistic/js/padding-line-between-statements': [
'error',
{ blankLine: 'always', prev: 'function', next: 'function' },
],
'@stylistic/js/quotes': ['error', 'single', { avoidEscape: true }],
'@stylistic/js/quote-props': ['error', 'consistent'],
'@stylistic/js/rest-spread-spacing': 'error',
'@stylistic/js/semi': 'error',
'@stylistic/js/semi-spacing': 'error',
'@stylistic/js/space-before-blocks': ['error', 'always'],
'@stylistic/js/space-before-function-paren': ['error', {
anonymous: 'never',
named: 'never',
asyncArrow: 'always',
}],
'@stylistic/js/space-in-parens': 'error',
'@stylistic/js/space-infix-ops': 'error',
'@stylistic/js/space-unary-ops': 'error',
'@stylistic/js/spaced-comment': ['error', 'always', {
'block': { 'balanced': true },
'exceptions': ['-'],
}],
'@stylistic/js/template-curly-spacing': 'error',

// Custom rules from eslint-plugin-node-core
'node-core/no-unescaped-regexp-dot': 'error',
'node-core/no-duplicate-requires': 'error',
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -4,3 +4,4 @@ deps/npm/bin/npm text eol=lf
deps/npm/bin/npx text eol=lf
deps/corepack/shims/corepack text eol=lf
tools/msvs/find_python.cmd text eol=crlf
doc/**/*.md text eol=lf
2 changes: 1 addition & 1 deletion .github/label-pr-config.yml
Original file line number Diff line number Diff line change
@@ -86,7 +86,7 @@ subSystemLabels:
# Oddities first
/^lib\/(?:punycode|\w+\/freelist|sys\.js)/: ''
/^lib\/constants\.js$/: lib / src
/^lib\/internal/debugger$/: debugger
/^lib\/internal\/debugger$/: debugger
/^lib\/internal\/linkedlist\.js$/: timers
/^lib\/internal\/bootstrap/: lib / src
/^lib\/internal\/v8_prof_/: tools
7 changes: 7 additions & 0 deletions .github/workflows/linters.yml
Original file line number Diff line number Diff line change
@@ -179,3 +179,10 @@ jobs:
persist-credentials: false
# GH Actions squashes all PR commits, HEAD^ refers to the base branch.
- run: git diff HEAD^ HEAD -G"pr-url:" -- "*.md" | ./tools/lint-pr-url.mjs ${{ github.event.pull_request.html_url }}
lint-readme:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
persist-credentials: false
- run: tools/lint-readme-lists.mjs
9 changes: 0 additions & 9 deletions .github/workflows/tools.yml
Original file line number Diff line number Diff line change
@@ -16,7 +16,6 @@ on:
- acorn
- acorn-walk
- ada
- base64
- brotli
- c-ares
- cjs-module-lexer
@@ -81,14 +80,6 @@ jobs:
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: base64
subsystem: deps
label: dependencies
run: |
./tools/dep_updaters/update-base64.sh > temp-output
cat temp-output
tail -n1 temp-output | grep "NEW_VERSION=" >> "$GITHUB_ENV" || true
rm temp-output
- id: brotli
subsystem: deps
label: dependencies
18 changes: 10 additions & 8 deletions BUILDING.md
Original file line number Diff line number Diff line change
@@ -546,25 +546,32 @@ If you encounter any difficulties, consider disabling `mold` as a
troubleshooting step.

If you plan to frequently rebuild Node.js, especially if using several
branches, installing `ccache` and `mold` can help to greatly reduce build
branches, installing `ccache` can help to greatly reduce build
times. Set up with:

On GNU/Linux:

Tips: `mold` can speed up the link process, which can't be cached, you may
need to install the latest version but not the apt version.

```bash
sudo apt install ccache mold # for Debian/Ubuntu, included in most Linux distros
export CC="ccache gcc" # add to your .profile
export CXX="ccache g++" # add to your .profile
export LDFLAGS="-fuse-ld=mold" # add to your .profile
```

Refs:

1. <https://ccache.dev/performance.html>
2. <https://github.com/rui314/mold>

On macOS:

```bash
brew install ccache mold # see https://brew.sh
brew install ccache # see https://brew.sh
export CC="ccache cc" # add to ~/.zshrc or other shell config file
export CXX="ccache c++" # add to ~/.zshrc or other shell config file
export LDFLAGS="-fuse-ld=mold" # add to ~/.zshrc or other shell config file
```

This will allow for near-instantaneous rebuilds when switching branches back
@@ -582,11 +589,6 @@ the specified directory. The JS debugger of Visual Studio Code supports this
configuration since the November 2020 version and allows for setting
breakpoints.

Refs:

1. <https://ccache.dev/performance.html>
2. <https://github.com/rui314/mold>

#### Troubleshooting Unix and macOS builds

Stale builds can sometimes result in `file not found` errors while building.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -38,7 +38,8 @@ release.
</tr>
<tr>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V22.md#22.0.0">22.0.0</a></b><br/>
<b><a href="doc/changelogs/CHANGELOG_V22.md#22.1.0">22.1.0</a></b><br/>
<a href="doc/changelogs/CHANGELOG_V22.md#22.0.0">22.0.0</a><br/>
</td>
<td valign="top">
<b><a href="doc/changelogs/CHANGELOG_V21.md#21.7.3">21.7.3</a></b><br/>
36 changes: 3 additions & 33 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -136,7 +136,7 @@ The externally maintained libraries used by Node.js are:

COPYRIGHT AND PERMISSION NOTICE

Copyright © 2016-2023 Unicode, Inc.
Copyright © 2016-2024 Unicode, Inc.

NOTICE TO USER: Carefully read the following legal agreement. BY
DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
@@ -172,6 +172,8 @@ The externally maintained libraries used by Node.js are:
dealings in these Data Files or Software without prior written
authorization of the copyright holder.

SPDX-License-Identifier: Unicode-3.0

----------------------------------------------------------------------

Third-Party Software Licenses
@@ -2376,35 +2378,3 @@ The externally maintained libraries used by Node.js are:
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.
"""

- base64, located at deps/base64/base64/, is licensed as follows:
"""
Copyright (c) 2005-2007, Nick Galbreath
Copyright (c) 2015-2018, Wojciech Muła
Copyright (c) 2016-2017, Matthieu Darbois
Copyright (c) 2013-2022, Alfred Klomp
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
Loading