This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 75a1a45014 [#7087] fix(license): Fix the licenses issues (#7090)
75a1a45014 is described below

commit 75a1a45014c3236f2b15d4f0418c1145c32cae50
Author: roryqi <[email protected]>
AuthorDate: Tue Apr 29 13:43:19 2025 +0800

    [#7087] fix(license): Fix the licenses issues (#7090)
    
    ### What changes were proposed in this pull request?
    
    Change the license header for the helm chart files.
    
    Add the MIT licenses for web dependencies
    
    Fix the license header for the `Either.java`
    
    ### Why are the changes needed?
    
    Fix: #7087
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    By reivew.
---
 LICENSE                                            |   3 +
 NOTICE                                             |   6 +
 .../api/event/AlterModelVersionFailureEvent.java   |  13 +-
 .../api/event/AlterModelVersionPreEvent.java       |  14 +-
 .../apache/gravitino/listener/api/info/Either.java | 167 ++++++++++++++-------
 .../gravitino/listener/api/event/TestEither.java   |  38 ++---
 dev/ci/chart_schema.yaml                           |  25 ++-
 dev/ci/lintconf.yaml                               |  25 ++-
 web/web/LICENSE.bin                                |   6 +
 web/web/licenses/call-bind-apply-helpers.txt       |  21 +++
 web/web/licenses/call-bound.txt                    |  21 +++
 web/web/licenses/dunder-proto.txt                  |  21 +++
 web/web/licenses/fast-color.txt                    |  20 +++
 web/web/licenses/get-proto.txt                     |  21 +++
 web/web/licenses/math-intrinstics.txt              |  21 +++
 15 files changed, 304 insertions(+), 118 deletions(-)

diff --git a/LICENSE b/LICENSE
index edee5679b2..9136038ffb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -312,6 +312,9 @@
    ./dev/ci/chart_schema.yaml
    ./dev/ci/lintconf.yaml
 
+   AWS SDK
+   ./core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+
    This product bundles a third-party component under the
    MIT License.
 
diff --git a/NOTICE b/NOTICE
index c8b1eda0d1..7944edae73 100644
--- a/NOTICE
+++ b/NOTICE
@@ -33,3 +33,9 @@ Copyright 2019 and onwards The Apache Software Foundation.
 
 Apache Arrow
 Copyright 2016-2024 The Apache Software Foundation
+
+AWS SDK for Java 2.0
+Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+This product includes software developed by
+Amazon Technologies, Inc (http://www.amazon.com/).
\ No newline at end of file
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
index db1d666f4d..8773551b0d 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionFailureEvent.java
@@ -19,6 +19,7 @@
 
 package org.apache.gravitino.listener.api.event;
 
+import com.google.common.base.Supplier;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.listener.api.info.Either;
@@ -60,7 +61,11 @@ public class AlterModelVersionFailureEvent extends 
ModelFailureEvent {
    *     otherwise throw IllegalStateException.
    */
   public String alias() {
-    return aliasOrVersion.getLeft();
+    return aliasOrVersion
+        .left()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Alias can't be null value"));
   }
 
   /**
@@ -70,7 +75,11 @@ public class AlterModelVersionFailureEvent extends 
ModelFailureEvent {
    *     otherwise throw IllegalStateException.
    */
   public Integer version() {
-    return aliasOrVersion.getRight();
+    return aliasOrVersion
+        .right()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Version can't be null 
value"));
   }
 
   /**
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
index 3c2bbc1b65..d123069e66 100644
--- 
a/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
+++ 
b/core/src/main/java/org/apache/gravitino/listener/api/event/AlterModelVersionPreEvent.java
@@ -19,6 +19,7 @@
 
 package org.apache.gravitino.listener.api.event;
 
+import com.google.common.base.Supplier;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.annotation.DeveloperApi;
 import org.apache.gravitino.listener.api.info.Either;
@@ -59,7 +60,11 @@ public class AlterModelVersionPreEvent extends ModelPreEvent 
{
    *     otherwise throw an IllegalStateException exception.
    */
   public String alias() {
-    return aliasOrVersion.getLeft();
+    return aliasOrVersion
+        .left()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Alias can't be null value"));
   }
 
   /**
@@ -69,7 +74,12 @@ public class AlterModelVersionPreEvent extends ModelPreEvent 
{
    *     otherwise throw an IllegalStateException exception.
    */
   public Integer version() {
-    return aliasOrVersion.getRight();
+
+    return aliasOrVersion
+        .right()
+        .orElseThrow(
+            (Supplier<IllegalStateException>)
+                () -> new IllegalStateException("Version can't be null 
value"));
   }
 
   /**
diff --git 
a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java 
b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
index 60ebadaef3..b9b51e00b2 100644
--- a/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
+++ b/core/src/main/java/org/apache/gravitino/listener/api/info/Either.java
@@ -1,42 +1,91 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  *
- *  http://www.apache.org/licenses/LICENSE-2.0
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
  *
- * 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.
+ *  http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file 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.
  */
 
 package org.apache.gravitino.listener.api.info;
 
+import com.google.common.base.Preconditions;
 import java.util.Optional;
-import org.glassfish.jersey.internal.guava.Preconditions;
+import java.util.function.Consumer;
+import java.util.function.Function;
 
 /**
- * Either represents a value of two possible types (a disjoint union).
+ * Represents a value that can be one of two types.
  *
  * @param <L> Left type
  * @param <R> Right type
  */
 public final class Either<L, R> {
+
   private final Optional<L> left;
   private final Optional<R> right;
 
+  private Either(Optional<L> l, Optional<R> r) {
+    left = l;
+    right = r;
+  }
+
   /**
-   * Create a new {@code Either} instance with a left value.
+   * Maps the Either to a type and returns the resolved value (which may be 
from the left or the
+   * right value).
+   *
+   * @param lFunc Function that maps the left value if present.
+   * @param rFunc Function that maps the right value if present.
+   * @param <T> Type that both the left and right should be mapped to.
+   * @return Mapped value from either lFunc or rFunc depending on which value 
is present.
+   */
+  public <T> T map(Function<? super L, ? extends T> lFunc, Function<? super R, 
? extends T> rFunc) {
+    return left.<T>map(lFunc).orElseGet(() -> right.map(rFunc).get());
+  }
+
+  /**
+   * Map the left most value and return a new Either reflecting the new types.
+   *
+   * @param lFunc Function that maps the left value if present.
+   * @param <T> New type of left value.
+   * @return New Either bound to the new left type and the same right type.
+   */
+  public <T> Either<T, R> mapLeft(Function<? super L, ? extends T> lFunc) {
+    return new Either<>(left.map(lFunc), right);
+  }
+
+  /**
+   * Map the right most value and return a new Either reflecting the new types.
+   *
+   * @param rFunc Function that maps the right value if present.
+   * @param <T> New type of right value.
+   * @return New Either bound to the same left type and the new right type.
+   */
+  public <T> Either<L, T> mapRight(Function<? super R, ? extends T> rFunc) {
+    return new Either<>(left, right.map(rFunc));
+  }
+
+  /**
+   * Apply the consumers to the left or the right value depending on which is 
present.
+   *
+   * @param lFunc Consumer of left value, invoked if left value is present.
+   * @param rFunc Consumer of right value, invoked if right value is present.
+   */
+  public void apply(Consumer<? super L> lFunc, Consumer<? super R> rFunc) {
+    left.ifPresent(lFunc);
+    right.ifPresent(rFunc);
+  }
+
+  /**
+   * Create a new Either with the left type.
    *
    * @param value Left value
-   * @return Either with left value
    * @param <L> Left type
    * @param <R> Right type
    */
@@ -46,10 +95,9 @@ public final class Either<L, R> {
   }
 
   /**
-   * Create a new {@code Either} instance with a right value.
+   * Create a new Either with the right type.
    *
    * @param value Right value
-   * @return Either with right value
    * @param <L> Left type
    * @param <R> Right type
    */
@@ -58,53 +106,60 @@ public final class Either<L, R> {
     return new Either<>(Optional.empty(), Optional.of(value));
   }
 
-  /** Private constructor. */
-  private Either(Optional<L> l, Optional<R> r) {
-    left = l;
-    right = r;
+  /** @return the left value */
+  public Optional<L> left() {
+    return left;
   }
 
-  /**
-   * Returns true if this is a left value.
-   *
-   * @return True if this is a left value
-   */
-  public boolean isLeft() {
-    return left.isPresent();
+  /** @return the right value */
+  public Optional<R> right() {
+    return right;
   }
 
   /**
-   * Returns true if this is a right value.
+   * Create a new {@code Optional<Either>} from two possibly null values.
    *
-   * @return True if this is a right value
-   */
-  public boolean isRight() {
-    return right.isPresent();
-  }
-
-  /**
-   * Returns the left value if this is a left value, otherwise throws an 
exception.
+   * <p>If both values are null, {@link Optional#empty()} is returned. Only 
one of the left or right
+   * values is allowed to be non-null, otherwise an {@link 
IllegalArgumentException} is thrown.
    *
-   * @return Left value
-   * @throws IllegalStateException if this is a right value
+   * @param left The left value (possibly null)
+   * @param right The right value (possibly null)
+   * @param <L> Left type
+   * @param <R> Right type
+   * @return an Optional Either representing one of the two values or empty if 
both are null
    */
-  public L getLeft() {
-    if (isRight()) {
-      throw new IllegalStateException("Not a left value");
+  public static <L, R> Optional<Either<L, R>> fromNullable(L left, R right) {
+    if (left != null && right == null) {
+      return Optional.of(left(left));
+    }
+    if (left == null && right != null) {
+      return Optional.of(right(right));
     }
-    return left.get();
+    if (left == null && right == null) {
+      return Optional.empty();
+    }
+    throw new IllegalArgumentException(
+        String.format(
+            "Only one of either left or right should be non-null. " + "Got 
(left: %s, right: %s)",
+            left, right));
   }
 
-  /**
-   * Returns the right value if this is a right value, otherwise throws an 
exception.
-   *
-   * @return Right value
-   * @throws IllegalStateException if this is a left value
-   */
-  public R getRight() {
-    if (isLeft()) {
-      throw new IllegalStateException("Not a right value");
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof Either)) {
+      return false;
     }
-    return right.get();
+
+    Either<?, ?> either = (Either<?, ?>) o;
+
+    return left.equals(either.left) && right.equals(either.right);
+  }
+
+  @Override
+  public int hashCode() {
+    return 31 * left.hashCode() + right.hashCode();
   }
 }
diff --git 
a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java 
b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
index de331b013d..e919e41b0b 100644
--- a/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
+++ b/core/src/test/java/org/apache/gravitino/listener/api/event/TestEither.java
@@ -29,36 +29,18 @@ public class TestEither {
   void testLeftValue() {
     Either<String, Integer> either = Either.left("alias");
 
-    Assertions.assertTrue(either.isLeft());
-    Assertions.assertFalse(either.isRight());
-    Assertions.assertEquals("alias", either.getLeft());
+    Assertions.assertTrue(either.left().isPresent());
+    Assertions.assertFalse(either.right().isPresent());
+    Assertions.assertEquals("alias", either.left().get());
   }
 
   @Test
   void testRightValue() {
     Either<String, Integer> either = Either.right(42);
 
-    Assertions.assertTrue(either.isRight());
-    Assertions.assertFalse(either.isLeft());
-    Assertions.assertEquals(42, either.getRight());
-  }
-
-  @Test
-  void testGetLeftThrowsOnRight() {
-    Either<String, Integer> either = Either.right(99);
-
-    IllegalStateException exception =
-        Assertions.assertThrows(IllegalStateException.class, either::getLeft);
-    Assertions.assertEquals("Not a left value", exception.getMessage());
-  }
-
-  @Test
-  void testGetRightThrowsOnLeft() {
-    Either<String, Integer> either = Either.left("lefty");
-
-    IllegalStateException exception =
-        Assertions.assertThrows(IllegalStateException.class, either::getRight);
-    Assertions.assertEquals("Not a right value", exception.getMessage());
+    Assertions.assertTrue(either.right().isPresent());
+    Assertions.assertFalse(either.left().isPresent());
+    Assertions.assertEquals(42, either.right().get());
   }
 
   @Test
@@ -67,10 +49,10 @@ public class TestEither {
     Either<String, Integer> right = Either.right(3);
 
     // Optional checks — not essential but good to verify Optional usage
-    Assertions.assertTrue(left.isLeft());
-    Assertions.assertEquals("model_v1", left.getLeft());
+    Assertions.assertTrue(left.left().isPresent());
+    Assertions.assertEquals("model_v1", left.left().get());
 
-    Assertions.assertTrue(right.isRight());
-    Assertions.assertEquals(3, right.getRight());
+    Assertions.assertTrue(right.right().isPresent());
+    Assertions.assertEquals(3, right.right().get());
   }
 }
diff --git a/dev/ci/chart_schema.yaml b/dev/ci/chart_schema.yaml
index c209822a19..8550d427e1 100644
--- a/dev/ci/chart_schema.yaml
+++ b/dev/ci/chart_schema.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+# 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.
+#     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.
 name: str()
 home: str(required=False)
 version: str()
diff --git a/dev/ci/lintconf.yaml b/dev/ci/lintconf.yaml
index c5c904f3e2..3e878e2c54 100644
--- a/dev/ci/lintconf.yaml
+++ b/dev/ci/lintconf.yaml
@@ -1,21 +1,16 @@
+# Copyright The Helm Authors
 #
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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
+# 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.
+#     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.
 ---
 rules:
   braces:
diff --git a/web/web/LICENSE.bin b/web/web/LICENSE.bin
index 7a1de16dad..a29d5b1e49 100644
--- a/web/web/LICENSE.bin
+++ b/web/web/LICENSE.bin
@@ -367,6 +367,8 @@
    buffer-crc32
    busboy
    call-bind
+   call-bind-apply-helpers
+   call-bound
    callsites
    camelcase-css
    cheerio
@@ -405,6 +407,7 @@
    dom-helpers
    dom-serializer
    duplexer
+   dunder-proto
    eastasianwidth
    end-of-stream
    enhanced-resolve
@@ -434,6 +437,7 @@
    eslint-plugin-react-hooks
    eslint-scope
    execa
+   fast-color
    fast-deep-equal
    fast-glob
    fast-json-stable-stringify
@@ -453,6 +457,7 @@
    function.prototype.name
    functions-have-names
    get-intrinsic
+   get-proto
    get-stream
    get-symbol-description
    get-tsconfig
@@ -532,6 +537,7 @@
    lodash.merge
    lodash-es
    loose-envify
+   math-intrinsics
    merge-stream
    micromatch
    minimist
diff --git a/web/web/licenses/call-bind-apply-helpers.txt 
b/web/web/licenses/call-bind-apply-helpers.txt
new file mode 100644
index 0000000000..f82f38963b
--- /dev/null
+++ b/web/web/licenses/call-bind-apply-helpers.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+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.
diff --git a/web/web/licenses/call-bound.txt b/web/web/licenses/call-bound.txt
new file mode 100644
index 0000000000..f82f38963b
--- /dev/null
+++ b/web/web/licenses/call-bound.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Jordan Harband
+
+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.
diff --git a/web/web/licenses/dunder-proto.txt 
b/web/web/licenses/dunder-proto.txt
new file mode 100644
index 0000000000..34995e79d1
--- /dev/null
+++ b/web/web/licenses/dunder-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+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.
diff --git a/web/web/licenses/fast-color.txt b/web/web/licenses/fast-color.txt
new file mode 100644
index 0000000000..fbf368a7fb
--- /dev/null
+++ b/web/web/licenses/fast-color.txt
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+Copyright (c) 2015-present Alipay.com, https://www.alipay.com/
+
+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.
diff --git a/web/web/licenses/get-proto.txt b/web/web/licenses/get-proto.txt
new file mode 100644
index 0000000000..eeabd1c37c
--- /dev/null
+++ b/web/web/licenses/get-proto.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Jordan Harband
+
+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.
diff --git a/web/web/licenses/math-intrinstics.txt 
b/web/web/licenses/math-intrinstics.txt
new file mode 100644
index 0000000000..34995e79d1
--- /dev/null
+++ b/web/web/licenses/math-intrinstics.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ECMAScript Shims
+
+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.

Reply via email to