From d734c33745dfd45655d10362578be1f2599e77ae Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 01/19] RequestOptions --- .../request/GetFeaturesBatchRequest.java | 107 ++++++++++++- .../client/request/GetFeaturesRequest.java | 70 ++++++++- .../tecton/client/request/RequestOptions.java | 140 ++++++++++++++++++ .../GetFeaturesRequestWithOptionsTest.java | 99 +++++++++++++ .../client/request/RequestOptionsTest.java | 94 ++++++++++++ 5 files changed, 501 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ai/tecton/client/request/RequestOptions.java create mode 100644 src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java create mode 100644 src/test/java/ai/tecton/client/request/RequestOptionsTest.java diff --git a/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java b/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java index 57966632..b22581be 100644 --- a/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java +++ b/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java @@ -46,6 +46,7 @@ public class GetFeaturesBatchRequest { private List requestList; private final int microBatchSize; private final Duration timeout; + private final RequestOptions requestOptions; private static final String BATCH_ENDPOINT = "/api/v1/feature-service/get-features-batch"; private static JsonAdapter jsonAdapter = null; @@ -82,7 +83,8 @@ public GetFeaturesBatchRequest( requestDataList, RequestConstants.DEFAULT_METADATA_OPTIONS, RequestConstants.DEFAULT_MICRO_BATCH_SIZE, - RequestConstants.NONE_TIMEOUT); + RequestConstants.NONE_TIMEOUT, + null); } /** @@ -116,7 +118,8 @@ public GetFeaturesBatchRequest( requestDataList, metadataOptions, RequestConstants.DEFAULT_MICRO_BATCH_SIZE, - RequestConstants.NONE_TIMEOUT); + RequestConstants.NONE_TIMEOUT, + null); } /** @@ -154,7 +157,8 @@ public GetFeaturesBatchRequest( requestDataList, metadataOptions, microBatchSize, - RequestConstants.NONE_TIMEOUT); + RequestConstants.NONE_TIMEOUT, + null); } /** @@ -191,8 +195,60 @@ public GetFeaturesBatchRequest( Set metadataOptions, int microBatchSize, Duration timeout) { + this( + workspaceName, + featureServiceName, + requestDataList, + metadataOptions, + microBatchSize, + timeout, + null); + } + + /** + * Constructor that creates a new GetFeaturesBatchRequest with the specified parameters including + * requestOptions + * + * @param workspaceName Name of the workspace in which the Feature Service is defined + * @param featureServiceName Name of the Feature Service for which the feature vectors are being + * requested + * @param requestDataList a {@link List} of {@link GetFeaturesRequestData} object with joinKeyMap + * and/or requestContextMap + * @param metadataOptions metadataOptions A {@link Set} of {@link MetadataOption} for retrieving + * additional metadata about the feature values. Use {@link + * RequestConstants#ALL_METADATA_OPTIONS} to request all metadata and {@link + * RequestConstants#NONE_METADATA_OPTIONS} to request no metadata respectively. By default, + * {@link RequestConstants#DEFAULT_METADATA_OPTIONS} will be added to each request + * @param microBatchSize an int value between 1 and {@value + * RequestConstants#MAX_MICRO_BATCH_SIZE}. The client splits the GetFeaturesBatchRequest into + * multiple micro batches of this size and executes them parallely. By default, the + * microBatchSize is set to {@value RequestConstants#DEFAULT_MICRO_BATCH_SIZE} + * @param timeout The max time in {@link Duration} for which the client waits for the batch + * requests to complete before canceling the operation and returning the partial list of + * results. + * @param requestOptions {@link RequestOptions} object with request-level options to control + * feature server behavior + * @throws InvalidRequestParameterException when workspaceName or featureServiceName is empty or + * null + * @throws InvalidRequestParameterException when requestDataList is invalid (null/empty or + * contains null/empty elements) + * @throws InvalidRequestParameterException when the microBatchSize is out of bounds of [ 1, + * {@value RequestConstants#MAX_MICRO_BATCH_SIZE} ] + */ + public GetFeaturesBatchRequest( + String workspaceName, + String featureServiceName, + List requestDataList, + Set metadataOptions, + int microBatchSize, + Duration timeout, + RequestOptions requestOptions) { validateParameters(workspaceName, featureServiceName, requestDataList, microBatchSize); this.timeout = timeout; + this.requestOptions = requestOptions; + + // Create final variable for use in lambda expressions + final RequestOptions finalRequestOptions = requestOptions; if (microBatchSize > 1 && requestDataList.size() > 1) { // For batch requests, partition the requestDataList into n sublists of size @@ -203,7 +259,11 @@ public GetFeaturesBatchRequest( .map( requestData -> new GetFeaturesMicroBatchRequest( - workspaceName, featureServiceName, requestData, metadataOptions)) + workspaceName, + featureServiceName, + requestData, + metadataOptions, + finalRequestOptions)) .collect(Collectors.toList()); this.microBatchSize = microBatchSize; jsonAdapter = moshi.adapter(GetFeaturesMicroBatchRequest.GetFeaturesRequestBatchJson.class); @@ -217,7 +277,11 @@ public GetFeaturesBatchRequest( .map( requestData -> new GetFeaturesRequest( - workspaceName, featureServiceName, requestData, metadataOptions)) + workspaceName, + featureServiceName, + requestData, + metadataOptions, + finalRequestOptions)) .collect(Collectors.toList()); this.microBatchSize = microBatchSize; this.endpoint = GetFeaturesRequest.ENDPOINT; @@ -272,6 +336,7 @@ public static class Builder { private Set metadataOptionList = RequestConstants.DEFAULT_METADATA_OPTIONS; private int microBatchSize = RequestConstants.DEFAULT_MICRO_BATCH_SIZE; private Duration timeout = RequestConstants.NONE_TIMEOUT; + private RequestOptions requestOptions; /** Constructs an empty Builder */ public Builder() { @@ -369,6 +434,18 @@ public Builder timeout(Duration timeout) { return this; } + /** + * Setter for {@link RequestOptions} + * + * @param requestOptions {@link RequestOptions} object with request-level options to control + * feature server behavior + * @return this Builder + */ + public Builder requestOptions(RequestOptions requestOptions) { + this.requestOptions = requestOptions; + return this; + } + /** * Returns an instance of {@link GetFeaturesBatchRequest} created from the fields set on this * builder @@ -386,7 +463,8 @@ public GetFeaturesBatchRequest build() throws TectonClientException { requestDataList, metadataOptionList, microBatchSize, - timeout); + timeout, + requestOptions); } } @@ -414,6 +492,7 @@ private static void validateParameters( static class GetFeaturesMicroBatchRequest extends AbstractGetFeaturesRequest { private final List requestDataList; + private final RequestOptions requestOptions; GetFeaturesMicroBatchRequest( String workspaceName, @@ -422,6 +501,18 @@ static class GetFeaturesMicroBatchRequest extends AbstractGetFeaturesRequest { Set metadataOptions) { super(workspaceName, featureServiceName, BATCH_ENDPOINT, metadataOptions); this.requestDataList = requestDataList; + this.requestOptions = null; + } + + GetFeaturesMicroBatchRequest( + String workspaceName, + String featureServiceName, + List requestDataList, + Set metadataOptions, + RequestOptions requestOptions) { + super(workspaceName, featureServiceName, BATCH_ENDPOINT, metadataOptions); + this.requestDataList = requestDataList; + this.requestOptions = requestOptions; } // Moshi JSON classes @@ -438,6 +529,7 @@ static class GetFeaturesBatchFields { String workspace_name; List request_data; Map metadata_options; + Map request_options; } static class RequestDataField { @@ -472,6 +564,9 @@ public String requestToJson() { metadataOptions.stream() .collect(Collectors.toMap(MetadataOption::getJsonName, (a) -> Boolean.TRUE)); } + if (requestOptions != null && !requestOptions.isEmpty()) { + getFeaturesFields.request_options = requestOptions.getOptions(); + } GetFeaturesRequestBatchJson getFeaturesRequestJson = new GetFeaturesRequestBatchJson(getFeaturesFields); try { diff --git a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java index d6526180..67d81eef 100644 --- a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java +++ b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java @@ -20,6 +20,7 @@ public class GetFeaturesRequest extends AbstractGetFeaturesRequest { static final String ENDPOINT = "/api/v1/feature-service/get-features"; private final JsonAdapter jsonAdapter; private final GetFeaturesRequestData getFeaturesRequestData; + private final RequestOptions requestOptions; private final Moshi moshi = new Moshi.Builder().add(SerializeNulls.JSON_ADAPTER_FACTORY).build(); /** @@ -40,6 +41,7 @@ public GetFeaturesRequest( super(workspaceName, featureServiceName, ENDPOINT, RequestConstants.DEFAULT_METADATA_OPTIONS); validateRequestParameters(getFeaturesRequestData); this.getFeaturesRequestData = getFeaturesRequestData; + this.requestOptions = null; jsonAdapter = moshi.adapter(GetFeaturesRequestJson.class); } @@ -66,6 +68,38 @@ public GetFeaturesRequest( super(workspaceName, featureServiceName, ENDPOINT, metadataOptions); validateRequestParameters(getFeaturesRequestData); this.getFeaturesRequestData = getFeaturesRequestData; + this.requestOptions = null; + jsonAdapter = moshi.adapter(GetFeaturesRequestJson.class); + } + + /** + * Constructor that creates a new GetFeaturesRequest with the specified parameters including + * requestOptions + * + * @param workspaceName Name of the workspace in which the Feature Service is defined + * @param featureServiceName Name of the Feature Service for which the feature vector is being + * requested + * @param getFeaturesRequestData {@link GetFeaturesRequestData} object with joinKeyMap and/or + * requestContextMap + * @param metadataOptions A {@link Set} of {@link MetadataOption} for retrieving additional + * metadata about the feature values. Use {@link RequestConstants#ALL_METADATA_OPTIONS} to + * request all metadata and {@link RequestConstants#NONE_METADATA_OPTIONS} to request no + * metadata respectively. By default, {@link RequestConstants#DEFAULT_METADATA_OPTIONS} will + * be added to each request + * @param requestOptions {@link RequestOptions} object with request-level options to control + * feature server behavior + */ + public GetFeaturesRequest( + String workspaceName, + String featureServiceName, + GetFeaturesRequestData getFeaturesRequestData, + Set metadataOptions, + RequestOptions requestOptions) { + + super(workspaceName, featureServiceName, ENDPOINT, metadataOptions); + validateRequestParameters(getFeaturesRequestData); + this.getFeaturesRequestData = getFeaturesRequestData; + this.requestOptions = requestOptions; jsonAdapter = moshi.adapter(GetFeaturesRequestJson.class); } @@ -73,6 +107,10 @@ GetFeaturesRequestData getFeaturesRequestData() { return this.getFeaturesRequestData; } + RequestOptions getRequestOptions() { + return this.requestOptions; + } + static class GetFeaturesRequestJson { GetFeaturesFields params; @@ -87,6 +125,7 @@ static class GetFeaturesFields { @SerializeNulls Map join_key_map; @SerializeNulls Map request_context_map; Map metadata_options; + Map request_options; } /** @@ -110,6 +149,9 @@ public String requestToJson() { metadataOptions.stream() .collect(Collectors.toMap(MetadataOption::getJsonName, (a) -> Boolean.TRUE)); } + if (requestOptions != null && !requestOptions.isEmpty()) { + getFeaturesFields.request_options = requestOptions.getOptions(); + } GetFeaturesRequestJson getFeaturesRequestJson = new GetFeaturesRequestJson(getFeaturesFields); try { return jsonAdapter.toJson(getFeaturesRequestJson); @@ -126,13 +168,14 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; GetFeaturesRequest that = (GetFeaturesRequest) o; - return getFeaturesRequestData.equals(that.getFeaturesRequestData); + return getFeaturesRequestData.equals(that.getFeaturesRequestData) + && Objects.equals(requestOptions, that.requestOptions); } /** Overrides hashCode() in class {@link Object} */ @Override public int hashCode() { - return Objects.hash(super.hashCode(), getFeaturesRequestData); + return Objects.hash(super.hashCode(), getFeaturesRequestData, requestOptions); } /** @@ -144,6 +187,7 @@ public static final class Builder { private String workspaceName; private String featureServiceName; private GetFeaturesRequestData getFeaturesRequestData; + private RequestOptions requestOptions; /** Constructor for instantiating an empty Builder */ public Builder() { @@ -200,6 +244,18 @@ public Builder getFeaturesRequestData(GetFeaturesRequestData getFeaturesRequestD return this; } + /** + * Setter for {@link RequestOptions} + * + * @param requestOptions {@link RequestOptions} object with request-level options to control + * feature server behavior + * @return this Builder + */ + public Builder requestOptions(RequestOptions requestOptions) { + this.requestOptions = requestOptions; + return this; + } + /** * Returns an instance of {@link GetFeaturesRequest} created from the fields set on this builder * @@ -208,7 +264,15 @@ public Builder getFeaturesRequestData(GetFeaturesRequestData getFeaturesRequestD * or empty */ public GetFeaturesRequest build() { - if (this.metadataOptions.isEmpty()) { + if (this.requestOptions != null) { + // If requestOptions is set, use the constructor that accepts it + Set options = + this.metadataOptions.isEmpty() + ? RequestConstants.DEFAULT_METADATA_OPTIONS + : this.metadataOptions; + return new GetFeaturesRequest( + workspaceName, featureServiceName, getFeaturesRequestData, options, requestOptions); + } else if (this.metadataOptions.isEmpty()) { return new GetFeaturesRequest(workspaceName, featureServiceName, getFeaturesRequestData); } else { return new GetFeaturesRequest( diff --git a/src/main/java/ai/tecton/client/request/RequestOptions.java b/src/main/java/ai/tecton/client/request/RequestOptions.java new file mode 100644 index 00000000..de61ba7e --- /dev/null +++ b/src/main/java/ai/tecton/client/request/RequestOptions.java @@ -0,0 +1,140 @@ +package ai.tecton.client.request; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * Class that represents request-level options to control feature server behavior. These options are + * sent as part of the requestOptions field in GetFeatures and GetFeaturesBatch requests. Option + * values must be either Integer or Boolean. + */ +public class RequestOptions { + + private Map options; + + /** Constructor that creates a new RequestOptions object with default empty options */ + public RequestOptions() { + this.options = new HashMap<>(); + } + + /** + * Sets a request option with the given key and value. + * + * @param key the option key + * @param value the option value (must be either Integer or Boolean) + * @return Returns the RequestOptions object for method chaining + * @throws IllegalArgumentException if value is not Integer or Boolean + */ + public RequestOptions setOption(String key, Object value) { + if (value != null && !(value instanceof Integer) && !(value instanceof Boolean)) { + throw new IllegalArgumentException( + "Option value must be either Integer or Boolean, got: " + + value.getClass().getSimpleName()); + } + this.options.put(key, value); + return this; + } + + /** + * Gets a specific option value by key. + * + * @param key the option key + * @return the option value, or null if not set + */ + public Object getOption(String key) { + return this.options.get(key); + } + + /** + * Gets a specific option value by key as an Integer. + * + * @param key the option key + * @return the option value as Integer, or null if not set or not an Integer + */ + public Integer getIntegerOption(String key) { + Object value = this.options.get(key); + return value instanceof Integer ? (Integer) value : null; + } + + /** + * Gets a specific option value by key as a Boolean. + * + * @param key the option key + * @return the option value as Boolean, or null if not set or not a Boolean + */ + public Boolean getBooleanOption(String key) { + Object value = this.options.get(key); + return value instanceof Boolean ? (Boolean) value : null; + } + + /** + * Gets all options as an unmodifiable map. + * + * @return Map containing all request options + */ + public Map getOptions() { + return new HashMap<>(this.options); + } + + /** + * Checks if any options are set. + * + * @return true if no options are set, false otherwise + */ + public boolean isEmpty() { + return this.options.isEmpty(); + } + + /** A Builder class for creating an instance of {@link RequestOptions} object */ + public static class Builder { + private RequestOptions requestOptions; + + /** Instantiates a new Builder */ + public Builder() { + requestOptions = new RequestOptions(); + } + + /** + * Sets a request option with the given key and value. + * + * @param key the option key + * @param value the option value (must be either Integer or Boolean) + * @return this Builder + * @throws IllegalArgumentException if value is not Integer or Boolean + */ + public Builder option(String key, Object value) { + requestOptions.setOption(key, value); + return this; + } + + /** + * Build a {@link RequestOptions} object from the Builder + * + * @return {@link RequestOptions} + */ + public RequestOptions build() { + return this.requestOptions; + } + } + + /** Overrides equals() in class {@link Object} */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RequestOptions that = (RequestOptions) o; + return Objects.equals(options, that.options); + } + + /** Overrides hashCode() in class {@link Object} */ + @Override + public int hashCode() { + return Objects.hash(options); + } + + @Override + public String toString() { + return "RequestOptions{" + "options=" + options + '}'; + } +} diff --git a/src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java b/src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java new file mode 100644 index 00000000..ce72837f --- /dev/null +++ b/src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java @@ -0,0 +1,99 @@ +package ai.tecton.client.request; + +import static org.junit.Assert.*; + +import ai.tecton.client.model.MetadataOption; +import java.util.HashSet; +import java.util.Set; +import org.junit.Test; + +public class GetFeaturesRequestWithOptionsTest { + + @Test + public void testGetFeaturesRequestWithRequestOptions() { + // Create request data + GetFeaturesRequestData requestData = + new GetFeaturesRequestData.Builder() + .joinKeyMap(java.util.Collections.singletonMap("testKey", "testValue")) + .requestContextMap(java.util.Collections.singletonMap("testKey", "testValue")) + .build(); + + // Create request options + RequestOptions requestOptions = + new RequestOptions.Builder() + .option("latency_budget_ms", 5000) + .option("coerceNullCountsToZero", true) + .option("readFromCache", false) + .option("writeFromCache", true) + .option("ignoreExtraRequestContextFields", false) + .build(); + + // Create request with options + Set metadataOptions = new HashSet<>(); + metadataOptions.add(MetadataOption.NAME); + metadataOptions.add(MetadataOption.DATA_TYPE); + + GetFeaturesRequest request = + new GetFeaturesRequest( + "testWorkspaceName", "testFSName", requestData, metadataOptions, requestOptions); + + // Verify JSON contains request_options with all expected values + String json = request.requestToJson(); + assertTrue(json.contains("request_options")); + assertTrue(json.contains("\"latency_budget_ms\":5000")); + assertTrue(json.contains("\"coerceNullCountsToZero\":true")); + assertTrue(json.contains("\"readFromCache\":false")); + assertTrue(json.contains("\"writeFromCache\":true")); + assertTrue(json.contains("\"ignoreExtraRequestContextFields\":false")); + } + + @Test + public void testGetFeaturesRequestBuilderWithRequestOptions() { + // Create request data + GetFeaturesRequestData requestData = + new GetFeaturesRequestData.Builder() + .joinKeyMap(java.util.Collections.singletonMap("testKey", "testValue")) + .build(); + + // Create request options + RequestOptions requestOptions = + new RequestOptions.Builder() + .option("latency_budget_ms", 3000) + .option("coerceNullCountsToZero", false) + .option("readFromCache", true) + .build(); + + // Use the builder to create request with options + GetFeaturesRequest request = + new GetFeaturesRequest.Builder() + .workspaceName("testWorkspaceName") + .featureServiceName("testFSName") + .getFeaturesRequestData(requestData) + .requestOptions(requestOptions) + .build(); + + // Verify JSON contains request_options with expected structure + String json = request.requestToJson(); + assertTrue(json.contains("request_options")); + assertTrue(json.contains("\"latency_budget_ms\":3000")); + assertTrue(json.contains("\"coerceNullCountsToZero\":false")); + assertTrue(json.contains("\"readFromCache\":true")); + } + + @Test + public void testGetFeaturesRequestWithoutRequestOptions() { + // Create request data + GetFeaturesRequestData requestData = + new GetFeaturesRequestData.Builder() + .joinKeyMap(java.util.Collections.singletonMap("testKey", "testValue")) + .build(); + + // Create request without options + GetFeaturesRequest request = + new GetFeaturesRequest("testWorkspaceName", "testFSName", requestData); + + // Verify JSON does not contain request_options + String json = request.requestToJson(); + assertFalse(json.contains("request_options")); + } +} diff --git a/src/test/java/ai/tecton/client/request/RequestOptionsTest.java b/src/test/java/ai/tecton/client/request/RequestOptionsTest.java new file mode 100644 index 00000000..93add292 --- /dev/null +++ b/src/test/java/ai/tecton/client/request/RequestOptionsTest.java @@ -0,0 +1,94 @@ +package ai.tecton.client.request; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class RequestOptionsTest { + + @Test + public void testRequestOptionsCreation() { + RequestOptions options = new RequestOptions(); + assertTrue(options.isEmpty()); + } + + @Test + public void testIntegerOptionSetting() { + RequestOptions options = new RequestOptions(); + options.setOption("latency_budget_ms", 1000); + + assertEquals(Integer.valueOf(1000), options.getIntegerOption("latency_budget_ms")); + assertEquals(Integer.valueOf(1000), options.getOption("latency_budget_ms")); + assertFalse(options.isEmpty()); + assertEquals(1, options.getOptions().size()); + } + + @Test + public void testBooleanOptionSetting() { + RequestOptions options = new RequestOptions(); + options.setOption("coerceNullCountsToZero", true); + + assertEquals(Boolean.TRUE, options.getBooleanOption("coerceNullCountsToZero")); + assertEquals(Boolean.TRUE, options.getOption("coerceNullCountsToZero")); + assertFalse(options.isEmpty()); + } + + @Test + public void testMultipleBooleanOptions() { + RequestOptions options = new RequestOptions(); + options.setOption("readFromCache", true); + options.setOption("writeFromCache", false); + options.setOption("ignoreExtraRequestContextFields", true); + + assertEquals(Boolean.TRUE, options.getBooleanOption("readFromCache")); + assertEquals(Boolean.FALSE, options.getBooleanOption("writeFromCache")); + assertEquals(Boolean.TRUE, options.getBooleanOption("ignoreExtraRequestContextFields")); + assertEquals(3, options.getOptions().size()); + } + + @Test + public void testMixedIntegerAndBooleanOptions() { + RequestOptions options = new RequestOptions(); + options.setOption("latency_budget_ms", 5000); + options.setOption("coerceNullCountsToZero", false); + + assertEquals(Integer.valueOf(5000), options.getIntegerOption("latency_budget_ms")); + assertEquals(Boolean.FALSE, options.getBooleanOption("coerceNullCountsToZero")); + assertEquals(2, options.getOptions().size()); + } + + @Test(expected = IllegalArgumentException.class) + public void testInvalidValueTypeThrowsException() { + RequestOptions options = new RequestOptions(); + options.setOption("invalid_option", "string_value"); + } + + @Test + public void testBuilder() { + RequestOptions options = + new RequestOptions.Builder() + .option("latency_budget_ms", 2000) + .option("readFromCache", true) + .option("writeFromCache", false) + .build(); + + assertEquals(Integer.valueOf(2000), options.getIntegerOption("latency_budget_ms")); + assertEquals(Boolean.TRUE, options.getBooleanOption("readFromCache")); + assertEquals(Boolean.FALSE, options.getBooleanOption("writeFromCache")); + assertEquals(3, options.getOptions().size()); + } + + @Test + public void testEqualsAndHashCode() { + RequestOptions options1 = new RequestOptions(); + options1.setOption("latency_budget_ms", 1000); + options1.setOption("readFromCache", true); + + RequestOptions options2 = new RequestOptions(); + options2.setOption("latency_budget_ms", 1000); + options2.setOption("readFromCache", true); + + assertEquals(options1, options2); + assertEquals(options1.hashCode(), options2.hashCode()); + } +} From 40c318e3073390885b810fa56795a3c420296e57 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 23:38:25 -0400 Subject: [PATCH 02/19] Update build.gradle for publishing to NMCP --- build.gradle | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 83e60b90..9185bde9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,8 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.gradle.api.tasks.testing.logging.TestLogEvent - plugins { id 'java-library' id 'maven-publish' id 'signing' + id 'com.gradleup.nmcp' version '1.0.1' } group 'ai.tecton' @@ -91,24 +89,10 @@ artifacts { archives javadocJar } -// Publish JAR to Nexus +// Configure publishing for Central Portal publishing { - repositories { - maven { - credentials { - username = findProperty('ossrh.username') - password = System.getenv('OSSRH_TOKEN') - } - if (version.endsWith('-SNAPSHOT')) { - url "https://s01.oss.sonatype.org/content/repositories/snapshots/" - } else { - url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" - } - } - } - publications { - mavenJava(MavenPublication) { + maven(MavenPublication) { from components.java artifact sourcesJar artifact javadocJar @@ -146,9 +130,17 @@ publishing { } } +// Configure signing signing { def signingKey = System.getenv('CLIENT_GPG_KEY') def signingPassword = System.getenv('CLIENT_GPG_PASSPHRASE') useInMemoryPgpKeys(signingKey, signingPassword) - sign publishing.publications.mavenJava + sign publishing.publications.maven +} + +// Configure New Maven Central Publishing (NMCP) plugin for Central Portal +nmcp { + publishingType = "AUTOMATIC" + username = findProperty('centralPortal.username') ?: System.getenv('CENTRAL_PORTAL_USERNAME') + password = findProperty('centralPortal.password') ?: System.getenv('CENTRAL_PORTAL_PASSWORD') } From ccdc080fe01657b34c9655314008cadaf105df5d Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Sat, 19 Jul 2025 22:23:28 -0400 Subject: [PATCH 03/19] More gradle changes --- build.gradle | 51 ++++++++++++++++++++++++++++++++--------------- gradle.properties | 2 +- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 9185bde9..9e775cb4 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,6 @@ plugins { id 'java-library' id 'maven-publish' id 'signing' - id 'com.gradleup.nmcp' version '1.0.1' } group 'ai.tecton' @@ -62,11 +61,11 @@ test { useJUnit() testLogging { showStandardStreams = true - events = [TestLogEvent.FAILED, - TestLogEvent.PASSED, - TestLogEvent.SKIPPED, - TestLogEvent.STANDARD_OUT] - exceptionFormat = TestExceptionFormat.FULL + events = [org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED, + org.gradle.api.tasks.testing.logging.TestLogEvent.PASSED, + org.gradle.api.tasks.testing.logging.TestLogEvent.SKIPPED, + org.gradle.api.tasks.testing.logging.TestLogEvent.STANDARD_OUT] + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL showExceptions = true showCauses = true showStackTraces = true @@ -89,8 +88,29 @@ artifacts { archives javadocJar } -// Configure publishing for Central Portal +// Configure publishing for Central Portal using maven-publish plugin publishing { + repositories { + maven { + name = "CentralPortal" + // Use snapshots repository for SNAPSHOT versions, main repository for releases + def releasesRepoUrl = "https://central.sonatype.com/api/v1/publisher/upload" + def snapshotsRepoUrl = "https://central.sonatype.com/repository/maven-snapshots/" + url = version.toString().endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + + credentials { + username = findProperty('centralPortal.username') ?: System.getenv('CENTRAL_PORTAL_USERNAME') + password = findProperty('centralPortal.password') ?: System.getenv('CENTRAL_PORTAL_PASSWORD') + } + } + + // Local staging repository for testing + maven { + name = "LocalStaging" + url = uri(layout.buildDirectory.dir("staging-deploy")) + } + } + publications { maven(MavenPublication) { from components.java @@ -130,17 +150,16 @@ publishing { } } -// Configure signing +// Configure signing (conditional - only when GPG keys are available) signing { def signingKey = System.getenv('CLIENT_GPG_KEY') def signingPassword = System.getenv('CLIENT_GPG_PASSPHRASE') - useInMemoryPgpKeys(signingKey, signingPassword) - sign publishing.publications.maven -} -// Configure New Maven Central Publishing (NMCP) plugin for Central Portal -nmcp { - publishingType = "AUTOMATIC" - username = findProperty('centralPortal.username') ?: System.getenv('CENTRAL_PORTAL_USERNAME') - password = findProperty('centralPortal.password') ?: System.getenv('CENTRAL_PORTAL_PASSWORD') + // Only sign if both key and password are available + required { signingKey != null && signingPassword != null } + + if (signingKey != null && signingPassword != null) { + useInMemoryPgpKeys(signingKey, signingPassword) + sign publishing.publications.maven + } } diff --git a/gradle.properties b/gradle.properties index 42f95471..33c2aa8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=0.9.2-SNAPSHOT +version=0.9.4-SNAPSHOT ossrh.username=tecton-team From 03e809231474e2b250d98798e8c621d42a0b517b Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Sun, 20 Jul 2025 13:16:18 -0400 Subject: [PATCH 04/19] Make secrets available to publish snapshot action --- .DS_Store | Bin 0 -> 6148 bytes .github/workflows/publish-snapshot.yml | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9c7e095a39565e9fec75f52b03c6c0fb8e8f112e GIT binary patch literal 6148 zcmeHKOG-mQ5Uh>?1KDKha!w$4gCQg*$OR+_QIH5?vVNBc8SOA#O9dYt7Ha~YC*`zW?r1Oqv9I!oZ-uJI>qw4Dk=icHTJG|iI zJAc2+Td&iUl>$;g3P=GdAO(J@fcIY7Y@Vnn1*Cu!I4j`ahemhog+pR|Iv8REAWoSM z<2q&uV)F#C7Y>Qc&@8FMq*{#_mUQM@)%C(5G3l@xKCGT>HKABMo%gpWhxJ57DIf(d z6}ZXm!u$W4{=@u#NzzUVNP&N)fK6AM)snANy>;|*-fJ8Ek?u90bT_Vp!VvA4810xF fZ^w60ly%M5Jnw}=V$hinI#E9Zu8T|x{IvpK{InHg literal 0 HcmV?d00001 diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index 09a06d5f..b56f82ef 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -30,4 +30,6 @@ jobs: OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} CLIENT_GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} CLIENT_GPG_KEY: ${{ secrets.CLIENT_GPG_KEY }} + CENTRAL_PORTAL_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} + CENTRAL_PORTAL_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} run: ./gradlew publish From 55a1f60de6d1841a3b35342842ab15117b8626ad Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Sun, 20 Jul 2025 13:16:29 -0400 Subject: [PATCH 05/19] Make secrets available to publish snapshot action --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 632f1c25..2fdbb116 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ bin/ .gradle/ gradle/ build/ +.DS_Store From bb51cd3c82503f0bc3972b2e25b79184bced59af Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Tue, 22 Jul 2025 01:09:46 -0400 Subject: [PATCH 06/19] Switch to maven --- .DS_Store | Bin 6148 -> 0 bytes .../publish-snapshot-alternative.yml | 39 +++ .github/workflows/publish-snapshot.yml | 45 +-- .github/workflows/release-java-client.yml | 43 ++- .mvn/wrapper/maven-wrapper.properties | 19 ++ build.gradle | 165 ----------- gradle.properties | 2 - gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 5 - gradlew | 185 ------------ gradlew.bat | 89 ------ mvnw | 259 +++++++++++++++++ mvnw.cmd | 149 ++++++++++ pom.xml | 265 ++++++++++++++++++ settings.gradle | 1 - .../ai/tecton/client/version/Version.java | 7 + 16 files changed, 795 insertions(+), 478 deletions(-) delete mode 100644 .DS_Store create mode 100644 .github/workflows/publish-snapshot-alternative.yml create mode 100644 .mvn/wrapper/maven-wrapper.properties delete mode 100644 build.gradle delete mode 100644 gradle.properties delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100755 gradlew delete mode 100644 gradlew.bat create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml delete mode 100644 settings.gradle create mode 100644 src/main/java-templates/ai/tecton/client/version/Version.java diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9c7e095a39565e9fec75f52b03c6c0fb8e8f112e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG-mQ5Uh>?1KDKha!w$4gCQg*$OR+_QIH5?vVNBc8SOA#O9dYt7Ha~YC*`zW?r1Oqv9I!oZ-uJI>qw4Dk=icHTJG|iI zJAc2+Td&iUl>$;g3P=GdAO(J@fcIY7Y@Vnn1*Cu!I4j`ahemhog+pR|Iv8REAWoSM z<2q&uV)F#C7Y>Qc&@8FMq*{#_mUQM@)%C(5G3l@xKCGT>HKABMo%gpWhxJ57DIf(d z6}ZXm!u$W4{=@u#NzzUVNP&N)fK6AM)snANy>;|*-fJ8Ek?u90bT_Vp!VvA4810xF fZ^w60ly%M5Jnw}=V$hinI#E9Zu8T|x{IvpK{InHg diff --git a/.github/workflows/publish-snapshot-alternative.yml b/.github/workflows/publish-snapshot-alternative.yml new file mode 100644 index 00000000..a043473c --- /dev/null +++ b/.github/workflows/publish-snapshot-alternative.yml @@ -0,0 +1,39 @@ +name: publish-snapshot-alternative +on: + workflow_dispatch: + push: + branches: + - 'main' +jobs: + java-maven-build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: zulu + java-version: 8 + cache: maven + - name: Run Maven Build + run: ./mvnw clean package + publish-snapshot-jar: + runs-on: ubuntu-latest + needs: java-maven-build + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: zulu + java-version: 8 + cache: maven + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.CLIENT_GPG_KEY }} + passphrase: ${{ secrets.CLIENT_GPG_PASSPHRASE }} + - name: Publish Snapshot + env: + CENTRAL_TOKEN_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} + CENTRAL_TOKEN_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} + CLIENT_GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} + run: ./mvnw clean deploy -Dgpg.passphrase="${CLIENT_GPG_PASSPHRASE}" diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index b56f82ef..b0216dd7 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -1,35 +1,46 @@ name: publish-snapshot on: workflow_dispatch: + push: branches: - 'main' jobs: - java-gradle-build: + java-maven-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: zulu java-version: 8 - cache: gradle - - name: Run Gradle Build - run: ./gradlew build + cache: maven + - name: Run Maven Build + run: ./mvnw clean package publish-snapshot-jar: runs-on: ubuntu-latest - needs: java-gradle-build + needs: java-maven-build + permissions: + contents: read + packages: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.CLIENT_GPG_KEY }} + passphrase: ${{ secrets.CLIENT_GPG_PASSPHRASE }} + - name: Set up Java for Maven build + uses: actions/setup-java@v4 with: distribution: zulu java-version: 8 - cache: gradle - - name: Publish Snapshot + cache: maven + server-id: central-snapshots + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + - name: Publish to Maven Central Repository + run: ./mvnw --batch-mode deploy env: - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - CLIENT_GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} - CLIENT_GPG_KEY: ${{ secrets.CLIENT_GPG_KEY }} - CENTRAL_PORTAL_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} - CENTRAL_PORTAL_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} - run: ./gradlew publish + MAVEN_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} diff --git a/.github/workflows/release-java-client.yml b/.github/workflows/release-java-client.yml index 6e5da2f5..1a63f5ba 100644 --- a/.github/workflows/release-java-client.yml +++ b/.github/workflows/release-java-client.yml @@ -8,34 +8,49 @@ on: branches: - 'main' jobs: - java-gradle-build: + java-maven-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: zulu java-version: 8 - cache: gradle - - name: Run Gradle Build - run: ./gradlew build + cache: maven + - name: Run Maven Build + run: ./mvnw clean package publish-jar: runs-on: ubuntu-latest - needs: java-gradle-build + needs: java-maven-build + permissions: + contents: read + packages: write steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v5 + with: + gpg_private_key: ${{ secrets.CLIENT_GPG_KEY }} + passphrase: ${{ secrets.CLIENT_GPG_PASSPHRASE }} + - name: Set up Java for Maven build + uses: actions/setup-java@v4 with: distribution: zulu java-version: 8 - cache: gradle + cache: maven + server-id: central + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + - name: Set Release Version + if: "${{ github.event.inputs.version != '' }}" + run: ./mvnw versions:set -DnewVersion=${{github.event.inputs.version}} -DgenerateBackupPoms=false - name: Publish Release Version if: "${{ github.event.inputs.version != '' }}" + run: ./mvnw --batch-mode deploy -DperformRelease=true env: - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - CLIENT_GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} - CLIENT_GPG_KEY: ${{ secrets.CLIENT_GPG_KEY }} - run: ./gradlew -Pversion=${{inputs.version}} publish + MAVEN_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} - name: Handle Empty Version if: "${{ github.event.inputs.version == '' }}" run: echo Please specify a non empty release version diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..d58dfb70 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# 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 +# +# 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. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 9e775cb4..00000000 --- a/build.gradle +++ /dev/null @@ -1,165 +0,0 @@ -plugins { - id 'java-library' - id 'maven-publish' - id 'signing' -} - -group 'ai.tecton' -version = findProperty('version') -repositories { - mavenCentral() -} - -sourceCompatibility = 8 -targetCompatibility = 8 - -// Project dependencies -dependencies { - // OkHttp Client included as an API dependency because it is present in the public API of this library. - api group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.10.0' - - // Moshi JSON Parsing Library - implementation group: 'com.squareup.moshi', name: 'moshi', version: '1.13.0' - // Moshi JSON Adapter Library for Standard Java Types - implementation group: 'com.squareup.moshi', name: 'moshi-adapters', version: '1.13.0' - // StringUtils and Validation checks - implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' - // Collection operations such as Partition and Parallel Streams - implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' - // JUnit tests - testImplementation 'junit:junit:4.13.2' - // Mock Server for OkHttp Testing - testImplementation("com.squareup.okhttp3:mockwebserver:4.10.0") - // Mockito for mock tests - testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.3.1' -} - -task generateVersionFile { - def outputDir = file("$buildDir/generated-src/ai.tecton.client.version") - outputs.dir outputDir - - doLast { - outputDir.mkdirs() - def versionFile = new File(outputDir, "Version.java") - versionFile.text = """// Generated by a task defined in build.gradle. Do not modify this file directly. - -package ai.tecton.client.version; - -public class Version { - public static final String VERSION = "${project.version}"; -} -""" - } -} - -sourceSets.main.java.srcDir "$buildDir/generated-src/ai.tecton.client.version" - -compileJava.dependsOn generateVersionFile - -// Run tests during build and output status -test { - useJUnit() - testLogging { - showStandardStreams = true - events = [org.gradle.api.tasks.testing.logging.TestLogEvent.FAILED, - org.gradle.api.tasks.testing.logging.TestLogEvent.PASSED, - org.gradle.api.tasks.testing.logging.TestLogEvent.SKIPPED, - org.gradle.api.tasks.testing.logging.TestLogEvent.STANDARD_OUT] - exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL - showExceptions = true - showCauses = true - showStackTraces = true - } -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set("javadoc") - from javadoc.destinationDir -} - -task sourcesJar(type: Jar) { - dependsOn(generateVersionFile) - archiveClassifier.set("sources") - from sourceSets.main.allSource -} - -artifacts { - archives sourcesJar - archives javadocJar -} - -// Configure publishing for Central Portal using maven-publish plugin -publishing { - repositories { - maven { - name = "CentralPortal" - // Use snapshots repository for SNAPSHOT versions, main repository for releases - def releasesRepoUrl = "https://central.sonatype.com/api/v1/publisher/upload" - def snapshotsRepoUrl = "https://central.sonatype.com/repository/maven-snapshots/" - url = version.toString().endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - - credentials { - username = findProperty('centralPortal.username') ?: System.getenv('CENTRAL_PORTAL_USERNAME') - password = findProperty('centralPortal.password') ?: System.getenv('CENTRAL_PORTAL_PASSWORD') - } - } - - // Local staging repository for testing - maven { - name = "LocalStaging" - url = uri(layout.buildDirectory.dir("staging-deploy")) - } - } - - publications { - maven(MavenPublication) { - from components.java - artifact sourcesJar - artifact javadocJar - - pom { - name = 'Tecton Java Client' - artifactId = 'java-client' - packaging = 'jar' - description = 'A Java Client Library for Tecton Online Feature Store' - url = 'https://github.com/tecton-ai/tecton-http-client-java' - - scm { - connection = 'scm:git:git@github.com:tecton-ai/tecton-http-client-java.git' - developerConnection = 'scm:git:git@github.com:tecton-ai/tecton-http-client-java.git' - url = 'https://github.com/tecton-ai/tecton-http-client-java' - } - - developers { - developer { - name = 'PlatEng-RSS' - email = 'plateng-rss-team@tecton.ai' - organization = 'Tecton' - organizationUrl = 'https://www.tecton.ai/' - } - } - - licenses { - license { - name = 'The Apache License, Version 2.0' - url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - } - } - } - } - } -} - -// Configure signing (conditional - only when GPG keys are available) -signing { - def signingKey = System.getenv('CLIENT_GPG_KEY') - def signingPassword = System.getenv('CLIENT_GPG_PASSPHRASE') - - // Only sign if both key and password are available - required { signingKey != null && signingPassword != null } - - if (signingKey != null && signingPassword != null) { - useInMemoryPgpKeys(signingKey, signingPassword) - sign publishing.publications.maven - } -} diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index 33c2aa8a..00000000 --- a/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -version=0.9.4-SNAPSHOT -ossrh.username=tecton-team diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59536 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 05679dc3..00000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew deleted file mode 100755 index 744e882e..00000000 --- a/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# 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 -# -# https://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. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index ac1b06f9..00000000 --- a/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/mvnw b/mvnw new file mode 100755 index 00000000..19529ddf --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# 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 +# +# 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 Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 00000000..b150b91e --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..8601b168 --- /dev/null +++ b/pom.xml @@ -0,0 +1,265 @@ + + + 4.0.0 + + ai.tecton + java-client + 0.9.4-SNAPSHOT + jar + + Tecton Java Client + A Java Client Library for Tecton Online Feature Store + https://github.com/tecton-ai/tecton-http-client-java + + + 8 + 8 + UTF-8 + 4.10.0 + 1.13.0 + 3.12.0 + 4.4 + 4.13.2 + 4.3.1 + + + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + PlatEng-RSS + plateng-rss-team@tecton.ai + Tecton + https://www.tecton.ai/ + + + + + scm:git:git@github.com:tecton-ai/tecton-http-client-java.git + scm:git:git@github.com:tecton-ai/tecton-http-client-java.git + https://github.com/tecton-ai/tecton-http-client-java + + + + + central-snapshots + https://central.sonatype.com/repository/maven-snapshots/ + + + + + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + + + + com.squareup.moshi + moshi + ${moshi.version} + + + + + com.squareup.moshi + moshi-adapters + ${moshi.version} + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + + + + junit + junit + ${junit.version} + test + + + + + com.squareup.okhttp3 + mockwebserver + ${okhttp.version} + test + + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 8 + 8 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + + **/*Test.java + + + + + + + org.codehaus.mojo + templating-maven-plugin + 1.0.0 + + + generate-version-class + + filter-sources + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + + jar-no-fork + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + + attach-javadocs + + jar + + + + + 8 + none + + + + + + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 + true + + central + true + true + uploaded + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.1.0 + + + --pinentry-mode + loopback + --batch + + ${env.GPG_PASSPHRASE} + + + + sign-artifacts + verify + + sign + + + + + + + + + + + release + + + performRelease + true + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.1.0 + + + sign-artifacts + verify + + sign + + + + + + + + + diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 85b0c099..00000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'java-client' diff --git a/src/main/java-templates/ai/tecton/client/version/Version.java b/src/main/java-templates/ai/tecton/client/version/Version.java new file mode 100644 index 00000000..2299739a --- /dev/null +++ b/src/main/java-templates/ai/tecton/client/version/Version.java @@ -0,0 +1,7 @@ +// Generated by Maven templating plugin. Do not modify this file directly. + +package ai.tecton.client.version; + +public class Version { + public static final String VERSION = "${project.version}"; +} From a4ea30d665359a9e94b798d7ba694685cd66db5a Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Tue, 22 Jul 2025 23:45:09 -0400 Subject: [PATCH 07/19] remove unnecessary changes --- .../publish-snapshot-alternative.yml | 39 ------------------- .gitignore | 1 - 2 files changed, 40 deletions(-) delete mode 100644 .github/workflows/publish-snapshot-alternative.yml diff --git a/.github/workflows/publish-snapshot-alternative.yml b/.github/workflows/publish-snapshot-alternative.yml deleted file mode 100644 index a043473c..00000000 --- a/.github/workflows/publish-snapshot-alternative.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: publish-snapshot-alternative -on: - workflow_dispatch: - push: - branches: - - 'main' -jobs: - java-maven-build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: zulu - java-version: 8 - cache: maven - - name: Run Maven Build - run: ./mvnw clean package - publish-snapshot-jar: - runs-on: ubuntu-latest - needs: java-maven-build - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: zulu - java-version: 8 - cache: maven - - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v5 - with: - gpg_private_key: ${{ secrets.CLIENT_GPG_KEY }} - passphrase: ${{ secrets.CLIENT_GPG_PASSPHRASE }} - - name: Publish Snapshot - env: - CENTRAL_TOKEN_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }} - CENTRAL_TOKEN_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }} - CLIENT_GPG_PASSPHRASE: ${{ secrets.CLIENT_GPG_PASSPHRASE }} - run: ./mvnw clean deploy -Dgpg.passphrase="${CLIENT_GPG_PASSPHRASE}" diff --git a/.gitignore b/.gitignore index 2fdbb116..632f1c25 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ bin/ .gradle/ gradle/ build/ -.DS_Store From 843352ca210f6e50ea38455386e206b0de2831ba Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Wed, 23 Jul 2025 15:19:58 -0400 Subject: [PATCH 08/19] Update java-build.yml --- .github/workflows/java-build.yml | 12 +- .../tecton/client/TectonClient.Builder.html | 421 + .../ai/tecton/client/TectonClient.html | 554 + .../client/TectonClientOptions.Builder.html | 440 + .../ai/tecton/client/TectonClientOptions.html | 470 + .../class-use/TectonClient.Builder.html | 217 + .../tecton/client/class-use/TectonClient.html | 196 + .../TectonClientOptions.Builder.html | 224 + .../client/class-use/TectonClientOptions.html | 258 + .../exceptions/BadRequestException.html | 322 + .../client/exceptions/ForbiddenException.html | 323 + .../exceptions/GatewayTimeoutException.html | 323 + .../HttpStatusExceptionFactory.html | 311 + .../InternalServerErrorException.html | 322 + .../InvalidRequestParameterException.html | 320 + .../ResourceExhaustedException.html | 322 + .../exceptions/ResourceNotFoundException.html | 323 + .../ServiceUnavailableException.html | 323 + .../exceptions/TectonClientException.html | 361 + .../client/exceptions/TectonErrorMessage.html | 695 + .../client/exceptions/TectonException.html | 393 + .../exceptions/TectonServiceException.html | 361 + .../exceptions/UnauthorizedException.html | 322 + .../class-use/BadRequestException.html | 150 + .../class-use/ForbiddenException.html | 150 + .../class-use/GatewayTimeoutException.html | 150 + .../class-use/HttpStatusExceptionFactory.html | 150 + .../InternalServerErrorException.html | 150 + .../InvalidRequestParameterException.html | 245 + .../class-use/ResourceExhaustedException.html | 150 + .../class-use/ResourceNotFoundException.html | 150 + .../ServiceUnavailableException.html | 150 + .../class-use/TectonClientException.html | 479 + .../class-use/TectonErrorMessage.html | 150 + .../exceptions/class-use/TectonException.html | 286 + .../class-use/TectonServiceException.html | 255 + .../class-use/UnauthorizedException.html | 150 + .../client/exceptions/package-summary.html | 266 + .../client/exceptions/package-tree.html | 199 + .../tecton/client/exceptions/package-use.html | 344 + .../client/model/FeatureServiceMetadata.html | 468 + .../ai/tecton/client/model/FeatureStatus.html | 468 + .../ai/tecton/client/model/FeatureValue.html | 709 + .../tecton/client/model/MetadataOption.html | 515 + .../ai/tecton/client/model/NameAndType.html | 436 + .../client/model/SloInformation.Builder.html | 396 + ...SloInformation.SloIneligibilityReason.html | 411 + .../tecton/client/model/SloInformation.html | 508 + .../ai/tecton/client/model/ValueType.html | 474 + .../class-use/FeatureServiceMetadata.html | 198 + .../client/model/class-use/FeatureStatus.html | 231 + .../client/model/class-use/FeatureValue.html | 205 + .../model/class-use/MetadataOption.html | 347 + .../client/model/class-use/NameAndType.html | 252 + .../class-use/SloInformation.Builder.html | 222 + ...SloInformation.SloIneligibilityReason.html | 257 + .../model/class-use/SloInformation.html | 236 + .../client/model/class-use/ValueType.html | 307 + .../tecton/client/model/package-summary.html | 238 + .../ai/tecton/client/model/package-tree.html | 186 + .../ai/tecton/client/model/package-use.html | 292 + .../ai/tecton/client/package-summary.html | 190 + .../ai/tecton/client/package-tree.html | 168 + .../apidocs/ai/tecton/client/package-use.html | 232 + ...ractGetFeaturesRequest.SerializeNulls.html | 244 + .../request/AbstractGetFeaturesRequest.html | 330 + .../client/request/AbstractTectonRequest.html | 439 + ...FeatureServiceMetadataRequest.Builder.html | 371 + .../GetFeatureServiceMetadataRequest.html | 393 + .../GetFeaturesBatchRequest.Builder.html | 532 + .../request/GetFeaturesBatchRequest.html | 691 + .../request/GetFeaturesRequest.Builder.html | 449 + .../client/request/GetFeaturesRequest.html | 503 + .../GetFeaturesRequestData.Builder.html | 380 + .../request/GetFeaturesRequestData.html | 635 + .../client/request/RequestConstants.html | 412 + .../request/RequestOptions.Builder.html | 351 + .../tecton/client/request/RequestOptions.html | 524 + ...ractGetFeaturesRequest.SerializeNulls.html | 150 + .../class-use/AbstractGetFeaturesRequest.html | 216 + .../class-use/AbstractTectonRequest.html | 216 + ...FeatureServiceMetadataRequest.Builder.html | 205 + .../GetFeatureServiceMetadataRequest.html | 226 + .../GetFeaturesBatchRequest.Builder.html | 245 + .../class-use/GetFeaturesBatchRequest.html | 228 + .../class-use/GetFeaturesRequest.Builder.html | 226 + .../request/class-use/GetFeaturesRequest.html | 226 + .../GetFeaturesRequestData.Builder.html | 205 + .../class-use/GetFeaturesRequestData.html | 390 + .../request/class-use/RequestConstants.html | 150 + .../class-use/RequestOptions.Builder.html | 199 + .../request/class-use/RequestOptions.html | 263 + .../client/request/package-summary.html | 271 + .../tecton/client/request/package-tree.html | 189 + .../ai/tecton/client/request/package-use.html | 303 + .../GetFeatureServiceMetadataResponse.html | 338 + .../response/GetFeaturesBatchResponse.html | 419 + .../client/response/GetFeaturesResponse.html | 426 + .../GetFeatureServiceMetadataResponse.html | 196 + .../class-use/GetFeaturesBatchResponse.html | 197 + .../class-use/GetFeaturesResponse.html | 227 + .../client/response/package-summary.html | 189 + .../tecton/client/response/package-tree.html | 167 + .../tecton/client/response/package-use.html | 227 + .../tecton/client/transport/HttpResponse.html | 338 + .../TectonHttpClient.HttpMethod.html | 410 + .../client/transport/TectonHttpClient.html | 423 + .../transport/class-use/HttpResponse.html | 244 + .../TectonHttpClient.HttpMethod.html | 285 + .../transport/class-use/TectonHttpClient.html | 150 + .../client/transport/package-summary.html | 196 + .../tecton/client/transport/package-tree.html | 180 + .../tecton/client/transport/package-use.html | 237 + .../ai/tecton/client/version/Version.html | 316 + .../client/version/class-use/Version.html | 150 + .../client/version/package-summary.html | 168 + .../tecton/client/version/package-tree.html | 165 + .../ai/tecton/client/version/package-use.html | 150 + target/apidocs/allclasses-index.html | 464 + target/apidocs/allclasses.html | 78 + target/apidocs/allpackages-index.html | 203 + target/apidocs/constant-values.html | 379 + target/apidocs/deprecated-list.html | 150 + target/apidocs/element-list | 7 + target/apidocs/help-doc.html | 282 + target/apidocs/index-all.html | 1468 ++ target/apidocs/index.html | 199 + target/apidocs/jquery-ui.overrides.css | 35 + .../apidocs/jquery/external/jquery/jquery.js | 10872 +++++++++++++++ target/apidocs/jquery/jquery-3.6.1.min.js | 2 + target/apidocs/jquery/jquery-ui.min.css | 6 + target/apidocs/jquery/jquery-ui.min.js | 6 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + target/apidocs/jquery/jszip/dist/jszip.js | 11370 ++++++++++++++++ target/apidocs/jquery/jszip/dist/jszip.min.js | 13 + target/apidocs/legal/ADDITIONAL_LICENSE_INFO | 37 + target/apidocs/legal/ASSEMBLY_EXCEPTION | 27 + target/apidocs/legal/LICENSE | 347 + target/apidocs/legal/jquery.md | 72 + target/apidocs/legal/jqueryUI.md | 49 + target/apidocs/legal/jszip.md | 653 + target/apidocs/legal/pako.md | 43 + target/apidocs/member-search-index.js | 1 + target/apidocs/member-search-index.zip | Bin 0 -> 3428 bytes target/apidocs/overview-summary.html | 23 + target/apidocs/overview-tree.html | 263 + target/apidocs/package-search-index.js | 1 + target/apidocs/package-search-index.zip | Bin 0 -> 282 bytes target/apidocs/resources/glass.png | Bin 0 -> 499 bytes target/apidocs/resources/x.png | Bin 0 -> 394 bytes target/apidocs/script.js | 149 + target/apidocs/search.js | 326 + target/apidocs/serialized-form.html | 231 + target/apidocs/stylesheet.css | 910 ++ target/apidocs/type-search-index.js | 1 + target/apidocs/type-search-index.zip | Bin 0 -> 672 bytes .../tecton/client/TectonClient$Builder.class | Bin 0 -> 1542 bytes .../ai/tecton/client/TectonClient.class | Bin 0 -> 5811 bytes .../client/TectonClientOptions$Builder.class | Bin 0 -> 1492 bytes .../tecton/client/TectonClientOptions.class | Bin 0 -> 1958 bytes .../exceptions/BadRequestException.class | Bin 0 -> 662 bytes .../exceptions/ForbiddenException.class | Bin 0 -> 466 bytes .../exceptions/GatewayTimeoutException.class | Bin 0 -> 482 bytes .../HttpStatusExceptionFactory.class | Bin 0 -> 1560 bytes .../InternalServerErrorException.class | Bin 0 -> 497 bytes .../InvalidRequestParameterException.class | Bin 0 -> 479 bytes .../ResourceExhaustedException.class | Bin 0 -> 490 bytes .../ResourceNotFoundException.class | Bin 0 -> 678 bytes .../ServiceUnavailableException.class | Bin 0 -> 494 bytes .../exceptions/TectonClientException.class | Bin 0 -> 872 bytes .../exceptions/TectonErrorMessage.class | Bin 0 -> 2484 bytes .../client/exceptions/TectonException.class | Bin 0 -> 1177 bytes .../exceptions/TectonServiceException.class | Bin 0 -> 875 bytes .../exceptions/UnauthorizedException.class | Bin 0 -> 669 bytes .../client/exceptions/package-info.class | Bin 0 -> 133 bytes .../client/model/FeatureServiceMetadata.class | Bin 0 -> 3349 bytes .../tecton/client/model/FeatureStatus.class | Bin 0 -> 2899 bytes .../tecton/client/model/FeatureValue$1.class | Bin 0 -> 918 bytes .../client/model/FeatureValue$Value.class | Bin 0 -> 3975 bytes .../ai/tecton/client/model/FeatureValue.class | Bin 0 -> 7525 bytes .../tecton/client/model/ListDataType$1.class | Bin 0 -> 823 bytes .../ai/tecton/client/model/ListDataType.class | Bin 0 -> 4135 bytes .../tecton/client/model/MetadataOption.class | Bin 0 -> 2013 bytes .../ai/tecton/client/model/NameAndType.class | Bin 0 -> 1776 bytes .../client/model/SloInformation$Builder.class | Bin 0 -> 2200 bytes ...loInformation$SloIneligibilityReason.class | Bin 0 -> 1471 bytes .../tecton/client/model/SloInformation.class | Bin 0 -> 3021 bytes .../ai/tecton/client/model/ValueType.class | Bin 0 -> 2885 bytes .../ai/tecton/client/model/package-info.class | Bin 0 -> 128 bytes ...tGetFeaturesRequest$SerializeNulls$1.class | Bin 0 -> 1795 bytes ...actGetFeaturesRequest$SerializeNulls.class | Bin 0 -> 873 bytes .../request/AbstractGetFeaturesRequest.class | Bin 0 -> 3701 bytes .../request/AbstractTectonRequest.class | Bin 0 -> 2650 bytes ...eatureServiceMetadataRequest$Builder.class | Bin 0 -> 1025 bytes ...uest$GetFeatureServiceMetadataFields.class | Bin 0 -> 640 bytes ...equest$GetFeatureServiceMetadataJson.class | Bin 0 -> 935 bytes .../GetFeatureServiceMetadataRequest.class | Bin 0 -> 3201 bytes .../GetFeaturesBatchRequest$Builder.class | Bin 0 -> 3284 bytes ...oBatchRequest$GetFeaturesBatchFields.class | Bin 0 -> 1263 bytes ...hRequest$GetFeaturesRequestBatchJson.class | Bin 0 -> 1097 bytes ...esMicroBatchRequest$RequestDataField.class | Bin 0 -> 1138 bytes ...Request$GetFeaturesMicroBatchRequest.class | Bin 0 -> 7221 bytes .../request/GetFeaturesBatchRequest.class | Bin 0 -> 10134 bytes .../request/GetFeaturesRequest$Builder.class | Bin 0 -> 2613 bytes ...GetFeaturesRequest$GetFeaturesFields.class | Bin 0 -> 1156 bytes ...aturesRequest$GetFeaturesRequestJson.class | Bin 0 -> 760 bytes .../client/request/GetFeaturesRequest.class | Bin 0 -> 7248 bytes .../GetFeaturesRequestData$Builder.class | Bin 0 -> 1548 bytes .../request/GetFeaturesRequestData.class | Bin 0 -> 5094 bytes .../client/request/RequestConstants.class | Bin 0 -> 1484 bytes .../request/RequestOptions$Builder.class | Bin 0 -> 988 bytes .../client/request/RequestOptions.class | Bin 0 -> 2870 bytes .../tecton/client/request/package-info.class | Bin 0 -> 130 bytes ...tractTectonResponse$ResponseDataType.class | Bin 0 -> 1105 bytes .../response/AbstractTectonResponse.class | Bin 0 -> 733 bytes ...sponse$GetFeatureServiceMetadataJson.class | Bin 0 -> 1373 bytes ...viceMetadataResponse$NameAndTypeJson.class | Bin 0 -> 829 bytes .../GetFeatureServiceMetadataResponse.class | Bin 0 -> 5305 bytes ...tchResponseJson$ResponseMetadataJson.class | Bin 0 -> 1351 bytes ...esponse$GetFeaturesBatchResponseJson.class | Bin 0 -> 1337 bytes ...sponse$GetFeaturesMicroBatchResponse.class | Bin 0 -> 5377 bytes .../response/GetFeaturesBatchResponse.class | Bin 0 -> 11987 bytes ...FeaturesResponseJson$FeatureMetadata.class | Bin 0 -> 1102 bytes ...eaturesResponseJson$ResponseMetadata.class | Bin 0 -> 969 bytes ...ponse$GetFeaturesResponseJson$Result.class | Bin 0 -> 693 bytes ...uresResponse$GetFeaturesResponseJson.class | Bin 0 -> 1033 bytes .../client/response/GetFeaturesResponse.class | Bin 0 -> 8216 bytes ...eaturesResponseUtils$FeatureMetadata.class | Bin 0 -> 1031 bytes ...turesResponseUtils$FeatureVectorJson.class | Bin 0 -> 589 bytes .../response/GetFeaturesResponseUtils.class | Bin 0 -> 4054 bytes .../tecton/client/response/package-info.class | Bin 0 -> 131 bytes .../tecton/client/transport/HttpRequest.class | Bin 0 -> 1862 bytes .../HttpResponse$ErrorResponseJson.class | Bin 0 -> 521 bytes .../client/transport/HttpResponse.class | Bin 0 -> 4279 bytes .../client/transport/TectonHttpClient$1.class | Bin 0 -> 1161 bytes .../client/transport/TectonHttpClient$2.class | Bin 0 -> 2985 bytes .../client/transport/TectonHttpClient$3.class | Bin 0 -> 808 bytes .../TectonHttpClient$HttpHeader.class | Bin 0 -> 1659 bytes .../TectonHttpClient$HttpMethod.class | Bin 0 -> 1341 bytes .../TectonHttpClient$MediaType.class | Bin 0 -> 1499 bytes ...TectonHttpClient$ParallelCallHandler.class | Bin 0 -> 1413 bytes .../client/transport/TectonHttpClient.class | Bin 0 -> 12350 bytes .../client/transport/package-info.class | Bin 0 -> 132 bytes .../ai/tecton/client/version/Version.class | Bin 0 -> 379 bytes .../ai/tecton/client/version/Version.java | 7 + target/java-client-0.9.4-SNAPSHOT-javadoc.jar | Bin 0 -> 646469 bytes target/java-client-0.9.4-SNAPSHOT-sources.jar | Bin 0 -> 53238 bytes target/java-client-0.9.4-SNAPSHOT.jar | Bin 0 -> 103693 bytes .../javadoc-options-javadoc-resources.xml | 10 + target/javadoc-bundle-options/package-list | 217 + target/maven-archiver/pom.properties | 3 + target/maven-javadoc-plugin-stale-data.txt | 73 + .../compile/default-compile/createdFiles.lst | 88 + .../compile/default-compile/inputFiles.lst | 46 + .../default-testCompile/createdFiles.lst | 22 + .../default-testCompile/inputFiles.lst | 13 + ...TEST-ai.tecton.client.TectonClientTest.xml | 78 + ...i.tecton.client.model.FeatureValueTest.xml | 77 + ...ient.request.GetFeatureRequestDataTest.xml | 80 + ...t.GetFeatureServiceMetadataRequestTest.xml | 71 + ...nt.request.GetFeaturesBatchRequestTest.xml | 81 + ....client.request.GetFeaturesRequestTest.xml | 79 + ...uest.GetFeaturesRequestWithOptionsTest.xml | 69 + ...cton.client.request.RequestOptionsTest.xml | 74 + ....GetFeatureServiceMetadataResponseTest.xml | 67 + ....response.GetFeaturesBatchResponseTest.xml | 71 + ...lient.response.GetFeaturesResponseTest.xml | 72 + ....client.transport.TectonHttpClientTest.xml | 72 + .../ai.tecton.client.TectonClientTest.txt | 4 + ...i.tecton.client.model.FeatureValueTest.txt | 4 + ...ient.request.GetFeatureRequestDataTest.txt | 4 + ...t.GetFeatureServiceMetadataRequestTest.txt | 4 + ...nt.request.GetFeaturesBatchRequestTest.txt | 4 + ....client.request.GetFeaturesRequestTest.txt | 4 + ...uest.GetFeaturesRequestWithOptionsTest.txt | 4 + ...cton.client.request.RequestOptionsTest.txt | 4 + ....GetFeatureServiceMetadataResponseTest.txt | 4 + ....response.GetFeaturesBatchResponseTest.txt | 4 + ...lient.response.GetFeaturesResponseTest.txt | 4 + ....client.transport.TectonHttpClientTest.txt | 4 + .../ai/tecton/client/TectonClientTest.class | Bin 0 -> 17852 bytes .../client/model/FeatureValueTest$1.class | Bin 0 -> 824 bytes .../client/model/FeatureValueTest$2.class | Bin 0 -> 828 bytes .../client/model/FeatureValueTest$3.class | Bin 0 -> 760 bytes .../client/model/FeatureValueTest.class | Bin 0 -> 6935 bytes .../request/GetFeatureRequestDataTest$1.class | Bin 0 -> 922 bytes .../request/GetFeatureRequestDataTest$2.class | Bin 0 -> 996 bytes .../request/GetFeatureRequestDataTest$3.class | Bin 0 -> 848 bytes .../request/GetFeatureRequestDataTest$4.class | Bin 0 -> 917 bytes .../request/GetFeatureRequestDataTest.class | Bin 0 -> 7235 bytes ...GetFeatureServiceMetadataRequestTest.class | Bin 0 -> 3552 bytes .../request/GetFeaturesBatchRequestTest.class | Bin 0 -> 14511 bytes .../request/GetFeaturesRequestTest.class | Bin 0 -> 10677 bytes .../GetFeaturesRequestWithOptionsTest.class | Bin 0 -> 4383 bytes .../client/request/RequestOptionsTest.class | Bin 0 -> 3346 bytes ...etFeatureServiceMetadataResponseTest.class | Bin 0 -> 3687 bytes .../GetFeaturesBatchResponseTest.class | Bin 0 -> 10036 bytes .../response/GetFeaturesResponseTest$1.class | Bin 0 -> 954 bytes .../response/GetFeaturesResponseTest.class | Bin 0 -> 6989 bytes .../transport/TectonHttpClientTest$1.class | Bin 0 -> 1380 bytes .../transport/TectonHttpClientTest.class | Bin 0 -> 9306 bytes .../ai/tecton/client/utils/TestUtils.class | Bin 0 -> 5119 bytes .../getfeatures/sampleFeatureResponse1.json | 141 + .../getfeatures/sampleFeatureResponse2.json | 141 + .../getfeatures/sampleFeatureResponse3.json | 141 + .../mocktest/getfeaturesbatch/batch1.json | 198 + .../mocktest/getfeaturesbatch/batch2.json | 198 + .../mocktest/getfeaturesbatch/batch3.json | 150 + .../mocktest/getfeaturesbatch/input.csv | 7 + .../metadata/sampleMetadataResponse1.json | 128 + target/test-classes/request/input.csv | 5 + .../test-classes/response/batch/batch1.json | 218 + .../test-classes/response/batch/batch2.json | 232 + .../test-classes/response/batch/batch3.json | 289 + .../response/sample_metadata_response.json | 36 + .../response/single/sample_null_response.json | 108 + .../response/single/sample_response.json | 45 + .../response/single/sample_response_list.json | 40 + .../response/single/sample_response_slo.json | 53 + .../sample_response_with_null_list.json | 47 + 323 files changed, 67743 insertions(+), 6 deletions(-) create mode 100644 target/apidocs/ai/tecton/client/TectonClient.Builder.html create mode 100644 target/apidocs/ai/tecton/client/TectonClient.html create mode 100644 target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html create mode 100644 target/apidocs/ai/tecton/client/TectonClientOptions.html create mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html create mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClient.html create mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html create mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/BadRequestException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonClientException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/exceptions/package-use.html create mode 100644 target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html create mode 100644 target/apidocs/ai/tecton/client/model/FeatureStatus.html create mode 100644 target/apidocs/ai/tecton/client/model/FeatureValue.html create mode 100644 target/apidocs/ai/tecton/client/model/MetadataOption.html create mode 100644 target/apidocs/ai/tecton/client/model/NameAndType.html create mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.Builder.html create mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html create mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.html create mode 100644 target/apidocs/ai/tecton/client/model/ValueType.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/NameAndType.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.html create mode 100644 target/apidocs/ai/tecton/client/model/class-use/ValueType.html create mode 100644 target/apidocs/ai/tecton/client/model/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/model/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/model/package-use.html create mode 100644 target/apidocs/ai/tecton/client/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/package-use.html create mode 100644 target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html create mode 100644 target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html create mode 100644 target/apidocs/ai/tecton/client/request/RequestConstants.html create mode 100644 target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/RequestOptions.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html create mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html create mode 100644 target/apidocs/ai/tecton/client/request/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/request/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/request/package-use.html create mode 100644 target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html create mode 100644 target/apidocs/ai/tecton/client/response/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/response/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/response/package-use.html create mode 100644 target/apidocs/ai/tecton/client/transport/HttpResponse.html create mode 100644 target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html create mode 100644 target/apidocs/ai/tecton/client/transport/TectonHttpClient.html create mode 100644 target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html create mode 100644 target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html create mode 100644 target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html create mode 100644 target/apidocs/ai/tecton/client/transport/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/transport/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/transport/package-use.html create mode 100644 target/apidocs/ai/tecton/client/version/Version.html create mode 100644 target/apidocs/ai/tecton/client/version/class-use/Version.html create mode 100644 target/apidocs/ai/tecton/client/version/package-summary.html create mode 100644 target/apidocs/ai/tecton/client/version/package-tree.html create mode 100644 target/apidocs/ai/tecton/client/version/package-use.html create mode 100644 target/apidocs/allclasses-index.html create mode 100644 target/apidocs/allclasses.html create mode 100644 target/apidocs/allpackages-index.html create mode 100644 target/apidocs/constant-values.html create mode 100644 target/apidocs/deprecated-list.html create mode 100644 target/apidocs/element-list create mode 100644 target/apidocs/help-doc.html create mode 100644 target/apidocs/index-all.html create mode 100644 target/apidocs/index.html create mode 100644 target/apidocs/jquery-ui.overrides.css create mode 100644 target/apidocs/jquery/external/jquery/jquery.js create mode 100644 target/apidocs/jquery/jquery-3.6.1.min.js create mode 100644 target/apidocs/jquery/jquery-ui.min.css create mode 100644 target/apidocs/jquery/jquery-ui.min.js create mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 target/apidocs/jquery/jszip/dist/jszip.js create mode 100644 target/apidocs/jquery/jszip/dist/jszip.min.js create mode 100644 target/apidocs/legal/ADDITIONAL_LICENSE_INFO create mode 100644 target/apidocs/legal/ASSEMBLY_EXCEPTION create mode 100644 target/apidocs/legal/LICENSE create mode 100644 target/apidocs/legal/jquery.md create mode 100644 target/apidocs/legal/jqueryUI.md create mode 100644 target/apidocs/legal/jszip.md create mode 100644 target/apidocs/legal/pako.md create mode 100644 target/apidocs/member-search-index.js create mode 100644 target/apidocs/member-search-index.zip create mode 100644 target/apidocs/overview-summary.html create mode 100644 target/apidocs/overview-tree.html create mode 100644 target/apidocs/package-search-index.js create mode 100644 target/apidocs/package-search-index.zip create mode 100644 target/apidocs/resources/glass.png create mode 100644 target/apidocs/resources/x.png create mode 100644 target/apidocs/script.js create mode 100644 target/apidocs/search.js create mode 100644 target/apidocs/serialized-form.html create mode 100644 target/apidocs/stylesheet.css create mode 100644 target/apidocs/type-search-index.js create mode 100644 target/apidocs/type-search-index.zip create mode 100644 target/classes/ai/tecton/client/TectonClient$Builder.class create mode 100644 target/classes/ai/tecton/client/TectonClient.class create mode 100644 target/classes/ai/tecton/client/TectonClientOptions$Builder.class create mode 100644 target/classes/ai/tecton/client/TectonClientOptions.class create mode 100644 target/classes/ai/tecton/client/exceptions/BadRequestException.class create mode 100644 target/classes/ai/tecton/client/exceptions/ForbiddenException.class create mode 100644 target/classes/ai/tecton/client/exceptions/GatewayTimeoutException.class create mode 100644 target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class create mode 100644 target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class create mode 100644 target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class create mode 100644 target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class create mode 100644 target/classes/ai/tecton/client/exceptions/ResourceNotFoundException.class create mode 100644 target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class create mode 100644 target/classes/ai/tecton/client/exceptions/TectonClientException.class create mode 100644 target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class create mode 100644 target/classes/ai/tecton/client/exceptions/TectonException.class create mode 100644 target/classes/ai/tecton/client/exceptions/TectonServiceException.class create mode 100644 target/classes/ai/tecton/client/exceptions/UnauthorizedException.class create mode 100644 target/classes/ai/tecton/client/exceptions/package-info.class create mode 100644 target/classes/ai/tecton/client/model/FeatureServiceMetadata.class create mode 100644 target/classes/ai/tecton/client/model/FeatureStatus.class create mode 100644 target/classes/ai/tecton/client/model/FeatureValue$1.class create mode 100644 target/classes/ai/tecton/client/model/FeatureValue$Value.class create mode 100644 target/classes/ai/tecton/client/model/FeatureValue.class create mode 100644 target/classes/ai/tecton/client/model/ListDataType$1.class create mode 100644 target/classes/ai/tecton/client/model/ListDataType.class create mode 100644 target/classes/ai/tecton/client/model/MetadataOption.class create mode 100644 target/classes/ai/tecton/client/model/NameAndType.class create mode 100644 target/classes/ai/tecton/client/model/SloInformation$Builder.class create mode 100644 target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class create mode 100644 target/classes/ai/tecton/client/model/SloInformation.class create mode 100644 target/classes/ai/tecton/client/model/ValueType.class create mode 100644 target/classes/ai/tecton/client/model/package-info.class create mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class create mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class create mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class create mode 100644 target/classes/ai/tecton/client/request/AbstractTectonRequest.class create mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class create mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class create mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class create mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$Builder.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$RequestDataField.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class create mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequestData.class create mode 100644 target/classes/ai/tecton/client/request/RequestConstants.class create mode 100644 target/classes/ai/tecton/client/request/RequestOptions$Builder.class create mode 100644 target/classes/ai/tecton/client/request/RequestOptions.class create mode 100644 target/classes/ai/tecton/client/request/package-info.class create mode 100644 target/classes/ai/tecton/client/response/AbstractTectonResponse$ResponseDataType.class create mode 100644 target/classes/ai/tecton/client/response/AbstractTectonResponse.class create mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$GetFeatureServiceMetadataJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson$ResponseMetadataJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$FeatureMetadata.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$Result.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class create mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class create mode 100644 target/classes/ai/tecton/client/response/package-info.class create mode 100644 target/classes/ai/tecton/client/transport/HttpRequest.class create mode 100644 target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class create mode 100644 target/classes/ai/tecton/client/transport/HttpResponse.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$1.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$2.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$3.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$MediaType.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class create mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient.class create mode 100644 target/classes/ai/tecton/client/transport/package-info.class create mode 100644 target/classes/ai/tecton/client/version/Version.class create mode 100644 target/generated-sources/java-templates/ai/tecton/client/version/Version.java create mode 100644 target/java-client-0.9.4-SNAPSHOT-javadoc.jar create mode 100644 target/java-client-0.9.4-SNAPSHOT-sources.jar create mode 100644 target/java-client-0.9.4-SNAPSHOT.jar create mode 100644 target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml create mode 100644 target/javadoc-bundle-options/package-list create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-javadoc-plugin-stale-data.txt create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml create mode 100644 target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml create mode 100644 target/surefire-reports/ai.tecton.client.TectonClientTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt create mode 100644 target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt create mode 100644 target/test-classes/ai/tecton/client/TectonClientTest.class create mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$1.class create mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class create mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$3.class create mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class create mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.class create mode 100644 target/test-classes/ai/tecton/client/request/RequestOptionsTest.class create mode 100644 target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class create mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesBatchResponseTest.class create mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class create mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class create mode 100644 target/test-classes/ai/tecton/client/transport/TectonHttpClientTest$1.class create mode 100644 target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class create mode 100644 target/test-classes/ai/tecton/client/utils/TestUtils.class create mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json create mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json create mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json create mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch1.json create mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch2.json create mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch3.json create mode 100644 target/test-classes/mocktest/getfeaturesbatch/input.csv create mode 100644 target/test-classes/mocktest/metadata/sampleMetadataResponse1.json create mode 100644 target/test-classes/request/input.csv create mode 100644 target/test-classes/response/batch/batch1.json create mode 100644 target/test-classes/response/batch/batch2.json create mode 100644 target/test-classes/response/batch/batch3.json create mode 100644 target/test-classes/response/sample_metadata_response.json create mode 100644 target/test-classes/response/single/sample_null_response.json create mode 100644 target/test-classes/response/single/sample_response.json create mode 100644 target/test-classes/response/single/sample_response_list.json create mode 100644 target/test-classes/response/single/sample_response_slo.json create mode 100644 target/test-classes/response/single/sample_response_with_null_list.json diff --git a/.github/workflows/java-build.yml b/.github/workflows/java-build.yml index fa1b0b63..3fa885f9 100644 --- a/.github/workflows/java-build.yml +++ b/.github/workflows/java-build.yml @@ -8,14 +8,14 @@ on: - main - release jobs: - java-gradle-build: + java-maven-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: zulu java-version: 8 - cache: gradle - - name: Run Gradle - run: ./gradlew build + cache: maven + - name: Run Maven Build + run: ./mvnw clean package diff --git a/target/apidocs/ai/tecton/client/TectonClient.Builder.html b/target/apidocs/ai/tecton/client/TectonClient.Builder.html new file mode 100644 index 00000000..fb8405c6 --- /dev/null +++ b/target/apidocs/ai/tecton/client/TectonClient.Builder.html @@ -0,0 +1,421 @@ + + + + + +TectonClient.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonClient.Builder

+
+
+ +
+
    +
  • +
    +
    Enclosing class:
    +
    TectonClient
    +
    +
    +
    public static class TectonClient.Builder
    +extends Object
    +
    A Builder class for creating an instance of TectonClient object with specific + configurations
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Builder

        +
        public Builder()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        url

        +
        public TectonClient.Builder url​(String url)
        +
        Setter for url
        +
        +
        Parameters:
        +
        url - The Tecton Base Url
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        httpClient

        +
        public TectonClient.Builder httpClient​(okhttp3.OkHttpClient httpClient)
        +
        Setter for httpClient
        +
        +
        Parameters:
        +
        httpClient - An OkHttpClient for making requests and receiving responses from the + Feature Service API. Please refer to OkHttp + Documentation for recommendations on creating and maintaining an OkHttp Client in + your application. Tecton recommends configuring the ConnectionPool + in the OkHttpClient for efficiently managing HTTP connections. If you intend to use the + GetFeaturesBatchRequest to send parallel requests to Tecton, please also + configure the maxRequestsPerHost + in the client's Dispatcher.
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/TectonClient.html b/target/apidocs/ai/tecton/client/TectonClient.html new file mode 100644 index 00000000..0a9b3930 --- /dev/null +++ b/target/apidocs/ai/tecton/client/TectonClient.html @@ -0,0 +1,554 @@ + + + + + +TectonClient (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonClient

+
+
+ +
+
    +
  • +
    +
    public class TectonClient
    +extends Object
    +
    A client for interacting with the Tecton FeatureService API. The client provides several methods + that make HTTP requests to the corresponding API endpoint and returns the response as a Java + object. + +

    Note: Each method throws TectonServiceException when it receives an error response from the + API and a TectonClientException when an error or exception is encountered by the client. The + message included in the exception will provide more information about the error.

    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html b/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html new file mode 100644 index 00000000..1bac6a25 --- /dev/null +++ b/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html @@ -0,0 +1,440 @@ + + + + + +TectonClientOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonClientOptions.Builder

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Builder

        +
        public Builder()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        readTimeout

        +
        public TectonClientOptions.Builder readTimeout​(Duration readTimeout)
        +
        Setter for the readTimeout value for new connections. A value of 0 means no timeout, + otherwise values must be between 1 and Integer.MAX_VALUE when converted to milliseconds
        +
        +
        Parameters:
        +
        readTimeout - readTimeout as a Duration
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + +
        +
      • +

        connectTimeout

        +
        public TectonClientOptions.Builder connectTimeout​(Duration connectTimeout)
        +
        Setter for the connectTimeout value for new connections. A value of 0 means no timeout, + otherwise values must be between 1 and Integer.MAX_VALUE when converted to milliseconds
        +
        +
        Parameters:
        +
        connectTimeout - connectTimeout as a Duration
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + +
        +
      • +

        maxIdleConnections

        +
        public TectonClientOptions.Builder maxIdleConnections​(int maxIdleConnections)
        +
        Setter for the maximum number of idle connections to keep in the pool. If not set, the client + will use a default value of 5
        +
        +
        Parameters:
        +
        maxIdleConnections - int value, must be between 1 and Integer.MAX_VALUE
        +
        Returns:
        +
        this builder
        +
        +
      • +
      + + + +
        +
      • +

        keepAliveDuration

        +
        public TectonClientOptions.Builder keepAliveDuration​(Duration keepAliveDuration)
        +
        Setter for the time to keep an idle connection alive in the pool before closing it
        +
        +
        Parameters:
        +
        keepAliveDuration - as a Duration
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + +
        +
      • +

        maxParallelRequests

        +
        public TectonClientOptions.Builder maxParallelRequests​(int maxParallelRequests)
        +
        Setter for the maximum number of requests to execute concurrently. Above this requests queue + in memory, waiting for the running calls to complete. Default value is 5
        +
        +
        Parameters:
        +
        maxParallelRequests - int value, must be between 1 and Integer.MAX_VALUE
        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/TectonClientOptions.html b/target/apidocs/ai/tecton/client/TectonClientOptions.html new file mode 100644 index 00000000..d1e721dd --- /dev/null +++ b/target/apidocs/ai/tecton/client/TectonClientOptions.html @@ -0,0 +1,470 @@ + + + + + +TectonClientOptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonClientOptions

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TectonClientOptions

        +
        public TectonClientOptions()
        +
        Constructor that instantiates a TectonClientOptions with default configurations + +

        Read Timeout = 5 seconds, Connect Timeout = 5 seconds, Max Idle Connections = 5, Keep Alive + Duration = 5 minutes, Max Parallel Requests = 5

        +
      • +
      + + + +
        +
      • +

        TectonClientOptions

        +
        public TectonClientOptions​(Duration readTimeout,
        +                           Duration connectTimeout,
        +                           int maxIdleConnections,
        +                           Duration keepAliveDuration,
        +                           int maxParallelRequests)
        +
        Constructor that configures the TectonClientOptions with specified configurations
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getConnectTimeout

        +
        public Duration getConnectTimeout()
        +
        Returns the connectTimeout configuration for the client
        +
        +
        Returns:
        +
        connectTimeout represented as a Duration
        +
        +
      • +
      + + + +
        +
      • +

        getKeepAliveDuration

        +
        public Duration getKeepAliveDuration()
        +
        Returns the keepAliveDuration configuration for the client's ConnectionPool
        +
        +
        Returns:
        +
        keepAliveDuration represented as a Duration
        +
        +
      • +
      + + + +
        +
      • +

        getReadTimeout

        +
        public Duration getReadTimeout()
        +
        Returns the readTimeout configuration for the client
        +
        +
        Returns:
        +
        readTimeout represented as a Duration
        +
        +
      • +
      + + + +
        +
      • +

        getMaxIdleConnections

        +
        public int getMaxIdleConnections()
        +
        Returns the maxIdleConnections configuration for the client's ConnectionPool
        +
        +
        Returns:
        +
        maxIdleConnections
        +
        +
      • +
      + + + +
        +
      • +

        getMaxParallelRequests

        +
        public int getMaxParallelRequests()
        +
        Returns the maxParallelRequests configuration for the client
        +
        +
        Returns:
        +
        maxParallelRequests
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html b/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html new file mode 100644 index 00000000..ceffc185 --- /dev/null +++ b/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class ai.tecton.client.TectonClient.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.TectonClient.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClient.html b/target/apidocs/ai/tecton/client/class-use/TectonClient.html new file mode 100644 index 00000000..c175ee94 --- /dev/null +++ b/target/apidocs/ai/tecton/client/class-use/TectonClient.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class ai.tecton.client.TectonClient (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.TectonClient

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html new file mode 100644 index 00000000..ba503123 --- /dev/null +++ b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html @@ -0,0 +1,224 @@ + + + + + +Uses of Class ai.tecton.client.TectonClientOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.TectonClientOptions.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html new file mode 100644 index 00000000..a4437f06 --- /dev/null +++ b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html @@ -0,0 +1,258 @@ + + + + + +Uses of Class ai.tecton.client.TectonClientOptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.TectonClientOptions

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html b/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html new file mode 100644 index 00000000..14efa6f2 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html @@ -0,0 +1,322 @@ + + + + + +BadRequestException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BadRequestException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class BadRequestException
    +extends TectonClientException
    +
    An exception class representing a client error caused by a bad request. This exception is + typically thrown when the client's request is malformed or contains invalid data, resulting in a + "400 Bad Request" HTTP response status. It extends the TectonClientException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BadRequestException

        +
        public BadRequestException​(String errorMessage,
        +                           int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html b/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html new file mode 100644 index 00000000..932554c5 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html @@ -0,0 +1,323 @@ + + + + + +ForbiddenException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ForbiddenException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class ForbiddenException
    +extends TectonClientException
    +
    An exception class representing a client error caused by forbidden access. This exception is + typically thrown when the API Key in the request is authenticated, but the Service Account + associated with the API Key is not authorized to access the workspace, resulting in a "403 + Forbidden" HTTP response status. It extends the TectonClientException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ForbiddenException

        +
        public ForbiddenException​(String errorMessage,
        +                          int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html b/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html new file mode 100644 index 00000000..52668d6a --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html @@ -0,0 +1,323 @@ + + + + + +GatewayTimeoutException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GatewayTimeoutException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class GatewayTimeoutException
    +extends TectonServiceException
    +
    An exception class representing a client error caused by a gateway timeout. This exception is + typically thrown when a server acting as a gateway or proxy did not receive a timely response + from the Feature Server, resulting in a "504 Gateway Timeout" HTTP response status. It extends + the TectonServiceException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GatewayTimeoutException

        +
        public GatewayTimeoutException​(String errorMessage,
        +                               int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html b/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html new file mode 100644 index 00000000..363b28d3 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html @@ -0,0 +1,311 @@ + + + + + +HttpStatusExceptionFactory (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class HttpStatusExceptionFactory

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.exceptions.HttpStatusExceptionFactory
    • +
    +
  • +
+
+
    +
  • +
    +
    public class HttpStatusExceptionFactory
    +extends Object
    +
    An exception factory that maps HTTP Status code to a custom Exception
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        HttpStatusExceptionFactory

        +
        public HttpStatusExceptionFactory()
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html b/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html new file mode 100644 index 00000000..f6fb86f7 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html @@ -0,0 +1,322 @@ + + + + + +InternalServerErrorException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class InternalServerErrorException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class InternalServerErrorException
    +extends TectonServiceException
    +
    An exception class representing a server error caused by an internal server failure. This + exception is typically thrown when an unexpected error occurs on the server, resulting in a "500 + Internal Server Error" HTTP response status. It extends the TectonServiceException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InternalServerErrorException

        +
        public InternalServerErrorException​(String errorMessage,
        +                                    int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html b/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html new file mode 100644 index 00000000..83e007e4 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html @@ -0,0 +1,320 @@ + + + + + +InvalidRequestParameterException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class InvalidRequestParameterException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class InvalidRequestParameterException
    +extends TectonClientException
    +
    An exception class representing a client error caused by a misconfigured request, such as missing + workspace name, missing feature service name etc. It extends the TectonClientException + class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InvalidRequestParameterException

        +
        public InvalidRequestParameterException​(String errorMessage)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html b/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html new file mode 100644 index 00000000..3db61e4f --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html @@ -0,0 +1,322 @@ + + + + + +ResourceExhaustedException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ResourceExhaustedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class ResourceExhaustedException
    +extends TectonClientException
    +
    An exception class representing a client error caused by resource exhaustion. This exception + indicates that request rate exceeds the concurrent request limit set for your deployment, + resulting in a "429 Too Many Requests" HTTP response status. It extends the TectonClientException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ResourceExhaustedException

        +
        public ResourceExhaustedException​(String errorMessage,
        +                                  int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html b/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html new file mode 100644 index 00000000..c7ff4987 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html @@ -0,0 +1,323 @@ + + + + + +ResourceNotFoundException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ResourceNotFoundException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class ResourceNotFoundException
    +extends TectonClientException
    +
    An exception class representing a client error caused by a resource not being found. This + exception is typically thrown when the request references a workspace, feature service or other + resources that do not exist in Tecton, resulting in a "404 Not Found" HTTP response status. It + extends the TectonClientException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ResourceNotFoundException

        +
        public ResourceNotFoundException​(String errorMessage,
        +                                 int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html b/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html new file mode 100644 index 00000000..d1da8773 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html @@ -0,0 +1,323 @@ + + + + + +ServiceUnavailableException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ServiceUnavailableException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class ServiceUnavailableException
    +extends TectonServiceException
    +
    An exception class representing a server error caused by a temporarily unavailable service. This + exception is typically thrown when the Tecton is temporarily unable to handle the client's + request due to being overloaded or undergoing maintenance, resulting in a "503 Service + Unavailable" HTTP response status. It extends the TectonServiceException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ServiceUnavailableException

        +
        public ServiceUnavailableException​(String errorMessage,
        +                                   int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html b/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html new file mode 100644 index 00000000..324b86de --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html @@ -0,0 +1,361 @@ + + + + + +TectonClientException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonClientException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TectonClientException

        +
        public TectonClientException​(String errorMessage)
        +
      • +
      + + + +
        +
      • +

        TectonClientException

        +
        public TectonClientException​(String errorMessage,
        +                             int statusCode)
        +
      • +
      + + + +
        +
      • +

        TectonClientException

        +
        public TectonClientException​(String message,
        +                             Throwable t)
        +
      • +
      + + + +
        +
      • +

        TectonClientException

        +
        public TectonClientException​(Throwable t)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html b/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html new file mode 100644 index 00000000..3bbf351d --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html @@ -0,0 +1,695 @@ + + + + + +TectonErrorMessage (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonErrorMessage

+
+
+ +
+
    +
  • +
    +
    public class TectonErrorMessage
    +extends Object
    +
    Class that declares all the different error messages included in the TectonClientException
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonException.html b/target/apidocs/ai/tecton/client/exceptions/TectonException.html new file mode 100644 index 00000000..51e6e116 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/TectonException.html @@ -0,0 +1,393 @@ + + + + + +TectonException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TectonException

        +
        public TectonException​(String errorMessage)
        +
      • +
      + + + +
        +
      • +

        TectonException

        +
        public TectonException​(String errorMessage,
        +                       int statusCode)
        +
      • +
      + + + +
        +
      • +

        TectonException

        +
        public TectonException​(String message,
        +                       Throwable t)
        +
      • +
      + + + +
        +
      • +

        TectonException

        +
        public TectonException​(Throwable t)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getStatusCode

        +
        public Optional<Integer> getStatusCode()
        +
        Returns the HTTP Status Code associated with the exception
        +
        +
        Returns:
        +
        HTTP Status Code if present, Optional.empty() otherwise
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html b/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html new file mode 100644 index 00000000..9b0ff934 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html @@ -0,0 +1,361 @@ + + + + + +TectonServiceException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonServiceException

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        TectonServiceException

        +
        public TectonServiceException​(String errorMessage)
        +
      • +
      + + + +
        +
      • +

        TectonServiceException

        +
        public TectonServiceException​(String errorMessage,
        +                              int statusCode)
        +
      • +
      + + + +
        +
      • +

        TectonServiceException

        +
        public TectonServiceException​(String message,
        +                              Throwable t)
        +
      • +
      + + + +
        +
      • +

        TectonServiceException

        +
        public TectonServiceException​(Throwable t)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html b/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html new file mode 100644 index 00000000..08145b63 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html @@ -0,0 +1,322 @@ + + + + + +UnauthorizedException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UnauthorizedException

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class UnauthorizedException
    +extends TectonClientException
    +
    An exception class representing a client error caused by unauthorized access. This exception is + typically thrown when the API Key in the request is missing or invalid, resulting in a "401 + Unauthorized" HTTP response status. It extends the TectonClientException class.
    +
    +
    See Also:
    +
    Serialized Form
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UnauthorizedException

        +
        public UnauthorizedException​(String errorMessage,
        +                             int statusCode)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html new file mode 100644 index 00000000..593b901e --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.BadRequestException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.BadRequestException

+
+
No usage of ai.tecton.client.exceptions.BadRequestException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html new file mode 100644 index 00000000..0ea86434 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.ForbiddenException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.ForbiddenException

+
+
No usage of ai.tecton.client.exceptions.ForbiddenException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html new file mode 100644 index 00000000..069d2286 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.GatewayTimeoutException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.GatewayTimeoutException

+
+
No usage of ai.tecton.client.exceptions.GatewayTimeoutException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html b/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html new file mode 100644 index 00000000..09112db1 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.HttpStatusExceptionFactory (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.HttpStatusExceptionFactory

+
+
No usage of ai.tecton.client.exceptions.HttpStatusExceptionFactory
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html new file mode 100644 index 00000000..86c5eacd --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.InternalServerErrorException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.InternalServerErrorException

+
+
No usage of ai.tecton.client.exceptions.InternalServerErrorException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html new file mode 100644 index 00000000..08ea5c64 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html @@ -0,0 +1,245 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.InvalidRequestParameterException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.InvalidRequestParameterException

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html new file mode 100644 index 00000000..fafdb8a2 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.ResourceExhaustedException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.ResourceExhaustedException

+
+
No usage of ai.tecton.client.exceptions.ResourceExhaustedException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html new file mode 100644 index 00000000..f83d5b39 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.ResourceNotFoundException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.ResourceNotFoundException

+
+
No usage of ai.tecton.client.exceptions.ResourceNotFoundException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html new file mode 100644 index 00000000..b3171039 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.ServiceUnavailableException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.ServiceUnavailableException

+
+
No usage of ai.tecton.client.exceptions.ServiceUnavailableException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html new file mode 100644 index 00000000..9c4c0acb --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html @@ -0,0 +1,479 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.TectonClientException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.TectonClientException

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html new file mode 100644 index 00000000..2ca53208 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.TectonErrorMessage (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.TectonErrorMessage

+
+
No usage of ai.tecton.client.exceptions.TectonErrorMessage
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html new file mode 100644 index 00000000..33fd0441 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html @@ -0,0 +1,286 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.TectonException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.TectonException

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html new file mode 100644 index 00000000..3c1d3926 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html @@ -0,0 +1,255 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.TectonServiceException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.TectonServiceException

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html new file mode 100644 index 00000000..d807ad6d --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.exceptions.UnauthorizedException (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.exceptions.UnauthorizedException

+
+
No usage of ai.tecton.client.exceptions.UnauthorizedException
+
+ + + diff --git a/target/apidocs/ai/tecton/client/exceptions/package-summary.html b/target/apidocs/ai/tecton/client/exceptions/package-summary.html new file mode 100644 index 00000000..f1a75f7d --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/package-summary.html @@ -0,0 +1,266 @@ + + + + + +ai.tecton.client.exceptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.exceptions

+
+
+
+ + +
This package contains exception classes with error messages for Tecton Client
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    HttpStatusExceptionFactory +
    An exception factory that maps HTTP Status code to a custom Exception
    +
    TectonErrorMessage +
    Class that declares all the different error messages included in the TectonClientException
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Exception Summary 
    ExceptionDescription
    BadRequestException +
    An exception class representing a client error caused by a bad request.
    +
    ForbiddenException +
    An exception class representing a client error caused by forbidden access.
    +
    GatewayTimeoutException +
    An exception class representing a client error caused by a gateway timeout.
    +
    InternalServerErrorException +
    An exception class representing a server error caused by an internal server failure.
    +
    InvalidRequestParameterException +
    An exception class representing a client error caused by a misconfigured request, such as missing + workspace name, missing feature service name etc.
    +
    ResourceExhaustedException +
    An exception class representing a client error caused by resource exhaustion.
    +
    ResourceNotFoundException +
    An exception class representing a client error caused by a resource not being found.
    +
    ServiceUnavailableException +
    An exception class representing a server error caused by a temporarily unavailable service.
    +
    TectonClientException +
    Exception class that is used to represent various client side errors, such as bad request + parameters, unauthorized requests etc.
    +
    TectonException +
    Base class that is used to represent various errors encountered by the Java client.
    +
    TectonServiceException +
    Exception class that is used to represent server side errors.
    +
    UnauthorizedException +
    An exception class representing a client error caused by unauthorized access.
    +
    +
  • +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/package-tree.html b/target/apidocs/ai/tecton/client/exceptions/package-tree.html new file mode 100644 index 00000000..c215c429 --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/package-tree.html @@ -0,0 +1,199 @@ + + + + + +ai.tecton.client.exceptions Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.exceptions

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/exceptions/package-use.html b/target/apidocs/ai/tecton/client/exceptions/package-use.html new file mode 100644 index 00000000..e710b9eb --- /dev/null +++ b/target/apidocs/ai/tecton/client/exceptions/package-use.html @@ -0,0 +1,344 @@ + + + + + +Uses of Package ai.tecton.client.exceptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.exceptions

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html b/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html new file mode 100644 index 00000000..918bd851 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html @@ -0,0 +1,468 @@ + + + + + +FeatureServiceMetadata (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FeatureServiceMetadata

+
+
+ +
+
    +
  • +
    +
    public class FeatureServiceMetadata
    +extends Object
    +
    Class that encapsulates metadata for a FeatureService, including the schema for join keys and + request context in GetFeaturesRequestData, as well as the in-order output schema of feature + values in GetFeaturesResponse.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getInputJoinKeys

        +
        public List<NameAndType> getInputJoinKeys()
        +
        Get the input join keys that are expected to be passed in the joinKeyMap parameter for a GetFeaturesRequest for the feature service
        +
        +
        Returns:
        +
        Returns a List of NameAndType representing the input join + keys
        +
        +
      • +
      + + + +
        +
      • +

        getInputRequestContextKeys

        +
        public List<NameAndType> getInputRequestContextKeys()
        +
        Get the request context keys that are expected to be passed in the requestContextMap parameter + for a GetFeaturesRequest for the feature service
        +
        +
        Returns:
        +
        Returns a List of NameAndType representing the input request + context keys
        +
        +
      • +
      + + + +
        +
      • +

        getFeatureValues

        +
        public List<NameAndType> getFeatureValues()
        +
        Get metadata for feature values to be returned in the GetFeaturesResponse. + +

        The order of returned features will match the order returned by GetFeaturesResponse

        +
        +
        Returns:
        +
        Returns a List of NameAndType representing the feature + metadata
        +
        +
      • +
      + + + +
        +
      • +

        getInputJoinKeysAsMap

        +
        public Map<String,​NameAndType> getInputJoinKeysAsMap()
        +
        Returns the input join keys as a Map with the join key name as the key
        +
      • +
      + + + +
        +
      • +

        getInputRequestContextKeysAsMap

        +
        public Map<String,​NameAndType> getInputRequestContextKeysAsMap()
        +
        Returns the request context keys as a Map with the request context name as + the key
        +
      • +
      + + + +
        +
      • +

        getFeatureValuesAsMap

        +
        public Map<String,​NameAndType> getFeatureValuesAsMap()
        +
        Returns the feature metadata as a Map with the (featureNamespace.featureName) + as the key
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/FeatureStatus.html b/target/apidocs/ai/tecton/client/model/FeatureStatus.html new file mode 100644 index 00000000..1cbedd26 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/FeatureStatus.html @@ -0,0 +1,468 @@ + + + + + +FeatureStatus (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum FeatureStatus

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        PRESENT

        +
        public static final FeatureStatus PRESENT
        +
        Feature value is present and returned with no errors.
        +
      • +
      + + + +
        +
      • +

        MISSING_DATA

        +
        public static final FeatureStatus MISSING_DATA
        +
        Either the join keys requested are missing in the online store or the feature value is outside + ttl.
        +
      • +
      + + + +
        +
      • +

        CACHED_PRESENT

        +
        public static final FeatureStatus CACHED_PRESENT
        +
        Unable to infer feature status.
        +
      • +
      + + + +
        +
      • +

        CACHED_UNKNOWN

        +
        public static final FeatureStatus CACHED_UNKNOWN
        +
      • +
      + + + +
        +
      • +

        CACHED_MISSING_DATA

        +
        public static final FeatureStatus CACHED_MISSING_DATA
        +
      • +
      + + + + +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static FeatureStatus[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (FeatureStatus c : FeatureStatus.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static FeatureStatus valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        fromString

        +
        public static Optional<FeatureStatus> fromString​(String name)
        +
        Returns the Status that matches the String representation passed as a parameter
        +
        +
        Parameters:
        +
        name - The String representation of the Status
        +
        Returns:
        +
        Optional<ValueType> if a match is found, Optional.empty() otherwise
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/model/FeatureValue.html b/target/apidocs/ai/tecton/client/model/FeatureValue.html new file mode 100644 index 00000000..abdc226e --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/FeatureValue.html @@ -0,0 +1,709 @@ + + + + + +FeatureValue (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FeatureValue

+
+
+ +
+
    +
  • +
    +
    public class FeatureValue
    +extends Object
    +
    Class that represents each feature value in the feature vector returned in the + GetFeaturesResponse
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getValueType

        +
        public ValueType getValueType()
        +
        Returns the ValueType representing the Tecton data_type for the feature value. Currently + supported types are ARRAY, STRING, INT64, BOOLEAN and FLOAT64
        +
        +
        Returns:
        +
        ValueType of the feature value
        +
        +
      • +
      + + + +
        +
      • +

        getListElementType

        +
        public Optional<ValueType> getListElementType()
        +
        Returns the individual array element type if the feature valueType is ARRAY.
        +
        +
        Returns:
        +
        ValueType of the feature values in the array wrapped in Optional if the getValueType() is ARRAY, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        getFeatureStatus

        +
        public Optional<FeatureStatus> getFeatureStatus()
        +
        Returns the feature status of the feature value. PRESENT if the feature value is retrieved and + present in the online store or MISSING_DATA if the feature value is missing or outside TTL
        +
        +
        Returns:
        +
        Optional<String> of the feature value statuses Optional.
        +
        +
      • +
      + + + +
        +
      • +

        getFeatureDescription

        +
        public String getFeatureDescription()
        +
        Returns the description of the feature
        +
        +
        Returns:
        +
        String
        +
        +
      • +
      + + + +
        +
      • +

        getFeatureTags

        +
        public Map<String,​String> getFeatureTags()
        +
        Returns the tags of the feature
        +
      • +
      + + + +
        +
      • +

        getEffectiveTime

        +
        public Optional<Instant> getEffectiveTime()
        +
        Returns the effective serving time for this feature. This is the most recent time that's + aligned to the interval for which a full aggregation is available for this feature. Note: Only + present if MetadataOption.EFFECTIVE_TIME is included in the GetFeaturesRequest
        +
        +
        Returns:
        +
        Optional<Instant> representing the effectiveTime if present, Optional.empty() + otherwise
        +
        +
      • +
      + + + +
        +
      • +

        getFeatureName

        +
        public String getFeatureName()
        +
        Returns the feature service name
        +
      • +
      + + + +
        +
      • +

        getFeatureNamespace

        +
        public String getFeatureNamespace()
        +
        Returns the feature service namespace
        +
      • +
      + + + +
        +
      • +

        stringValue

        +
        public String stringValue()
        +                   throws TectonClientException
        +
        A Feature Value of type String
        +
        +
        Returns:
        +
        feature value cast to java.lang.String
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose ValueType is not STRING
        +
        +
      • +
      + + + +
        +
      • +

        int64value

        +
        public Long int64value()
        +                throws TectonClientException
        +
        A Feature Value of type int64 (Long)
        +
        +
        Returns:
        +
        feature value cast to java.lang.Long
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose ValueType is not INT64
        +
        +
      • +
      + + + +
        +
      • +

        booleanValue

        +
        public Boolean booleanValue()
        +                     throws TectonClientException
        +
        A Feature Value of type Boolean
        +
        +
        Returns:
        +
        feature value cast to java.lang.Boolean
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose ValueType is not BOOLEAN
        +
        +
      • +
      + + + +
        +
      • +

        float64Value

        +
        public Double float64Value()
        +                    throws TectonClientException
        +
        A Feature Value of type Float64 (Double)
        +
        +
        Returns:
        +
        feature value cast to java.lang.Double
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose ValueType is not FLOAT64
        +
        +
      • +
      + + + +
        +
      • +

        float64ArrayValue

        +
        public List<Double> float64ArrayValue()
        +                               throws TectonClientException
        +
        A Feature Value of type ARRAY with FLOAT64 values
        +
        +
        Returns:
        +
        feature value cast to List<Double>
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose valueType is not ARRAY + or listElementType is not FLOAT64
        +
        +
      • +
      + + + +
        +
      • +

        float32ArrayValue

        +
        public List<Float> float32ArrayValue()
        +                              throws TectonClientException
        +
        A Feature Value of type ARRAY with FLOAT32 values
        +
        +
        Returns:
        +
        feature value cast to List<Float>
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose valueType is not ARRAY + or listElementType is not FLOAT32
        +
        +
      • +
      + + + +
        +
      • +

        int64ArrayValue

        +
        public List<Long> int64ArrayValue()
        +                           throws TectonClientException
        +
        A Feature Value of type ARRAY with INT64 values
        +
        +
        Returns:
        +
        feature value cast to List<Long>
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose valueType is not ARRAY + or listElementType is not INT64
        +
        +
      • +
      + + + +
        +
      • +

        stringArrayValue

        +
        public List<String> stringArrayValue()
        +                              throws TectonClientException
        +
        A Feature Value of type ARRAY with String values
        +
        +
        Returns:
        +
        feature value cast to List<String>
        +
        Throws:
        +
        TectonClientException - if the method is called on a value whose valueType is not ARRAY + or listElementType is not STRING
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/MetadataOption.html b/target/apidocs/ai/tecton/client/model/MetadataOption.html new file mode 100644 index 00000000..c201ef53 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/MetadataOption.html @@ -0,0 +1,515 @@ + + + + + +MetadataOption (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum MetadataOption

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        NAME

        +
        public static final MetadataOption NAME
        +
        Include feature name in the response
        +
      • +
      + + + +
        +
      • +

        EFFECTIVE_TIME

        +
        public static final MetadataOption EFFECTIVE_TIME
        +
        Include feature effective_time in the response
        +
      • +
      + + + +
        +
      • +

        DATA_TYPE

        +
        public static final MetadataOption DATA_TYPE
        +
        Include feature data_type in the response.
        +
      • +
      + + + +
        +
      • +

        SLO_INFO

        +
        public static final MetadataOption SLO_INFO
        +
        Include SLO Info in the response
        +
      • +
      + + + +
        +
      • +

        FEATURE_STATUS

        +
        public static final MetadataOption FEATURE_STATUS
        +
        Include feature status of the feature value in the response
        +
      • +
      + + + +
        +
      • +

        FEATURE_DESCRIPTION

        +
        public static final MetadataOption FEATURE_DESCRIPTION
        +
        Include user defined description of the feature in the response
        +
      • +
      + + + +
        +
      • +

        FEATURE_TAGS

        +
        public static final MetadataOption FEATURE_TAGS
        +
        Include user defined tags of the feature in the response
        +
      • +
      + + + +
        +
      • +

        ALL

        +
        public static final MetadataOption ALL
        +
        Include all metadata in the response
        +
      • +
      + + + +
        +
      • +

        NONE

        +
        public static final MetadataOption NONE
        +
        Include no metadata in the response. Note that the default metadata options - NAME and + DATA_TYPE will still be included
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static MetadataOption[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (MetadataOption c : MetadataOption.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static MetadataOption valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        getJsonName

        +
        public String getJsonName()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/model/NameAndType.html b/target/apidocs/ai/tecton/client/model/NameAndType.html new file mode 100644 index 00000000..9d898c1d --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/NameAndType.html @@ -0,0 +1,436 @@ + + + + + +NameAndType (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class NameAndType

+
+
+ +
+
    +
  • +
    +
    public class NameAndType
    +extends Object
    +
    Class that represents the return types for parameters of FeatureServiceMetadata
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        NameAndType

        +
        public NameAndType​(String name,
        +                   ValueType dataType)
        +
        Constructor that creates a NameAndType with specified name and dataType
        +
        +
        Parameters:
        +
        name - Name
        +
        dataType - one of ValueType values
        +
        +
      • +
      + + + +
        +
      • +

        NameAndType

        +
        public NameAndType​(String name,
        +                   ValueType dataType,
        +                   ValueType listElementType)
        +
        Constructor that creates a NameAndType with specified name, dataType and listElementType
        +
        +
        Parameters:
        +
        name - Name
        +
        dataType - dataType
        +
        listElementType - array element type when dataType is ARRAY
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getName

        +
        public String getName()
        +
        Returns the name
        +
        +
        Returns:
        +
        name
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getListElementType

        +
        public Optional<ValueType> getListElementType()
        +
        Returns the array element type if present, Optional.empty() otherwise
        +
        +
        Returns:
        +
        Optional<ValueType> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html b/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html new file mode 100644 index 00000000..344b4823 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html @@ -0,0 +1,396 @@ + + + + + +SloInformation.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SloInformation.Builder

+
+
+ +
+
    +
  • +
    +
    Enclosing class:
    +
    SloInformation
    +
    +
    +
    public static class SloInformation.Builder
    +extends Object
    +
  • +
+
+
+ +
+
+ +
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html b/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html new file mode 100644 index 00000000..d4559d3d --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html @@ -0,0 +1,411 @@ + + + + + +SloInformation.SloIneligibilityReason (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum SloInformation.SloIneligibilityReason

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static SloInformation.SloIneligibilityReason[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (SloInformation.SloIneligibilityReason c : SloInformation.SloIneligibilityReason.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static SloInformation.SloIneligibilityReason valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.html b/target/apidocs/ai/tecton/client/model/SloInformation.html new file mode 100644 index 00000000..cc437b4a --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/SloInformation.html @@ -0,0 +1,508 @@ + + + + + +SloInformation (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SloInformation

+
+
+ +
+
    +
  • +
    +
    public class SloInformation
    +extends Object
    +
    Class that represents SLO Info provided by Tecton when serving feature values. All values + returned are wrapped in
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isSloEligible

        +
        public Optional<Boolean> isSloEligible()
        +
        Returns true if the response was eligible for SLO, false otherwise.
        +
        +
        Returns:
        +
        Optional<Boolean> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getServerTimeSeconds

        +
        public Optional<Double> getServerTimeSeconds()
        +
        This includes the total time spent in the feature server including online transforms and store + latency
        +
        +
        Returns:
        +
        Optional<Double> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        getStoreMaxLatency

        +
        public Optional<Double> getStoreMaxLatency()
        +
        Max latency observed by the request from the store in seconds
        +
        +
        Returns:
        +
        Optional<Double> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        getStoreResponseSizeBytes

        +
        public Optional<Integer> getStoreResponseSizeBytes()
        +
        Total store response size bytes
        +
        +
        Returns:
        +
        Optional<Integer> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        getSloServerTimeSeconds

        +
        public Optional<Double> getSloServerTimeSeconds()
        +
        The server time minus any time spent waiting on line transforms to finish after all table + transforms have finished.
        +
        +
        Returns:
        +
        Optional<Double> if present, Optional.empty() otherwise
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/model/ValueType.html b/target/apidocs/ai/tecton/client/model/ValueType.html new file mode 100644 index 00000000..991a1c6b --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/ValueType.html @@ -0,0 +1,474 @@ + + + + + +ValueType (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum ValueType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        BOOLEAN

        +
        public static final ValueType BOOLEAN
        +
        java.lang.Boolean
        +
      • +
      + + + +
        +
      • +

        INT64

        +
        public static final ValueType INT64
        +
        java.lang.Long
        +
      • +
      + + + +
        +
      • +

        STRING

        +
        public static final ValueType STRING
        +
        java.lang.String
        +
      • +
      + + + +
        +
      • +

        FLOAT32

        +
        public static final ValueType FLOAT32
        +
        java.lang.Float
        +
      • +
      + + + +
        +
      • +

        FLOAT64

        +
        public static final ValueType FLOAT64
        +
        java.lang.Double
        +
      • +
      + + + +
        +
      • +

        ARRAY

        +
        public static final ValueType ARRAY
        +
        java.util.List
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static ValueType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (ValueType c : ValueType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static ValueType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        fromString

        +
        public static Optional<ValueType> fromString​(String name)
        +
        Returns the ValueType that matches the String representation passed as a parameter
        +
        +
        Parameters:
        +
        name - The String representation of the ValueType
        +
        Returns:
        +
        Optional<ValueType> if a match is found, Optional.empty() otherwise
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html new file mode 100644 index 00000000..2cae9511 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html @@ -0,0 +1,198 @@ + + + + + +Uses of Class ai.tecton.client.model.FeatureServiceMetadata (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.FeatureServiceMetadata

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html new file mode 100644 index 00000000..b58fc466 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class ai.tecton.client.model.FeatureStatus (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.FeatureStatus

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html new file mode 100644 index 00000000..94ecfe0b --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class ai.tecton.client.model.FeatureValue (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.FeatureValue

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html b/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html new file mode 100644 index 00000000..b598f00a --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html @@ -0,0 +1,347 @@ + + + + + +Uses of Class ai.tecton.client.model.MetadataOption (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.MetadataOption

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html b/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html new file mode 100644 index 00000000..71ad1ce8 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html @@ -0,0 +1,252 @@ + + + + + +Uses of Class ai.tecton.client.model.NameAndType (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.NameAndType

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html new file mode 100644 index 00000000..01b879b5 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html @@ -0,0 +1,222 @@ + + + + + +Uses of Class ai.tecton.client.model.SloInformation.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.SloInformation.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html new file mode 100644 index 00000000..84ac2ba8 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html @@ -0,0 +1,257 @@ + + + + + +Uses of Class ai.tecton.client.model.SloInformation.SloIneligibilityReason (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.SloInformation.SloIneligibilityReason

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html new file mode 100644 index 00000000..e0c5802d --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html @@ -0,0 +1,236 @@ + + + + + +Uses of Class ai.tecton.client.model.SloInformation (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.SloInformation

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/class-use/ValueType.html b/target/apidocs/ai/tecton/client/model/class-use/ValueType.html new file mode 100644 index 00000000..c06b95bf --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/class-use/ValueType.html @@ -0,0 +1,307 @@ + + + + + +Uses of Class ai.tecton.client.model.ValueType (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.model.ValueType

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/model/package-summary.html b/target/apidocs/ai/tecton/client/model/package-summary.html new file mode 100644 index 00000000..e9fe1da7 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/package-summary.html @@ -0,0 +1,238 @@ + + + + + +ai.tecton.client.model (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.model

+
+
+
+ + +
This package contains classes modeling the various types representing the results from the + FeatureService API
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    FeatureServiceMetadata +
    Class that encapsulates metadata for a FeatureService, including the schema for join keys and + request context in GetFeaturesRequestData, as well as the in-order output schema of feature + values in GetFeaturesResponse.
    +
    FeatureValue +
    Class that represents each feature value in the feature vector returned in the + GetFeaturesResponse
    +
    NameAndType +
    Class that represents the return types for parameters of FeatureServiceMetadata
    +
    SloInformation +
    Class that represents SLO Info provided by Tecton when serving feature values.
    +
    SloInformation.Builder 
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    FeatureStatus +
    Enum that represents the different feature statuses that can be returned when requesting feature + values.
    +
    MetadataOption +
    Enum representing options for different metadata information that can be requested from the + FeatureService API
    +
    SloInformation.SloIneligibilityReason +
    Reasons due to which the Feature Serving Response can be ineligible for SLO
    +
    ValueType +
    Enum that represents the different data types (primitive or custom) of feature values
    +
    +
  • +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/package-tree.html b/target/apidocs/ai/tecton/client/model/package-tree.html new file mode 100644 index 00000000..cb067d79 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/package-tree.html @@ -0,0 +1,186 @@ + + + + + +ai.tecton.client.model Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.model

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/model/package-use.html b/target/apidocs/ai/tecton/client/model/package-use.html new file mode 100644 index 00000000..5ba5b396 --- /dev/null +++ b/target/apidocs/ai/tecton/client/model/package-use.html @@ -0,0 +1,292 @@ + + + + + +Uses of Package ai.tecton.client.model (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.model

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Packages that use ai.tecton.client.model 
    PackageDescription
    ai.tecton.client.model +
    This package contains classes modeling the various types representing the results from the + FeatureService API
    +
    ai.tecton.client.request +
    This package contains classes modeling the different requests to the FeatureService API
    +
    ai.tecton.client.response +
    This package contains classes representing the high-level responses from FeatureService API
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in ai.tecton.client.model used by ai.tecton.client.model 
    ClassDescription
    FeatureStatus +
    Enum that represents the different feature statuses that can be returned when requesting feature + values.
    +
    MetadataOption +
    Enum representing options for different metadata information that can be requested from the + FeatureService API
    +
    NameAndType +
    Class that represents the return types for parameters of FeatureServiceMetadata
    +
    SloInformation +
    Class that represents SLO Info provided by Tecton when serving feature values.
    +
    SloInformation.Builder 
    SloInformation.SloIneligibilityReason +
    Reasons due to which the Feature Serving Response can be ineligible for SLO
    +
    ValueType +
    Enum that represents the different data types (primitive or custom) of feature values
    +
    +
  • +
  • + + + + + + + + + + + + + + +
    Classes in ai.tecton.client.model used by ai.tecton.client.request 
    ClassDescription
    MetadataOption +
    Enum representing options for different metadata information that can be requested from the + FeatureService API
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + +
    Classes in ai.tecton.client.model used by ai.tecton.client.response 
    ClassDescription
    FeatureServiceMetadata +
    Class that encapsulates metadata for a FeatureService, including the schema for join keys and + request context in GetFeaturesRequestData, as well as the in-order output schema of feature + values in GetFeaturesResponse.
    +
    FeatureValue +
    Class that represents each feature value in the feature vector returned in the + GetFeaturesResponse
    +
    SloInformation +
    Class that represents SLO Info provided by Tecton when serving feature values.
    +
    +
  • +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/package-summary.html b/target/apidocs/ai/tecton/client/package-summary.html new file mode 100644 index 00000000..938940c6 --- /dev/null +++ b/target/apidocs/ai/tecton/client/package-summary.html @@ -0,0 +1,190 @@ + + + + + +ai.tecton.client (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/package-tree.html b/target/apidocs/ai/tecton/client/package-tree.html new file mode 100644 index 00000000..9f9d5100 --- /dev/null +++ b/target/apidocs/ai/tecton/client/package-tree.html @@ -0,0 +1,168 @@ + + + + + +ai.tecton.client Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/package-use.html b/target/apidocs/ai/tecton/client/package-use.html new file mode 100644 index 00000000..c46ee719 --- /dev/null +++ b/target/apidocs/ai/tecton/client/package-use.html @@ -0,0 +1,232 @@ + + + + + +Uses of Package ai.tecton.client (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html new file mode 100644 index 00000000..51587ff1 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html @@ -0,0 +1,244 @@ + + + + + +AbstractGetFeaturesRequest.SerializeNulls (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Annotation Type AbstractGetFeaturesRequest.SerializeNulls

+
+
+
+
    +
  • +
    +
    @Retention(RUNTIME)
    +@JsonQualifier
    +public static @interface AbstractGetFeaturesRequest.SerializeNulls
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldsDescription
      static com.squareup.moshi.JsonAdapter.FactoryJSON_ADAPTER_FACTORY 
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        JSON_ADAPTER_FACTORY

        +
        static final com.squareup.moshi.JsonAdapter.Factory JSON_ADAPTER_FACTORY
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html new file mode 100644 index 00000000..316d015e --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html @@ -0,0 +1,330 @@ + + + + + +AbstractGetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AbstractGetFeaturesRequest

+
+
+ +
+
    +
  • +
    +
    Direct Known Subclasses:
    +
    GetFeaturesRequest
    +
    +
    +
    public abstract class AbstractGetFeaturesRequest
    +extends AbstractTectonRequest
    +
    Parent class for GetFeaturesRequest and GetFeaturesBatchRequest and extends AbstractTectonRequest
    +
  • +
+
+
+ +
+
+ +
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html b/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html new file mode 100644 index 00000000..0cb524d5 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html @@ -0,0 +1,439 @@ + + + + + +AbstractTectonRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AbstractTectonRequest

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AbstractTectonRequest

        +
        public AbstractTectonRequest​(String endpoint,
        +                             TectonHttpClient.HttpMethod method,
        +                             String workspaceName,
        +                             String featureServiceName)
        +                      throws TectonClientException
        +
        Parent class constructor that configures the request endpoint, request method, workspaceName + and featureServiceName
        +
        +
        Parameters:
        +
        endpoint -
        +
        method -
        +
        workspaceName -
        +
        featureServiceName -
        +
        Throws:
        +
        TectonClientException - when workspaceName or featureServiceName is null or empty
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getEndpoint

        +
        public String getEndpoint()
        +
        Returns the endpoint for request type. This endpoint will be appended to the base URL provided + to the TectonClient
        +
      • +
      + + + + + + + +
        +
      • +

        getFeatureServiceName

        +
        public String getFeatureServiceName()
        +
        Returns the featureServiceName set for the request
        +
      • +
      + + + +
        +
      • +

        getWorkspaceName

        +
        public String getWorkspaceName()
        +
        Returns the workspaceName set for the request
        +
      • +
      + + + +
        +
      • +

        requestToJson

        +
        public abstract String requestToJson()
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html new file mode 100644 index 00000000..59d8976a --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html @@ -0,0 +1,371 @@ + + + + + +GetFeatureServiceMetadataRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeatureServiceMetadataRequest.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html new file mode 100644 index 00000000..2fca319f --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html @@ -0,0 +1,393 @@ + + + + + +GetFeatureServiceMetadataRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeatureServiceMetadataRequest

+
+
+ +
+
    +
  • +
    +
    public class GetFeatureServiceMetadataRequest
    +extends AbstractTectonRequest
    +
    A subclass of AbstractTectonRequest that represents a request to the + feature-service/metadata endpoint to retrieve metadata about a FeatureService, including + the schema for join keys and request context, and the in-order output schema of returned feature + values.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GetFeatureServiceMetadataRequest

        +
        public GetFeatureServiceMetadataRequest​(String featureServiceName,
        +                                        String workspaceName)
        +
        Constructor that creates a new GetFeatureServiceMetadataRequest with the specified + workspaceName and featureServiceName
        +
        +
        Parameters:
        +
        featureServiceName - Name of the Feature Service for which the metadata is being requested
        +
        workspaceName - Name of the workspace in which the Feature Service is defined
        +
        +
      • +
      + + + +
        +
      • +

        GetFeatureServiceMetadataRequest

        +
        public GetFeatureServiceMetadataRequest​(String featureServiceName)
        +
        Constructor that creates a new GetFeatureServiceMetadataRequest with default workspaceName + "prod" and featureServiceName provided.
        +
        +
        Parameters:
        +
        featureServiceName - Name of the Feature Service for which the metadata is being requested
        +
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html new file mode 100644 index 00000000..28d49b16 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html @@ -0,0 +1,532 @@ + + + + + +GetFeaturesBatchRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesBatchRequest.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html new file mode 100644 index 00000000..aa70580e --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html @@ -0,0 +1,691 @@ + + + + + +GetFeaturesBatchRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesBatchRequest

+
+
+ +
+
    +
  • +
    +
    public class GetFeaturesBatchRequest
    +extends Object
    +
    A class that represents a batch request to retrieve a list of feature vectors from the feature + server, for a given workspaceName and featureServiceName. The class can be used to make parallel + requests to retrieve multiple feature vectors from the feature server API. The actual number of + concurrent calls depends on the ConnectionPool size and maxParallelRequests + configurations in the TectonClientOptions. + +

    GetFeaturesBatchRequest uses either the /get-features or the /get-features-batch endpoint + depending on the configuration microBatchSize. By default, the microBatchSize is set to + RequestConstants.DEFAULT_MICRO_BATCH_SIZE. It can be configured to any value in the range + [ 1, RequestConstants.MAX_MICRO_BATCH_SIZE ] + +

    For a GetFeaturesBatchRequest with a GetFeaturesRequestData of size n and a + microBatchSize of 1, the client enqueues n HTTP calls to be sent parallely to the + /get-features endpoint. The client waits until all calls are complete or a specific time + (configured with timeout) has elapsed and returns a List of GetFeaturesResponse objects of size n. + +

    For a GetFeaturesBatchRequest with a GetFeaturesRequestData of size n and a + microBatchSize of k where k is in the range [ 1, RequestConstants.MAX_MICRO_BATCH_SIZE ], the client enqueues Math.ceil(n/k) microbatch requests + to be sent parallely to the /get-features-batch endpoint, waits until all microbatch requests are + complete or a specific configured timeout has elapsed and returns a List of GetFeaturesResponse objects of size n.

    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html new file mode 100644 index 00000000..c0abe8cf --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html @@ -0,0 +1,449 @@ + + + + + +GetFeaturesRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesRequest.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.request.GetFeaturesRequest.Builder
    • +
    +
  • +
+
+
    +
  • +
    +
    Enclosing class:
    +
    GetFeaturesRequest
    +
    +
    +
    public static final class GetFeaturesRequest.Builder
    +extends Object
    +
    A Builder class for building instances of GetFeaturesRequest objects from values + configured by setters
    +
  • +
+
+
+ +
+
+ +
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html new file mode 100644 index 00000000..b1c54b1b --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html @@ -0,0 +1,503 @@ + + + + + +GetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesRequest

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html new file mode 100644 index 00000000..88288900 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html @@ -0,0 +1,380 @@ + + + + + +GetFeaturesRequestData.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesRequestData.Builder

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.request.GetFeaturesRequestData.Builder
    • +
    +
  • +
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Builder

        +
        public Builder()
        +
        Instantiates a new Builder
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        joinKeyMap

        +
        public GetFeaturesRequestData.Builder joinKeyMap​(Map<String,​String> joinKeyMap)
        +
        Setter for joinKeyMap
        +
        +
        Parameters:
        +
        joinKeyMap - Join keys used for table-based FeatureViews. +

        The key of this map is the join key name and the value is the join key value for this + request +

        For string keys, the value should be a string +

        For int64 (Long) keys, the value should be a string of the decimal representation of + the integer

        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + +
        +
      • +

        requestContextMap

        +
        public GetFeaturesRequestData.Builder requestContextMap​(Map<String,​Object> requestContextMap)
        +
        Setter for requestContextMap
        +
        +
        Parameters:
        +
        requestContextMap - Request context used for OnDemand FeatureViews. +

        The key of this map is the join key name and the value is the join key value for this + request +

        For string values, the value should be a java.lang.String +

        For int64 values, the value should be a java.lang.String of the decimal representation + of the integer +

        For double values, the value should be a java.lang.Double

        +
        Returns:
        +
        this Builder
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html new file mode 100644 index 00000000..50bf39e8 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html @@ -0,0 +1,635 @@ + + + + + +GetFeaturesRequestData (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesRequestData

+
+
+ +
+
    +
  • +
    +
    public class GetFeaturesRequestData
    +extends Object
    +
    Class that represents the map parameters passed to a GetFeaturesRequest
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GetFeaturesRequestData

        +
        public GetFeaturesRequestData()
        +
        Constructor that creates a new GetFeaturesRequestData object with an empty joinKeyMap and + requestContextMap
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        addJoinKeyMap

        +
        public GetFeaturesRequestData addJoinKeyMap​(Map<String,​String> joinKeyMap)
        +                                     throws InvalidRequestParameterException
        +
        Setter method for joinKeyMap
        +
        +
        Parameters:
        +
        joinKeyMap - Join keys used for table-based FeatureViews. +

        The key of this map is the join key name and the value is the join key value for this + request +

        For string keys, the value should be a string +

        For int64 (Long) keys, the value should be a string of the decimal representation of the + integer

        +
        Returns:
        +
        Returns the GetFeaturesRequestData object after setting joinKeyMap
        +
        Throws:
        +
        InvalidRequestParameterException - when joinKeyMap is null or empty, or any key in the + map is null or empty
        +
        +
      • +
      + + + +
        +
      • +

        addRequestContextMap

        +
        public GetFeaturesRequestData addRequestContextMap​(Map<String,​Object> requestContextMap)
        +                                            throws InvalidRequestParameterException
        +
        Setter method for requestContextMap
        +
        +
        Parameters:
        +
        requestContextMap - Request context used for OnDemand FeatureViews. +

        The key of this map is the join key name and the value is the join key value for this + request +

        For string values, the value should be a java.lang.String +

        For int64 values, the value should be a java.lang.String of the decimal representation + of the integer +

        For double values, the value should be a java.lang.Double

        +
        Returns:
        +
        Returns the GetFeaturesRequestData object after setting requestContextMap
        +
        Throws:
        +
        InvalidRequestParameterException - when requestContextMap is null or empty, or any key in + the map is null or empty
        +
        +
      • +
      + + + + + + + + + + + + + + + +
        +
      • +

        addRequestContext

        +
        public GetFeaturesRequestData addRequestContext​(String key,
        +                                                Long value)
        +                                         throws InvalidRequestParameterException
        +
        Add an int64 request context value to the requestContextMap
        +
        +
        Parameters:
        +
        key - request context name
        +
        value - int64 (Long) request context value +

        Note: The int64 value is converted to a String of the decimal representation of the + integer

        +
        Returns:
        +
        Returns the GetFeaturesRequestData object after adding the request context key value
        +
        Throws:
        +
        InvalidRequestParameterException - when the request context key is null or empty
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        getRequestContextMap

        +
        public Map<String,​Object> getRequestContextMap()
        +
      • +
      + + + +
        +
      • +

        isEmptyJoinKeyMap

        +
        public boolean isEmptyJoinKeyMap()
        +
      • +
      + + + +
        +
      • +

        isEmptyRequestContextMap

        +
        public boolean isEmptyRequestContextMap()
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/RequestConstants.html b/target/apidocs/ai/tecton/client/request/RequestConstants.html new file mode 100644 index 00000000..90918b9e --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/RequestConstants.html @@ -0,0 +1,412 @@ + + + + + +RequestConstants (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RequestConstants

+
+
+ +
+
    +
  • +
    +
    public final class RequestConstants
    +extends Object
    +
    Class that provides static constants that can be used as default parameters to various Request + objects
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html b/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html new file mode 100644 index 00000000..59f319db --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html @@ -0,0 +1,351 @@ + + + + + +RequestOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RequestOptions.Builder

+
+
+ +
+
    +
  • +
    +
    Enclosing class:
    +
    RequestOptions
    +
    +
    +
    public static class RequestOptions.Builder
    +extends Object
    +
    A Builder class for creating an instance of RequestOptions object
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Builder

        +
        public Builder()
        +
        Instantiates a new Builder
        +
      • +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/RequestOptions.html b/target/apidocs/ai/tecton/client/request/RequestOptions.html new file mode 100644 index 00000000..c17cb590 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/RequestOptions.html @@ -0,0 +1,524 @@ + + + + + +RequestOptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class RequestOptions

+
+
+ +
+
    +
  • +
    +
    public class RequestOptions
    +extends Object
    +
    Class that represents request-level options to control feature server behavior. These options are + sent as part of the requestOptions field in GetFeatures and GetFeaturesBatch requests. Option + values must be either Integer or Boolean.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        RequestOptions

        +
        public RequestOptions()
        +
        Constructor that creates a new RequestOptions object with default empty options
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setOption

        +
        public RequestOptions setOption​(String key,
        +                                Object value)
        +
        Sets a request option with the given key and value.
        +
        +
        Parameters:
        +
        key - the option key
        +
        value - the option value (must be either Integer or Boolean)
        +
        Returns:
        +
        Returns the RequestOptions object for method chaining
        +
        Throws:
        +
        IllegalArgumentException - if value is not Integer or Boolean
        +
        +
      • +
      + + + +
        +
      • +

        getOption

        +
        public Object getOption​(String key)
        +
        Gets a specific option value by key.
        +
        +
        Parameters:
        +
        key - the option key
        +
        Returns:
        +
        the option value, or null if not set
        +
        +
      • +
      + + + +
        +
      • +

        getIntegerOption

        +
        public Integer getIntegerOption​(String key)
        +
        Gets a specific option value by key as an Integer.
        +
        +
        Parameters:
        +
        key - the option key
        +
        Returns:
        +
        the option value as Integer, or null if not set or not an Integer
        +
        +
      • +
      + + + +
        +
      • +

        getBooleanOption

        +
        public Boolean getBooleanOption​(String key)
        +
        Gets a specific option value by key as a Boolean.
        +
        +
        Parameters:
        +
        key - the option key
        +
        Returns:
        +
        the option value as Boolean, or null if not set or not a Boolean
        +
        +
      • +
      + + + +
        +
      • +

        getOptions

        +
        public Map<String,​Object> getOptions()
        +
        Gets all options as an unmodifiable map.
        +
        +
        Returns:
        +
        Map containing all request options
        +
        +
      • +
      + + + +
        +
      • +

        isEmpty

        +
        public boolean isEmpty()
        +
        Checks if any options are set.
        +
        +
        Returns:
        +
        true if no options are set, false otherwise
        +
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html new file mode 100644 index 00000000..4bacaf00 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls

+
+
No usage of ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html new file mode 100644 index 00000000..112056ae --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html @@ -0,0 +1,216 @@ + + + + + +Uses of Class ai.tecton.client.request.AbstractGetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.AbstractGetFeaturesRequest

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html new file mode 100644 index 00000000..60f3d926 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html @@ -0,0 +1,216 @@ + + + + + +Uses of Class ai.tecton.client.request.AbstractTectonRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.AbstractTectonRequest

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html new file mode 100644 index 00000000..36a14183 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html new file mode 100644 index 00000000..e387edd2 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeatureServiceMetadataRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeatureServiceMetadataRequest

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html new file mode 100644 index 00000000..61cd4b51 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html @@ -0,0 +1,245 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesBatchRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesBatchRequest.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html new file mode 100644 index 00000000..b54f757d --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html @@ -0,0 +1,228 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesBatchRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesBatchRequest

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html new file mode 100644 index 00000000..5a82b26c --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesRequest.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html new file mode 100644 index 00000000..7508c7d3 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesRequest

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html new file mode 100644 index 00000000..97c560d8 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesRequestData.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesRequestData.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html new file mode 100644 index 00000000..a2ddca59 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html @@ -0,0 +1,390 @@ + + + + + +Uses of Class ai.tecton.client.request.GetFeaturesRequestData (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.GetFeaturesRequestData

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html b/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html new file mode 100644 index 00000000..e7b8712e --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.request.RequestConstants (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.RequestConstants

+
+
No usage of ai.tecton.client.request.RequestConstants
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html new file mode 100644 index 00000000..1178a32b --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class ai.tecton.client.request.RequestOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.RequestOptions.Builder

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html new file mode 100644 index 00000000..175384b0 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html @@ -0,0 +1,263 @@ + + + + + +Uses of Class ai.tecton.client.request.RequestOptions (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.request.RequestOptions

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/request/package-summary.html b/target/apidocs/ai/tecton/client/request/package-summary.html new file mode 100644 index 00000000..46fbafa0 --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/package-summary.html @@ -0,0 +1,271 @@ + + + + + +ai.tecton.client.request (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.request

+
+
+
+ + +
This package contains classes modeling the different requests to the FeatureService API
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/package-tree.html b/target/apidocs/ai/tecton/client/request/package-tree.html new file mode 100644 index 00000000..d164e3eb --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/package-tree.html @@ -0,0 +1,189 @@ + + + + + +ai.tecton.client.request Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.request

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Annotation Type Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/request/package-use.html b/target/apidocs/ai/tecton/client/request/package-use.html new file mode 100644 index 00000000..ad77a8aa --- /dev/null +++ b/target/apidocs/ai/tecton/client/request/package-use.html @@ -0,0 +1,303 @@ + + + + + +Uses of Package ai.tecton.client.request (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.request

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html b/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html new file mode 100644 index 00000000..ad4b9488 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html @@ -0,0 +1,338 @@ + + + + + +GetFeatureServiceMetadataResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeatureServiceMetadataResponse

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.response.GetFeatureServiceMetadataResponse
    • +
    +
  • +
+
+
    +
  • +
    +
    public class GetFeatureServiceMetadataResponse
    +extends Object
    +
    A class that represents the response from the HTTP API for a call to the /metadata + endpoint.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GetFeatureServiceMetadataResponse

        +
        public GetFeatureServiceMetadataResponse​(String response,
        +                                         Duration requestLatency)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getRequestLatency

        +
        public Duration getRequestLatency()
        +
        Returns the response time (network latency + online store latency) as provided by the + underlying Http Client
        +
        +
        Returns:
        +
        response time as Duration
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html b/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html new file mode 100644 index 00000000..8df21a03 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html @@ -0,0 +1,419 @@ + + + + + +GetFeaturesBatchResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesBatchResponse

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • ai.tecton.client.response.GetFeaturesBatchResponse
    • +
    +
  • +
+
+
    +
  • +
    +
    public class GetFeaturesBatchResponse
    +extends Object
    +
    A class that represents the response from the HTTP API for when fetching batch features. The + class provides methods to access the list of feature vector returned, along with its metadata, if + present. + +

    The List of GetFeaturesResponse objects represents the list of response, each + of which encapsulates a feature vector and its metadata. Note: The list may contain nulls for any + request that was never completed, due to a timeout. + +

    The batchSloInformation is only present for batch requests to the /get-features-batch endpoint + (i.e. microBatchSize>1)

    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        GetFeaturesBatchResponse

        +
        public GetFeaturesBatchResponse​(List<HttpResponse> httpResponseList,
        +                                Duration totalDuration,
        +                                int microBatchSize)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getRequestLatency

        +
        public Duration getRequestLatency()
        +
        Returns the response time (network latency + online store latency) as provided by the + underlying Http Client
        +
        +
        Returns:
        +
        response time as Duration
        +
        +
      • +
      + + + + + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html b/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html new file mode 100644 index 00000000..cb68dd3b --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html @@ -0,0 +1,426 @@ + + + + + +GetFeaturesResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class GetFeaturesResponse

+
+
+ +
+
    +
  • +
    +
    public class GetFeaturesResponse
    +extends Object
    +
    A class that represents the response from the HTTP API for a call to the /get-features + endpoint. The class provides methods to access the feature vector returned, along with its + metadata, if present.
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        getFeatureValuesAsMap

        +
        public Map<String,​FeatureValue> getFeatureValuesAsMap()
        +
        Returns the feature vector as a Map, with the feature name as the key
        +
      • +
      + + + +
        +
      • +

        getSloInformation

        +
        public Optional<SloInformation> getSloInformation()
        +
        Returns an SloInformation objected wrapped in Optional if present in + the response received from the HTTP API, Optional.empty() otherwise
        +
      • +
      + + + +
        +
      • +

        equals

        +
        public boolean equals​(Object o)
        +
        Overrides equals() in class Object
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
      • +
      + + + +
        +
      • +

        hashCode

        +
        public int hashCode()
        +
        Overrides hashCode() in class Object
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
      • +
      + + + +
        +
      • +

        getRequestLatency

        +
        public Duration getRequestLatency()
        +
        Returns the response time (network latency + online store latency) as provided by the + underlying Http Client
        +
        +
        Returns:
        +
        response time as Duration
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html new file mode 100644 index 00000000..4d82e97e --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class ai.tecton.client.response.GetFeatureServiceMetadataResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.response.GetFeatureServiceMetadataResponse

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html new file mode 100644 index 00000000..5d02b0f7 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class ai.tecton.client.response.GetFeaturesBatchResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.response.GetFeaturesBatchResponse

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html new file mode 100644 index 00000000..b81027f1 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html @@ -0,0 +1,227 @@ + + + + + +Uses of Class ai.tecton.client.response.GetFeaturesResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.response.GetFeaturesResponse

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/response/package-summary.html b/target/apidocs/ai/tecton/client/response/package-summary.html new file mode 100644 index 00000000..e0dbff87 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/package-summary.html @@ -0,0 +1,189 @@ + + + + + +ai.tecton.client.response (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.response

+
+
+
+ + +
This package contains classes representing the high-level responses from FeatureService API
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    GetFeaturesBatchResponse +
    A class that represents the response from the HTTP API for when fetching batch features.
    +
    GetFeatureServiceMetadataResponse +
    A class that represents the response from the HTTP API for a call to the /metadata + endpoint.
    +
    GetFeaturesResponse +
    A class that represents the response from the HTTP API for a call to the /get-features + endpoint.
    +
    +
  • +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/package-tree.html b/target/apidocs/ai/tecton/client/response/package-tree.html new file mode 100644 index 00000000..3277de16 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/package-tree.html @@ -0,0 +1,167 @@ + + + + + +ai.tecton.client.response Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.response

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/response/package-use.html b/target/apidocs/ai/tecton/client/response/package-use.html new file mode 100644 index 00000000..76e2af25 --- /dev/null +++ b/target/apidocs/ai/tecton/client/response/package-use.html @@ -0,0 +1,227 @@ + + + + + +Uses of Package ai.tecton.client.response (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.response

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/transport/HttpResponse.html b/target/apidocs/ai/tecton/client/transport/HttpResponse.html new file mode 100644 index 00000000..acb0dd88 --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/HttpResponse.html @@ -0,0 +1,338 @@ + + + + + +HttpResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class HttpResponse

+
+
+ +
+
    +
  • +
    +
    public class HttpResponse
    +extends Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isSuccessful

        +
        public boolean isSuccessful()
        +
      • +
      + + + +
        +
      • +

        getResponseCode

        +
        public int getResponseCode()
        +
      • +
      + + + +
        +
      • +

        getRequestDuration

        +
        public Duration getRequestDuration()
        +
      • +
      + + + +
        +
      • +

        getMessage

        +
        public String getMessage()
        +
      • +
      + + + + + + + +
        +
      • +

        validateResponse

        +
        public void validateResponse()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ +
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html new file mode 100644 index 00000000..6cd2c49e --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html @@ -0,0 +1,410 @@ + + + + + +TectonHttpClient.HttpMethod (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum TectonHttpClient.HttpMethod

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static TectonHttpClient.HttpMethod[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (TectonHttpClient.HttpMethod c : TectonHttpClient.HttpMethod.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static TectonHttpClient.HttpMethod valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html new file mode 100644 index 00000000..fe06851d --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html @@ -0,0 +1,423 @@ + + + + + +TectonHttpClient (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class TectonHttpClient

+
+
+ +
+
    +
  • +
    +
    public class TectonHttpClient
    +extends Object
    +
  • +
+
+
+ +
+
+ +
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html b/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html new file mode 100644 index 00000000..d037dc98 --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html @@ -0,0 +1,244 @@ + + + + + +Uses of Class ai.tecton.client.transport.HttpResponse (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.transport.HttpResponse

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html new file mode 100644 index 00000000..6fae813b --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html @@ -0,0 +1,285 @@ + + + + + +Uses of Class ai.tecton.client.transport.TectonHttpClient.HttpMethod (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.transport.TectonHttpClient.HttpMethod

+
+
+ +
+
+ + + diff --git a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html new file mode 100644 index 00000000..73cab0f0 --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.transport.TectonHttpClient (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.transport.TectonHttpClient

+
+
No usage of ai.tecton.client.transport.TectonHttpClient
+
+ + + diff --git a/target/apidocs/ai/tecton/client/transport/package-summary.html b/target/apidocs/ai/tecton/client/transport/package-summary.html new file mode 100644 index 00000000..82684181 --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/package-summary.html @@ -0,0 +1,196 @@ + + + + + +ai.tecton.client.transport (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.transport

+
+
+
+ + +
This package contains implementation of an HTTP Client using OkHttp library from Square.
+
+
See Also:
+
https://square.github.io/okhttp//
+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/transport/package-tree.html b/target/apidocs/ai/tecton/client/transport/package-tree.html new file mode 100644 index 00000000..5357ea66 --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/package-tree.html @@ -0,0 +1,180 @@ + + + + + +ai.tecton.client.transport Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.transport

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/transport/package-use.html b/target/apidocs/ai/tecton/client/transport/package-use.html new file mode 100644 index 00000000..ecadf5ea --- /dev/null +++ b/target/apidocs/ai/tecton/client/transport/package-use.html @@ -0,0 +1,237 @@ + + + + + +Uses of Package ai.tecton.client.transport (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.transport

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/version/Version.html b/target/apidocs/ai/tecton/client/version/Version.html new file mode 100644 index 00000000..a989e259 --- /dev/null +++ b/target/apidocs/ai/tecton/client/version/Version.html @@ -0,0 +1,316 @@ + + + + + +Version (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Version

+
+
+ +
+
    +
  • +
    +
    public class Version
    +extends Object
    +
  • +
+
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Version

        +
        public Version()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/target/apidocs/ai/tecton/client/version/class-use/Version.html b/target/apidocs/ai/tecton/client/version/class-use/Version.html new file mode 100644 index 00000000..e83d60a2 --- /dev/null +++ b/target/apidocs/ai/tecton/client/version/class-use/Version.html @@ -0,0 +1,150 @@ + + + + + +Uses of Class ai.tecton.client.version.Version (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
ai.tecton.client.version.Version

+
+
No usage of ai.tecton.client.version.Version
+
+ + + diff --git a/target/apidocs/ai/tecton/client/version/package-summary.html b/target/apidocs/ai/tecton/client/version/package-summary.html new file mode 100644 index 00000000..f7f07114 --- /dev/null +++ b/target/apidocs/ai/tecton/client/version/package-summary.html @@ -0,0 +1,168 @@ + + + + + +ai.tecton.client.version (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Package ai.tecton.client.version

+
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Version 
    +
  • +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/version/package-tree.html b/target/apidocs/ai/tecton/client/version/package-tree.html new file mode 100644 index 00000000..d6540481 --- /dev/null +++ b/target/apidocs/ai/tecton/client/version/package-tree.html @@ -0,0 +1,165 @@ + + + + + +ai.tecton.client.version Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package ai.tecton.client.version

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/ai/tecton/client/version/package-use.html b/target/apidocs/ai/tecton/client/version/package-use.html new file mode 100644 index 00000000..8c887bb8 --- /dev/null +++ b/target/apidocs/ai/tecton/client/version/package-use.html @@ -0,0 +1,150 @@ + + + + + +Uses of Package ai.tecton.client.version (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
ai.tecton.client.version

+
+
No usage of ai.tecton.client.version
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/allclasses-index.html b/target/apidocs/allclasses-index.html new file mode 100644 index 00000000..136dd16c --- /dev/null +++ b/target/apidocs/allclasses-index.html @@ -0,0 +1,464 @@ + + + + + +All Classes (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/allclasses.html b/target/apidocs/allclasses.html new file mode 100644 index 00000000..aa436ad3 --- /dev/null +++ b/target/apidocs/allclasses.html @@ -0,0 +1,78 @@ + + + + + +All Classes (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + +
+

All Classes

+ +
+ + diff --git a/target/apidocs/allpackages-index.html b/target/apidocs/allpackages-index.html new file mode 100644 index 00000000..59b73346 --- /dev/null +++ b/target/apidocs/allpackages-index.html @@ -0,0 +1,203 @@ + + + + + +All Packages (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
+ +
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/constant-values.html b/target/apidocs/constant-values.html new file mode 100644 index 00000000..214efec1 --- /dev/null +++ b/target/apidocs/constant-values.html @@ -0,0 +1,379 @@ + + + + + +Constant Field Values (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+ + +
+

ai.tecton.*

+ + +
    +
  • + + + + + + + + + + + + + + +
    ai.tecton.client.version.Version 
    Modifier and TypeConstant FieldValue
    + +public static final StringVERSION"0.9.4-SNAPSHOT"
    +
  • +
+
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/deprecated-list.html b/target/apidocs/deprecated-list.html new file mode 100644 index 00000000..eef93224 --- /dev/null +++ b/target/apidocs/deprecated-list.html @@ -0,0 +1,150 @@ + + + + + +Deprecated List (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+

Contents

+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/element-list b/target/apidocs/element-list new file mode 100644 index 00000000..8917071a --- /dev/null +++ b/target/apidocs/element-list @@ -0,0 +1,7 @@ +ai.tecton.client +ai.tecton.client.exceptions +ai.tecton.client.model +ai.tecton.client.request +ai.tecton.client.response +ai.tecton.client.transport +ai.tecton.client.version diff --git a/target/apidocs/help-doc.html b/target/apidocs/help-doc.html new file mode 100644 index 00000000..38998de3 --- /dev/null +++ b/target/apidocs/help-doc.html @@ -0,0 +1,282 @@ + + + + + +API Help (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +
    +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
    +
  • +
  • +
    +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

    +
      +
    • Interfaces
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
    +
  • +
  • +
    +

    Class or Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class Inheritance Diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class or Interface Declaration
    • +
    • Class or Interface Description
    • +
    +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Property Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
    +
      +
    • Field Detail
    • +
    • Property Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
    +
  • +
  • +
    +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type Declaration
    • +
    • Annotation Type Description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
    +
  • +
  • +
    +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum Declaration
    • +
    • Enum Description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
    +
  • +
  • +
    +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
    +
  • +
  • +
    +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
    • +
    +
    +
  • +
  • +
    +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
    +
  • +
  • +
    +

    Index

    +

    The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

    +
    +
  • +
  • +
    +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
    +
  • +
  • +
    +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
    +
  • +
  • +
    +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
    +
  • +
  • +
    +

    Search

    +

    You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

    +
    +
  • +
+
+This help file applies to API documentation generated by the standard doclet.
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/index-all.html b/target/apidocs/index-all.html new file mode 100644 index 00000000..545a5e36 --- /dev/null +++ b/target/apidocs/index-all.html @@ -0,0 +1,1468 @@ + + + + + +Index (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I J K M N O P R S T U V W 
All Classes All Packages + + +

A

+
+
AbstractGetFeaturesRequest - Class in ai.tecton.client.request
+
+
Parent class for GetFeaturesRequest and GetFeaturesBatchRequest and extends AbstractTectonRequest
+
+
AbstractGetFeaturesRequest.SerializeNulls - Annotation Type in ai.tecton.client.request
+
 
+
AbstractTectonRequest - Class in ai.tecton.client.request
+
+
An abstract parent class for Tecton FeatureService API Request subclasses
+
+
AbstractTectonRequest(String, TectonHttpClient.HttpMethod, String, String) - Constructor for class ai.tecton.client.request.AbstractTectonRequest
+
+
Parent class constructor that configures the request endpoint, request method, workspaceName + and featureServiceName
+
+
addJoinKey(String, Long) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Add an int64 join key value to the joinKeyMap
+
+
addJoinKey(String, String) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Add a String join key value to the joinKeyMap
+
+
addJoinKeyMap(Map<String, String>) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Setter method for joinKeyMap
+
+
addRequestContext(String, Double) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Add a Double request context value to the requestContextMap
+
+
addRequestContext(String, Long) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Add an int64 request context value to the requestContextMap
+
+
addRequestContext(String, String) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Add a String request context value to the requestContextMap
+
+
addRequestContextMap(Map<String, Object>) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Setter method for requestContextMap
+
+
addRequestData(GetFeaturesRequestData) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Adds a single GetFeaturesRequestData object to the List
+
+
ai.tecton.client - package ai.tecton.client
+
 
+
ai.tecton.client.exceptions - package ai.tecton.client.exceptions
+
+
This package contains exception classes with error messages for Tecton Client
+
+
ai.tecton.client.model - package ai.tecton.client.model
+
+
This package contains classes modeling the various types representing the results from the + FeatureService API
+
+
ai.tecton.client.request - package ai.tecton.client.request
+
+
This package contains classes modeling the different requests to the FeatureService API
+
+
ai.tecton.client.response - package ai.tecton.client.response
+
+
This package contains classes representing the high-level responses from FeatureService API
+
+
ai.tecton.client.transport - package ai.tecton.client.transport
+
+
This package contains implementation of an HTTP Client using OkHttp library from Square.
+
+
ai.tecton.client.version - package ai.tecton.client.version
+
 
+
ALL - ai.tecton.client.model.MetadataOption
+
+
Include all metadata in the response
+
+
ALL_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
+
+ +
+
apiKey(String) - Method in class ai.tecton.client.TectonClient.Builder
+
+
Setter for apiKey
+
+
ARRAY - ai.tecton.client.model.ValueType
+
+
java.util.List
+
+
+ + + +

B

+
+
BadRequestException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by a bad request.
+
+
BadRequestException(String, int) - Constructor for exception ai.tecton.client.exceptions.BadRequestException
+
 
+
BOOLEAN - ai.tecton.client.model.ValueType
+
+
java.lang.Boolean
+
+
booleanValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type Boolean
+
+
build() - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
build() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Returns an instance of GetFeaturesBatchRequest created from the fields set on this + builder
+
+
build() - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
+
+
Returns an instance of GetFeatureServiceMetadataRequest
+
+
build() - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Returns an instance of GetFeaturesRequest created from the fields set on this builder
+
+
build() - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
+
+
Build a GetFeaturesRequestData object from the Builder
+
+
build() - Method in class ai.tecton.client.request.RequestOptions.Builder
+
+
Build a RequestOptions object from the Builder
+
+
build() - Method in class ai.tecton.client.TectonClient.Builder
+
+
Build a TectonClient object from the Builder
+
+
build() - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Build a TectonClientOptions object from the Builder
+
+
Builder() - Constructor for class ai.tecton.client.model.SloInformation.Builder
+
 
+
Builder() - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Constructs an empty Builder
+
+
Builder() - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
+
 
+
Builder() - Constructor for class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Constructor for instantiating an empty Builder
+
+
Builder() - Constructor for class ai.tecton.client.request.GetFeaturesRequestData.Builder
+
+
Instantiates a new Builder
+
+
Builder() - Constructor for class ai.tecton.client.request.RequestOptions.Builder
+
+
Instantiates a new Builder
+
+
Builder() - Constructor for class ai.tecton.client.TectonClient.Builder
+
 
+
Builder() - Constructor for class ai.tecton.client.TectonClientOptions.Builder
+
 
+
buildRequestWithDefaultHeaders(HttpRequest) - Method in class ai.tecton.client.transport.TectonHttpClient
+
 
+
+ + + +

C

+
+
CACHED_MISSING_DATA - ai.tecton.client.model.FeatureStatus
+
 
+
CACHED_PRESENT - ai.tecton.client.model.FeatureStatus
+
+
Unable to infer feature status.
+
+
CACHED_UNKNOWN - ai.tecton.client.model.FeatureStatus
+
 
+
CALL_FAILURE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
close() - Method in class ai.tecton.client.TectonClient
+
+
Releases all resources (connection pool, threads) held by the Tecton Client.
+
+
close() - Method in class ai.tecton.client.transport.TectonHttpClient
+
 
+
connectTimeout(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Setter for the connectTimeout value for new connections.
+
+
createException(int, String) - Static method in class ai.tecton.client.exceptions.HttpStatusExceptionFactory
+
 
+
+ + + +

D

+
+
DATA_TYPE - ai.tecton.client.model.MetadataOption
+
+
Include feature data_type in the response.
+
+
DEFAULT_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
+
+
The default set of MetadataOptions for a GetFeaturesRequest and a GetFeaturesBatchRequest, includes MetadataOption.NAME and MetadataOption.DATA_TYPE
+
+
DEFAULT_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.request.RequestConstants
+
+
The default microBatchSize for a GetFeaturesBatchRequest, set to 1
+
+
DELETE - ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
 
+
DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
 
+
+ + + +

E

+
+
EFFECTIVE_TIME - ai.tecton.client.model.MetadataOption
+
+
Include feature effective_time in the response
+
+
EMPTY_FEATURE_VECTOR - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
EMPTY_REQUEST_MAPS - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
EMPTY_RESPONSE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
equals(Object) - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.model.FeatureValue
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.model.NameAndType
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.model.SloInformation
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.request.AbstractGetFeaturesRequest
+
 
+
equals(Object) - Method in class ai.tecton.client.request.AbstractTectonRequest
+
 
+
equals(Object) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.request.GetFeaturesRequest
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.request.RequestOptions
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
+
+
Overrides equals() in class Object
+
+
equals(Object) - Method in class ai.tecton.client.response.GetFeaturesResponse
+
+
Overrides equals() in class Object
+
+
ERROR_RESPONSE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
+ + + +

F

+
+
FEATURE_DESCRIPTION - ai.tecton.client.model.MetadataOption
+
+
Include user defined description of the feature in the response
+
+
FEATURE_STATUS - ai.tecton.client.model.MetadataOption
+
+
Include feature status of the feature value in the response
+
+
FEATURE_TAGS - ai.tecton.client.model.MetadataOption
+
+
Include user defined tags of the feature in the response
+
+
FeatureServiceMetadata - Class in ai.tecton.client.model
+
+
Class that encapsulates metadata for a FeatureService, including the schema for join keys and + request context in GetFeaturesRequestData, as well as the in-order output schema of feature + values in GetFeaturesResponse.
+
+
FeatureServiceMetadata(List<NameAndType>, List<NameAndType>, List<NameAndType>) - Constructor for class ai.tecton.client.model.FeatureServiceMetadata
+
 
+
featureServiceName(String) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Setter for featureServiceName
+
+
featureServiceName(String) - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
+
+
Setter for featureServiceName
+
+
featureServiceName(String) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Setter for featureServiceName
+
+
FeatureStatus - Enum in ai.tecton.client.model
+
+
Enum that represents the different feature statuses that can be returned when requesting feature + values.
+
+
FeatureValue - Class in ai.tecton.client.model
+
+
Class that represents each feature value in the feature vector returned in the + GetFeaturesResponse
+
+
FeatureValue(Object, String, ValueType, Optional<ValueType>, String, Optional<FeatureStatus>, String, Map<String, String>) - Constructor for class ai.tecton.client.model.FeatureValue
+
 
+
FLOAT32 - ai.tecton.client.model.ValueType
+
+
java.lang.Float
+
+
float32ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type ARRAY with FLOAT32 values
+
+
FLOAT64 - ai.tecton.client.model.ValueType
+
+
java.lang.Double
+
+
float64ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type ARRAY with FLOAT64 values
+
+
float64Value() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type Float64 (Double)
+
+
ForbiddenException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by forbidden access.
+
+
ForbiddenException(String, int) - Constructor for exception ai.tecton.client.exceptions.ForbiddenException
+
 
+
fromString(String) - Static method in enum ai.tecton.client.model.FeatureStatus
+
+
Returns the Status that matches the String representation passed as a parameter
+
+
fromString(String) - Static method in enum ai.tecton.client.model.ValueType
+
+
Returns the ValueType that matches the String representation passed as a parameter
+
+
+ + + +

G

+
+
GatewayTimeoutException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by a gateway timeout.
+
+
GatewayTimeoutException(String, int) - Constructor for exception ai.tecton.client.exceptions.GatewayTimeoutException
+
 
+
GET - ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
 
+
getBatchResponseList() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
+
+
Returns a list of GetFeaturesResponse objects, each encapsulating a feature vector and + its metadata
+
+
getBatchSloInformation() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
+
+
Returns an SloInformation object wrapped in Optional if present in + the response received from the HTTP API, Optional.empty() otherwise
+
+
getBooleanOption(String) - Method in class ai.tecton.client.request.RequestOptions
+
+
Gets a specific option value by key as a Boolean.
+
+
getConnectTimeout() - Method in class ai.tecton.client.TectonClientOptions
+
+
Returns the connectTimeout configuration for the client
+
+
getDataType() - Method in class ai.tecton.client.model.NameAndType
+
+
Returns the Tecton data type as a ValueType
+
+
getEffectiveTime() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the effective serving time for this feature.
+
+
getEndpoint() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
+
Returns the endpoint for request type.
+
+
getEndpoint() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
 
+
getFeatureDescription() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the description of the feature
+
+
getFeatureName() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the feature service name
+
+
getFeatureNamespace() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the feature service namespace
+
+
getFeatures(GetFeaturesRequest) - Method in class ai.tecton.client.TectonClient
+
+
Makes a request to the /get-features endpoint and returns the response in the form of a GetFeaturesResponse object
+
+
getFeaturesBatch(GetFeaturesBatchRequest) - Method in class ai.tecton.client.TectonClient
+
+
Makes a batch request to retrieve a list of feature vector and metadata for a given workspace + and feature service
+
+
GetFeaturesBatchRequest - Class in ai.tecton.client.request
+
+
A class that represents a batch request to retrieve a list of feature vectors from the feature + server, for a given workspaceName and featureServiceName.
+
+
GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
+
+
GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
+
+
GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
+
+
GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int, Duration) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Constructor that creates a new GetFeaturesBatchRequest with the specified parameters
+
+
GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int, Duration, RequestOptions) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Constructor that creates a new GetFeaturesBatchRequest with the specified parameters including + requestOptions
+
+
GetFeaturesBatchRequest.Builder - Class in ai.tecton.client.request
+
+
A Builder class for building instances of GetFeaturesBatchRequest objects from values + configured by setters
+
+
GetFeaturesBatchResponse - Class in ai.tecton.client.response
+
+
A class that represents the response from the HTTP API for when fetching batch features.
+
+
GetFeaturesBatchResponse(List<HttpResponse>, Duration, int) - Constructor for class ai.tecton.client.response.GetFeaturesBatchResponse
+
 
+
getFeatureServiceMetadata() - Method in class ai.tecton.client.response.GetFeatureServiceMetadataResponse
+
+
Returns a FeatureServiceMetadata object that represents the metadata returned
+
+
getFeatureServiceMetadata(GetFeatureServiceMetadataRequest) - Method in class ai.tecton.client.TectonClient
+
+
Makes a request to the /metadata endpoint and returns the response in the form of a GetFeatureServiceMetadataResponse object
+
+
GetFeatureServiceMetadataRequest - Class in ai.tecton.client.request
+
+
A subclass of AbstractTectonRequest that represents a request to the + feature-service/metadata endpoint to retrieve metadata about a FeatureService, including + the schema for join keys and request context, and the in-order output schema of returned feature + values.
+
+
GetFeatureServiceMetadataRequest(String) - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest
+
+
Constructor that creates a new GetFeatureServiceMetadataRequest with default workspaceName + "prod" and featureServiceName provided.
+
+
GetFeatureServiceMetadataRequest(String, String) - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest
+
+
Constructor that creates a new GetFeatureServiceMetadataRequest with the specified + workspaceName and featureServiceName
+
+
GetFeatureServiceMetadataRequest.Builder - Class in ai.tecton.client.request
+
+
A Builder class for building instances of GetFeatureServiceMetadataRequest objects from + values configured by setters
+
+
GetFeatureServiceMetadataResponse - Class in ai.tecton.client.response
+
+
A class that represents the response from the HTTP API for a call to the /metadata + endpoint.
+
+
GetFeatureServiceMetadataResponse(String, Duration) - Constructor for class ai.tecton.client.response.GetFeatureServiceMetadataResponse
+
 
+
getFeatureServiceName() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
+
Returns the featureServiceName set for the request
+
+
GetFeaturesRequest - Class in ai.tecton.client.request
+
+
A subclass of AbstractTectonRequest that represents a request to the /get-features + endpoint to retrieve feature values from Tecton's online store
+
+
GetFeaturesRequest(String, String, GetFeaturesRequestData) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
+
+
Constructor that creates a new GetFeaturesRequest with specified parameters.
+
+
GetFeaturesRequest(String, String, GetFeaturesRequestData, Set<MetadataOption>) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
+
+
Constructor that creates a new GetFeaturesRequest with the specified parameters
+
+
GetFeaturesRequest(String, String, GetFeaturesRequestData, Set<MetadataOption>, RequestOptions) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
+
+
Constructor that creates a new GetFeaturesRequest with the specified parameters including + requestOptions
+
+
GetFeaturesRequest.Builder - Class in ai.tecton.client.request
+
+
A Builder class for building instances of GetFeaturesRequest objects from values + configured by setters
+
+
getFeaturesRequestData(GetFeaturesRequestData) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+ +
+
GetFeaturesRequestData - Class in ai.tecton.client.request
+
+
Class that represents the map parameters passed to a GetFeaturesRequest
+
+
GetFeaturesRequestData() - Constructor for class ai.tecton.client.request.GetFeaturesRequestData
+
+
Constructor that creates a new GetFeaturesRequestData object with an empty joinKeyMap and + requestContextMap
+
+
GetFeaturesRequestData.Builder - Class in ai.tecton.client.request
+
+
A Builder class for creating an instance of GetFeaturesRequestData object
+
+
GetFeaturesResponse - Class in ai.tecton.client.response
+
+
A class that represents the response from the HTTP API for a call to the /get-features + endpoint.
+
+
GetFeaturesResponse(String, Duration) - Constructor for class ai.tecton.client.response.GetFeaturesResponse
+
 
+
getFeatureStatus() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the feature status of the feature value.
+
+
getFeatureTags() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the tags of the feature
+
+
getFeatureValues() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Get metadata for feature values to be returned in the GetFeaturesResponse.
+
+
getFeatureValues() - Method in class ai.tecton.client.response.GetFeaturesResponse
+
+
Returns the feature vector as a List of FeatureValue objects
+
+
getFeatureValuesAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Returns the feature metadata as a Map with the (featureNamespace.featureName) + as the key
+
+
getFeatureValuesAsMap() - Method in class ai.tecton.client.response.GetFeaturesResponse
+
+
Returns the feature vector as a Map, with the feature name as the key
+
+
getInputJoinKeys() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Get the input join keys that are expected to be passed in the joinKeyMap parameter for a GetFeaturesRequest for the feature service
+
+
getInputJoinKeysAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Returns the input join keys as a Map with the join key name as the key
+
+
getInputRequestContextKeys() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Get the request context keys that are expected to be passed in the requestContextMap parameter + for a GetFeaturesRequest for the feature service
+
+
getInputRequestContextKeysAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Returns the request context keys as a Map with the request context name as + the key
+
+
getIntegerOption(String) - Method in class ai.tecton.client.request.RequestOptions
+
+
Gets a specific option value by key as an Integer.
+
+
getJoinKeyMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
 
+
getJsonName() - Method in enum ai.tecton.client.model.MetadataOption
+
 
+
getKeepAliveDuration() - Method in class ai.tecton.client.TectonClientOptions
+
+
Returns the keepAliveDuration configuration for the client's ConnectionPool
+
+
getListElementType() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the individual array element type if the feature valueType is ARRAY.
+
+
getListElementType() - Method in class ai.tecton.client.model.NameAndType
+
+
Returns the array element type if present, Optional.empty() otherwise
+
+
getMaxIdleConnections() - Method in class ai.tecton.client.TectonClientOptions
+
+
Returns the maxIdleConnections configuration for the client's ConnectionPool
+
+
getMaxParallelRequests() - Method in class ai.tecton.client.TectonClientOptions
+
+
Returns the maxParallelRequests configuration for the client
+
+
getMessage() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
getMethod() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
+
Returns the Http Method used by the request type.
+
+
getMethod() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
 
+
getMicroBatchSize() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Getter for microBatchSize
+
+
getName() - Method in class ai.tecton.client.model.NameAndType
+
+
Returns the name
+
+
getOption(String) - Method in class ai.tecton.client.request.RequestOptions
+
+
Gets a specific option value by key.
+
+
getOptions() - Method in class ai.tecton.client.request.RequestOptions
+
+
Gets all options as an unmodifiable map.
+
+
getReadTimeout() - Method in class ai.tecton.client.TectonClientOptions
+
+
Returns the readTimeout configuration for the client
+
+
getRequestContextMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
 
+
getRequestDuration() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
getRequestLatency() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
+
+
Returns the response time (network latency + online store latency) as provided by the + underlying Http Client
+
+
getRequestList() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Return Batch Request List
+
+
getResponseBody() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
getResponseCode() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
getServerTimeSeconds() - Method in class ai.tecton.client.model.SloInformation
+
+
This includes the total time spent in the feature server including online transforms and store + latency
+
+
getSloIneligibilityReasons() - Method in class ai.tecton.client.model.SloInformation
+
+
Reasons for the response not being eligible for SLO.
+
+
getSloInformation() - Method in class ai.tecton.client.response.GetFeaturesResponse
+
+
Returns an SloInformation objected wrapped in Optional if present in + the response received from the HTTP API, Optional.empty() otherwise
+
+
getSloServerTimeSeconds() - Method in class ai.tecton.client.model.SloInformation
+
+
The server time minus any time spent waiting on line transforms to finish after all table + transforms have finished.
+
+
getStatusCode() - Method in exception ai.tecton.client.exceptions.TectonException
+
+
Returns the HTTP Status Code associated with the exception
+
+
getStoreMaxLatency() - Method in class ai.tecton.client.model.SloInformation
+
+
Max latency observed by the request from the store in seconds
+
+
getStoreResponseSizeBytes() - Method in class ai.tecton.client.model.SloInformation
+
+
Total store response size bytes
+
+
getTimeout() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Getter for timeout
+
+
getValueType() - Method in class ai.tecton.client.model.FeatureValue
+
+
Returns the ValueType representing the Tecton data_type for the feature value.
+
+
getWorkspaceName() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
+
Returns the workspaceName set for the request
+
+
+ + + +

H

+
+
hashCode() - Method in class ai.tecton.client.model.FeatureServiceMetadata
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.model.FeatureValue
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.model.NameAndType
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.model.SloInformation
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.request.AbstractGetFeaturesRequest
+
 
+
hashCode() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
 
+
hashCode() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.request.GetFeaturesRequest
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.request.RequestOptions
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
+
+
Overrides hashCode() in class Object
+
+
hashCode() - Method in class ai.tecton.client.response.GetFeaturesResponse
+
+
Overrides hashCode() in class Object
+
+
httpClient(OkHttpClient) - Method in class ai.tecton.client.TectonClient.Builder
+
+
Setter for httpClient
+
+
HttpResponse - Class in ai.tecton.client.transport
+
 
+
HttpStatusExceptionFactory - Class in ai.tecton.client.exceptions
+
+
An exception factory that maps HTTP Status code to a custom Exception
+
+
HttpStatusExceptionFactory() - Constructor for class ai.tecton.client.exceptions.HttpStatusExceptionFactory
+
 
+
+ + + +

I

+
+
INT64 - ai.tecton.client.model.ValueType
+
+
java.lang.Long
+
+
int64ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type ARRAY with INT64 values
+
+
int64value() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type int64 (Long)
+
+
InternalServerErrorException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a server error caused by an internal server failure.
+
+
InternalServerErrorException(String, int) - Constructor for exception ai.tecton.client.exceptions.InternalServerErrorException
+
 
+
INVALID_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_FEATURESERVICENAME - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_GET_FEATURE_BATCH_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_GET_FEATURE_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_GET_SERVICE_METADATA_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_KEY - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_KEY_VALUE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_REQUEST_DATA_LIST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_RESPONSE_FORMAT - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_URL - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
INVALID_WORKSPACENAME - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
InvalidRequestParameterException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by a misconfigured request, such as missing + workspace name, missing feature service name etc.
+
+
InvalidRequestParameterException(String) - Constructor for exception ai.tecton.client.exceptions.InvalidRequestParameterException
+
 
+
isClosed() - Method in class ai.tecton.client.TectonClient
+
+
Returns true if the Tecton Client has been closed, false otherwise
+
+
isClosed() - Method in class ai.tecton.client.transport.TectonHttpClient
+
 
+
isEmpty() - Method in class ai.tecton.client.request.RequestOptions
+
+
Checks if any options are set.
+
+
isEmptyJoinKeyMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
 
+
isEmptyRequestContextMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
+
 
+
isSloEligible() - Method in class ai.tecton.client.model.SloInformation
+
+
Returns true if the response was eligible for SLO, false otherwise.
+
+
isSloEligible(boolean) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
isSuccessful() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
+ + + +

J

+
+
joinKeyMap(Map<String, String>) - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
+
+
Setter for joinKeyMap
+
+
JSON_ADAPTER_FACTORY - Static variable in annotation type ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls
+
 
+
+ + + +

K

+
+
keepAliveDuration(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Setter for the time to keep an idle connection alive in the pool before closing it
+
+
+ + + +

M

+
+
MAX_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.request.RequestConstants
+
+
The maximum microBatchSize supported by Tecton for a GetFeaturesBatchRequest, set to + 5
+
+
maxIdleConnections(int) - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Setter for the maximum number of idle connections to keep in the pool.
+
+
maxParallelRequests(int) - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Setter for the maximum number of requests to execute concurrently.
+
+
MetadataOption - Enum in ai.tecton.client.model
+
+
Enum representing options for different metadata information that can be requested from the + FeatureService API
+
+
metadataOptions(Set<MetadataOption>) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Setter for MetadataOption
+
+
metadataOptions(Set<MetadataOption>) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Setter for metadataOptions
+
+
microBatchSize(int) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Setter for microBatchSize
+
+
MISMATCHED_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
MISSING_DATA - ai.tecton.client.model.FeatureStatus
+
+
Either the join keys requested are missing in the online store or the feature value is outside + ttl.
+
+
MISSING_EXPECTED_METADATA - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
+ + + +

N

+
+
NAME - ai.tecton.client.model.MetadataOption
+
+
Include feature name in the response
+
+
NameAndType - Class in ai.tecton.client.model
+
+
Class that represents the return types for parameters of FeatureServiceMetadata
+
+
NameAndType(String, ValueType) - Constructor for class ai.tecton.client.model.NameAndType
+
+
Constructor that creates a NameAndType with specified name and dataType
+
+
NameAndType(String, ValueType, ValueType) - Constructor for class ai.tecton.client.model.NameAndType
+
+
Constructor that creates a NameAndType with specified name, dataType and listElementType
+
+
NONE - ai.tecton.client.model.MetadataOption
+
+
Include no metadata in the response.
+
+
NONE_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
+
+
An empty set representing None MetadataOptions for a GetFeaturesRequest and a GetFeaturesBatchRequest
+
+
NONE_TIMEOUT - Static variable in class ai.tecton.client.request.RequestConstants
+
+
The default parameter for None timeout for a GetFeaturesBatchRequest
+
+
+ + + +

O

+
+
option(String, Object) - Method in class ai.tecton.client.request.RequestOptions.Builder
+
+
Sets a request option with the given key and value.
+
+
+ + + +

P

+
+
performParallelRequests(String, TectonHttpClient.HttpMethod, List<String>, Duration) - Method in class ai.tecton.client.transport.TectonHttpClient
+
 
+
performRequest(String, TectonHttpClient.HttpMethod, String) - Method in class ai.tecton.client.transport.TectonHttpClient
+
 
+
POST - ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
 
+
PRESENT - ai.tecton.client.model.FeatureStatus
+
+
Feature value is present and returned with no errors.
+
+
PUT - ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
 
+
+ + + +

R

+
+
readTimeout(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
+
+
Setter for the readTimeout value for new connections.
+
+
REDIS_LATENCY_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
 
+
REDIS_RESPONSE_SIZE_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
 
+
RequestConstants - Class in ai.tecton.client.request
+
+
Class that provides static constants that can be used as default parameters to various Request + objects
+
+
RequestConstants() - Constructor for class ai.tecton.client.request.RequestConstants
+
 
+
requestContextMap(Map<String, Object>) - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
+
+
Setter for requestContextMap
+
+
requestDataList(List<GetFeaturesRequestData>) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+ +
+
requestOptions(RequestOptions) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Setter for RequestOptions
+
+
requestOptions(RequestOptions) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Setter for RequestOptions
+
+
RequestOptions - Class in ai.tecton.client.request
+
+
Class that represents request-level options to control feature server behavior.
+
+
RequestOptions() - Constructor for class ai.tecton.client.request.RequestOptions
+
+
Constructor that creates a new RequestOptions object with default empty options
+
+
RequestOptions.Builder - Class in ai.tecton.client.request
+
+
A Builder class for creating an instance of RequestOptions object
+
+
requestToJson() - Method in class ai.tecton.client.request.AbstractTectonRequest
+
 
+
requestToJson() - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest
+
+
Get the JSON representation of the request that will be sent to the /metadata endpoint.
+
+
requestToJson() - Method in class ai.tecton.client.request.GetFeaturesRequest
+
+
Get the JSON representation of the request that will be sent to the /get-features endpoint.
+
+
ResourceExhaustedException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by resource exhaustion.
+
+
ResourceExhaustedException(String, int) - Constructor for exception ai.tecton.client.exceptions.ResourceExhaustedException
+
 
+
ResourceNotFoundException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by a resource not being found.
+
+
ResourceNotFoundException(String, int) - Constructor for exception ai.tecton.client.exceptions.ResourceNotFoundException
+
 
+
+ + + +

S

+
+
serverTimeSeconds(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
ServiceUnavailableException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a server error caused by a temporarily unavailable service.
+
+
ServiceUnavailableException(String, int) - Constructor for exception ai.tecton.client.exceptions.ServiceUnavailableException
+
 
+
setOption(String, Object) - Method in class ai.tecton.client.request.RequestOptions
+
+
Sets a request option with the given key and value.
+
+
SLO_INFO - ai.tecton.client.model.MetadataOption
+
+
Include SLO Info in the response
+
+
sloIneligibilityReasons(Set<SloInformation.SloIneligibilityReason>) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
SloInformation - Class in ai.tecton.client.model
+
+
Class that represents SLO Info provided by Tecton when serving feature values.
+
+
SloInformation(Boolean, Double, Double, Integer, Set<SloInformation.SloIneligibilityReason>, Double) - Constructor for class ai.tecton.client.model.SloInformation
+
 
+
SloInformation.Builder - Class in ai.tecton.client.model
+
 
+
SloInformation.SloIneligibilityReason - Enum in ai.tecton.client.model
+
+
Reasons due to which the Feature Serving Response can be ineligible for SLO
+
+
sloServerTimeSeconds(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
storeMaxLatency(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
storeResponseSizeBytes(Integer) - Method in class ai.tecton.client.model.SloInformation.Builder
+
 
+
STRING - ai.tecton.client.model.ValueType
+
+
java.lang.String
+
+
stringArrayValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type ARRAY with String values
+
+
stringValue() - Method in class ai.tecton.client.model.FeatureValue
+
+
A Feature Value of type String
+
+
+ + + +

T

+
+
TectonClient - Class in ai.tecton.client
+
+
A client for interacting with the Tecton FeatureService API.
+
+
TectonClient(String, String) - Constructor for class ai.tecton.client.TectonClient
+
+
Constructor for a simple Tecton Client
+
+
TectonClient(String, String, TectonClientOptions) - Constructor for class ai.tecton.client.TectonClient
+
+
Constructor for a Tecton Client with custom configurations
+
+
TectonClient(String, String, OkHttpClient) - Constructor for class ai.tecton.client.TectonClient
+
+
Constructor for a Tecton Client with a custom OkHttpClient
+
+
TectonClient.Builder - Class in ai.tecton.client
+
+
A Builder class for creating an instance of TectonClient object with specific + configurations
+
+
TectonClientException - Exception in ai.tecton.client.exceptions
+
+
Exception class that is used to represent various client side errors, such as bad request + parameters, unauthorized requests etc.
+
+
TectonClientException(String) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
+
 
+
TectonClientException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
+
 
+
TectonClientException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
+
 
+
TectonClientException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
+
 
+
tectonClientOptions(TectonClientOptions) - Method in class ai.tecton.client.TectonClient.Builder
+
+
Setter for tectonClientOptions
+
+
TectonClientOptions - Class in ai.tecton.client
+
+
A class that provides custom configuration options for the underlying Http Client.
+
+
TectonClientOptions() - Constructor for class ai.tecton.client.TectonClientOptions
+
+
Constructor that instantiates a TectonClientOptions with default configurations
+
+
TectonClientOptions(Duration, Duration, int, Duration, int) - Constructor for class ai.tecton.client.TectonClientOptions
+
+
Constructor that configures the TectonClientOptions with specified configurations
+
+
TectonClientOptions.Builder - Class in ai.tecton.client
+
+
A Builder class for creating an instance of TectonClientOptions object with specific + configurations
+
+
TectonErrorMessage - Class in ai.tecton.client.exceptions
+
+
Class that declares all the different error messages included in the TectonClientException
+
+
TectonErrorMessage() - Constructor for class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
TectonException - Exception in ai.tecton.client.exceptions
+
+
Base class that is used to represent various errors encountered by the Java client.
+
+
TectonException(String) - Constructor for exception ai.tecton.client.exceptions.TectonException
+
 
+
TectonException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonException
+
 
+
TectonException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonException
+
 
+
TectonException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonException
+
 
+
TectonHttpClient - Class in ai.tecton.client.transport
+
 
+
TectonHttpClient(String, String, TectonClientOptions) - Constructor for class ai.tecton.client.transport.TectonHttpClient
+
 
+
TectonHttpClient(String, String, OkHttpClient) - Constructor for class ai.tecton.client.transport.TectonHttpClient
+
 
+
TectonHttpClient.HttpMethod - Enum in ai.tecton.client.transport
+
 
+
TectonServiceException - Exception in ai.tecton.client.exceptions
+
+
Exception class that is used to represent server side errors.
+
+
TectonServiceException(String) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
+
 
+
TectonServiceException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
+
 
+
TectonServiceException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
+
 
+
TectonServiceException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
+
 
+
timeout(Duration) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
 
+
toString() - Method in class ai.tecton.client.request.RequestOptions
+
 
+
+ + + +

U

+
+
UnauthorizedException - Exception in ai.tecton.client.exceptions
+
+
An exception class representing a client error caused by unauthorized access.
+
+
UnauthorizedException(String, int) - Constructor for exception ai.tecton.client.exceptions.UnauthorizedException
+
 
+
UNKNOWN - ai.tecton.client.model.FeatureStatus
+
 
+
UNKNOWN - ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
 
+
UNKNOWN_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
UNKNOWN_DATETIME_FORMAT - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
UNSUPPORTED_LIST_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
+
 
+
url(String) - Method in class ai.tecton.client.TectonClient.Builder
+
+
Setter for url
+
+
+ + + +

V

+
+
validateResponse() - Method in class ai.tecton.client.transport.HttpResponse
+
 
+
valueOf(String) - Static method in enum ai.tecton.client.model.FeatureStatus
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum ai.tecton.client.model.MetadataOption
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum ai.tecton.client.model.ValueType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum ai.tecton.client.model.FeatureStatus
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum ai.tecton.client.model.MetadataOption
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum ai.tecton.client.model.SloInformation.SloIneligibilityReason
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum ai.tecton.client.model.ValueType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum ai.tecton.client.transport.TectonHttpClient.HttpMethod
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
ValueType - Enum in ai.tecton.client.model
+
+
Enum that represents the different data types (primitive or custom) of feature values
+
+
Version - Class in ai.tecton.client.version
+
 
+
Version() - Constructor for class ai.tecton.client.version.Version
+
 
+
VERSION - Static variable in class ai.tecton.client.version.Version
+
 
+
+ + + +

W

+
+
workspaceName(String) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
+
+
Setter for workspaceName
+
+
workspaceName(String) - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
+
+
Setter for workspaceName
+
+
workspaceName(String) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
+
+
Setter for workspaceName
+
+
+A B C D E F G H I J K M N O P R S T U V W 
All Classes All Packages
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/index.html b/target/apidocs/index.html new file mode 100644 index 00000000..4002c9ba --- /dev/null +++ b/target/apidocs/index.html @@ -0,0 +1,199 @@ + + + + + +Overview (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+
+

Tecton Java Client 0.9.4-SNAPSHOT API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
ai.tecton.client 
ai.tecton.client.exceptions +
This package contains exception classes with error messages for Tecton Client
+
ai.tecton.client.model +
This package contains classes modeling the various types representing the results from the + FeatureService API
+
ai.tecton.client.request +
This package contains classes modeling the different requests to the FeatureService API
+
ai.tecton.client.response +
This package contains classes representing the high-level responses from FeatureService API
+
ai.tecton.client.transport +
This package contains implementation of an HTTP Client using OkHttp library from Square.
+
ai.tecton.client.version 
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/jquery-ui.overrides.css b/target/apidocs/jquery-ui.overrides.css new file mode 100644 index 00000000..facf852c --- /dev/null +++ b/target/apidocs/jquery-ui.overrides.css @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; + border: 1px solid #F8981D; +} diff --git a/target/apidocs/jquery/external/jquery/jquery.js b/target/apidocs/jquery/external/jquery/jquery.js new file mode 100644 index 00000000..50937333 --- /dev/null +++ b/target/apidocs/jquery/external/jquery/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 00000000..93d8bc8e --- /dev/null +++ b/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js b/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 00000000..775895ec --- /dev/null +++ b/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker: function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if (this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker: function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compression. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":37}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with information about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing information + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emitted metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + // NOTE: we use a null prototype because we do not + // want filenames like "toString" coming from a zip file + // to overwrite methods and attributes in a normal Object. + this.files = Object.create(null); + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.7.1"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function (data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function (data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment: input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions: input.unixPermissions, + dosPermissions: input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + if (Buffer.from && Buffer.from !== Uint8Array.from) { + return Buffer.from(data, encoding); + } else { + if (typeof data === "number") { + // Safeguard for old Node.js versions. On newer versions, + // Buffer.from(number) / Buffer(number, encoding) already throw. + throw new Error("The \"data\" argument must not be a number"); + } + return new Buffer(data, encoding); + } + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + var buf = new Buffer(size); + buf.fill(0); + return buf; + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + /* jshint ignore:start */ + // ignore warning about unwanted properties because this.files is a null prototype object + for (filename in this.files) { + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + /* jshint ignore:end */ + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is preferred but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurrence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurrence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('set-immediate-shim'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static information and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index + 4 < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + + reader.setIndex(end); + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + +
+ +

index.html

+
+ + diff --git a/target/apidocs/overview-tree.html b/target/apidocs/overview-tree.html new file mode 100644 index 00000000..311fe59d --- /dev/null +++ b/target/apidocs/overview-tree.html @@ -0,0 +1,263 @@ + + + + + +Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

Class Hierarchy

+ +
+
+

Annotation Type Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +

Copyright © 2025. All rights reserved.

+
+ + diff --git a/target/apidocs/package-search-index.js b/target/apidocs/package-search-index.js new file mode 100644 index 00000000..4c4e8b66 --- /dev/null +++ b/target/apidocs/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"ai.tecton.client"},{"l":"ai.tecton.client.exceptions"},{"l":"ai.tecton.client.model"},{"l":"ai.tecton.client.request"},{"l":"ai.tecton.client.response"},{"l":"ai.tecton.client.transport"},{"l":"ai.tecton.client.version"},{"l":"All Packages","url":"allpackages-index.html"}] diff --git a/target/apidocs/package-search-index.zip b/target/apidocs/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..9b0e5f56a5cb8fc1f7fd7445abc84422762081c8 GIT binary patch literal 282 zcmWIWW@Zs#;Nak32&?)Y#ef7Pf$W0BR3-ORj{)C#?<;{3eYK5xE5 z20Sk7oA&5gGFaywklWaCNzi47--g%_&adxWI5sNXJ-6rQocJRp3uZJcS5BN@;XLQs z!~KFAR6@?Xt~u|M%JMz;XmVR_j>ej8j9)mfYxG|1ouq!{)>-+2lzVfNb{*I5VVm`J za?-l^-1(_Tg!1gRzMgI#;LXnQw{2!|8PI7Gj0_9`-i%Bl3<&2V%YmGa3UGQRz?+o~ Oq?8c|-GTI8us#62=v(9f literal 0 HcmV?d00001 diff --git a/target/apidocs/resources/glass.png b/target/apidocs/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/target/apidocs/script.js b/target/apidocs/script.js new file mode 100644 index 00000000..7dc93c48 --- /dev/null +++ b/target/apidocs/script.js @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("module-search-index.json").async("text").then(function(content){ + moduleSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("package-search-index.json").async("text").then(function(content){ + packageSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("type-search-index.json").async("text").then(function(content){ + typeSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("member-search-index.json").async("text").then(function(content){ + memberSearchIndex = JSON.parse(content); + }); + }); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + JSZip.loadAsync(data).then(function(zip){ + zip.file("tag-search-index.json").async("text").then(function(content){ + tagSearchIndex = JSON.parse(content); + }); + }); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/target/apidocs/search.js b/target/apidocs/search.js new file mode 100644 index 00000000..8492271e --- /dev/null +++ b/target/apidocs/search.js @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (item.m && ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/target/apidocs/serialized-form.html b/target/apidocs/serialized-form.html new file mode 100644 index 00000000..a2612184 --- /dev/null +++ b/target/apidocs/serialized-form.html @@ -0,0 +1,231 @@ + + + + + +Serialized Form (Tecton Java Client 0.9.4-SNAPSHOT API) + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    +
    + +
    +
    +
    + +

    Copyright © 2025. All rights reserved.

    +
    + + diff --git a/target/apidocs/stylesheet.css b/target/apidocs/stylesheet.css new file mode 100644 index 00000000..7d48b952 --- /dev/null +++ b/target/apidocs/stylesheet.css @@ -0,0 +1,910 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.constantsSummary caption a:link, .constantsSummary caption a:visited, +.useSummary caption a:link, .useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; + background-color: #FFFFFF; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/target/apidocs/type-search-index.js b/target/apidocs/type-search-index.js new file mode 100644 index 00000000..a795559d --- /dev/null +++ b/target/apidocs/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"ai.tecton.client.request","l":"AbstractGetFeaturesRequest"},{"p":"ai.tecton.client.request","l":"AbstractTectonRequest"},{"l":"All Classes","url":"allclasses-index.html"},{"p":"ai.tecton.client.exceptions","l":"BadRequestException"},{"p":"ai.tecton.client","l":"TectonClient.Builder"},{"p":"ai.tecton.client","l":"TectonClientOptions.Builder"},{"p":"ai.tecton.client.model","l":"SloInformation.Builder"},{"p":"ai.tecton.client.request","l":"GetFeatureServiceMetadataRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesBatchRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequestData.Builder"},{"p":"ai.tecton.client.request","l":"RequestOptions.Builder"},{"p":"ai.tecton.client.model","l":"FeatureServiceMetadata"},{"p":"ai.tecton.client.model","l":"FeatureStatus"},{"p":"ai.tecton.client.model","l":"FeatureValue"},{"p":"ai.tecton.client.exceptions","l":"ForbiddenException"},{"p":"ai.tecton.client.exceptions","l":"GatewayTimeoutException"},{"p":"ai.tecton.client.request","l":"GetFeaturesBatchRequest"},{"p":"ai.tecton.client.response","l":"GetFeaturesBatchResponse"},{"p":"ai.tecton.client.request","l":"GetFeatureServiceMetadataRequest"},{"p":"ai.tecton.client.response","l":"GetFeatureServiceMetadataResponse"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequest"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequestData"},{"p":"ai.tecton.client.response","l":"GetFeaturesResponse"},{"p":"ai.tecton.client.transport","l":"TectonHttpClient.HttpMethod"},{"p":"ai.tecton.client.transport","l":"HttpResponse"},{"p":"ai.tecton.client.exceptions","l":"HttpStatusExceptionFactory"},{"p":"ai.tecton.client.exceptions","l":"InternalServerErrorException"},{"p":"ai.tecton.client.exceptions","l":"InvalidRequestParameterException"},{"p":"ai.tecton.client.model","l":"MetadataOption"},{"p":"ai.tecton.client.model","l":"NameAndType"},{"p":"ai.tecton.client.request","l":"RequestConstants"},{"p":"ai.tecton.client.request","l":"RequestOptions"},{"p":"ai.tecton.client.exceptions","l":"ResourceExhaustedException"},{"p":"ai.tecton.client.exceptions","l":"ResourceNotFoundException"},{"p":"ai.tecton.client.request","l":"AbstractGetFeaturesRequest.SerializeNulls"},{"p":"ai.tecton.client.exceptions","l":"ServiceUnavailableException"},{"p":"ai.tecton.client.model","l":"SloInformation.SloIneligibilityReason"},{"p":"ai.tecton.client.model","l":"SloInformation"},{"p":"ai.tecton.client","l":"TectonClient"},{"p":"ai.tecton.client.exceptions","l":"TectonClientException"},{"p":"ai.tecton.client","l":"TectonClientOptions"},{"p":"ai.tecton.client.exceptions","l":"TectonErrorMessage"},{"p":"ai.tecton.client.exceptions","l":"TectonException"},{"p":"ai.tecton.client.transport","l":"TectonHttpClient"},{"p":"ai.tecton.client.exceptions","l":"TectonServiceException"},{"p":"ai.tecton.client.exceptions","l":"UnauthorizedException"},{"p":"ai.tecton.client.model","l":"ValueType"},{"p":"ai.tecton.client.version","l":"Version"}] diff --git a/target/apidocs/type-search-index.zip b/target/apidocs/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..5092fe69aaa8ab38a85b3498a3a37ff3b6e59ddf GIT binary patch literal 672 zcmWIWW@Zs#;Nak32&?)Y#ef9Ffb5dWf>hn&)Wo9X4BgDUl++5ntm6E*Afm@e0+=W0)wq_)k)zf*Vb_SJW{pa1n~ zbw*b?>x)Snld?~BnMmo$*73jCxkJli+WPDBWJ7A2ZQLI`xN!eCuYb5F&+5GMhC8BF ztBh4Y$nAZ@zpj?uCG`KRwPsx9PusGsa5zTj!r35Opm~(Y1+v6Zhw{yQHE%7<{XY{a^Nk@ordnMK=$Z#G{*^fBs?FaqEx$ z+0}-7rUx(GW+5ItUeQd-r2P^jO*-%Q~n3d5By;MrX9POSNU1W zoCv*xwaOPi>e%V+pY+36$WrmtS&gd-@z<*TG~0{C)Xg>>xBb3>|BUaKec#qkNl3n0 zF-go==9f#8?i%^Y_Mc{-E>u- z9B;0^S9-l(^;F9vl-`l;5k9TtyyHc3@2#C=wF^Xh_aw;ew8Xe~d&K56OG zoxEv0$8W6m(7b#7(*F57cw98qyPf}^JRoLraF)Twr~hjX?{-)DyW;vRllSihYve*t zy;XjA;P{3$w*z-oRh5{}+Wx}UX4woE7Jl>86E`O%yJbG{h5&21GhSmII|DRDeBI1$eWv Rfz&Yqp$m|91Degi0046s8lM0F literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/TectonClient$Builder.class b/target/classes/ai/tecton/client/TectonClient$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..2285bb67cd6e16f5e65a29917d4be0d278f587f2 GIT binary patch literal 1542 zcma)6%Wl(95Ixs=#te)zxbj{N3W3BEwrhQxzi0WPQnekd+!8KZL$1Yo@ zVY{`iYj*6Oz)n>+wb6;z@{Y8_pdaBVC$8Ha1q-CBoi?xUYPI&0vwgnpfoYrWBg!aW zXb6PMog+gaUNvpwdH-e8a1QmRMLWrAr=?pB-7$IXZ-(6ylTwl&_f6}_a0Jw+wrx0N zOYijzI>=4Vb<2;VG)nm(6@{szYx&8pK6$0-5%=@s37Z}v(qvKuviVD5sQTHutGC(* zde`SwsdxHL%cz*leByk2_jq7bEFh&q#jJ`s7IDn0NFXV&GI2OKP-Ah6#chG@iSB>< zBQXDOPHW9m8aIK5V>%Y>;RP(xq#aBbKQY0xz7k$;D!f7iS$df>^l-zFm_o87X3^6` zq^F5X(oxVOM2h4htu)etbfh?hc`)6I!O-Rr%NQ#a&h-P zq~d@~2^_9?+usnucMl>xa`Pc5z{`fSjUFQ;=b7Q@)~up;?tj{7#fqzGBss`YzdoK NCaq9j{5!vf*dOICRN?>t literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/TectonClient.class b/target/classes/ai/tecton/client/TectonClient.class new file mode 100644 index 0000000000000000000000000000000000000000..4e13fa34aa5ecdeec5a91381121e672d2544ebe3 GIT binary patch literal 5811 zcmb_g`Fk718GhG?)>$t;QwJvy=P<;vohS}1M;r{;`jh&>1Htkwk#~ZJ;VzqLU z^r9C>=v@eu-Yt|CLYq)xCvh8~H4qQTp@;t!8Jw?|Z*{X7<(p zT)YI}o%pwg9?Yn)RLp9q#*BE_8mch20^LZ6k)v^xRB^8c7by)M(kkY~%Lg@RIHuyb zh9(@-Z~`By$CdbS3uS+z9-qXgG<+KOi_rrr9@Ovy6;Qqbg?G0#ct^}OVeZJ7yA!In|OipuF|EHfANTqBW6I<6O;C?fAy5ZP%ZEN?); zrmoSW#=H@=jl_}YxaV4lBmLo-%?B0K3^{RALF1^EFz-yyO_}b5F=cb6Wz>lo_Cdq7 z#JfLP!SN+^O4HHYhpedxwg@gbPDQ^nBH#F@Y1e``QfgxcCLAE z+Dv)TJ$b_Ya;krGDQadzB4rkm%Q?oOB>?A3DVbJfK$)n*vi+tMs-T1x`K%O9$&wOZ z+jT5v${4Bmx{7ZoXwR!OZo2bU%p5a4BW`$xf)f?_qloSDyc1&1`D)#=isd}lUn&5_ z;R+#S2XdELV(sMr?M>Ncvr{&Pol5 z^>~KhZgx)wHkkMd?kN-3+on>4j(M_WmWk>z3Q{52>2k5$7B86>d=F1E_lh?j9pA?f1i~}SjY@=vs#wCScvi=0Jg4J__z`gi z9mf;lOtOj1IPp|t1ZSFXwy_qQn((}iAL9iT=X5M!QN?*37jRL>5`LnfA){h0K~?-z z$0fX|<0ZVT<7fD#j$a9te~sU$ctyvn_^pENm8hPrTB)&)*YG=G`Rh7907mwGIIQ9g z9d8Pp-{UPEZ;M!89TFW3U4cvYO&#UoL%}s=S+ZeP&=;aJbK8P{j*%N@Znr39X^6)U zQGls41QfI(cP6Nv5@#?4U0o&ivJxEZ2%AEZOIN3C2H72O(24V)(?*zlu%#A;O`$E} zS+*256Sl=HPv!_G9WFSy=$C!ASq9`6H_^?@9%%|GMU&eWGBDdh_T&#DnO!T_b{g`^ z$oAfnRXUf|R5`-(FpW6{YYJB7tT>!oYeJ%j z9NQL0e3$3Mi04QTuPxBg7m}l-95p7{7|@_HAiClshB8R zYVAUH&=Cy_`xWkp^eSLc~;DIGG#YzoscJzVbQpXapZfUgke$FTSG3+)^*9F z0S_1c`h+u*auVF9eCPU3Rq(+7-KW88YT29!9uZHx>V6fsQ)PY?>|LwV-o+0W#tD z8i}}VraC2MiR-uwVa68)j1xTk2FWX5l#u0lgN?wKJj5azw>-07#lN`8ha6JM9tCU5 z(_uZomGtn73oAmL_BdL>aUZtxc^%)Tq4J{+a8>srlLkM_at7od`CHGgY*`M7EUSMR9h$_}D6dHI5X~on0Lih|e;#qXzIrQ?v z(1$amJV0P`tI8E9}{s|l)=1o{j zzHyp2fOhg6pwss7`{sKvi8|a(Ic=nuocC}f>EBEG!cg%xKm?I0Bm5VI(%8L#4NpK5 z?pVM^QFGEnnU|NSd_nfX@& zg6e!hRpJ`x^UtslL}OU($LAXQ{#yPvEud?RDZIHipFnN24|tu=H|dKv80xq9rT6VX z60Od8cQxWLiLsKNlSy37CM0w_g01}DK-^w7tu0KTY8=h{|D3D8xV0UB#Xs;j`u!uM P6E65DDL#h#@bUiwUJRC@ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/TectonClientOptions$Builder.class b/target/classes/ai/tecton/client/TectonClientOptions$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..1d3ed31579f50699e63ed1aac6e43bcb53374313 GIT binary patch literal 1492 zcmb7^+fNfg6vn?PrM1g)zlehOs%=3EczMxiu!N*ZBSr~{kK1;li_0$VZjonw*LQu^ zXE7xhN&Ex+qm19#wvxy;DKB%*nLYEH^Uayr-+zAo0&oZS(#RSZ#B~D-H!?7BQ@osb zc^L{4&WSfK!z~FH(kP~}s4(DbtG;1xYp)S1OjNe4U8@)}F0M9wE3`fLzQRz=b6s5v z|K*KsTYKfYqf4!MW(5kWtT6go>zx(H-qoGu3gb+EYWbGqXy=)J)6hZ4?9>C>wZn%B zeYyOmLbBx5wZd@4cJ-6Sc2)ZuR@LFmSjDSZ&Zgzt61OLl;VYYr^y7x@)U~f*mRX=* za;zZG{IF25>|)4@J-1kMZ0&}{jVLNb!TOE}3$pFyRJfXpQ=UI9W+_)b^_u>wh+xBV zy)9+6#&fUX*Yuh#2Q(d{Y(d(nknQCZOiW_R#1fWG3}M*BZSh9L8^xH(8^&;4!U+i{ zaaUo!7jWlz6-J_4Oh7Yj?BfPEnBV;7j5k-$cAiKCpvab+{2 z`~S*55%#$YOb%LLz+5^DdWK+0JA?ytngSpYxvm>+e7Q1aJ@gQH1e@kS~SYk6{KoBISiV z2xC|HLm`iZ6haJ>FA&3H6o*5f9Y>^Qnpw9Rf;cNOMJ#$Ms1 zQg76ZLa9+N9~jk>I?a`r=4&(OTIV`f>UB)lYCAg$i$m{X_3+Rr*8dGi4NndVUpLC7 ziqROjl&gow3aYGdt=M+DuIad^rrpyM>^P*bJdE2njH5!Od}=gGC$&PIVG1k5LrHp6 zs1+&|qry&~ofyY;W}WJ2vsGu0?VhWUXtp_8(;XR-=jIRPmaSP=>>Pmu&wQu#tAcI4 z*2B3JX6bljc1+vWc1?fZ(_NRIlX=Ur++Br<%=)Q9u-I;Ch4(6!qYr!MXS!22&um(f zm3Gs#PtA@c`oI`;zqOd-X2rB}E{nIFT+_C+KNfv+n258>aLAI1~w*YnM@-r{TZ{M}opTUFe^VgBLTKP2KILx3;zvhRXJ3 z<&G$kJW=VR96N6JI!(Q238vS5P}-E0j3b4GI2MJ>3;77?I95e^9}5cUcfmW3H7v#P zfkb_Xr7*sV;|a=fJOyW(_Ez6Eofo<4*-PG*!p6H~O^@DKa{TcqMBC4gHCMF7wOGtN z{hw>0*Ma5qT-{}RVLp8zhGiL*(z49$@#|Ou9}ndKZjcic&%W{>ds2X*Jt^3DoO64e zqkEjwlTR@haU}hi+H>Yq z1hL6{Io8}_x7)PeVeY&5gs1U-USzONO=@NbHGgE5N!r%Dnzy9lhSXb;dP_kmHy`q; zcc1lk5JesdJish=InP5*`^c-e+s`?u$Lt;+GTWMmNWhZ>6Zsph$wDxnNP0*KTkF0i3mO&EpeXr zBVTF`Q*UwY4JL*{U=E45n0^B#%iHfN;Vr-oE>en%yUN(lcox9tm?MwTE6MeqMf4wA C_+!Zc literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/BadRequestException.class b/target/classes/ai/tecton/client/exceptions/BadRequestException.class new file mode 100644 index 0000000000000000000000000000000000000000..7682fcf99cf34f365c86983c79a6762b11887b22 GIT binary patch literal 662 zcmb7B(MkeA6g{J+wrQ4?X<1plXi-bhQ$`O;fnYtP2+`BH4mPpv+U{)hTfHb0^Z|WT zbVsd+l%O5<&YU}Q59gly@%j1=;266xWDGE@#*x)~PKPxEajeIXk70u$dMX{M&KNSq z`aOT*rp=wM*-)Nzy5(A_#Sp2w9l?;QOGjJ<4{hN!dE2H;y6#%sZgEd)JWfW`o%9)w z>Rg&iSju%w%a+1Xrg*kQPf6GD%?j^ai^o9t>ij!dW=IInbG=L9`@B1(pU}f#_=>B* zA4y_0N;KTSv&4nein3FP4>b!}@SCg>NV_Av1ZJ_xkfh4OSkp-%fh|zj#*V%=7|efm zLk9d+(Ht669s2U)07JN_{f_cpPdFWhgDDd!O$=$=2l*FQ?r3fd%f-ouW$GtJqt_p! zMU7FMBXo-}Eg-k|26i(*C>`!2vQK{>Gx-6cFLW6~f}%k?s3=P)NvFc75c5b8A_^>E Rk!bZPjU{?bVhDw>@&$H1szCq% literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/ForbiddenException.class b/target/classes/ai/tecton/client/exceptions/ForbiddenException.class new file mode 100644 index 0000000000000000000000000000000000000000..d5e3585049d68d9105efd910a5edf68a7a5156a1 GIT binary patch literal 466 zcmb7BO-sZu5Ph@Ot=6s|tLVjp-u!^Ag0~efiwlM7WtY9DZK#o&NSca&%ah>2AK;G? zr(N~3AUJ`^%$t|Vo8;s3?H#}cb^wt4b7Y_XRnGpmM_1)m#z93`|UIGdWg`puNSugQiIc z56gtX|0EI4|2i;jha0uC{f>b{bog}}BVK$h`z~iOqYdt#obJDZUO4Q)XCLqmgiPvT cg`?^ZD)lGfcYPX)|nh zw)=$e)Lt`TDb;2-1&`+vRaO=j(~8|#d}C&DHI`Rz(bjx-lt6R#s^g-1KPt!L1am;oZu jvD`pik{Xy3Yh#**d5KgKVL_rau^L#EY*~$X0hT`i|CW9g literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class b/target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..961556adc710957f2b4c18b8fe26e4679b814566 GIT binary patch literal 1560 zcma)6+fEZf82+X}OP3-i1;qm@9ttQca#WBD4QOM5gd%~?2;S%eXrj>@ zeE_{MCKyd1lK22VkBKHG#(#FPmLMB8>3sA3Gv9ye%zXR(NNHmXb8l8G4#hUzz`jgmQjjpLm5I_tv}DC-EWL}`VgBbiDs^HpvZxRp0E%8^!nxFaxm zN*2s1-!Cta+HifpLC!42kPwbzI}^fndEQTYk0*v&N+x@Mf){s+h-YNpqVyaR%pElN zNNCA3elJQz4Ug(vGq&es#kkbnY}>yn-8$t2n$f~whV}I(&rOR5o^Vwukd_U`FqFVG zTxaMBli#zrr$XrfXWrF@N!L)GwswZtVZhKaFpn-$v#@3d& z=c-*94uuI*mJ*J|3mM_83TI58hO%4-!=zdwvx54v%4I>H@-k&_nDREA;D>yDMy?3k zEB`l!F~Sg9=>F$`q5j|DomyC?BgN31+6O9&48`e_cQ{Z=vPhl=Y)3&Ul7g_z9bZcuLvE&4}^~izY{(s{6YAd@F(HhZA9j~ zS~pR#h02X>RQV(tkeE-Z0}}U%5s(_6Bmz?FlS2Wi^GSU`8hp~I$rhS6C|(70y`3;< zj3Z5t?>s%ci}dKa^x!^06P{7y-cZBd(az7*1>KY8pl-C`G%@M`HTW#`sh#Gvi2p)5 RvGd^^nIbq(ix>Ra#Xr?rvw{Es literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class b/target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class new file mode 100644 index 0000000000000000000000000000000000000000..4163cfaac0e0f9e993ab6c42e1f3598cdb2e2c55 GIT binary patch literal 497 zcmbVJO-sZu5Phk2tF?Zu;>m-1^8+l12XV!VtWc<4y6in$hZ?D=Bo`hn)dlaOdz&Sy4KFPiHw1wX-!Gj%2Vsj z>u~JLB?z%7aQ0uC0w?pH4yU90`BX{2v!RE8Ki`Ys!wgt=*vlC8cyxHQ`wH>GW`Kxw j%r~&YNePzN+MA_enIm2zjwM{gTdP>(Y~B=m0XDt>W{rd~ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class b/target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class new file mode 100644 index 0000000000000000000000000000000000000000..7ed07e57fbfcc59e12392a5c56c595492beae029 GIT binary patch literal 479 zcmbtQO-sZu5Phk&)oyilLGK;}Kfoe*+ohL9L8v0`viEFvsF7}>X}b8gJP98B0sbg) zT0bs=9-P1=@6F5POoUG(=S z0{+mw2(a6*`r!&>K+5M~OQPUxY zk7a?uf7}Ti|8{-cPCaag{+6*BT=a>+f6JgIoXr literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class b/target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class new file mode 100644 index 0000000000000000000000000000000000000000..a1f21e87f300c4d16f62d32ee36baf219a89a296 GIT binary patch literal 490 zcmbVJO-sW-5Pef)qcQcPiYGz6`2hw&M5uTv6#~(NExm8kC0&V|vb&M~El+|6e}F$q zoTTbS^x!Pa&b*nOd9(BO{_+ao3|j#fu;HWaW0TOlR9d+!!uCOOFCImd3!O!MXOzx5 z@!^o*b&IhitR+gz+wx%~%|MKDM%qb{ihL-Hs{BvTa}#9=7l}}jlc_6ol;%om7s**F zr%n~xMt9N{rAcLPHW8(Da@_lhbqJv}rZ6|sT9MUVe$XNW)(KbIIWvkG=+_0WRYh#~ z_xdMQu@D{>3FrT#NI3oL;h-M6ThIJG7WUELU$2DtaC_EG_F_gW+&?()b`L2?^z)5E9d;<=D_Q=PtS1GyW}K zG||K#;Eyt$J!~JO^`W=9*`1l)Z@>9wZ||;d0DQn^0qY(JFN>(Ux#r9(4@JB#pkBZm zLjH@=${rBbo4sRkD*RCBsXwrh($iLVYedMk%|sH)J*8zoIT_1nD8?a2Dm@d3a3mt- z{QF?e{!}sHQ%@-0%D@`!2ceSM`tmH0Gpme_{qHh1NfgMwu^p4>$=Bbh7NI1g$VA^{ z9E)js$pR~a7h7SIcutJE92lf{9p!j!{1bl9VX+(!ArBK3PGnTV5;h3SOskRd`rIht zE!e!ndzbVGAOEW^!v16DhN)2PRHr{$5VB3De_qUHQcnoGf9cTHLeuVRVI_;!%=<`K zYc6hVaa9F=3hpBwTprtH_I@DC1E_6ZgN`ndsbnvZ+u{ELPwJP*pK~&U5?haF;3=wj e#ujMI53*Ngk0J0JD-7#a6|C}ZCc|C^FMa_FQL!Na literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class b/target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class new file mode 100644 index 0000000000000000000000000000000000000000..eba849851b02d04df4601717ce022fcbb65f67c0 GIT binary patch literal 494 zcmbVJO-sW-5PcJ4qcQcPiYE{C<_8!ML8RhE6avvpYVX^)#Fe;_&8GObJP98B0sbg) zHmzQS9-M{QnKv^#Z+1Sv-ai1GU@OD|HUjhlY!W)>N-KLo*xpMY#YDuV&_$eCqjWJy z_D2N&vbvXqwNz<&+dPe>8H#bqNH48&QI3RB&Yyw4eNZ*wEEOuYGPjkE^HND|WBHQH zXR9h*$C)$}mCHNL4OQu?uYQ69LL`l;%#EyTQM7IT@FIk@6}G9T)F@#fs~VHbYvq{r z=QKESuSM{&NI3l`Ny72G%3(YAjKl9_*oDVG?}Yd;0oEP%5=I>!931YvfnM445U>vU g1|m-CVu`K(G!4rfaS~vKqtsemta3K5i9HYN-{>oXl>h($ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/TectonClientException.class b/target/classes/ai/tecton/client/exceptions/TectonClientException.class new file mode 100644 index 0000000000000000000000000000000000000000..62b84612c4d7021829eaf8aec719443dfe7f4d70 GIT binary patch literal 872 zcmb7>O-sW-5Qg8avC&wqwzl>AJvITa}FH16e-bbT4L z+-no*pmn@^BVe6{cS<1N(1E(@Jlv|NDQ|ts6dIu?{Tmr+KBq~`v~?_S*pS*a$}?f$ zdcIbHan*~b9*quz*li{s&XWB3cluZ$r=lo~E>#@MR&v46Kmz3vW7c_2CpOY_;@-5P zE>Im&`NLwf9fi+4dE(N3_`X#b+QrB^fu*0w-vH-2>_ncr(7c+Jkq-CSP7XGvSms%Z zEER!+f3HiR_IFQzx!A@e{dImU2p)lSnog(4PypF#tqbu=Zy7kGPLg$~YlZ?S_o|S? zES;zxbI22eS@S8YjtL6DuGZGN$PB{fs41Vowt8iKn4Q9?6$>cPRg5hTWB0n47{nF` lTO5O3OlD+kDRIEqN{apE+!~~o$$4drb7rygCGwiV@)xJbtzrNG literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class b/target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..85f4c4a01d38023b78c38ad65ebcd1d4dd52b70f GIT binary patch literal 2484 zcmb7_ZFAE`5XbidAufc+@(gW{7H9%AriDUzC{(fKpv1C`B!|*Y$8(X-L|{wqNe)TB zRbO?cFZu!cp*sDaY{eHIru2h(^|a_VglD;A?8w&yjyj%WL=X2ZwYGNV();b%>6&2L#1yJ5N5sxUfV zY}ITlfDhmH)}3O%iiB;q6+DN#r)}F0IA6-=B1hkPl4f!1RYoVrYejPFb|q+f zC0b*2&UJj>X{>bYA6r##*EKtkKDH2%fhfm1~s1SZ**n3TH^8@&s`OZ&B!$b1LZc&rm zvyM?BpV5JbQ5x}kSlCDIO^(dB&(O^TWKy37}a-yDuqQ5RwqCiMcULrg~SS^RI$sHbwI8HLYA-Nn3vmHjaD&v(fiDQ`ZEaBsH zU=xZ_DtWdkIp&H-DUaeU(T}=}F7EXekNSO{sIku_UC&s{q@4|=>LqG`!2SLbzXG{x zo(yHQCA&Nqg?lm`LMX|5Dj5{PUq{&{4^a#p;UeyGsRiVNv4Zz=M^~RE>Qy=vq2vuQ zkjCBiyydtjJsHWOU*|C z#2N~PbTX+@yrwBG3LUhHD>9p8QaBSz7NU;DseYh?bXjEK=6l_^ALwSHh$}PE6`6Ri zzeS^VJ1WO$VYj|{i%qRIlJ1UKWJZf`nD)kX;#+!V)Lz@NPA*bV6WZq4 z>efJ04x%*0p8-1NA{R+9;_diVoV<>C6<6cI&MLqC3Dw5*-=BPfQm)3#104U`L> zNtb8_e}1CVbdL7ZEa77enxQ#x$>5K`2Ms<1o;Ua~_=v$r!N&|f4nAS< z$KaC&p8}sY_zd{0!RNr|4ZZ-rXz(ZCPYwPI%niN-{@ma%z?Tia0={bSm*5417s1yI zz7D=&@K@j^gUjHX27e7@nf{gFc^e9sb0(U-_6M=wbIHHO^8l6!;@`n@K7XI3yYwB1 K(LFq8=>ET}Fp{_c literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/TectonException.class b/target/classes/ai/tecton/client/exceptions/TectonException.class new file mode 100644 index 0000000000000000000000000000000000000000..40946ba487ee03b9fe54d6d140518f5f7e9f0be2 GIT binary patch literal 1177 zcmb7?U2hUW6o%iSlr0M_{Qyd9Rq7`nZPyFEqT$A9LV^+t>HUJ^cA90^EVI?0rHQ7E z7ybZ$l<~~$0!zgUv)ReaoHNh7=biKG_m7_dp5vK`HB_@OaHwVv)bP;6BRn?o1Wygr z4AdFSiL_-ndFj9B46MVDITfCeZH7{FusRvfXn#5NaK7rsaj0FdTPnVM#uczGsbG!98j5&m;a(3g4Sp108rZ-Dol7 zc@X%)8$OxXjz<3_g`vDeU`HuzED0oP8C(SZCnZsrV~nSlFiAx(&10w}k&A$Jhs%D# z#B!}3K|(29tEWq}U8*VD7mi0}2UJjVY0_!p_KqjH!-H0vPMUo`3`YF5P&OBDxpktf z$s>n+9$A=bR#L;Bfkqxp92q#y;{+Dn`X7(Lus`?wEcB!p^VthAY|VqQQU>G7c0=C# zpq{1^o1nXAS_}1vKDOWtL&~QkwWPzn;U%?1YpIbqq@G@*9%uAZ!8ESYoa(1>omOq6 z=mRp1<~7(?nx(Koqp5dI%Fdxc>vEKZO>EJM^0AE_VklNIX1$}F6^i9Ft8wrhsX1^% zhc*aUAo!++R-^P8G#5h&p~a>&z7*p-l&$baqj_|Vl{q@nx08l+xnrK8wI zg;Xlldogywf%I+aE(xyu!vV!o4(#I&F_oJy^jbOa4XGQf-XQaZwj)b36a=aortDW$ QMs^&rZTX5XQd+q*_rF6!5>^6pT%bH;osg2?=_Ecwg%V*FbBw3;J4~NIdueK9q5$ zfI+|*JIR;sbmq77O+P;0-T|Co*F_rZEE_DFEL#q?9qb6C&vc;exxngv?NN56*OEcg zt6QUk=IOz$KVOgN_7FYEpYv`8EtZ zzok`RJ@w+NC#%CC@*44nx-wnutIJ{jR3M{_3C*>NBH4^@n3zbQFlEjv59&r%+D_CT zS5yVcQz}P1HXcm)%%jIPo%ZlnVQCpt>jX-p$e#eW9(Ihct~BpvW4gs7_LG5wS(YW1 zJWEmF`2PzNsQlgZy;H@6WFQwy~VSxC4fXEGF$bW!1EUEM_t&WiZQ--jzz4J%;ge z^_JgrH{h!7o*6Awy>h%#V@Mr@zF;U+r4py{-L=r?{5l{{u^M_jsBtZ={pn1Z8yPWd zRk?JH@Jy&&FOWhRS3G#4VPvQx_d@a5+=N;_3jgrSU17)xtwVhxqKMbq4|HY3;6#R- zIO-(Dj>&Nr#@Z7{(&jYX6MDnq5DmZK_G20NLg&zrIfnet*qwzO=0R!^OZMDh*!*`% zf5e=(`8jCQ^GyRovTSKj^F~7`pJBa6V^+F)^;rs$m^ERieGH@J?u!+wC__KM4n{(y zkscuH3P}=RYV`%|vV}x3*+goMW)pp-7Sd02m_UxSLn~-Ei9r%zp%aKa3SR9 Pc2~p*-KJ#7N?_~*_N}gR literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/exceptions/package-info.class b/target/classes/ai/tecton/client/exceptions/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..9e038b6a78f1ea40c130bcae428be4462233af60 GIT binary patch literal 133 zcmX^0Z`VEs1_l!bc18w`#7zB?)Z~)9<=h#guSQo{YjRuU0e3bxFY-{@OE zfcAw4I#Xz1rX8O8(CH_2I$cLnuzX3H=}aFiX`gen*V=opy>0*T_q*Q!oQIb{66ZQ$ z;JmziEH4+j@Ch#VbN_M|KF5^=u41waS$v`6OL=}u$F&5mV_L@zd7n|xZ8>W-?}lqR zGv@QEg5KN{@l2#^o@J+VR@KWW=qy;vj__&~Q^AF%?TMVQ(wGM()5ac-GUYi8BUx{hal>jjA2OQ!F9UfA4I&@o{-mUmgfxzQ%D z%)i-V^9r;q@fGysEXSO!l^4y*oLIEE(w}pS!k!luOWNV0=B-%7Om7y(RKTrZR-Rc! zGjDpLBs{@*h8n#w%+TYDX4czGQB!RH>svBUz00OI-B|nn(Xl2L4D@2l;x?%%*t-GI zuIv&&%MUd3{jGn*B)S(^tpa9eqX z3?#D#vf+9M^(<@(XfUk04}Wv<2|FS)c2|MoO5yn}72Tpty%piH{R*Bat}>)hJv&xJ zbtO=+IyyG3AW?8@m7+OiNeS<3FUM2Tzkwm-4D_PUz)pD?M4yhlfmz&SwI^NIt9li& zMh&mHrD{(HzUsx-J#pOXMZv%vZtIvg@Qu9RF|dHUI_?>`j|XH~p9!RD;2|C4HXYoWu>{9NuUJgXQW*fTC<

    AB=)akx@JT2P_c335jOv|II$iXnS ztZUnHvR0_CxaazqAJJ5WJ-`sz zI$2v(8N|Rww)|xJi^T1#;|4GB3WVu~d6dc(491ihUO_IN7RP@Wq1`bnNF%0m|A=hAY-bL(AJ`Z6R z&+g_M-|?>TzBBa;l+^fZ#8M|-LrtB04ecl2{~lh45a)F_Pwqh{_7Zs?k@oWmNCoe6 zWj`%?3i-$<$t32lNe(K8`TP;@!Knc<2~G`sI5pr$BqKS%-Ge+G@J!Q^r{k%g5qrgl z7^wgq{^E#F#0U6XSQ^5q^%RJ*~z6XogBrnFr1qVQ-(7v!+DFi zf_IDs>(JM+<1IR4c#lNgdD73>B=eqSmM0@1!wun%(CP8EAnJBOW(bla$jp`?qisR7 z?Sjk^f2gJ3PpbnQuzyKbr@HqV$<9XVz|aW@k`$EE0PPUBwJX}B+J5r tRJB%EM~~zbRrXSw1gSXVpE?Vh_XM3j!BeaAE%7p+pd+8a2e_?~{D-}`16>@;;$bC$Roso?kYGL%@}(FK3%VA=5kc?8a8%Hb zV;C3olNgQ(`l*8Z49e1-Ieo6U%y6Q>&5UQ1J;%YC1Dnr=YG%3Wm zZdPqsA%?*Y+G!GvR}HUOKZb#c^qY7Li4E7OHIv@i3ty|@nO0_T%QGFDTU4H%)>WKASw#xRRZJkQprXP6bzkzj z<9Kz?seNj}C*d$^m@j%5xSPE(?Y&a^m@JPi)yraNXQHLjB&#E|tF%^f! zaYP(P#W609V;G}hZVjMF2ScQ6IW`5@-ZhKs4`@+PsV)YKlCyZdJ`>2OKf}R(6R4y& z6x8#@@}eL~>45BYP8yFI+^XlR zw&NN(UZ>KZ4+fmui+~C^6{DzG0*LaWz5ujoOq#M%boz+E8=~i}MIkEF>{G zHTo3M$y2{U`9;bIn|tXMI7qff(MypEtRd1Ai05QH;y)2l2WcMrDe#wqV_CQQK zAlZY-=%0ig+QmM-6y8O@UW)8uP%lMyF|3!AU5x0Z*e(w0kHJI@n|(7zJqGMSA2f1$ xfbug)?hoNMhOtIf4f~aQAJ<5(2U&bgG(p;5;#+)$5fq3QWm=#r7qN(?{{Yt2(p~@n literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/FeatureValue$1.class b/target/classes/ai/tecton/client/model/FeatureValue$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c7ed639fb666e0ce5faaff92d6868883bd70a531 GIT binary patch literal 918 zcma)4?M@Rx6g|_A-L@=J5Eb!*O1IDovI4a+(U??hO=G(?-A#?*kJIghE-t%dyT$lK z{#FxXjNt)%1>ePZr^S>X8cBA}xo7swy)$>_$FFav0Lmz5a2?BO%-}|vqMK6QQgK^~ z6$v>BcOaJWdUl%+Yg<@QD>yV#t%3JdtFBrQ1K}$q~ps!+GMNvZucQwr7l7{aP3Xp$0?R?n~H~up?m?n+yf+8k3V7lam|clN;wZqi-{4 z4c`~xp2vqnF=WV2i?w@))H#Oy1u`+@{^2^;Y2`$Aor)BSrTymr{Erxt)lR4Snql=K zW;F==uFt*k4bqh=mfdNX&nZj8v@2x>^=Z4^tW`~l>dki5-re~VRm#~MJu{7-9m_7s z{>um{%pprWPwFS)6anHZ*y;DoXT(0qFa8CIMEe60FUC?KnVd?Mq%xH$lIm2ZNv5VU zLoz#Ye}sZG7I6(pEFq6I;&r;)2gDUr@r<~Jm#~O!yn#a;#{z9n8E^6-E>j$%u}C8a h?UhQ7)?dJsbF}u#*ngEO0tu=K6li29+YB+Xsoz_j%%T7Q literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/FeatureValue$Value.class b/target/classes/ai/tecton/client/model/FeatureValue$Value.class new file mode 100644 index 0000000000000000000000000000000000000000..c876a1405363c9504e28aa5d8a84f50be8790b5f GIT binary patch literal 3975 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/ListDataType$1.class b/target/classes/ai/tecton/client/model/ListDataType$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1ef88574a7d7148d6071741c7703977a0df3dbe0 GIT binary patch literal 823 zcma)4O>fgc5Ph3CStq#EEro{i6&j~aDAb~qUO-4y+n@+1kw_E{J#Cy-v&FS5$0_3P zaN!I{2qDxTz>h-Ax7w< z&0THoag;fh8P=TcJC*pOmN<5VauVq$QRw)Al40T;MMD`leGyD#@BOi4$m};6%;$6* zs^kSjwpQ;m7(2vcnDtaB+moY#jC*1b(9XOU`6B3xSZRE|Inzyq|CaR5aj_dsVqZ3t zzA@*iak48Cq4m}e#fhN2d!ZjhV-+5>WHO3|92E}7LKQ0(uE4UeikgKw9xyEFD{dgd z1GgP@C;q6RWH8)|<0!VUrfCngd4w86RVeqYUiYkCH?7yb_zTWs2CEr{GTsTqcr3>Z z_Ee%XIHZ0tR4$Q;q5Kclh5qJGbgxOITC4AS|KmSn$Ti!&txbmI%aC~#4^=3F^xfzo zdBf{$_nvJ0iFBfTxA(f)ercC!fQmFw%r5C3>j)-haFzTlp%2JX1T?;Zo&G3(LFTjm zvR`2sosTeHr7%x0H-(&FehN*3JcXZNklq3fW)3A(utI(n8+b~73)|QwpM_0&`BZfg na};N2&C|L8^9?6P>u*ChuBEI6Tqkc354caONI44RVVl1J>%qLb literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/ListDataType.class b/target/classes/ai/tecton/client/model/ListDataType.class new file mode 100644 index 0000000000000000000000000000000000000000..ba1364d0e9793a7dac49080a38f56e6b924bd504 GIT binary patch literal 4135 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/NameAndType.class b/target/classes/ai/tecton/client/model/NameAndType.class new file mode 100644 index 0000000000000000000000000000000000000000..13fbb8267b2a8b2c2f4fb6b6aca7517393f01460 GIT binary patch literal 1776 zcmbVMT~8BR6kVq??X-0OEwz5!TSeqv+bKGJpk5VGgF;LYA8JT?eL9p8Mu#busfj&(}U%!9+1Yis|^T@%Ja;v?<2lQ`j?yyYuI~mD0+%bl0_e3%B`mK=49Jd`}j}~mfTf=k=<&~^0l}8g_v;Tf3e!F_LdZi zx3TC13QeF`ss8$Sfqe|P-4%F*LBAn!fk`tvRWAJm=mf53-(LybmM=XTlB>Imz6?5T zvbfqaXnb$b2^PvYPdn11um_Wh-JgHVj<{C+S3tD3_fULA`+_AI2=vth*?e+OuEaiN zm*nbFuQH^P0KQ5Wr2h&6!`b`X=-@s)P|KN&=t02YU zUDQjIGB9pp2-gX))$I{e6BD>0KrXbd5Z-PRlLT9jW;>o2^a~$MYWZ{D>QQ``eRY45!q{LaR z6r2cG3NRJI9ExE)?p2-Qb{OmQ2J|hg64H!0&d4ERonVz=BA*QLtSG;WSM1^y!w05R zb=4;1C2$x=Vq}}MVwJYuA@zof=vkTYuojk%Xs6@S0!Q&jk7R9U@>tL0KT#%xlJxukq41O#mc$}F-e1BxoOV(3bPg}J$r1kaM7xY{2k*V=}g|xO_`wZir zdfq6%O=Mr7%$>%awuXX2=TcvTp}&T%t+SMtuy&FiahrnOA@Qk@Qe^FPSL$inaFS%o zurNZqQ}~ND`j9sI#W#!^Fm5W1|Hi49@ie_snwK;GA=l6pwR%HWoaznbgI?c6UhznJ PF`JO1-1VXoMpb_RM}%^) literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/SloInformation$Builder.class b/target/classes/ai/tecton/client/model/SloInformation$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..3e9d9de3a4a2fc2dae7c00695b467d07f977d455 GIT binary patch literal 2200 zcmbuBT~8B16o%g^(4}>iZ&2|A6}7EG6~Cn-7Bs=2L~2O%ZYd)US$4_pmRJ*w(F?uM z3;&5G7>y?W0DqM6o!tV(7SqOyJu|yK^URs^o;m5S-`{@%xQKibCe9^s9%BjY!3AwD zYI8}O%i3Jg=Bj~fNhEOHz_@{&z+UASZ1=XUmeryy1$t&ztaU4ETh4Me@4B|MoN<9J zUwZ4(d#F}rK^9$S$rtFZ@|<={TusMb-*yYNzI}e+dU9U+Yp&zVf_g6V<>0T~W}HAS zOOKENLS`Hp#-wZ&l;@@8bD=;-v}Y+$cD5h``X&l$*|CC>Ck@;X=;vYTEEOoX;Jf|ELObE23(hCBuQzYsmC`aBetu8X1R+#ecS+{7}3znz!d*x$m@KiBQBVSVX zlJo?!4Te}*z=+0DkJC*r5|0I@Qnk`HPwKC$InOj*jo(zgdH!StvsDbuBl>q{zPz@X z{a1gn|GPe#kF9M{D=&~vHMo|FCkt-LE6O`6yvaLjcU0eN6Nhlvz=VmLm^85$`%HA8 z(?pjx-RLpVi#`*B=oC2F(4El8TLL2uIS+4@bLV!OnOj`p%@fEqhNyoB*`v0JmBz*E zvu@cXIroH(L0^U%59Z9NuEx!dSLIo0ZU6kTS;UdkRzcRTNiX0SyRgZg9p}UR(?UxS zj#MEWDMUC@3ovxfV>n1lS!mn&jWW_6;airY;MkV=3h|kf7>?4$!;dQ%;@pfJxb+FX zvFBr$Rxi%eJH|1Y8T^LW7qnzP@hu`G!(V)E7lf4l$g@J>8gfpO!Z?1LD#SpW$q_c~1CAL7&;S4c literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class b/target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class new file mode 100644 index 0000000000000000000000000000000000000000..8410f4137bed05c76154955da181eb9440576710 GIT binary patch literal 1471 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 Zl>7`|<2!sqnSYIFk*0advVjF$`44CY$FKkZ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/model/package-info.class b/target/classes/ai/tecton/client/model/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..680722fdf2ad634eabee02d8844e3f8abeae4318 GIT binary patch literal 128 zcmX^0Z`VEs1_l!bc18x}#7zB?)Z~)(XdLSi?3|ztarA5i9Zkai$VhjvS3@kvq OK!A~f4M;LEumS)C_93wV literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class new file mode 100644 index 0000000000000000000000000000000000000000..4d4d7d139968621055cf957bb2be98f2c46a45e6 GIT binary patch literal 1795 zcmbtV+foxj5IqAM7Gf~o74UAv0P2e1HE0!H@KQl7V);H2pzSei<9X1Zt2>7MP=`TG6SX8_Zp}&>YjP7Q_WIq=fWEnjw3z-X7M?-w3O-;>^cP%xgiF=$8K;=HB_DxO;f4@>*a2B*Cpjn)<5-) zt%{Yw9qy8A2P4~J`deE(UfvQGN72WgEzr*f-oqa&k*jT-1sny(-1rBGcg|hlv(Fjt zVvzGfa|5skGnF|ET3%GLC%`K zgY+GuwIAXeiarkG2v<1d literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class new file mode 100644 index 0000000000000000000000000000000000000000..e3b4babcc42bbb7f2ef66e5b3fd33f1d15aab2b3 GIT binary patch literal 873 zcmbtS(N0rA5Ix(LE-kf)qF7Wws13fjG5RJkxfV(wwT0VC!V}qER$X$t3%h$s@UM&y zCYta8ew1;l#OecT^kH}I%${>+=FEKl^6?zN6Wr&hmBBDyLIJlq?s6<}EHYGk%4wPE zx2lt+sb{Ec8KYb?mEJ3IXSaLZ&Ox*u?esU|gI3h+cjJAIdknlKlVIH$!)iORL*Y*{ z=~Q+shStB)V%u929m?aNT>S$1lwoo$Nwv}88AE>c!5%}QX%7{{bXyy$U^q~&F9#__ z$~~L8M78wDS&RlgILf!FLQBbzIpt$@k|`e^9?4V5P>VAY^ib_-uZbTSV}lIZ8tP%G zJ;I1on%6@9co4A)ia6F#T@$A=%_vdh56~T(>g0?FJbu~fZ@t)HSiY?L-Hdd7rIjQ2 zy3`^l(#r@EfYJ*0y?k+bXZ2r4Q-4&!GO87nP~li%c>e$YWVkw(raL&I3Q6p7=qI(t zigMIRsJ|OILvih5-jDyGT!w|;=V{OeVS*OBNT)WEhSr_d3|CMkJ5AmSa&!YzpTPD% zAom{mcjQv*bdPAjCi0jeo5M9+Cp$x5v-EO9;U?yAi$arh<_T879q>l!8;wFJV+m8m F(pTa(`KSN@ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..f682d4f73b32152f08c69adb38f9042728858ab3 GIT binary patch literal 3701 zcmb_f*?$vN6#j0LbkaC&p+IeLAp+7g0ise7Xhlm~pqjR5Dq2u+nhxziIti0o1owSk zAK_hn;X!c$^yl{CgU|js{?zZxOqVo4t3SI;&OP_uvwUZp{QAeYKLF^($1T`^u>@|$ z_zl>NBQ1Cc4-2o5;A5f%kKm|mJSrQH$#PPtW5PS0z~gvA9#0xLVc@AatOVLImB5WC zip*&Pb^<3cV_;U+P6DTJS~#T^+=e*=u7R>bTfz1mtK>XmkIk1#RRwdzb!~63WL2v+ zmx)=eE2FlaEmPtdt`9G+753yUC#UVAF1xv6$+2CX)1Kv4D`ijTCVajeAN04jF5T=? zXrHsSHEn5YyrP}5OHJ+hQ`T84H?N&iu3&4PX(>1}uBGQaTU6ET_Sb8kD^J^{98Fy& zwr@YhH1|8MqxUNuP6t9tmOGOxXwPwH`c}_bG_2>SLUfSY#Ae4OaC1|(H(^bc$mz(J zi&p8VMNqj8nNdCK(8IgyjrQy_^LAC|2BxY+uBZ>$`k?K*Tzxp$q64i@m%Y=~idD47 ztT|tYkHvB~sQ6@XkMTU~ES!wn?sTQ>xLTpJ*0A%H1>;%^+A5wNwJN@`20Q~2_u+Fz zdm%Ju{ukg@A2UI?W5(9C!K77d(>=9$Ky>!4sQWBsS*<@Y%!6BHZhM817}SWLZ0Z3Paq2<)d}_|Bq%3zj6{<)LmR)V1(<#<(s%W`xS*ND#ls#9`=f&&S zO}v3OO$=g4VOO1Q?;qQbfw$!L+X`!znobZi6Nd%RcTBvC_e{Kx4@`WBEscC!sV8tW z^g-dke=uxo?cg%-k;3jeIjb5+HNFLNflaq&-Y7Kef&We4s)mj~WvZOZ3O#jd7Vr!a zWD-=hS z8*seH9JCyn;p=&|f#&Gg_}DO8f_yaCZnmbU2TCP2x8)smuv{v!Y4GL1?;E)~>lZ+1 z+}b!Soa(UDfz%F5hZREK($a&v!ks1fq=x(hHEk<=N03m&*(Cj!B87De1IHi0K9eY{ zUCNiBJP1d3gC1Dl`oyB(wl8pm1wCVX3I==0ygh!B9XdS{j*R6es5C0gQudEG5X;^f zJu+UHP{`I{cm2AE-p04joB4*?gpJZWNv)A)359Jww;KjO)96728B#wZ#$RAZX2)fy z?Di{YN=AP{YchHb5rvCr&0I$GYs5Z-nMp>kqM7s;ybwi}&rbjHW+bR8Nkv`C##V*ojcxo%U$>}9$BO-rNLCnAg19va{ z?FL%nxQF{u-e?b9+{5)=?4x{fFvlIy8OwZy*ykjge8Zc4X4W?}P!|gg4RGp1T;@wC zobpu(kOg>A{uEA`=qgl}zfOV^n{T+1gF07-Y zo9Nm$eji9<4>|jMTQWSmhJf7b$85_YC2$Hr5<4^86{wcZchjTbyimdU?#1)M6Ce|a ztn2t4%AnrB)BW`HKHSfJf$K49l-tS7H)y?p_55hNfY$HOKH0JM3Oat2*hhQ_J7_8p zTyLX*E*w|}XA%Qkiy3lWbx|tESg7TFqA5Y&mC1gJSoBi%7qn5+x-9=cK`e49lf8oV z7lq3Hgbkw-yY2kHiq1>EyrtZmB&f%z`#3i93spCs@NGy1;umvo7lv_=%DV~PA?9O~ zZ&x#-Mw@COpR+JDZP3pp0ucKiH%>+}SI~78$--n*Y$#mCMloP{4o%fK9VB}k58%O2 v;3j^`k8v3{eF-J_v8MS9QZPwjd9Io;%7g$qNZrCBzIB^?)2m?f{mH)opgG6P literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/AbstractTectonRequest.class b/target/classes/ai/tecton/client/request/AbstractTectonRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..3afc678c44926a65458a29a2cd314f4a2244af2a GIT binary patch literal 2650 zcmbVOT~`xF7=9+%WJ6fwL$N}u4V4Nc$ZBb=6+f^DiX~_b1)}|0!j!Cr-MCq7`xkoA z`~HCH4HxyCqMr8j>!ug|O+7t*X0pUU(vRasW@l#Sedn3ydEVLl@z)PO19%fo8XcHQ zqZj8p*j!M}Mb%tV&9sTjDZFc9CXFkYO<~T&RTJ0JurQxS7p|-D_e?CLk;h^hH*ixR zCB5~k?|Pv?-@;wzfn!%3Z^JHxf$MEd2_!dVSoYUV+!9D%3&Uz&j|HrG&y&GS#i`X~ zP2lW;Uefa_dPct*ex8V1bbamz_i9zABp01cNgSU^ zC)^5TK?V=p-O1#6*K@;*0{2H-VZP|zZ8Eh`Ft#jU%=qgB*1h0*a&c>OO$JNOT17!! z@Jmi**$G@VjwX$;?2?gFt*8Qde@oUv`|?_iv(t_(4W)R>Lm^ zdY-dZKaGhGEG%P1Ah%bz|44N3d7=i#0_Xn?_`Ihj-mh;X+`=kG6g5Q)w{fQ(4UuQs zyWhlz7T&<5iH|INj89B_DsZL+(f_(r1WvaEwrEhli5mC?=mM7dkRNQ=4lkp!v`hZx zCQDJ@h?DkmWN})D^32vHS!s6POxXzvs+hf!oNDrMbeZ01n%XsL)6|}5+EJHvWRX24 zkJ2f$DK64iu)x7Rw}YN!*)&sg)oNr zG3ww4%Rrwh5cc|1jp!%KL_b+6e0D(4F~<mh^V6q+JPOl-2_Iww~g=ZM)gCZT%@ zRZRC3uDI?gWCrsn{DQeypUfmQLYq$&naF;R_;>8oVI=kBgx=1oFNn4i7{wT8)bW~w zjs3xsZG*FIcTVmPKHD}p*ETq@KlnmxupuzcU?8P#xd{H(jt^n z#wjhzh`Li5!7bIr%6zBUHxVnEuoTU_Eh22cF+gEk&E_5=VQlAq$ARn<^yK*a7K!+F z?pO5Ym1yJqJwe|$nBd6Z$ask3>?YVv=okGQB{@p!k!d`F5#MI+`XTC$%M->Tj_@DU zQQX8u+`z!L5Mp>ouR2H0!9o#u3Gd^` G^uXU~y>$Wr literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..60589e7ce9cf0c174d3c44fb42b3defb78219d38 GIT binary patch literal 1025 zcmb`FZEMs(5Xb+U%UyagwP)38eJ-?ky@EmTjnC*oMK~*Xa^f4yUT&;=O%vU0&ab7Q z6cqdbekgHvn^L7GLY0u2-O0=^^Pk=CKfZhea05#r0xUMsz&UHq2e=Tz$Hf4b0$diD zeV^;?;;l?*L++5kd~Yl#GEQZ-759x++170iz9wl(O?}c6wV&CzqcUag3DnxF0|CFA zkGOuWr!v|ocZQ^&%VFw>c_Pz+)XMIwpl{x&LLhips&qtJAbOl-q`Rps3gQplo>Z}+ z#N=6=q>3^VYkF5wVd6(*)_-f~2^l$(Mn2n1Sgx4d_lx#nHLL%HTp!xT1@5;0fyW(& z{k+r(tt&gJmA^^5X3r+VF+>q&(2NkGDRA@1qq3+g0uPQ1*q^mP>)_fv9gg|n1g=h* z{*?0=;5uK-fN!hE56f~ZR>t0kuxi=P@-AjC*w;I|5FcIIakdQ?>|>7CHkA|5!b$dm zai`eY;`nr@1olmIo>+Pa`(BhuL$uA09ReK)JI3Z^-@1zKxhL00i{0RZr@3sH{ literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class new file mode 100644 index 0000000000000000000000000000000000000000..7b5c6bfe994f5f4dce0d07363275469bd9fce5d9 GIT binary patch literal 640 zcmcIiJxc>Y5Ph4ki)Tz?j9O};pcY;uh$uFJh!7Qw1jHh2E@Rwy+0(tf_`9qG3x9w= zN}Rh3TBQ+e-n^N4J0H9I`Stz*-~j6`@@P0{I#?BG-jlSkp?*YWs(k8eIU#{YXDp}E z3#1--U2Bvc9Sc-nLh~3s$sbkeL}_JD1@b$)J%K_i9P-&(M`^l@Cj&A!auB4|LSF_w zX;k9Rf(84aB7u!Fvh8e!ZZ^UNSvizewiN|KR#eWlCesRJ6cM|39jQD^z74hK2a2@y z3_ZsbS#NHs>rAjUSCIAM9o=pi8=u-LnR|P#epYZlxupsmlpU-I-2U5S0`=bqxf+al zeSxDtx5FlK{0qPc6i{RYN~smhcpnHXF!R_Zk>cJP#4D2=T*guwJj5dNN+w`iOY`*< Pmr-TwaxRAzETQ}jYelwH literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class new file mode 100644 index 0000000000000000000000000000000000000000..cbc136b6f1c2dfb149688aced51a402c695203ed GIT binary patch literal 935 zcmcIjOH0E*5dOBUO&g=F_5DH*3bld(?L`zXg@{rWtW-o0w&|c-(nOPO|Ca|5Jop3r zQR2kZV=h8jc6YvEX1;msetmy@0;prnL=JOBWHE1G(ZG^G{#k~y9~oE{*f=Hakko^a zS`-eIOBbYNS8C}f^16|Lb>{mNHarB467fy$mSQc50~W#9%Ac zAmKXV)Q**}^ohVjb&NbaZGl`P=#oIGseHN|^g9&Z$d1RFN;7b!*OsA*@kp7|Pl}6Q zPp#lQ3VeaPaU>mw=GK_4U=X_Gs5r^()I>(T-s{Psv|wVz!UT#2Rt0XyFuA1ea?ECX z(totCIz4_I+=?-f{XNNSHJ;$%zZtN}-yz4}L-6MAj3g72tg#q5$nXNp+B-yT_YIj> xMj1@;InBPnKKmcAXPq&ykXWOH8Aj~)8&$Bj!YG4T6!@;NlxJImQI_vA3O`YI8@2!d literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..3e7981ad53f940fc87b9f7e5fe442d1279f29a74 GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class new file mode 100644 index 0000000000000000000000000000000000000000..ab4dd735eb9fba6ffe7df1be2b3af2a54400427d GIT binary patch literal 1263 zcmb_c%We}f6g{4#nG!-Llu}*=3Iqf!7#6^$Q5P)=LP|g)s7oSe;-)SWJJ_D`U96B; z@Bw@j;?6^@X}hVE#oVWT&wY9R{QdPCz$-jyqK5k+HbXpMSlbueWk!swFh?>GBgJQe zVYPqAk9eGNHI0YPNHyJJSoyBaS3Bp&r&>mQ%Y=2K33r^KU0%wZOyj<^j;>r9%Bd;< zLOf#Fcqd%11hfO07`?+?a`35)!q9rJlrXy~w^rB?9ST|b-V#7higdzYPN8)BT*gi$ zPOCUcrBE)e(uzGaAE@Km&t%a#jkvW@ zF<+hVbdMXE>y@$Y4kQ(}?zN|AThVxO>@T>}=i^W#n?s$MMD%2ys=qV-6kp^U+QN0L zGfWn{0_P`2TX6Cy%ASXK%rICeIK!8P#yhjm3@DN4cjXcOlM*IdzG4b58^!z8-4-x|0B-+T0L4;c*x5@*!jg7*8x1jgP X4zktI#6w)B6t0l8LOdXT2h0Be(yo5C literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class new file mode 100644 index 0000000000000000000000000000000000000000..037421001a890f99862e887a6349e6424a66388b GIT binary patch literal 1097 zcmcgr%TB^T6g^XrLaBhL_y8XZ7l?^<;ZEa15{w2kQNw;HqYRc-+rj^GVN6{30e+P6 z7P@FKE=<5QotblH?)%=)ulElChuAWZL@9#=R&=cDSYt>%a-RfAYuSzzuCn~G z8f#J{Qoj@9f7p&+#_SxC`^VCi>V!d7|HtHRn;}{Ex`H9!l&-iO4m!fWhl(N1ieZj84}g7YYzTu4BIrQNg7;6 zKUE+)nV2UgN2mdfKESBGfz|e2p}i2&kf$|Ave0PWwJb84i2`w@@oOw#kr2s^v@&9s Z2x(YGn)Y>)Owp0!&mErsSZBscnCzKmx2RH4QCBFn5^H|ryYg*fF@3J5*dY;XQSJ>X|^c{+ zW(r;G;f})cz(k}ieKl_qYhwZR+Bp;LTOG$n%!8gLpH0A_^8-u9u^*X_iHX_Y9mgE$ zfL|Hznha%pn1|YDiwcUhdD18d9h=XbGrka~x8te6=%k!#+vJFM6c!#m9x7D#!(*9H zt4B^)%*G}<(n3{XwHF534z(~8d+x0A2?_Um3R?x_eF~y*PjhfG=b*4M*A6u6E*X2Q z@V(^7N2~F`j%Z;l`~C7WgTmxH}ea)iW^ycBRe;7 ZN#v#gsN*&o59_!lfUZmHifHRt`UCp;S%&}s literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..a2651fc834bf3a26c8a8fb19771e639dfcb5249b GIT binary patch literal 7221 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..c269193809a584b0a8a472767b1cc53de64793d9 GIT binary patch literal 10134 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�lXA1gPUff>aldTRr%STK6N(F3}@@0*?f2p^LlmM3 zMO+_+sGDud2Ak3&DEza#J4siPC2yfI7hX+q3lt80R9Y;;g>=7|?w3%oT|gr}^xlWB zp?_V7lzJPDhvyHNEm}mIh|u_*B!@lZF8aG0_u!rO(+S$2JoX@k H-G}}S&f`t8 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..310099409efb286eb9d4acc08eae9117b9809179 GIT binary patch literal 2613 zcmcImO>Y}j6g|(eGqE#CoR2zjffPys+kp;kT3Sd*ah$jfauUEMP&Q@a49>Ln*o?9;!I<_Hj_2BMeNjEjes5(tctJY1!aR{p>g?)^6rFiIvPcaRxs; z!c-rbP8v;YThd2B%Nz@VJW-mxH$GB!^y-~;z2!1f!LmT2-0av@qi9O{P6ugnURDJa zPvR+o@kbTnhTh&~l~6H`2^FW1QZX&X4ALr2;|Uc7tSDGjQN)D6T%cTpzgKDOx)e90 zSQD5(#^K)c5JkX}m3$?CYxAwj+U7=C;L}4m9IScA=4Rhx4?o{eI2Nq;ACF727SU=2+fAGxrsSe#AVx=r@Q9e1`a!NPNya<4Wm1hHr8ZV;f{s<|u}`Q1{sP z^r!okx)|B(Uz7S>j7kbb-Mcx9A(CYniWtSD7(-elF)PM#MNFa~rtqFfJq%`+xp>Lt rH68Xz(xZmAC#i9s*l|SD1qE9A45NFQ3lTn!XW1vHFvh=mXOaF7Sw)+k literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class new file mode 100644 index 0000000000000000000000000000000000000000..d06248b29e7f6c0a6c5dc0fb5df6c485b0f1d93b GIT binary patch literal 1156 zcmb7D+iuf95IviwaT7vwX`z&BflzJ|e&F)bQq&d&Aq9{clviuxEMe2lZm`z{`d2(5 z@xTZ0QHZgf6qm>neelfeoSE5~GwWZ!fBXdS1a~V~zzqjC9o%AA{UErF0^x-sIFi2b zG#?9wW@p5YxU0Axx?LMcJ=|hg{%nH7aKcZbsv{${cPPGkV?JT1rAd*M%6-Eplu_== zp-$>EJUxwW&)+cb*`XTi2a&dNEP67OeI<6aHkMmybm*W(O?5>exsu1?ZKPDlP<^en z2=)~ZLqW%v9WGrfd~3ApD=D;f1Mw*mp>=orp$)iiUkTezSqKkOsCBw1b+Ix{@_eJM z_+rzE&otA!{)pPxif5{ih2;Zoxo0NHC=AceLeHKtN^qUjs?9n(DOK8*TG}0kg?smV z48?sjpq17-QWHnxz6joPA~IgG@ww`8;*ZW#XVHF?L|Y?6N?QswAm598Dl^eD3Nx;> z0L@+Lnkeu^TgKO~Wg@0YkK$KX#RXh+aEIY}?&{`KTN&4^;ric4oRaTglVLBn>VH27 zhKIRDGJQ;^VtAYzoqr`ZP@q2*DA8BMBFWfJwSy%>%j7Abf^!K%D~>}@&tQ#zuqI*j zTT)a3D#a0N?$0NpG}u>b%7 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class new file mode 100644 index 0000000000000000000000000000000000000000..ee574330c1a1f7fccf4a5679839f39c63eae267f GIT binary patch literal 760 zcmbtS%SyvQ6g`v1rj60IQCnXN7cOcGX5-EmScxb_L8bd?I_Q*iqRFIwmkSYG_yK;D zcw;LBTv-|BaSn6Neaw7(zP$t3!=?=r%ViX>VxeJSm7(~+V?IhOtTEKig!Tp3X)F?7 zig1uHIOj@)r=+RxB^6Q68u&$ zT&P6*CQ9Q#_%chR@jKY=kdL_o8|x0{P`0o^-I%ejxyTIF%-9RLy7R93LwY5K!x?>l z-oMby+T8ww3%2Ngne^WnO)77CvN2DLL&%3g1F&1KV6FBGjAudy7HC~0Es&CaOv)$1 iKz(u>71Rik?%S0S>k=}sgc9v8or-kVB2=KgiqaPi|JRBD literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..9d1fcb4b4cdb1d65a618ed183f8a184fa557b042 GIT binary patch literal 7248 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class b/target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..3985fa48952d84cf24d60f9f7914a7c2e55fae7a GIT binary patch literal 1548 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/RequestOptions$Builder.class b/target/classes/ai/tecton/client/request/RequestOptions$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..7d15cee1863de3b8710fb56b2d5a81db504738e2 GIT binary patch literal 988 zcmb_b+e#ck5Iwa!yW>tqT{W7U_Y1D8WDtDYkOzf8U~wUel9y=j+Gy+8qjM4RR|ZUk z1pI(}R7myM!8LiAhrD!mRh>SkPEXCxU*GQlY+%WQizye=9!i+1p^6!EnsqVfVxBM* z%ganAY3CwUkxmFJZJ~lx_R>fPy--P=1{M;0cm!<`s&AB5>03g%v9d>SwxT0R7;Y;q zx3lxEjCVyhWOeq#LC1r>7*x$_1w)&g-0?b`0urr@m463L~>!hXd{c3!88=* zHVFHT_NllMK`8Wbu#?70AGi84o$e_+Y!&v}Cs96=pN*q`=n0i85oWpFhoV*DV%PX2 ztTqa(vLSCL%Hp1Ur_3{sJ^lc%jfxKsPYBBeKbnsL)O;*pkq{KT^T#}){&RI3CV<|OTi~! z`~}Lp`qBqoOIwho;tLP{CYQ^7W=@hx0j)md%$#$+v-fw|-WE>g2V3x(hD#czHN39j4ISN>>c)(G&PvnEI_B`EoW7+)!wU!wva-w;S)t1Mkb>0}USvXcGSC4cN3F}lv!uI--_ zh>wiU3nV7JC8DKfY}dNns4QBwtLCD^mBAUWWIFR^&6abunDCcvdNw*^+6AA8o?9q6 zw&nVTnsvKj)&0Vi@HrO-A$_h}emE1D8;SVzTrd9%di<94iS#wdR5W;jy#1c9_S zRUQQTioRL8#jL8pddh7t_dmnS(Fj8eWPpdJUEeBOwPu6|{^hJPXI|vt3D0vZ)7|J{ zWzNHT%UxDu(}?meqLdTs*EXyV&8|;Xsy?$yfn29vSWwd;&DLmWDhJX)cvO+UZ2AJ- z%VvE!6ci6nbHVq*G7D^Jdem7Zz34S+CF`OsHMhA_J%?oB4D7{=46@w|mq^0O8Q6v0 z&5Zz5CAVWuW!b69&fRuoqhlMdv#chVuna@wXuq)3>w`y`=SqmFv+t*4(mszb^?vlX4 zs3KH5M;oOhg;Z@fRU6!MtaOJOf<+pn+HokmJ{~FBm8xT1HY-#}hX|XLyvF*1lg$R8 zcB>8Q@nqCNCE2GNIqGt&x8o!h=(q}+ntvLBH;`g#dN3yM)`(`qvrKo#1@U~B*jEYJ zOakeV8&4C;-s;HyGkja0{o#?xXr!In*u(E$n%_ggZy5WE&kScVuIqef3v%4Yl?lZ8 z1`K4^AhM4TTUbNZ|C@ufkYGAKzBdzlPLr*&mU}#2Bz)y!}E&N`EFL0QCgemlBBSRi)gU!mwzlNTFjO2Gnh;}gYKLv0S zy}TRR0SvVWh7>_B1|k6%i2aEj8qyauCPVOF&arl;Sxy;RRoL~@A zJjWTg6ptZwBcor#;QBny227z~3>9XEXJSl(kQby15HJ z(iM{6g?UCH+*5TJ&E~#EGO?0-g8nQumgDamB;zZ&$JjC};q&}Gz*b2RN^Fp-1wP~7 zzq{Cud)SH3BMBO9Rc91uDJsEz1LvsyP+m#IwSMXSd0bGwoFbr%CYAUF>4mr?Ek3}u z^&x!`2`SYIiC+{2bCC=ZX1Lim+u1D=Y!y2O?ylkmcFy{Qe;L6XR+uqN5+%m6@8nb7 L07JYVhSBpkoneN= literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/request/package-info.class b/target/classes/ai/tecton/client/request/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..52152ccec491ed30d57f7b42ea346c46a5508a3a GIT binary patch literal 130 zcmX^0Z`VEs1_l!bc18x(#7zB?)Z~)z)Nk})GW8D2=q(koMzWJR{H4-D?q^!AJsifXxNH<#p64(h| zlfc!kRN}>SJQQJ{4}Bv!@VGzVp^VRSXGXu3q@*|!I-z7}G+WEc#zgD81MW{nTnr_y z5U497{baG~Dq&4)rds;$!9>eIai5}BdYXIhp7Y5(bD<|kitA}e(jJ})+Wo(XJtDSy z!8G*5QyCXoJH2n)u_Om&oO58K=%9_;7VbE>i*1Jb(lz{5tOEzD4qR+l*kRaTia+bM zF_izz&%yAJE}05>69(hiFflZn%Mn zPYixQdkikMKO%L4^e1G#A$v@oMV9pimeOyQi`by3nC0c1rAjQh?}jWl<2ycq6|<#{ qrjn6fgN04PZ7r}?=d71ZEUTbqBy3WG%f{M5iFTV3<#7uu$o~Rzeh+s5 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/AbstractTectonResponse.class b/target/classes/ai/tecton/client/response/AbstractTectonResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..d56f2bcf1e8bdee7982d8fcf51ddf4003a589fca GIT binary patch literal 733 zcmb7CT}#6-6g}zcHfx>V^Ba8dVVht@e47ZO43wgvWAAAVGt#A+rh@-UK@oiL2l%7J z+pa^9y+}xM@5#-%=icP&`{NV90X7}jSe`@)D;2C(uvWo3!|atv?qijRQ*L0U6n zXG#fu67eJv2}4bbhg2lS=SHaTiDA*dK(ohS zpTswmV8)k9T%?0Q=q?W;LgxKAI<| z=Ar54$D>k6%ukD)Br_Oq#Ij#@}=Q>Vx zC^|BezCK>VZq_3g4mMm=G0Cv^-zw;B@;>KMFM~TOk>U8iEZd_V{Jw9g(d^k<^bc(M z7u5SqA6X@u4yFik$?CwOK}hQzthMt7>xDcE)3ny|SeNck)6E(UpgxSo3}(s8m@-yI yDds3cmS+Kr1-C~#BW$Ae3hSASA#FJan>n333@GR!8T2k4D9OG%*aTRG}`xFd49gzKo z%+A!P@5soWH1cqqQJLx1*yf2=;-L@eOGtrfdfL#b8I8Z}g=XqLg)tKy>2k6_(!^Y( zx0F_9TVSbL>u|K`^_ZbzOKI8<2VL@yWY>*3^Bn1Rq^}}>988+eilJ8L4nLyh!$SAI z5S%&4OUI!gsMPCqfkE{@_NvXiCpS-=a?{BKFQW-2&a2pId!g^pj*2K;pL>(Z8^4J5 z(n1+|3#CZpB5@rzGI%ENev$2&+k5mxrGG!-pnJ?KDzLXmyP0JbXe@w+HU8IW{_JTa zkU^HML_`e)uEchcedcS*zdGYHsZ;0IVw@z`GrxRtlP#OIV4d3df#kOsdWB^=4sPNW z+tw%nw{aIJWpNLy9GNcuj-{^`7T+HiKRCBIak=8PbBo0#ikYp4@qCZ4%(~3Jg{LSm KBPrH*ko^nx`(A1Q literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class b/target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class new file mode 100644 index 0000000000000000000000000000000000000000..c05c2b368c8a428d288b492976c1c73ec592940d GIT binary patch literal 829 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class b/target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class new file mode 100644 index 0000000000000000000000000000000000000000..658b63a6e1de83585f52be141b3c683b5a301a14 GIT binary patch literal 969 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 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class new file mode 100644 index 0000000000000000000000000000000000000000..595a6fdf3960e1d8e197132def04b2255f110c24 GIT binary patch literal 1031 zcmbtT+invv5Is)PY?7uVg!`qCmH=%ZScKrIQBX-$gtVm+Nh|fy*|@>g)*IPQB|eJ> zR0$+LfR92QZ#M-(mKU_z@pvxBXU5|nKfitl@Dl446w&msT0suYG8XX2!($Im7z&D? z2!=**%ul%=aW(RLR!cS7WLOeMMmP&}$I6K9OH=ioQbKnl zZj3Mt-GEEqQhKcXFp@%9U#B_#*1%ZJL)%Z>Q>fNdnPL)!qOsgg2(ErXaAIZT2hv#b zm3wle$g7D@YsTIFyPgiEEDnVUwH#X+E2`b{5kc2}%iZN;3VZdZWe(VU_+ncsX*&%0 zwel>%T9tiVBuItTDXF#>!$d zTL#U+uQ}Zt9Mk+TJkQ3RKWGduvQx6Cph?fBNYBar9!eyEa=KE9$^HszAdaNxaFt{u z^Es2pa37^}6?Gui literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class new file mode 100644 index 0000000000000000000000000000000000000000..2f63cfc49276ee73bd208d18ff37189356ca938d GIT binary patch literal 589 zcmb_ZyH3L}6g}=MZ3y(ib3tP001Q|{Y^}N!1%V=vD0Fv&DXvln#SZ_)gv7uH@KJ~x zw*vw(ATjtp&bjyc`1<|h^$oxYc6^kv?qSoz7DN4B3Y%xrFtnnXcoICfD&dhbw#U#I zsi}56L-!lqU*w6$=LP=)Kcp!t?YoIynires0`CP$a%WRkkV+yfhBowy=uX&s(sV%2RJf_-6 zekSd5fVo~`xAZ8}{V|sG`lB?@Vi~GJ)b4MsN5yIa)Y0&;&2ai3m(#}G!oO^g;rQ>9 zv4;|UDZuDdP$gfZs07a;q?x==2q$0ER1aUko?Xcb*_s1G1QZ900<5Ct__nhhG|BtK Km9T*|)IR~R;Gksy literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..396f0ea26cd01f79f72872319f75c28acd16d571 GIT binary patch literal 4054 zcmcgvS#uoK89i5;QIAG#WJ{KaH{7;mkYwb+HrRj^$3hDTv=B*%$gHi=mDKi3kKElO zY_LP(kd=MM>|1aZ$wN}*!WOC|JWxDP{25+dB<9>+teI)q!Y`?ky6TnCDpbY^T7Qo`UUqrtM9bxuO)P?d=}#er$a5elDo#vTVycC{W$n zHo<_e6jtC?d z0`GRlt;y4=TqdGb!Far|_&*?!nhEHpBWvTk)`zppOeZaSS{^5>;fzlz7dMwPbYebY zsik7quAuM7Xk_XLdFwn#dnRJAYiG43^f9v5-}u1l8?Qi+GHK12XJ(HMne%?UH9V=| zDGev7pfPLK_C+dit}iPr6)1nsVkDo zU%qs`@zbu|ixMUI7hc0Dfm4;H{2xhGPNv5SMJFr!Ep_*|T?+32X^Ziz`X*E ze)jS2ZMWl?C)DND@oPM-K))fwF-gajr{lLcEpS&1dd<}8_#N7HJcB=I_>+!5<1ad% z#dA8ISHmwrsh~1lYIsq{OL$qwD+=@~UQ?#OuHy~7spBo25!e&6Odik5dCy`x%Z&SJ zu*c7WebKPM?$y`yIZnYDlCEpclJmAvnU&UpoHk^B-aBE0$;MdlHDb&-g}f1*rR;lK z$2)je$9p)V<9&Rf;X`HYM*^8qd8}wT+$WN)vC}my*T`G0%kp4Yw&Bf5BO7oD$pHs_HtN$;ywa(^e5U?pry4f zZd?U}yfqD6r1tEz~cnW1Va=5b50Q^Ri&ugHqo60^T78?gBJ zu(T3;@G&FM8YaflFPtl!TQ@D;tYi5xW@tQfmS@(N*vP_0^FA%zF|5ZWu?@eXR;Q(8 zPd(; zXS&1kIAxx&{nz>^vZbFa3}3;S&6x9Mc1~upg?wJ6KZV#AetG)ec>IwD_SFoGlp&Q7X26Qn@9jr&aC)e*_r(H2_p$Bihgofn9!Y z8~Znx^jr7~0jkaskzp&tx8OV3ejehV{*qhxtnmkR>|t9E0N9It?4|h2<2D|{#o~L^ z5eaLvj)8tMK46332w)NXI|u zPXdaAeyrnjJ(6fbBYyyG!}Vyz2F`87L2SYZHsf(@!BO0RlO+EPL+~C^f5UbxVF$kE zns2ew=kOqTT0$-M;{f+-#yQ-MJ9rMc!=32lTeZ5_Qo;BRKj&-}PhI3moebG8IBNKz zQ}{#d1^8~_1Jqrd?cwMnNc>B{WYq{Omk7{Abr9HVO>gyogO|W{i!^ z0u23d2ZMhBTh3sEkG>)CFKnHxZrC<<0o&C|&Zo~|#|n^^2y*t)=Ss3cxOP*Fpwerp z{6;EVY5V{!?q|S;DBi;qu0`q2lX{o*DrqZ9J4oAo81%{Yhzx?^g~3q7H`7l*%^l)f zwYs2)S9CWa+4uu$Gz|ZMy&6&%vHc?90Zk)p-A_;zeuNHQ_70syShBN6}r literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/HttpRequest.class b/target/classes/ai/tecton/client/transport/HttpRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..4764b78103c19d0744905dbb30deeaeee1143aca GIT binary patch literal 1862 zcmbVNTT|Oc6#f=p1VV&h(h!F>7Xs9Xi;~i&4Oue+*9^IC$PEiOEqo=A>&9(?iE8+|rFFFGJs^DDBBzLv%5`lZ3%W*!WSPRNax^ORp`1rnjwQKWLf|WaK|qye;1J17F_~_^C1|mvQoe z5oK5!h-%@LKz=i9D1q^+AE+nYPEExxWUbAUQZ=m0_A43tX5Tx^>z2#i51MwJ5+7I< z0b}S+uN9|gXrL$pqZD~`*iCyo?8bF<&o@Omc_g_Nqw1iHI~Fz^Y~pJN<2dQyF77$F zkB0)nv+&5lV^l3{Ie3Dn4xVAo!2~{Xa0XKjPGd@7{+M)*c%=V#;XbYH5RewW5x9Dc z`Z1{epSgXYa)>Gh72|y~Bv6QCoUj6O8K})_nB^yTJCP>fY4KZ*U7&v0==$x3iV2EC zZhElWv%O1#XEuzRo{VI@rM!CB>4ZU&j@4>!u3l=tO*q;Krz|3-Vq$A8Bf!BfXEuJS zFYALySP$7~Jd?V$t(qOa3iP?0;bx!?2L_l*p=Od7SbUFO;R2tx6MP=?{0J>l80e%c zfs?L85!V90GR{I^n%qCsC~{qQe}`}v-(YALxuw5wacK|vpK;c8e?x8$g{4yQ4Xiy3 z?_q=z?(!~dx18U_s9P@V!ugdpa`>2Z2E(Kiv|ECMN%}m^xA_cK>Gc}@-lpGAC~<4w zFV5jScZ`5JOff3MT_iV@awdmd%9-d*cI##kn8ghFX^8)5yl7#}!lm?A+GltP%wn#W zrpMKoE|_$FAv2W5T1*emrSUlX0*CR;<5QlP8XZ-(`;})hl`B}tP#*19p3hWvGnJiw eWj8~42#aZQOE|@~#57AR^yGS(e}*e~fbv`Fr@4&) literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class b/target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class new file mode 100644 index 0000000000000000000000000000000000000000..7f9f3170c2f8ffce97903aef3fd16dfbf5e55e8c GIT binary patch literal 521 zcmbVJyG{c!5S-2HLO4h+ygLdc9tGFXpdgwEM9>K&g3|jAD>%B?k?rtbR7ezj03U_e zJ3t`OAPVo!u4i{=?bo;G7XU}tYN3kN0P6uZ2z6<#v4n0i5f38Hg&xO4ZuU@RY zH8gXZ$#YdGiGI=#i#ALag0RRaW?y9L2T!0!1{H*C8)Y)Z665fLfMrDGeYdnL=&&!^RIr9Nn(v`&f}j8Z literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/HttpResponse.class b/target/classes/ai/tecton/client/transport/HttpResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..8ea0100d3bdbd02b6e0fa662e17a2471dad2bcde GIT binary patch literal 4279 zcma)9>t7V-6@G?`1H({c@q(I=H7Z#aWsRmb3b7TGfCaH&X;Dc!ECY-#yX(v>iA~zH zX_MY>={2VJTiP^jjmo95iT3)T-}}GxOVd8*o!MnrmY@FkG4Ji1^PbCd&UyD=@4fvl zfXDDp1Ea_rIEX6-+ThC4tLM^}SwUtCGJ8fo&lzFLQ`>G-;VZ{V8-Y<$bWF1#Wf z-`4S+I(*l_9=sw_zh~h4_<@dB>yf~VIqTW-kEmz%b^HK;+KCxJD~ zRcz>zwP2+(R(3Wu=DSXIwp&BZRBrkzspf2J+IA_mc_?>z&iC_&Qv<;kiJDydO2PL0 zlLgoE9Z_XVAj@~=?No7>gthZIZ_d%Mb10pgPkC1gmTMRCDYcs#mNOEy+U2I5n6~o1 z?P`cu;uGUT3Ub$vIkQ>IFSxX5@*d!${2WYNES z*Ll19IPcoj<76HGxQ4BXl2?i>-5ulfUf}1ZAt!5}Da=pV?m25JqkNr9TbXgobz~iG z*7$P{J=}4>T2X_#Vn8K)#lVzQ&|sW;Hf`r6CKTLRLCbYay^Ocgy@VCn(Xg#DrG~~a z-%4K|w(`mf9Y5Fc3k}tY4&tq8*7l3q1g_vdK^If|WtiEP=%|bugVe)Clx`_ft;K2d zrcmJ`VZnDYsS)J_D?^_pD<1T$N56!4^MaLerY+wtnxRZ%XibIEl3Gmxj7shHt}1$Vd8gqL&uvYevdzx=)n^v4&$7B9y9SroEJfloA`jt zW-%u-F0bP)6CV|k6F9HqhKZZFWnxh{m$1x?T30_d4v&UI_og1R-32FYm%O2&>)uQ% z&Lt%FkJ@S5S+J+$YCm2CZhXeg&Bp`G#Gi5expnvN9{f5O`)ZsX75@OMmHz(oy@-do2$RbC@@B}!`A^LhVj+zmTZTpCVPR}&w? z2_5g6xP!YIj;_1weoMB7mQ{;Nn&|io`^rY`Xm4-9$*}RU1BNpbf5qQS9LEPu{2l+$ z@W_2CM2D6aXcmd`t)O;ATpx5|rnJ(1O?6;TtCY#4*I2v^I)w4i{HBFt_nwu%|Zcm)vpoDMo)PsTzDK~SbkjVsHFcGat z0miyR0c#AUIY-ucIg)8o7ubdTf>#P_zs0WZvTrq|U7O{*bin?a7>pF2@TIfCwe^m7 zmdKsIkOcQ|^fdbcwC6*wbGcVjmn!fkxu*C8h5o3ofyd^NIatC7WAjjaD_ zWWndSQ?gc#tSHdX%Xt<0U~oK%Q=Ip6){AP+03+Gixdd$)Rc|S}CuL8aJb-#Uhykv* z1(X=XX|Ck_!x*CEVa{tfCONV>g_8e`TFM5-lgp@1Qh3cGYGvHC2wlcH{@2?pFc#4u zYjY8e$^A=s-y)ilx6pVETaz4{c(i#1&5MY=9uRKkRJ5#yXxW7ZejlO+ahUYi7CcN% z_h2vo_G2G?mZV=gspSE7x0JFZ9%xpwWIVKl+F}G}X~9P*vjtWEBU`nOgE~fa{yc&n zF;PO6k{o7CnZb*C8+gm-GvX}MF*TwBh3q$2aj@bL=F4cE(V zK30*L?Y#nXtep9HMP|0ZFu;c>L~O2;Ag!RKoWD21Ul*DkfN+w0PvPlMiT~28HIy@% zT*8)XILTpa4?o+6ckN%n_A>{T(E2JGIPAEKop)|y*F@~W+IP@4Q7xn^cxY^*M(D>@ z5MRdbJDfjEo@;2ljXe{wz025lNAOakVsZqHocHt6CyAE%*PbNdh!cK$0W^{Fw6E z1;YO#cPFXNQza!En0yW{QCu_sFC)XR0D44~3Ykgq(3DC9=~o8x6$rFkm*l`=3 z6U$&$9=M6F8|aE9mXNxMcJZecQDZy3+Desn@Y_n}EYGWu!y%<;6@TL&q>t*Dhp*vB G*ztc+fKTiI literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$1.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$1.class new file mode 100644 index 0000000000000000000000000000000000000000..80ec6d0fddc052db225bf37931c1fc61ff83ada6 GIT binary patch literal 1161 zcmb7DT~8B16g@)=OY15h0wRi_B9_v2TP+}g5SmS~n6ho$72^{b+DSWP*==^GB>pUU zz{CfCfIrH3w)4Jn3+ed$Sczz|DqoHE2szbP1|s?rly_wrl>4nKDZnXUQ_ z?w;~MM*CYZuG%tW(2qS&1g6WwP|((>a%m{hP`+n0Tq!(dsDOK6#}Aa@^ze#O9kUl& zE9@~OY}xX->IU?q-RcFu;zn0V*QoHYeZo8YeaPir%dk}-z1H3^azH#u+wTSqaU>(f z^LKxhi-_rNWv}7-A+ekY)%KeVngAHgs$vqa%x)217>yZ*;sxQO8yUZzIF7 zIz)RVf>2UcPWzr=y`QFRoAQy3&|i#j#FT(UnsJVr%CY)X{_ec#90)=oX^a zRx-_Uo$8tVWS2jlmEKb#>51y}bfdv&QhSk~rj>_S4=JX7{9^94Ybb$ zOx^_&1kB!xqTlHJ7-q;WV4Q3QapW)$1MA3BqZTkrsNUztLyCaDSRgxwM_BCn$5`s2 Zk*YbGOQc69AB|-?nLb=3?F{+D#XlTyz*f@~X{n+pT#}_dxZZ`kO94Rz zW~`1M7{oyx{{Z>Sj4dKFqF?;rf8-bO*}c5=1!j_&?A|^5yzOtF=Xd+hf4~0$U?1+R zK@1r=9GAlhIh+im2k&r&#y<19Yn_?Y8d7@g8f7e3+ml;b?d1%^#?y4hRO9o;mAnW1q+w~D54ICO^S zsg(;1+Nfm-Cu8caD_n-7S=~r^qTtz9s$d$z@=~6oTW-mAyws$Uk9b}wqn3JC@t9^< zFSBsOm9lWXtl@eL?b%EEoSrIshMAHQQtFUO1-oo{$L*_DR`&`s3_BY13bs`!JC4jC zvqX)ITfG^>?cKwWY$jc4c+jv6Z5d`aE5e`zh9T8dzJmnJ8rwRl8)n%d&pYE;`|=E(^4^rJ zp|qc?VW&pNPh2aAl4safTIEIwm<*An>I{sWbgpW}ux`TB3zx_AQYGWCZJicWUY1Kn z+m}bK=22BqVKt{>aLg`VXXvVhuWCs-?WvN2saw;jdg2UiReJ?uWv5l!G)JDJz!09W z%T7U@G$h!a%S(T^END8G6IQ{rUBj9l6W)wn)m zhOMdNR9uzU&E3=)mhcQBs6L}WywYR0ls^Hf<3hnw-b3WE_RHacyHQH7SF zzlj(`%O&Alw4K>%u+u&_x*WHu&g7x_)x&Tr?zfFPr3ufW!b&&Q%XMd!wykrn@7XhE zMe2Cj(fuy=g>@x{mbh$fzgU*`JmoqqyfNXr`ZV>##(3Y#WQh$-ds-ewjZQjO*^^?A zylUTWa#O{-3UH-?dF3NQ=`2xFUlwZch^mKL@(kRtisIV%MQYf_pnkEW`$p;D>I_p2 zmR>!)OtHlkRAb5b=*!NavFQ{)g(M{qKg($!F^<_BFL_PP`YYf}yV$%bLR}gG( zmvjfvOpK>yB0V(|7t*z;h5ow`C+$9Z${~Od%{__!1+c`x0s@KT0$LKW-~xh)#|S;5 z)c_JSwvr8S8~rqPk&LV`fF#ZGNqVPm4t66|@tr3f87(^S7g~QtB=IW(1B>8`Xp>G` zl+%b(`5GMGpab73=i7XmcEN9Ps0@o0K7^g?S3HCMToO zzoq{P!VFKaHh`zl&JH9WW8ESm$-l8Zxrp@-v3V#+FH!$R8w$mOvCtwm#DdSHpWo2& zC!(ZCzJiO`_z-=$r|3FM>YE;;``J+IYFe?@XO9Ti5FwwUo8x}GP1nnI%54Pa>BcB$ zlg9I~)a*ksjP)eDOIG&~!FP0i_sIS}dALjZ4{!!Q;2eG=tNXZs@5%B3ZjkH_$-cr* z3c7tNY6frOEducZ-D3wSwmgOT8l3YrIOj2hbOp{~@aGgN$Pwc>$Z?3%)t7O!KPM-l zMk&eELfgLxOmX_Ylc1Yo3{#W<4&w;TK^(;~yh=|!w6cZXwxW%y)c;+i_vs_C{{dJjY9amSy; zGaw;^V1EFA6ylOjFzs!Va=Gu$-<|L5^Y1@DjsZNy10Pqh)Ibf_8icMF<}yc%V};`; z!|N#ds9ZYU5tB%$$jQ_h9i^F)+C|O^ollH)(V+Cdac5$-dr6d`dY^g-M+$uu2r zE18Y9tTmS5kx=oh^?25L{IB)+?B3B6hM=RhwCzmfxy%{D|GE3aLpmykhv&%1@a!Dy z==9P1r;XZ?$fiX-o9i3<-HWB%q>J0_Cj*A(7tg?r9Vsocauhn@Dor1!X=LGYaVrHP z?c*}(fUF*>gn-s}u;ZWpS5&?fU-cV2um1_&+t0LIPA@JIb&jaDGT;}k5U!BSlWAj{~IJtqSiwg3PC literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class new file mode 100644 index 0000000000000000000000000000000000000000..2c38d2a11d43a0baa016670865eb2f9c4cc39822 GIT binary patch literal 1659 zcmbtV+i%lm6#spV6T7b4f@w1-Dl-iZ!AZ^e5 zK@hG24e`7`hRYtdNt33X^Cf}+eWCcl=R5cFJLi1%AOF301>iKQqfl^0$61_Hv0udn z9n-kTuLaiRH6%6spwn@Y`5!gRXjtN7LBnnhKk>1sVOGN>K9*Em7BGtSnq8{dx9rCC zl7L>0qK&fa+;&6KReawKi*2XVaXSL%tB#k8+-4N`xn|pQ{U{fOj^Eh`!YF4;IeQnS zYVKp81%X7NSS($)1;z`@cDa6|aNU!@Y?W@@DqNuo1Qg#{cLmJqUFV*YYdd}` zXGNjswSx>5vv{wq)joEe^{52G|ANj=oC`pXIRX;cBX*l%ejAg{AcCyIK&ptyUlYIj9;fEL#qy_$> z+<#*X|A1p9$&({yBpyD^6QUT7Nv|wrI*#0+KBkN)o_P%Q^V0s6;rgY;2jMiF!1n{^ z`_vqMet8L{VQMjR^cnO=7?Z4_nB$V2knCjK+$P!Wk~I_N4#`fbzms#UhcT<6^e|yH z;yrA)8i^jJtVa+Gwcp;P%=Q+Oct>#FBa1(g$D0qpPT~~Vj?gb=CsCce6r9I*OFRDu Dfr5*Z literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class new file mode 100644 index 0000000000000000000000000000000000000000..3ed01a56c321494f25296c76bbaebb6a0cae3626 GIT binary patch literal 1341 zcmbtUZBNrs6n^g7tz9W^6NW=XRFsV=6$Avg5DZSmR3YggS^QK+9VMkDUB@SXl#WD< zM#E?S2)_IW-doog|=Vc55mYO3q6ls5vK98LBB`<&j1a`PW`Dm|1hzKClhX z_G^X}g|1&K#w|qM+kC#&z^#K*t~_X-^g!P*pA&h?NMab5 zz%WA6HRAlynqY4cJBIX{B!OYH^&}u1p@*U#Gkhy>Coc|bU^p+Q{ zQUz|OsS@QCry+z%ld z!mLKeIVnE~p)Z7ad0bHOkRh60U(aPT=~A|k-+Wpu;?z&oVkK0WNcrl*nK8up6Z4=B$&T`Cr zb9c*hOMJ^Fjq0T@ykU42Kg%J}HSAcfR^fJ;yOyleE*4B#jwO~E;^)-Lo>RU|4Hj=L zVjnJARfmhFOPKr5iB6EKS~W%9yNOE4g}@(|5uG(xo#t+;OTNo;EQ+-jI<8|`M?VH=^m)B*TNN%Wn&zEG z&5_0%I-uTwF^td}^lX2~e-u~S{%t9;QO(8lXs-am?c*Pm+-zH@&EFs&ost z+xQIHC8I#{6Vy}CnC7KxK?}6gg>VP)cJK>oj{Ii6L)nOh{IT#Mv;*{bqOQa)cw%qh w2bul*=qYX}`{*qmfJp+arnLwF5yq%#e~w`$kR%@;Cg?(_-Q=ynz{Qopzr2EDt^fc4 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..1873494a0a9406d86ca6a803c9a92a7ef98350f2 GIT binary patch literal 1413 zcmb7EYflqF6g|@i3+-00Py|sP3euLx`oL!qBsGL4Rg4gfejD1M3|VK%?$+qfGLayf z_yhb=#yisug+dzru(NaT&OP_ubMEZ#KReaZr!+ojk$e9TDWxz1_hWp%g zgY2*MPxNW$#exL6{+_I-^U4 zj&UWiManwY8LF<9{@V(-V;cf^m8I6|^zAEW08)>i|UGr)#mI z2y8ZLASYXgPa!jyh#)i6@svq;3%4Wimt>p%3EY}HL0{}5_BhgP;!L^rDYlJi%n(ux Ucc{P^W-&_d6nRp3fD!cm1$E$DT>t<8 literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient.class b/target/classes/ai/tecton/client/transport/TectonHttpClient.class new file mode 100644 index 0000000000000000000000000000000000000000..6f18f82da61c5e6d671b5863b06cbaa1c4fe439d GIT binary patch literal 12350 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 RldaaNe45cZgBy9te*wRW?P34` literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/transport/package-info.class b/target/classes/ai/tecton/client/transport/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..8a8def0829f803774d958c48f722ce91742645f5 GIT binary patch literal 132 zcmX^0Z`VEs1_l!bc18yE#7zB?)Z~)(XdLSi?3|ztarA5i9Zkai$VhjvS S3@kwVK!A~f4M;LEumS+-5+jiS literal 0 HcmV?d00001 diff --git a/target/classes/ai/tecton/client/version/Version.class b/target/classes/ai/tecton/client/version/Version.class new file mode 100644 index 0000000000000000000000000000000000000000..5f0e6b3b83965620d4cd650f181c05908d80b925 GIT binary patch literal 379 zcmaiwK}*9x5QX2gX;N!iYt(}`^`wGb550&YNKq6*DyHPVjZ57UH;`=lzdQ*Z`~m(b zaZ&>wy}X(CvCNyDukVjf0AuX+(8jihz{3u~OKzXyhiOCz!lhhEkx8=}-to5-wEUF;IvD{ZvBCbW-F5`r_ypA}&%)J8?s>s%ExInS5`VV=q?k%g{(10DOK zOTtkowXiC+xe;lmm9b)_ic+&pek*79;=C$Sb*JlTe#1xgl0LfFARPQRgfRU3({#S% zK*HdBbTJyA#nH`Ud_SGx5G_6kK-h5 QtbWt?F<{3>VQpdf1EpG2MF0Q* literal 0 HcmV?d00001 diff --git a/target/generated-sources/java-templates/ai/tecton/client/version/Version.java b/target/generated-sources/java-templates/ai/tecton/client/version/Version.java new file mode 100644 index 00000000..0f5baf93 --- /dev/null +++ b/target/generated-sources/java-templates/ai/tecton/client/version/Version.java @@ -0,0 +1,7 @@ +// Generated by Maven templating plugin. Do not modify this file directly. + +package ai.tecton.client.version; + +public class Version { + public static final String VERSION = "0.9.4-SNAPSHOT"; +} diff --git a/target/java-client-0.9.4-SNAPSHOT-javadoc.jar b/target/java-client-0.9.4-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..96bf4313e06efd7e928421b9e007e9eee093f9f1 GIT binary patch literal 646469 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 z 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 z%0A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 G}G% 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 IF^Xwk>!iq7}p&F_`xvkpj^ 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�pz(27B6_efXYY%_`6M@^5)|u}rsL(uj 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

    (|VQ5rdqNGHk>F5Xq9*MZ0+tIe7~cCV7M_X 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 KXgz>oVfjDNlTs1@ literal 0 HcmV?d00001 diff --git a/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml b/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml new file mode 100644 index 00000000..8b89c977 --- /dev/null +++ b/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml @@ -0,0 +1,10 @@ + + + + + + + + + src/main/javadoc + diff --git a/target/javadoc-bundle-options/package-list b/target/javadoc-bundle-options/package-list new file mode 100644 index 00000000..59d42328 --- /dev/null +++ b/target/javadoc-bundle-options/package-list @@ -0,0 +1,217 @@ +java.applet +java.awt +java.awt.color +java.awt.datatransfer +java.awt.dnd +java.awt.event +java.awt.font +java.awt.geom +java.awt.im +java.awt.im.spi +java.awt.image +java.awt.image.renderable +java.awt.print +java.beans +java.beans.beancontext +java.io +java.lang +java.lang.annotation +java.lang.instrument +java.lang.invoke +java.lang.management +java.lang.ref +java.lang.reflect +java.math +java.net +java.nio +java.nio.channels +java.nio.channels.spi +java.nio.charset +java.nio.charset.spi +java.nio.file +java.nio.file.attribute +java.nio.file.spi +java.rmi +java.rmi.activation +java.rmi.dgc +java.rmi.registry +java.rmi.server +java.security +java.security.acl +java.security.cert +java.security.interfaces +java.security.spec +java.sql +java.text +java.text.spi +java.time +java.time.chrono +java.time.format +java.time.temporal +java.time.zone +java.util +java.util.concurrent +java.util.concurrent.atomic +java.util.concurrent.locks +java.util.function +java.util.jar +java.util.logging +java.util.prefs +java.util.regex +java.util.spi +java.util.stream +java.util.zip +javax.accessibility +javax.activation +javax.activity +javax.annotation +javax.annotation.processing +javax.crypto +javax.crypto.interfaces +javax.crypto.spec +javax.imageio +javax.imageio.event +javax.imageio.metadata +javax.imageio.plugins.bmp +javax.imageio.plugins.jpeg +javax.imageio.spi +javax.imageio.stream +javax.jws +javax.jws.soap +javax.lang.model +javax.lang.model.element +javax.lang.model.type +javax.lang.model.util +javax.management +javax.management.loading +javax.management.modelmbean +javax.management.monitor +javax.management.openmbean +javax.management.relation +javax.management.remote +javax.management.remote.rmi +javax.management.timer +javax.naming +javax.naming.directory +javax.naming.event +javax.naming.ldap +javax.naming.spi +javax.net +javax.net.ssl +javax.print +javax.print.attribute +javax.print.attribute.standard +javax.print.event +javax.rmi +javax.rmi.CORBA +javax.rmi.ssl +javax.script +javax.security.auth +javax.security.auth.callback +javax.security.auth.kerberos +javax.security.auth.login +javax.security.auth.spi +javax.security.auth.x500 +javax.security.cert +javax.security.sasl +javax.sound.midi +javax.sound.midi.spi +javax.sound.sampled +javax.sound.sampled.spi +javax.sql +javax.sql.rowset +javax.sql.rowset.serial +javax.sql.rowset.spi +javax.swing +javax.swing.border +javax.swing.colorchooser +javax.swing.event +javax.swing.filechooser +javax.swing.plaf +javax.swing.plaf.basic +javax.swing.plaf.metal +javax.swing.plaf.multi +javax.swing.plaf.nimbus +javax.swing.plaf.synth +javax.swing.table +javax.swing.text +javax.swing.text.html +javax.swing.text.html.parser +javax.swing.text.rtf +javax.swing.tree +javax.swing.undo +javax.tools +javax.transaction +javax.transaction.xa +javax.xml +javax.xml.bind +javax.xml.bind.annotation +javax.xml.bind.annotation.adapters +javax.xml.bind.attachment +javax.xml.bind.helpers +javax.xml.bind.util +javax.xml.crypto +javax.xml.crypto.dom +javax.xml.crypto.dsig +javax.xml.crypto.dsig.dom +javax.xml.crypto.dsig.keyinfo +javax.xml.crypto.dsig.spec +javax.xml.datatype +javax.xml.namespace +javax.xml.parsers +javax.xml.soap +javax.xml.stream +javax.xml.stream.events +javax.xml.stream.util +javax.xml.transform +javax.xml.transform.dom +javax.xml.transform.sax +javax.xml.transform.stax +javax.xml.transform.stream +javax.xml.validation +javax.xml.ws +javax.xml.ws.handler +javax.xml.ws.handler.soap +javax.xml.ws.http +javax.xml.ws.soap +javax.xml.ws.spi +javax.xml.ws.spi.http +javax.xml.ws.wsaddressing +javax.xml.xpath +org.ietf.jgss +org.omg.CORBA +org.omg.CORBA.DynAnyPackage +org.omg.CORBA.ORBPackage +org.omg.CORBA.TypeCodePackage +org.omg.CORBA.portable +org.omg.CORBA_2_3 +org.omg.CORBA_2_3.portable +org.omg.CosNaming +org.omg.CosNaming.NamingContextExtPackage +org.omg.CosNaming.NamingContextPackage +org.omg.Dynamic +org.omg.DynamicAny +org.omg.DynamicAny.DynAnyFactoryPackage +org.omg.DynamicAny.DynAnyPackage +org.omg.IOP +org.omg.IOP.CodecFactoryPackage +org.omg.IOP.CodecPackage +org.omg.Messaging +org.omg.PortableInterceptor +org.omg.PortableInterceptor.ORBInitInfoPackage +org.omg.PortableServer +org.omg.PortableServer.CurrentPackage +org.omg.PortableServer.POAManagerPackage +org.omg.PortableServer.POAPackage +org.omg.PortableServer.ServantLocatorPackage +org.omg.PortableServer.portable +org.omg.SendingContext +org.omg.stub.java.rmi +org.w3c.dom +org.w3c.dom.bootstrap +org.w3c.dom.events +org.w3c.dom.ls +org.w3c.dom.views +org.xml.sax +org.xml.sax.ext +org.xml.sax.helpers diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 00000000..77aa80c9 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=java-client +groupId=ai.tecton +version=0.9.4-SNAPSHOT diff --git a/target/maven-javadoc-plugin-stale-data.txt b/target/maven-javadoc-plugin-stale-data.txt new file mode 100644 index 00000000..985d5460 --- /dev/null +++ b/target/maven-javadoc-plugin-stale-data.txt @@ -0,0 +1,73 @@ +@options +@packages +-classpath +'/Users/zack/.m2/repository/com/squareup/okhttp3/okhttp/4.10.0/okhttp-4.10.0.jar:/Users/zack/.m2/repository/com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.6.20/kotlin-stdlib-1.6.20.jar:/Users/zack/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar:/Users/zack/.m2/repository/com/squareup/moshi/moshi/1.13.0/moshi-1.13.0.jar:/Users/zack/.m2/repository/com/squareup/okio/okio/2.10.0/okio-2.10.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.jar:/Users/zack/.m2/repository/com/squareup/moshi/moshi-adapters/1.13.0/moshi-adapters-1.13.0.jar:/Users/zack/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/Users/zack/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar' +-encoding +'UTF-8' +-protected +-source +'8' +-sourcepath +'/Users/zack/tecton-http-client-java1/src/main/java:/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates:/Users/zack/tecton-http-client-java1/target/generated-sources/annotations' +-author +-bottom +'Copyright © 2025. All rights reserved.' +-charset +'UTF-8' +-d +'/Users/zack/tecton-http-client-java1/target/apidocs' +-docencoding +'UTF-8' +-Xdoclint:none +-doctitle +'Tecton Java Client 0.9.4-SNAPSHOT API' +-linkoffline +'https://docs.oracle.com/javase/8/docs/api' '/Users/zack/tecton-http-client-java1/target/javadoc-bundle-options' +-use +-version +-windowtitle +'Tecton Java Client 0.9.4-SNAPSHOT API' +ai.tecton.client.transport +ai.tecton.client.response +ai.tecton.client.exceptions +ai.tecton.client +ai.tecton.client.model +ai.tecton.client.request +ai.tecton.client.version +/Users/zack/.m2/repository/com/squareup/okhttp3/okhttp/4.10.0/okhttp-4.10.0.jar = 1655042638000 +/Users/zack/.m2/repository/com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0.jar = 1635459849000 +/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.jar = 1631980259000 +/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.6.20/kotlin-stdlib-1.6.20.jar = 1648814412000 +/Users/zack/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar = 1719255261852 +/Users/zack/.m2/repository/com/squareup/moshi/moshi/1.13.0/moshi-1.13.0.jar = 1639018430000 +/Users/zack/.m2/repository/com/squareup/okio/okio/2.10.0/okio-2.10.0.jar = 1610057714000 +/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.jar = 1636793870000 +/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.jar = 1636793867000 +/Users/zack/.m2/repository/com/squareup/moshi/moshi-adapters/1.13.0/moshi-adapters-1.13.0.jar = 1639018413000 +/Users/zack/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar = 1614372051000 +/Users/zack/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar = 1562350217000 +/Users/zack/tecton-http-client-java1/src/main/java = 1721931688881 +/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates = 1753298321474 +/Users/zack/tecton-http-client-java1/target/generated-sources/annotations = 1753298321570 +/Users/zack/tecton-http-client-java1/target/apidocs/constant-values.html = 1753298325540 +/Users/zack/tecton-http-client-java1/target/apidocs/member-search-index.zip = 1753298325615 +/Users/zack/tecton-http-client-java1/target/apidocs/overview-tree.html = 1753298325598 +/Users/zack/tecton-http-client-java1/target/apidocs/index.html = 1753298325628 +/Users/zack/tecton-http-client-java1/target/apidocs/package-search-index.js = 1753298325612 +/Users/zack/tecton-http-client-java1/target/apidocs/jquery-ui.overrides.css = 1753298325640 +/Users/zack/tecton-http-client-java1/target/apidocs/package-search-index.zip = 1753298325614 +/Users/zack/tecton-http-client-java1/target/apidocs/type-search-index.zip = 1753298325614 +/Users/zack/tecton-http-client-java1/target/apidocs/serialized-form.html = 1753298325544 +/Users/zack/tecton-http-client-java1/target/apidocs/index-all.html = 1753298325619 +/Users/zack/tecton-http-client-java1/target/apidocs/allpackages-index.html = 1753298325623 +/Users/zack/tecton-http-client-java1/target/apidocs/deprecated-list.html = 1753298325624 +/Users/zack/tecton-http-client-java1/target/apidocs/member-search-index.js = 1753298325615 +/Users/zack/tecton-http-client-java1/target/apidocs/allclasses.html = 1753298325625 +/Users/zack/tecton-http-client-java1/target/apidocs/script.js = 1753298325630 +/Users/zack/tecton-http-client-java1/target/apidocs/stylesheet.css = 1753298325630 +/Users/zack/tecton-http-client-java1/target/apidocs/overview-summary.html = 1753298325628 +/Users/zack/tecton-http-client-java1/target/apidocs/help-doc.html = 1753298325629 +/Users/zack/tecton-http-client-java1/target/apidocs/element-list = 1753298325523 +/Users/zack/tecton-http-client-java1/target/apidocs/allclasses-index.html = 1753298325622 +/Users/zack/tecton-http-client-java1/target/apidocs/type-search-index.js = 1753298325614 +/Users/zack/tecton-http-client-java1/target/apidocs/search.js = 1753298325631 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 00000000..c6901cb5 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,88 @@ +ai/tecton/client/transport/package-info.class +ai/tecton/client/request/GetFeaturesRequestData.class +ai/tecton/client/model/NameAndType.class +ai/tecton/client/TectonClient.class +ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson.class +ai/tecton/client/model/ValueType.class +ai/tecton/client/request/RequestConstants.class +ai/tecton/client/version/Version.class +ai/tecton/client/transport/TectonHttpClient$MediaType.class +ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class +ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$RequestDataField.class +ai/tecton/client/model/SloInformation$Builder.class +ai/tecton/client/exceptions/ForbiddenException.class +ai/tecton/client/exceptions/TectonServiceException.class +ai/tecton/client/model/FeatureValue.class +ai/tecton/client/transport/TectonHttpClient.class +ai/tecton/client/request/RequestOptions.class +ai/tecton/client/model/MetadataOption.class +ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class +ai/tecton/client/response/GetFeatureServiceMetadataResponse$GetFeatureServiceMetadataJson.class +ai/tecton/client/response/GetFeaturesBatchResponse.class +ai/tecton/client/exceptions/GatewayTimeoutException.class +ai/tecton/client/response/GetFeatureServiceMetadataResponse.class +ai/tecton/client/model/FeatureValue$1.class +ai/tecton/client/model/SloInformation$SloIneligibilityReason.class +ai/tecton/client/response/package-info.class +ai/tecton/client/request/AbstractGetFeaturesRequest.class +ai/tecton/client/exceptions/ResourceNotFoundException.class +ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class +ai/tecton/client/model/FeatureStatus.class +ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class +ai/tecton/client/response/AbstractTectonResponse$ResponseDataType.class +ai/tecton/client/model/package-info.class +ai/tecton/client/transport/HttpResponse.class +ai/tecton/client/request/GetFeaturesBatchRequest.class +ai/tecton/client/request/GetFeaturesRequestData$Builder.class +ai/tecton/client/transport/TectonHttpClient$3.class +ai/tecton/client/exceptions/TectonErrorMessage.class +ai/tecton/client/exceptions/package-info.class +ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson.class +ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class +ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class +ai/tecton/client/model/ListDataType$1.class +ai/tecton/client/request/GetFeaturesRequest$Builder.class +ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class +ai/tecton/client/response/AbstractTectonResponse.class +ai/tecton/client/TectonClientOptions$Builder.class +ai/tecton/client/transport/TectonHttpClient$2.class +ai/tecton/client/transport/HttpRequest.class +ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class +ai/tecton/client/model/FeatureServiceMetadata.class +ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class +ai/tecton/client/exceptions/TectonClientException.class +ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse.class +ai/tecton/client/exceptions/ResourceExhaustedException.class +ai/tecton/client/exceptions/TectonException.class +ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class +ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class +ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class +ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class +ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class +ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson$ResponseMetadataJson.class +ai/tecton/client/exceptions/HttpStatusExceptionFactory.class +ai/tecton/client/request/RequestOptions$Builder.class +ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$FeatureMetadata.class +ai/tecton/client/model/SloInformation.class +ai/tecton/client/exceptions/InvalidRequestParameterException.class +ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$Result.class +ai/tecton/client/exceptions/UnauthorizedException.class +ai/tecton/client/request/GetFeaturesRequest.class +ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class +ai/tecton/client/request/GetFeaturesBatchRequest$Builder.class +ai/tecton/client/response/GetFeaturesResponse.class +ai/tecton/client/request/GetFeatureServiceMetadataRequest.class +ai/tecton/client/transport/TectonHttpClient$HttpHeader.class +ai/tecton/client/transport/TectonHttpClient$1.class +ai/tecton/client/exceptions/BadRequestException.class +ai/tecton/client/exceptions/InternalServerErrorException.class +ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class +ai/tecton/client/request/package-info.class +ai/tecton/client/request/AbstractTectonRequest.class +ai/tecton/client/response/GetFeaturesResponseUtils.class +ai/tecton/client/TectonClient$Builder.class +ai/tecton/client/model/FeatureValue$Value.class +ai/tecton/client/TectonClientOptions.class +ai/tecton/client/exceptions/ServiceUnavailableException.class +ai/tecton/client/transport/TectonHttpClient$HttpMethod.class +ai/tecton/client/model/ListDataType.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 00000000..7c354da8 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,46 @@ +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/MetadataOption.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesResponse.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/RequestOptions.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureStatus.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ResourceNotFoundException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/package-info.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/HttpRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/package-info.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/UnauthorizedException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/AbstractTectonResponse.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ForbiddenException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/SloInformation.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/GatewayTimeoutException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ResourceExhaustedException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/TectonClient.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesRequestData.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesBatchResponse.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/InvalidRequestParameterException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/InternalServerErrorException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/ValueType.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/package-info.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonClientException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesResponseUtils.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/NameAndType.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/TectonHttpClient.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonErrorMessage.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonServiceException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/RequestConstants.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/HttpStatusExceptionFactory.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureServiceMetadata.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/AbstractTectonRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/BadRequestException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeatureServiceMetadataRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/HttpResponse.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ServiceUnavailableException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/TectonClientOptions.java +/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates/ai/tecton/client/version/Version.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonException.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureValue.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/AbstractGetFeaturesRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/ListDataType.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/package-info.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeatureServiceMetadataResponse.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java +/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/package-info.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 00000000..5b930316 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,22 @@ +ai/tecton/client/transport/TectonHttpClientTest.class +ai/tecton/client/response/GetFeaturesResponseTest$1.class +ai/tecton/client/request/GetFeatureRequestDataTest$1.class +ai/tecton/client/model/FeatureValueTest$1.class +ai/tecton/client/model/FeatureValueTest$3.class +ai/tecton/client/request/RequestOptionsTest.class +ai/tecton/client/utils/TestUtils.class +ai/tecton/client/request/GetFeatureRequestDataTest$3.class +ai/tecton/client/request/GetFeaturesRequestTest.class +ai/tecton/client/transport/TectonHttpClientTest$1.class +ai/tecton/client/model/FeatureValueTest.class +ai/tecton/client/TectonClientTest.class +ai/tecton/client/response/GetFeaturesResponseTest.class +ai/tecton/client/request/GetFeatureRequestDataTest.class +ai/tecton/client/response/GetFeaturesBatchResponseTest.class +ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.class +ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.class +ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class +ai/tecton/client/request/GetFeatureRequestDataTest$2.class +ai/tecton/client/request/GetFeatureRequestDataTest$4.class +ai/tecton/client/model/FeatureValueTest$2.class +ai/tecton/client/request/GetFeaturesBatchRequestTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 00000000..5ee30c3e --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,13 @@ +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeatureRequestDataTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeaturesBatchResponseTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeaturesResponseTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/model/FeatureValueTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/RequestOptionsTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/transport/TectonHttpClientTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesRequestTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesBatchRequestTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/TectonClientTest.java +/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/utils/TestUtils.java diff --git a/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml b/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml new file mode 100644 index 00000000..11c149ed --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml b/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml new file mode 100644 index 00000000..a693dd3d --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml new file mode 100644 index 00000000..ca2bf1af --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml new file mode 100644 index 00000000..d566c6b7 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml new file mode 100644 index 00000000..d9580f33 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml new file mode 100644 index 00000000..5b6d4464 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml new file mode 100644 index 00000000..b108bf42 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml new file mode 100644 index 00000000..ff0c36f1 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml new file mode 100644 index 00000000..249cae81 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml new file mode 100644 index 00000000..f4217c12 --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml new file mode 100644 index 00000000..e70ec06d --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml b/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml new file mode 100644 index 00000000..347b9b9c --- /dev/null +++ b/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/surefire-reports/ai.tecton.client.TectonClientTest.txt b/target/surefire-reports/ai.tecton.client.TectonClientTest.txt new file mode 100644 index 00000000..03904afc --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.TectonClientTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.TectonClientTest +------------------------------------------------------------------------------- +Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.059 s -- in ai.tecton.client.TectonClientTest diff --git a/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt b/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt new file mode 100644 index 00000000..115cb27e --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.model.FeatureValueTest +------------------------------------------------------------------------------- +Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.model.FeatureValueTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt new file mode 100644 index 00000000..984528e0 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.GetFeatureRequestDataTest +------------------------------------------------------------------------------- +Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in ai.tecton.client.request.GetFeatureRequestDataTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt new file mode 100644 index 00000000..a3626164 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.GetFeatureServiceMetadataRequestTest +------------------------------------------------------------------------------- +Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.request.GetFeatureServiceMetadataRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt new file mode 100644 index 00000000..66dc430d --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.GetFeaturesBatchRequestTest +------------------------------------------------------------------------------- +Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 s -- in ai.tecton.client.request.GetFeaturesBatchRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt new file mode 100644 index 00000000..67ce5757 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.GetFeaturesRequestTest +------------------------------------------------------------------------------- +Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in ai.tecton.client.request.GetFeaturesRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt new file mode 100644 index 00000000..4bc4a09b --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.GetFeaturesRequestWithOptionsTest +------------------------------------------------------------------------------- +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s -- in ai.tecton.client.request.GetFeaturesRequestWithOptionsTest diff --git a/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt b/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt new file mode 100644 index 00000000..d2b1f133 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.request.RequestOptionsTest +------------------------------------------------------------------------------- +Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s -- in ai.tecton.client.request.RequestOptionsTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt new file mode 100644 index 00000000..13a8dbdc --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.response.GetFeatureServiceMetadataResponseTest +------------------------------------------------------------------------------- +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.response.GetFeatureServiceMetadataResponseTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt new file mode 100644 index 00000000..5139e8eb --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.response.GetFeaturesBatchResponseTest +------------------------------------------------------------------------------- +Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.205 s -- in ai.tecton.client.response.GetFeaturesBatchResponseTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt new file mode 100644 index 00000000..62dd9e45 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.response.GetFeaturesResponseTest +------------------------------------------------------------------------------- +Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.020 s -- in ai.tecton.client.response.GetFeaturesResponseTest diff --git a/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt b/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt new file mode 100644 index 00000000..3183bf42 --- /dev/null +++ b/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: ai.tecton.client.transport.TectonHttpClientTest +------------------------------------------------------------------------------- +Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.361 s -- in ai.tecton.client.transport.TectonHttpClientTest diff --git a/target/test-classes/ai/tecton/client/TectonClientTest.class b/target/test-classes/ai/tecton/client/TectonClientTest.class new file mode 100644 index 0000000000000000000000000000000000000000..42aa6da71134eca07dc70add3de2d9168ec88a5b GIT binary patch literal 17852 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 QEaNIJljRXMmoz=U00~yj@Bjb+ literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class b/target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class new file mode 100644 index 0000000000000000000000000000000000000000..4ac49009f8951cdaca1de564bc7de0df17487c31 GIT binary patch literal 828 zcma)4T~8B16g|_HZn`W``4GQBZDqG@SVMd(Au&V}%}O62CE;zl9or$pY_dB`V*Eo! zgv1BX_}~xlM;Y%dXbkb8lkD6(=k7go?w$Md*Y_U)UZ7n=4G&zncsNCXT_0RL!ir1y z>NUiA4jwyr!caA1nKhm>1QC~^5wS^h7%M5X36GPZP~nc?CQn75t6c1h%ycPfQ)+3p z7&`vMSwWwnvQ3N(bCJ|yH$NVTbe|6tA@flZbJgdmwC8KEVx=*7ueBEGw&GbP=-8h0 z#>NIIt?kK?F7z|3MMwOEhq;j|e3_>FeIzrpc?Bx2M`4ucQFn{7+`S}EW3eNxwxyd5 zShqA(#VZ}FB$ImdR+w=zbnw(e15FRp@I1_*>EM}%HTWI^w5Y=qHn_3Du<#$LRKbJ{ zB-+qR*?Me^2hxmpbET+zW#7KTY{CAwW(McPzHaXwUF^RJZnlKd_;5(1{y&l4;E0B$ z8ysSl2Fs-}WA(Z%-Fo!RV3zD0c?M;a$aY%o3$WH#lv;}@f5X%zst4pce_U1o#r}o< zFQHERJydD`NOyd~B2KY_&uHQdZJgs4MQ&elW1gaRbqWnMYgnRFiQ>zJy@R`CE5vsn M3*@<^u11#DZ_Yl# z&2$ky73d{WM^2?Kvr%favMxHwCdx$nO1d&vBWX%?s0ue=(vG&;?Fu~ZE}YdH2{iVI zD6pJps}9POvC0qS*wE8SvQ(Op%ynh|b~Y+%0>K+=Rla9rQ7D?*i{2Qx$j#zb$xD0kMwPHZ@tn zoVUu&vWbVy0Qa#KpovxhA6o+TXV2pR4-is~7)bCuH3-Rat#JC!+@LVS<@R@k0XyXiPIL8LQus>gMm49wrU}729 gXc2vWHwOnDS~aZT`dqFu67;U&CUGiW97;;AU%MZ?(*OVf literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/model/FeatureValueTest.class b/target/test-classes/ai/tecton/client/model/FeatureValueTest.class new file mode 100644 index 0000000000000000000000000000000000000000..88af2ece40c12167e930e796fd96c15fdfb6b20b GIT binary patch literal 6935 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 literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class new file mode 100644 index 0000000000000000000000000000000000000000..a2a2e862276af75b892c29c35d8c638a15192787 GIT binary patch literal 922 zcmbVK+iuf95IviO=7MQcbElz{5=s&zOsa^BT2(@UQXr)gslp2{n`D)2W!A-BBlrRY zd<_qP!~-9|M2o;+nvW9qOojTcFXB+Ow)>1LO64t&H_T^(I!4^&Ts`siciV^_6Yu12dXU;C^dQzLj2VweM}oXt*u+*T;}A&A@BhP@BQpG_paSLOY1V zp4!w&{e2NvpzCCKZr=Tt?V%9XHj-=9V-qBIO)K_3MaHw_-UZcGxfeMFnbVo zq#vuggBz&)owWLI5`o6ie`=Y<=BI=ZSUozGK zf3I>#*`4klSMjjc6Qnwwge9(Zo*OTU#YDfvU3P89&nhgav#?k;u6*2j+2_5!ptyxV|{UD221kNbGrB Rpv~YSF7ZB?CD`BS`2%@N`oRDI literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class new file mode 100644 index 0000000000000000000000000000000000000000..52ed9f2bed297cd89af56639baaa5a728f763f8b GIT binary patch literal 996 zcmbVL%We}f6g^I&Ofn2@nzlSkTOhzBg$_g!52dO=3FVbiiBw_30w-}3SA(a_cq&-( z1qk>O7Cgj)58$H^*OM%Q3X9g#%)P#kQV_3{#DSP+biybp; zEaSXQsS7z=%%NoAl7-6*Sv{0d={iHL#igf3PY25D`BEtDh2nKABJDj8dP8s>hvL~N z(&UIS+Yf?$Q&Tz{;3P8ETkZA;c!7$yDN<58Ubw#+%yFNvVt)R#K4iBZ7kAoRQ zn8A6Zln5I>k0L?Sn@3o@R3-lTwj8KrZwz-@yL_K}v6jB~kVnH!zPC0C`CJXWwhpBl z)F&ca-CYu_zD_uHJBY)c*pPu=>xEDuJ8E5!nv+W8zag{Lz*OXy$+%4AsL!F)SEH zj{~Wmh`0At|L;vPq+N3j3dw4T(#;@FE`YUf_;2kn%)8C~8*fK|RBRVk+Dkok`6S6I(0#auCO zoX=E~!VLY3)B(Il9v^T5AF+f_6a)DQ4rVb=GeS((quWmz(|Z!95_=kF$YyXB3z#F% KCMGsn8h-%mtr2hl literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class new file mode 100644 index 0000000000000000000000000000000000000000..496a85551fb009f4842c90635eeb53265bd3c98c GIT binary patch literal 848 zcmbVKU279T6g`uT*<@X9np(fDwMIxIxY`syXemf-wUAmcr9R4JGbB^i*>-o~NXOb1F}rmKy5UwrPXY+v>hB8_eu%j7_2+S#XI*%d4h?ii!8%|zz8qWSy+$(tS4 zU+d|i8TTges(UEE$f&S7iQdV4v@4I+Cr~2IFzVS%o8j6tvO%7pmlj#9wzVsK;lC4m z;xe$;EfXhcPP$!XN9n-FVu%M=3QUB2=r|}JNnKGod2M;C6x%T7l5bd8RwHsce`~#Oho)9kK3cpwB1bk)q2^#oD8@N6R j!whC=kzh>E)1!xro5QuSoTn#<-oQ=NsRc}2q2%)q?x^G? literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class new file mode 100644 index 0000000000000000000000000000000000000000..f6cfeb00df2d69f6c96d2a868b1a1abd289cd7c3 GIT binary patch literal 917 zcmbVKT~FIE6g_UErp+=a9UuE-Y%5z@B!Z@DY$`%b6gH$Xq!qDeH}zVh;6P&Yy5F=1 z2HFEZU_WZwP11)-Xb%u6zP{($=i2A^&)?tI09sh7po}LDDtKDPv(na&ErJ0Di+Ju( zY01V58!s73dL)zj8bhngrLRSxBjpF76iWNCI5Q&A{wJY#1=l7PUvs3xH9w?EoAz%= zCG{r5x_1|X#u0H4@bHMoGR?=Jl^&SE-BU`$+aXU9 zLFv0YG_SYl{FR;@s_bqIAG*iVbu7E&&^;F}mPuKD5*ej!yms*h zo{I*WWYg_ks<#+sZrqIF?d_=;<}~@fb7pv$d{l!}rQE%ums(lP+GJ{VB9obDpYza& zgYUG}>og|B%NLMz#Z#jh-g^_Zv9LFhNrLerEYW+e(Bo#+YARnkqu<4Sic>V}!9s!J zLUZK;ta*t-vsRpib%oL|*x!Cqseox3r%b Zz#Oee;{qO1wD1UzQKOkd&C3+&`v(qh_9_4X literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class new file mode 100644 index 0000000000000000000000000000000000000000..e76387d971cf7981411f053189843184bd8401ce GIT binary patch literal 7235 zcmbVQ349dQ8UIhNSvC`rEFl^MjWI$Xkd;HF2_gZ45I3L%h^Vcd>`sy;o87QG3xwj? zYHxd6uXW7X#e) zo>JV4F9)FE9vxrt<214Qt9~pOzX$wi#y)ZRy13jgE)VD!_Tx+(^kGD(IwY_h7MD>U zcKh%Rq544`59xSVgRvnVw~}jOW-4W+G*tIm_BzY7(@86}+1i=5QubQYHZ?2`nbDwa zh3!N<7>-4)xE)M7&x2=;E7GE&WJNR{wO48=Y?!}IL(!T<#L`e6ipH&t>49!5xy9^` zaV8K-gw5DCGZ__QHCbf$MG0uxWcKwS-9p6Nx;SOo=|K%Oo6~VSI$&*!rlQo{8jmMz z(~c(MRLyOZy}=!6VhpafdJ;*Cg5@?9Y)r>u?TKjoY->n^MuaQ#QCNGz)}YiB+z{Vo z#-b60;v6$+4p_F8Y|E^m+OkgD4EJ}KgUY%J&)y31Y_W4^Um_igw8mnI-5C(u%vhQb zYBIpoHfs`b+uCDGh;zpg&0VIH%na=?cbUPM8Sf2x;Z+C)Z3Bb$kZX1zXG+P>awl`u zOBB)osU-KISGFU%$BJwj8no0t@)>>M-{H_rhD3x&lxaH}3vz<=Rp&+syGi}CFe7fFD^*QNMsvtONm;oe4ZE~@OD$k0I2|F{rNSc_4M0x+A7! zej*y`7t=Kjxjr4ogQA)g_KV~Uc#tZGYnaqdr!eR`6X|5wS{D^X==f|IQ(Os-w=hha zL^K-cz(x(hqpX4k&PGVXG~o*wR0bZwqdFcl@VL;oB2S-{sT!$wtScItjwHTCR_nH8 zGLh`CQYo{SR?cQ{*M?0|25Y;m+BgecZ6aA~iPUd0@C3eT;7L5CK^KT+T32LChQqLd zr|~FDnpok?$aSS+97@D{418Z)et;ips92py*eN?{4t7{}Um}t!FTsy0@Ort9A6MWf z27Zd4>G-*UU*MOV`_6`waXMf6}mI5_raVj3j5n#wo?j zdNUGH^+!XODmL;&bfRRudXsXptnQsigL{3)3D4&*r*JtfUmq$t-4 zdGuCh$nvxXW!adLYl>3Qy)1NWIX5tX8rs_hE4mD%O+Bn54eegSrR}Us+%J1{aqQ5~ z(^Pa}Je<7@de|`IW@-Iu1;r(3Dt@iX ziy^7Iq~99q6!zx2fm1DhyoEpe`O5W|FE{UxiCJfV-)4sUG}L-2$`_r#P1x~Q4ej1_B;e=+Ia3h{r?^`bM-59E z!IP+CV`@nt4+{D8^|?J_xf`yT=C5!tO{SMCIa%E%E*trws^f14{*Hed7{V?CY3$Na zmo25y_^w316%5ISj;EK|WAeo?$$qSqZ$6okj(^kZp+urzyoo*U#iA5A2j6-#9*J40 zdS~T0<=2BRM^L;+c$ZK9p|jHzRl97HI=ft*L)0ncW-quOMOvVE7$sdJ z(D$P(6!13=qjUtu0lDjRRPtj>p~O3jh=CgJH4D=*hfj{9p|g2CUhZ8@odHb4dDt#x zXDbxvQ%Xm{xjKB)kb!i8gmj?`DWM=$3rK-7?Ga2DsP;n-5m`Q%YKV_BClSb80;%W5 zC-ZyEJP(jU7f5wJkis!Q-t7X(=catp+$dyvK!fFN&nQ z+9Wp>4magpa#YDtU>Gx;Q58oshf&>Cg=56yVbmPLEDcwV;J6$r&%i2r&hcvrE5bgWzNGz(!XsUTBo7lZLHEUdn~cAW1}dGwJX!PjnON4kxr`|A#m9$!R3L_95XT8fu;2_byLU1>l4wWDwL%nr zr*@yf&%qY$)6h!|qOLnLeZ0#peo@zy*Oe)~%9Ms-lxIzu5vZ!d{1LD)S1YS(lvT%! zV^zags~Q7U(nLo|j+sp?Sio+Yxrb&Bv0Uv%9rm#VT+9M?2@AlbOtZ@f{BoLfg~!}p zW$pq}u_MP^XQn^T+?Z?bTQs*&&^wBS+j%A~3XP&k+ypxW0krd!g~M3PB33WP-Xi8s z)n(mz2un09XgrLiz#%Lvz(Qwc;bEMrX2gN%ICcqL0$fG+Ud?d4hR(SbOK=^F%JnQN zH_)mZ(S_TXM7J|g??4oHORH-g#LDVvFqM-7Tq*1?knR>opz}<)+j-W{xm?E&WSG#J z$%HsmFB!#Yf`HS>#By=-u8vVO^R#av87oM}8N*n)Q8fS=ewvHa#3;_(-gpqJ6mNmn zz&zHm=Hf*)MfCQfVXVHghAgfYr@*2bM*SLRj_1CZTbpI4otT09Xv6)y8|6X&AP@J4 z*x@|P^YsxPZjbRmdz^>G6J+d3c0ErqU7n_W&$8q^N48#IlDx?1c}cRi(y`8EE$y-v zQ>>lLG8JdfR7jocDH|dqTQQ$$7UBsnQpn*{NIIMf$$U? zs}Nmd+oo4}Our^^I_+0L;S}B~rT;GA|74h1uECy2eci)(vuA+b0dC@+H*>$6xZf=k?B|p~cR%j1my!i|AIm0~aV2atoWIl5Z5{Cl7?SP22-0D=_uRXC&UwyrUb27x`{!Q(&f~`*Ixyx(+>h}9 zZUj+mvfkP`b$9d2P(Na+AFVxJ3OUhE42+z#N5A9ww@7r^}> zTJRu%&-_>nq77qWSrSWDEV%$wq4iKWSr*HRSTsLYC4@5ZbY^iOHG4BX6B~^uW7Bb7 zCRUYoC7M_C19FNB`bF=Yue0F|vG`{HQ2ja=G znbc%5BcW+5J|3G(cw9&bFRS*rs@O$SO{?a*mQ|-!TgfT5GOIo=s+KKbIH71!Tg}>r z9?j-8Rkx$2^DKH}4`o8Fy{ze)eMLfbSNFUG->8uz;D&^ztI6Wpl4@p@r95v!2_viI z=M_^EXZO-)uV|Kps|QDrVF*NV+UEXNWRv=s`cNt6?FGYpWEGUGz@nOa7qXo@g@%WI-KBg=~XW&93zE-fG zdESwTrNxu^_|vRf5MD*{)3%a*G_4d|lG=oUWHF!Lp2wuJCXAGNND$7#gQTG0a4sC`Y|Bk(t*oN!pMPj1qum4 zLDP6za3;_^lF^Gk8F{Svq02B(VCfc2BPZiA*4Q>trJzOE&qg0Qz0+?w%@bX7yGMp8 zbZr^ycp~E|o=KQ^9w{iMvSvkwo=058MOSfAr|Za2WD7^6FY=^ZnB}JeLFB~?8D9tx zP2%NB(Uh@2moWFg9qq78uM!}kd21R~YEr_$4*Jz{!CLGLF*@R=X_(WhWhu)nj?N0~ zu)rP8Dx$B#OKMnWA%_h!tcs41@udi~cY9^OQ$<2-2bleitB&hMEuT|O3I2*CPwKjA zj^-81QY{%T@Rf|O#qtflWiRH`^~Fk>WPFG3MYX(?@d^d8yyTSFqAazvN;24$U7p@{ zr@EMqEjyY`up{AcSNBc@THYEzF~T!xSr$0WN=KgYI&!=Zdn~y(!gV8ESCZm*J;bZH zo+}udZu{|rguxxm+NPpg1;Z5cPh@$*whN=B--r$&a^kKSIkuPg;G0RMGZHTD9P0bB z#tB$QU}e)oq~>6-#3*$uBV#zTcpF`AUOaSpG8HUAaH~1wHgnn;0uFl%Uh2!5JE6XB zZ3@(tf^$68EQzw^5ZsN5{o1G9z)I!kfj`!h5^B1prbKNtI7Q`|^u6yvIZpA@s)HY1 zHT(cNjZRLHGdxwHiRUiQ*~fFY=X{9g9?!XsS{%zs z2Bxy51iyojJDJKed5ouQW>gXF Vbt&9Kl-l_JIhnl$3&m@#{{e)pjd}n8 literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class b/target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class new file mode 100644 index 0000000000000000000000000000000000000000..2be3eb08db03f33876948429de850ee5d74e783a GIT binary patch literal 14511 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 literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class b/target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class new file mode 100644 index 0000000000000000000000000000000000000000..d42db726f3ad67e65630508b28f16be5619bcd57 GIT binary patch literal 10677 zcmd5?3wRt?bv{S0S*=I1yp|=)&&~QJ>yh;{v1P}xEUj$WE6LGrEX#4S9!n!>ozu2lvimAjY4EOZbL>dt+h^PhA6d+wE9{K+$)C8BK{_tH^%LZRREQVBg#NmcYI4}IE0za`&K zO6R1Po}$l4&(jJ`dFY}-(;m9yr3Lhiv|jeoZ_~31eO968JoLPmeDpig^t&GVJrDi9 zhd$?_&&%i+D(MUKMX9|g#UDuVB`IE#z5Y<<{E;m9Woi40w0(5}9if+{<7-m;V-Nj_ z^!=%a{!F2-mqP*hSK^^>c<7rId*5~Qk6)b%J?^DHr@xTtf9aubdFZdC`fVxxIya+K zmi&%~{-%=tmi|tb{QF#&vVi`9URLP43jJdxb

    u_$Mj;S&HvV@h?*Rs}!$z>EGy8 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 literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/request/RequestOptionsTest.class b/target/test-classes/ai/tecton/client/request/RequestOptionsTest.class new file mode 100644 index 0000000000000000000000000000000000000000..ccf101517485ace29518122dcccc2d881fe28f47 GIT binary patch literal 3346 zcmb7FZBr9h6n-|mB!opFyl5RoP^-b9siJKymWl`x4bVaarBz&#YgoGM;_gO3?R%Z+ zALvZ~hJHX=XZi#BsXwE?qSNQ@Zgv9`rx<2-@1A?_InQ~{a}Iy~`^TREF5yKIr!W%7 zXGz2`A|Kb17{&Dj#*(;!acP;5kDJmwDOWkUx+Pb)Tam|<{G3i;CW+7SMGGIZa&Iny zLIQUZn3tx7CPtILhUy}gz}*Dy#j%(~uZ-M_`||NXUS5jhVH}!*=Bv7?yCVu3(gX7f z8po`XP;fA>n_{}Mwk+&|wrtRn%3DRvnAdDweh0=zcSUy;oXcx^))ht9GP6ZP7p9xF z#p8-_-0ZCXo>_Nw%XA7f4J$a}^1XX!%odtFq9AVhXB7b-xQ_5@2FYYd*-Ac_K9ZbrFqS$h{D#oD6H7lhBLld6kg&A5@K_mWQvl4 zQ~6cxiIz1qvz*NthA3;ss9mnCk>cnt{BFc z#d13ZYf;!%99z=YQx(tfT*Wu|RzVx(RGP4@wK1)@!n_V_*t#of49E4dY1v|Y)3voA z=P`?V*mNg!VU!#d-{Cp$>84k#C7&+^s^i*}$r7y<`pxc>kW*oC;^9ionWnJE49#%_ z<9&}GRQ!maRQ!w$1(|(%mL;OZBbm%BuTnhhBi$KaTX(m-&R*n^s0l_H(dLn)3~jpw zTc*;OUX%l%Bk~mJn6A8RXIROebZ($ll70tKfh~@3{cce(ldd^3=kYaMWAOnFze{(w zQ#HG~l~Sw|q&_s&&(d#*Jr@Hkb+$ad{u10fhx7ECU-hJSVt-$r7=Uu9Cw+i2NAvgWgupFSW}zT1As0R=C1a4>?`i#UUI5JC#w=psYi z7(x#|!68iIa1GpC2zRtD+>0UHXG~d=G8DmWCn+5g>?@=)srGGj5?Xa#12Y14giHWO z3G5g;ah!jBWWOI5aiRv)PzWkh7t~M)>Q%tug9ubt6;vkG-4Ni*qLDJg zu9-rQzwW}}w-9@pG6SP0sFO}As+Xt-n89VLM-n*2ir;6&rM`SUJP31{uba!IFqhwg zT=G#a%^jV;1bQI9)ogrYD2-QO76JKPIPw%PDQ?ot8wSdA|+j;}CF&B_G&d^llUq%PzHOH<*) ZT*Y?HvKX%NP7I&Y14xxZf@1X8@*j#3`qcmc literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class b/target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class new file mode 100644 index 0000000000000000000000000000000000000000..6e13ceccce726258055d1d25c0cdd4db3ba15b13 GIT binary patch literal 3687 zcmbtW`F9k@5&mW+F{{yVEkYn1ut1;_m~bYsFlGf3mRKPy$+8InF|1mvk!NR@nOST( zhn>SY?8HuN=kSFS-?xopR&w%^m!I=5@naP~QLtl1n10C>^qpXx5S~vQ z4W95zMFmY++w{Cl!JHPZf-O~$PcBVRe{IZf$SIb51=_%4SyA*YMo-006||0(9N)@| zNz1bcIPEwE-wdV$E^f}4E0MU-FJ=m^puufEfs9-EqPr zn8iMs!bVF*Bve?xY@P^f^Eh9Ob9uT}^;kHpE|yzSIBVt^-{}e3>N`&4jpJ6%394Jc z@G^v7+pJ`k3iwA6n>1}^goO}=JRWP~g_4^UgO;q?p4)B}8QT4FU+DNI4(Rw9o>K91 z9lyXY6?9a#oM+0yn2L*TDxTOs=M@|kztZtEo>B2@9lyb|Oy2UHrs6przs2uVJg?&g zyePf>UdMhI3i|F~r>ppbjz8j0(%wrt_F|uom+^{pEV?pH=)t#~XN4#{dR( zyd}RzFsR~f9q-^>sra6X_jP=L51Bo?;N&d7G%Y0Hj}+`$0WYlFs{5_DMB-Um3G_BYr-{iV#+lwXMa5KMZQR}FQ$&px}Nm-g^rt2zoHW87hRFH zidMLVr)I6(tZ=9NS<{({EGf8e1aN-;fsk8Z{ZjrTy>;=DxV5#eTo_Jq`Q~NI<26k*GA6vBz?qn6Z&mNn2#h0q zY*$*Z8lT2O(jHjAyumjB}Gx3;jGHx-RqwT_9jo(|MVZ!pw+e+wwHp(ls0* zsL>&U?p5%I@M|@tmyJQFYny&c9I{$<7S2+uPJ5nk87rNq7(WKCmQ0(VI;&lW#no38 zxkw@%x5^Bydb%q(KmaSM{5I#vzOS@^wMYNK5i?w{9C?bQJ)SHKNKC$R*o3+@?Ksk1 z8>A>!WbmIZ8GLfnBy+Pjk&ZA(#+MI0Gc%K4i&+g!C??cboJ`Xz4*qkF@FCrcL|*-kaH-J#0wrpLXB8 z_r34z5UbE-y)*T{Cb#fq3_nvuh-CTgy}cww`S4J^xL)cJM_B-{a%=UpS~By z%=ZoYgDPy0e+^;!L;9mIh3Sul_y;ojp|@zr)_247C-kTFpnYE+|4KOgwUB)froW-T zmDRuVHdNIU)B7^@BU$_hgZ|N=A6M^qcIKV?xBlR|FfFHl3ez(BXCe6)8U3q4{}!eu z`uFM`Gr1pa`QhO!W%fV9^q=%!9#>OD{zT^gyO#ck-kn81rT@iBw{Mw(sw%;km-CuAZv6-r)Hz!vLVaj3eIDqu$^( zZ}5mWc+4A|^aeBD;1zH1k~etX8$4CR=hRa*pKI`WVLHMM^L^BA~juK6$o^5&Z=n(~ip z$~`!NKuAViip+#U9w4t45k0x2lbEaob5?N1CZ;8RLhTh_bTgfoRi4sddxmMy>x&!_ zOI&9o$V?9qO|z;DL6r?Eyt`74J!WTslEGV;mKIR)X&{RB=8{RUo*y5#<42$a%<9XG z*peKWZ7LD5RT56G4QmG1Kk&ex(+UKPwgOGYhES`)(~R^yqpZ$w2|RjP-Z#QvHn5avToOu(bRR4}bA zcgq>{V)C>)lTR8qGi~_@T9v}wC2Dd4KV1kxEAHf^HX|_eZ9&gbnE z?&Us{FXhWj`Wk)RxwFBUTN}G z923nxVe$~i(BTWXK+&XarA)qBL|dZAu*q>AG3h1I%;r&p#|$1f`3NUXo?ujhxp|m$ z^D5%#b{&(`JZbPzlQW#HV+SVX#O`Ba_cbP8%Mf~;ufzN&@pHY<-@w!~VQ1pwR>~O~ z%~-jSA*sOY6Iu6Z0;&#ex?p5z!-&Z@@~5!z)57#71V+IoNq1p)Gt)pWYiEW=aIQ(D z;?7W>xvEsC7dU7Q#nU)o3D@->kq%OC5vjK#g_Km4zq>LS>$ntp!CcI}t&VROvOAd8 zl=-i6sWkXblkeisnEYAs*xh`O$)DqU4ZhFh&&$IX#7k+u-{ddy15E46_~t$13*dhD zSZ(qNe$e1ANl-n+w6bio4l4KLt?H=BU*?BRKFN=m{1v{$%1cUO>Juh_{QA=;5c!hji5O?tE^kxa_HhEziQRdtm@Tdpe{&v#{!jljjU)S&Yy+BNj6 zYTCDN?SU{q&QAztKEz$but+!alenc>ak(BbonIt&G>7Dd)zRI6F^43FX$EdXomPCD zX_?>1a#HDp3q0eB&-qv=lGCSdW>ymHHRj6W-Yo8&iR`6F0$gR4@dxEhqAcA5I{`?j z>7X{{DYQSmGLVtOO2iZ6_q5P=h<4{fJ17>jGso=A0Nfn2rb87(>8X4s0I7vq`>vF&geQ^- z=Xk$up=*QNJkM~oBWBC(eRd%`Fu}B~ETt8fCZbrwB?2R46t3K3@ba>zE^oU6xReswgdjkr z*H@X^{h1l_fEed1~-6fkH%^{W+pj7+fz&$2|cfGRk zDBgWIg=U*?6UB`a?g6#`JeA#*?XmEluek1E3Y>j)PtmNd2$?e2j{)pRq?|3ARmp&U zUJ@u8_vUMkCes#ZylP)WQ%EK7aVhFb^@hrrQl%7)Rlf!^_!}la$1j@nYq-&1#7RB8o_CF~>voALV`q5ytyVZ|rOJsH1Z zxf7!R-9>d6<9dzHyD<~RH{-ji`4sWXisT-AR;$Sc^f`=8O+fe3eRyK}JT?c_<~DrG zX0y3IP#>J8(CbuH;1O0zET&po;^Skwe7>Nh1n7SHB0ZqSOeYlo2f;s}_4TVPUttHuXTpzGu<{# zk=E064$%xP2vBqDDLPjZoi{}d)3i|Z4U*Wrnr7j1Ib^N?{YqL(jkJN*(02T)sS7~$ z(ndN&o0Kifv|g?)=g=keB?a;ZYN3ZP3ecCqYXQFX+QYy}ubsr4XYV7RVfu<^FRz2_ z5au3H_J+=8FAylUcTthOOFVlO9@^BUdArYlip36nM?r$UJy==D|z4;EjOWqx2X+F2E>M8b+ZihwB5Jd_Bb5?o6#To}g0h8e;uL5W3qc!f62(B=T;0sdH# z6V49$9-0TxdjWkPwbG@ulllQ~jP}z29i+=?jIN*@4I=dqBDW49yRHI=p8%YP=m{D^ zZN8e`Cd=oDcU(ubf<{O2UX&0W#W^^!*b$ma9HFVo9r1)$A9xE@!4*U|)?cW~Lw9ov zpze{pZH>@H$lDOYxHm$J083pyUyV1ZZ7^6jXPUOcTQ%yds#<+jt0%auEhJmos)7yh zEb@Gswl#zrs!k*Pkm=h4gypgf*8yuI{6?t;NX?;fbXBhb9$b0dTllmD?bAG}BX94S`c5eHEiB6~q$sdgoohPVame zwLsH9ou@wudZ~>eP(4#pDW1(EyBJjRt5>HO*;byR9Ra%B`*xAu=^?E!3!yl=s7XXN zgn~6Q)E=bMwA-y34WXJk!=3AJ=PKd3g=RyC>!IrnuQ_M_<}P}Q@jwbE5KYyI<>Ci9q%x|ps<`H&VC1no|RWJnVYD9fEE7U@$_R({u@Q}01>p?!F}1d=JB`%Tfmo=QZBUlbM8i;UK9X}Gl5-_o+>FMzfgYr- zFk}bX>ux099+-3~s@zrd2o1wjflSxUxC{DXKBxu;#|CR6bVxl2 zB3J2=5uqVH!m6c5vmzANqi}?5J*th+n2Z#LiBb$()}d`5F2iss89?G`VE7Eu@L4(z z3vPk+_rdN5@TR|j(}_GzCtRG4<#9S*0VkmnoHW(TML6L%2pT5@c@Y1J7QaD92DR5u zQL?86%1*eM()tqC^^szZqJ15HpMtl)rL@yWhsAmA7Sn6Wi*rCF<+pHjfE29hAeS`> za_zg<>%wx#hPD#SCtaQP)u*N@{T8Kq(5fe=>1fL|Wo9TV1!0PuY06NNeG}dMO`kRUl;+rk4nK|f!|O3n&44}t zO>rl1HN72NrEE1dFLC?tHB)pgU_2hc!S1>#`ea+ERWCI_(bWY#vixx%`AL{u-5h(W%jmKN(4O%Gtb8>jX`3i*hwdLl23qRn3cC zblRrqhTB@aCt!7BzDbrsa};bdINWD(f<5YU%_`N6M2%Idh6*&RlyGqk?s2a09tfAU zMG^W`vtJM%Zc<0(r3H~Xu6IJ*E<{DU5~r^Ti|AMASBbzH_r#CPTAjjmz-iXaVBG@N zt>vr%(c927K<_Zh1L2Rg@TXnNII**VpXXQj1!|!8FyD_J@n@j@bNUPVOLz45dc@Ui ZaJ8Oe(_7`)`PF%P6?6;obPIXW{{b^ce?I^K literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class b/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class new file mode 100644 index 0000000000000000000000000000000000000000..29a27214a556a251095ab3be8e05362429891c88 GIT binary patch literal 954 zcmbVK%Wl&^6g`uam>8pkCJnCwr3A z0DB}BJj4RAW{t#}Ki~&I+;LMi3%UrFJonr)_ciz4Z+||20dNboG%}bsk;SD{H(uu;TJC6r?Urp1WA1>eFpG^x}6hl$~w9 z%k4->*S;GB{DmV!wX{dN+#A}fenfTDm&wm;`%%yrYf{%adq{T{bUb?4J+JTjq4b99 zLT&j217!;pR4tsqw1ph12CiASjs*)g^dKglL$St?`$zQ*wTWXf6cmj%?m(Bjk=P$N zL$ajjm5mdPb%ep#)rPI73^S$GQ6I+)s9{My80g!vcD8!kv~2bA6U@=hW@&+0HmiH0 z5&b#jNzM>@jU*Bzo0aN&u*ydyDtRP7;m8N19uqVUVEOyS$vP9h@YK!d`lu!Wq)2khn}*U7RH?fmxi3<#~z#V&`xX NrwN(#fDB3c{sQ2*{HOo` literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class b/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class new file mode 100644 index 0000000000000000000000000000000000000000..734966d83506320d8679f6bfa5e32d61929efbcc GIT binary patch literal 6989 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 AxBvhE literal 0 HcmV?d00001 diff --git a/target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class b/target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class new file mode 100644 index 0000000000000000000000000000000000000000..b4a0d6cc7f216d227e1cbe5590b5cb065c557c14 GIT binary patch literal 9306 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 literal 0 HcmV?d00001 diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json new file mode 100644 index 00000000..ce8bdd9a --- /dev/null +++ b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json @@ -0,0 +1,141 @@ +{ + "result": { + "features": [ + true, + 0, + 0.00235626767200754, + 0.00186219739292365, + "693", + 65.3086220472441, + 123.76659574468083, + 63.38480284421458, + 66353.56000000001, + 5817.029999999999, + 196112.57999999993, + "1011", + "29814", + "91286" + ] + }, + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-07-06T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-07-06T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-07-06T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-07-07T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-07-07T18:10:00Z", + "dataType": { + "type": "float64" + }, + "status": "CACHED_PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-07-06T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-07-06T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2023-06-13T03:20:46.563Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + } + ], + "sloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.014861452, + "dynamodbResponseSizeBytes": 32404, + "serverTimeSeconds": 0.016342122 + } + } +} diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json new file mode 100644 index 00000000..5131ab1e --- /dev/null +++ b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json @@ -0,0 +1,141 @@ +{ + "result": { + "features": [ + true, + null, + 0, + 0, + "667", + 63.55378640776698, + 31.318333333333335, + 60.582006557377056, + 32730.199999999993, + 563.73, + 92387.56000000001, + null, + "14778", + "45427" + ] + }, + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-16T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-16T17:50:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + } + ], + "sloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.070483594, + "dynamodbResponseSizeBytes": 32359, + "serverTimeSeconds": 0.08214166 + } + } +} diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json new file mode 100644 index 00000000..cd6db6aa --- /dev/null +++ b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json @@ -0,0 +1,141 @@ +{ + "result": { + "features": [ + true, + 0, + 0, + 0, + "693", + 55.244963503649615, + 32.32372093023256, + 56.39924033149169, + 52979.919999999984, + 1389.92, + 163332.19999999992, + "920", + "29946", + "89780" + ] + }, + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-16T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-16T18:00:00Z", + "dataType": { + "type": "float64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": "PRESENT" + } + ], + "sloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.019176106, + "dynamodbResponseSizeBytes": 34378, + "serverTimeSeconds": 0.020629782 + } + } +} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch1.json b/target/test-classes/mocktest/getfeaturesbatch/batch1.json new file mode 100644 index 00000000..017aef35 --- /dev/null +++ b/target/test-classes/mocktest/getfeaturesbatch/batch1.json @@ -0,0 +1,198 @@ +{ + "result": [ + { + "features": [ + false, + 0, + 0.0010621348911311736, + 0.001418942887548776, + "671", + 74.25209302325585, + 78.37321428571428, + 67.77857283950623, + 47892.60000000003, + 2194.45, + 137251.6100000001, + "650", + "20443", + "61207" + ] + }, + { + "features": [ + true, + 0.017241379310344827, + 0.01357733175914994, + 0.015481089555163629, + "667", + 57.09122699386504, + 31.785000000000004, + 60.60629139072843, + 27917.610000000004, + 635.7, + 91515.49999999993, + "490", + "15268", + "45917" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "693", + 60.329274425287316, + 50.96183333333333, + 59.53020802741064, + 83978.34999999995, + 3057.71, + 243240.42999999988, + "1296", + "40244", + "121683" + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-16T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-16T22:10:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + } + ], + "sloInfo": [ + { + "sloEligible": true, + "sloServerTimeSeconds": 0.033027251, + "dynamodbResponseSizeBytes": 32052, + "serverTimeSeconds": 0.03392528 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.0211333, + "dynamodbResponseSizeBytes": 31944, + "serverTimeSeconds": 0.022184401 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.015265108, + "dynamodbResponseSizeBytes": 33121, + "serverTimeSeconds": 0.016896083 + } + ], + "batchSloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.033027251, + "serverTimeSeconds": 0.034359268 + } + } +} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch2.json b/target/test-classes/mocktest/getfeaturesbatch/batch2.json new file mode 100644 index 00000000..5565d94c --- /dev/null +++ b/target/test-classes/mocktest/getfeaturesbatch/batch2.json @@ -0,0 +1,198 @@ +{ + "result": [ + { + "features": [ + false, + 0, + 0.0045045045045045045, + 0.0037703513281919453, + "693", + 58.44993951612902, + 40.66025641025641, + 57.06300919842307, + 57982.33999999999, + 1585.75, + 173699.7999999998, + "1004", + "30131", + "91419" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "693", + 69.66070379746834, + 88.41725, + 70.29879541734859, + 137579.88999999998, + 7073.38, + 429525.6399999999, + "1951", + "60129", + "182182" + ] + }, + { + "features": [ + false, + null, + null, + null, + "693", + 74.45219923371646, + 130.8551724137931, + 74.93892802450223, + 97160.11999999998, + 7589.6, + 293610.71999999974, + "1263", + "38690", + "116287" + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-16T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-16T22:20:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT", "PRESENT", "PRESENT"] + } + ], + "sloInfo": [ + { + "sloEligible": true, + "sloServerTimeSeconds": 0.057939359, + "dynamodbResponseSizeBytes": 33842, + "serverTimeSeconds": 0.058823398 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.042735987, + "dynamodbResponseSizeBytes": 32944, + "serverTimeSeconds": 0.044680642 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.041904906, + "dynamodbResponseSizeBytes": 28264, + "serverTimeSeconds": 0.044238231 + } + ], + "batchSloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.057939359, + "serverTimeSeconds": 0.05922025 + } + } +} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch3.json b/target/test-classes/mocktest/getfeaturesbatch/batch3.json new file mode 100644 index 00000000..09f4c7de --- /dev/null +++ b/target/test-classes/mocktest/getfeaturesbatch/batch3.json @@ -0,0 +1,150 @@ +{ + "result": [ + { + "features": [ + false, + 0, + 0.008849557522123894, + 0.00716974368166338, + "676", + 84.34679758308162, + 59.505714285714284, + 83.73443237907208, + 27918.79000000002, + 416.53999999999996, + 84822.98000000001, + "346", + "10196", + "30552" + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "status": ["PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-16T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-16T22:30:00Z", + "dataType": { + "type": "float64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT"] + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-15T00:00:00Z", + "dataType": { + "type": "int64" + }, + "status": ["PRESENT"] + } + ], + "sloInfo": [ + { + "sloEligible": true, + "sloServerTimeSeconds": 0.023151386, + "dynamodbResponseSizeBytes": 31607, + "serverTimeSeconds": 0.024568279 + } + ], + "batchSloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.023151386, + "serverTimeSeconds": 0.024957837 + } + } +} diff --git a/target/test-classes/mocktest/getfeaturesbatch/input.csv b/target/test-classes/mocktest/getfeaturesbatch/input.csv new file mode 100644 index 00000000..05accf1d --- /dev/null +++ b/target/test-classes/mocktest/getfeaturesbatch/input.csv @@ -0,0 +1,7 @@ +user_656020174537,61.06,fraud_Cummerata-Jones +user_394495759023,,106.43,fraud_Marks Inc +user_656020174537,24.95,fraud_Grimes LLC +user_499975010057,2.12,fraud_Thiel Ltd +user_656020174537,68.31,fraud_Bins-Rice +user_912293302206,167.88,fraud_Lockman, West and Runte +user_568801468984,55.55,fraud_Kihn Inc diff --git a/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json b/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json new file mode 100644 index 00000000..e2476359 --- /dev/null +++ b/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json @@ -0,0 +1,128 @@ +{ + "featureServiceType": "DEFAULT", + "inputJoinKeys": [ + { + "name": "user_id", + "dataType": { + "type": "string" + }, + "type": "string" + }, + { + "name": "merchant", + "dataType": { + "type": "string" + }, + "type": "string" + } + ], + "inputRequestContextKeys": [ + { + "name": "amt", + "dataType": { + "type": "float64" + }, + "type": "float64" + } + ], + "featureValues": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + }, + "type": "boolean" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "dataType": { + "type": "int64" + }, + "type": "int64" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "dataType": { + "type": "int64" + }, + "type": "int64" + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "dataType": { + "type": "int64" + }, + "type": "int64" + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "dataType": { + "type": "int64" + }, + "type": "int64" + } + ] +} diff --git a/target/test-classes/request/input.csv b/target/test-classes/request/input.csv new file mode 100644 index 00000000..953503a0 --- /dev/null +++ b/target/test-classes/request/input.csv @@ -0,0 +1,5 @@ +user_656020174537,61.06,fraud_Cummerata-Jones +user_394495759023,,106.43,fraud_Marks Inc +user_656020174537,24.95,fraud_Grimes LLC +user_499975010057,2.12,fraud_Thiel Ltd +user_656020174537,68.31,fraud_Bins-Rice diff --git a/target/test-classes/response/batch/batch1.json b/target/test-classes/response/batch/batch1.json new file mode 100644 index 00000000..d17cf420 --- /dev/null +++ b/target/test-classes/response/batch/batch1.json @@ -0,0 +1,218 @@ +{ + "result": [ + { + "features": [ + false, + 0.01818181818181818, + 0.0015965939329430547, + 0.0016059957173447537, + "672", + 63.27903409090909, + 96.72319999999999, + 62.30119104335397, + 44548.44, + 2418.08, + 130770.19999999998, + "682", + "20522", + "61328" + ] + }, + { + "features": [ + true, + 0, + 0.01410105757931845, + 0.01611963488055933, + "668", + 54.19960377358488, + 48.155, + 58.52166878980895, + 28725.789999999986, + 866.79, + 91879.02000000005, + "512", + "15355", + "45987" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "693", + 68.6643213499633, + 42.13561403508772, + 63.56664792176038, + 93589.46999999997, + 2401.73, + 259987.58999999994, + "1300", + "40626", + "121947" + ] + }, + { + "features": [ + false, + 0, + 0.0030410542321338066, + 0.0036076275554028517, + "693", + 51.22098890942699, + 33.63320754716981, + 56.38687715991207, + 55421.11000000001, + 1782.56, + 179479.4300000001, + "1030", + "30385", + "91675" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "693", + 71.65225285171101, + 43.10842105263158, + 68.77729103404191, + 150756.33999999997, + 3276.24, + 430339.5100000002, + "2028", + "60634", + "182805" + ] + }, + { + "features": [ + false, + 0, + 0, + 0, + "693", + 67.6827083333333, + 53.572978723404255, + 68.38951367781152, + 87716.78999999995, + 2517.93, + 270001.7999999999, + "1245", + "38824", + "116290" + ] + }, + { + "features": [ + false, + 0, + 0.007851934941110488, + 0.0066630650099045565, + "676", + 82.75716713881016, + 60.33, + 89.99427063339739, + 29213.279999999988, + 844.62, + 93774.03000000009, + "339", + "10279", + "30528" + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "dataType": { + "type": "int64" + } + } + ] + } +} diff --git a/target/test-classes/response/batch/batch2.json b/target/test-classes/response/batch/batch2.json new file mode 100644 index 00000000..3b81ac31 --- /dev/null +++ b/target/test-classes/response/batch/batch2.json @@ -0,0 +1,232 @@ +{ + "result": [ + { + "features": [ + true, + 0, + 0.0019035532994923859, + 0.002349925229651784, + "693", + 63.06654874213837, + 54.28183333333333, + 67.0454102885822, + 80220.65000000001, + 3256.91, + 267175.9600000001, + "1265", + "38530", + "116242" + ] + }, + { + "features": [ + false, + 0, + 0.0005305039787798408, + 0.0012524601896582574, + "671", + 59.77188512518406, + 64.78370370370372, + 60.253060532687684, + 40585.10999999998, + 1749.1600000000003, + 124422.57000000007, + "670", + "20484", + "61290" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "692", + 72.51429347826088, + 51.6095061728395, + 73.02609901628766, + 146768.93000000002, + 4180.37, + 452834.8399999998, + "2033", + "60320", + "182766" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "669", + 74.66231800766285, + 101.82631578947367, + 67.45591731266147, + 38973.73, + 1934.6999999999998, + 104421.75999999995, + "513", + "15057", + "45731" + ] + }, + { + "features": [ + true, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-05T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-05T01:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-04T00:00:00Z", + "dataType": { + "type": "int64" + } + } + ], + "sloInfo": [ + { + "sloEligible": true, + "sloServerTimeSeconds": 0.039829918, + "dynamodbResponseSizeBytes": 32674, + "serverTimeSeconds": 0.040837926 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.048182135, + "dynamodbResponseSizeBytes": 32223, + "serverTimeSeconds": 0.049590672 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.048292505, + "dynamodbResponseSizeBytes": 32944, + "serverTimeSeconds": 0.049936982 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.0378072, + "dynamodbResponseSizeBytes": 31830, + "serverTimeSeconds": 0.040003171 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.037692127, + "dynamodbResponseSizeBytes": 0, + "serverTimeSeconds": 0.03990191 + } + ], + "batchSloInfo": { + "sloEligible": true, + "sloServerTimeSeconds": 0.048292505, + "serverTimeSeconds": 0.099455727 + } + } +} diff --git a/target/test-classes/response/batch/batch3.json b/target/test-classes/response/batch/batch3.json new file mode 100644 index 00000000..37282f8d --- /dev/null +++ b/target/test-classes/response/batch/batch3.json @@ -0,0 +1,289 @@ +{ + "result": [ + { + "features": [ + false, + 0.01818181818181818, + 0.0015965939329430547, + 0.0016059957173447537, + "672", + 63.27903409090909, + 96.72319999999999, + 62.30119104335397, + 44548.44, + 2418.08, + 130770.19999999998, + "682", + "20522", + "61328" + ] + }, + { + "features": [ + true, + 0, + 0.01410105757931845, + 0.01611963488055933, + "668", + 54.19960377358488, + 48.155, + 58.52166878980895, + 28725.789999999986, + 866.79, + 91879.02000000005, + "512", + "15355", + "45987" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "697", + 68.6643213499633, + 42.13561403508772, + 63.56664792176038, + 93589.46999999997, + 2401.73, + 259987.58999999994, + "1300", + "40626", + "121947" + ] + }, + { + "features": [ + false, + 0, + 0.0030410542321338066, + 0.0036076275554028517, + "690", + 51.22098890942699, + 33.63320754716981, + 56.38687715991207, + 55421.11000000001, + 1782.56, + 179479.4300000001, + "1030", + "30385", + "91675" + ] + }, + { + "features": [ + true, + 0, + 0, + 0, + "688", + 71.65225285171101, + 43.10842105263158, + 68.77729103404191, + 150756.33999999997, + 3276.24, + 430339.5100000002, + "2028", + "60634", + "182805" + ] + }, + { + "features": [ + false, + 0, + 0, + 0, + "685", + 67.6827083333333, + 53.572978723404255, + 68.38951367781152, + 87716.78999999995, + 2517.93, + 270001.7999999999, + "1245", + "38824", + "116290" + ] + }, + { + "features": [ + false, + 0, + 0.007851934941110488, + 0.0066630650099045565, + "676", + 82.75716713881016, + 60.33, + 89.99427063339739, + 29213.279999999988, + 844.62, + 93774.03000000009, + "339", + "10279", + "30528" + ] + } + ], + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "effectiveTime": "2022-08-11T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "effectiveTime": "2022-08-11T00:10:00Z", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "effectiveTime": "2022-08-10T00:00:00Z", + "dataType": { + "type": "int64" + } + } + ], + "sloInfo": [ + { + "sloEligible": true, + "sloServerTimeSeconds": 0.055513756, + "dynamodbResponseSizeBytes": 32224, + "serverTimeSeconds": 0.056368353 + }, + { + "sloEligible": false, + "sloServerTimeSeconds": 0.040463867, + "dynamodbResponseSizeBytes": 32286, + "serverTimeSeconds": 0.042321568, + "sloIneligibilityReasons": [ + "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" + ] + }, + { + "sloEligible": false, + "sloServerTimeSeconds": 0.050458802, + "dynamodbResponseSizeBytes": 33121, + "serverTimeSeconds": 0.051495564, + "sloIneligibilityReasons": [ + "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" + ] + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.045276051, + "dynamodbResponseSizeBytes": 33785, + "serverTimeSeconds": 0.046910974 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.045263464, + "dynamodbResponseSizeBytes": 32944, + "serverTimeSeconds": 0.047331692 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.053445315, + "dynamodbResponseSizeBytes": 32944, + "serverTimeSeconds": 0.054399951 + }, + { + "sloEligible": true, + "sloServerTimeSeconds": 0.048510255, + "dynamodbResponseSizeBytes": 31379, + "serverTimeSeconds": 0.049608717 + } + ], + "batchSloInfo": { + "sloEligible": false, + "sloServerTimeSeconds": 0.077513756, + "serverTimeSeconds": 0.057755123, + "sloIneligibilityReasons": [ + "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" + ] + } + } +} diff --git a/target/test-classes/response/sample_metadata_response.json b/target/test-classes/response/sample_metadata_response.json new file mode 100644 index 00000000..8d781ef6 --- /dev/null +++ b/target/test-classes/response/sample_metadata_response.json @@ -0,0 +1,36 @@ +{ + "featureServiceType": "DEFAULT", + "inputJoinKeys": [ + { + "name": "longitude", + "dataType": { + "type": "float64" + }, + "type": "float64" + }, + { + "name": "latitude", + "dataType": { + "type": "float64" + }, + "type": "float64" + } + ], + "featureValues": [ + { + "name": "average_rain.average_temperate_6hrs", + "dataType": { + "type": "array", + "elementType": { + "type": "float64" + } + } + }, + { + "name": "average_rain.precipitation_higher_than_average", + "dataType": { + "type": "boolean" + } + } + ] +} diff --git a/target/test-classes/response/single/sample_null_response.json b/target/test-classes/response/single/sample_null_response.json new file mode 100644 index 00000000..21427135 --- /dev/null +++ b/target/test-classes/response/single/sample_null_response.json @@ -0,0 +1,108 @@ +{ + "result": { + "features": [ + true, + null, + null, + null, + "669", + 63.37258064516126, + 88.90555555555554, + 61.13868593955321, + 31432.799999999985, + 1600.2999999999997, + 93053.07999999999, + null, + "14826", + "45506" + ] + }, + "metadata": { + "features": [ + { + "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_1h_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_mean_3d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_1h_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_amount_metrics.amt_sum_3d_10m", + "dataType": { + "type": "float64" + } + }, + { + "name": "user_transaction_counts.transaction_count_1d_1d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_30d_1d", + "dataType": { + "type": "int64" + } + }, + { + "name": "user_transaction_counts.transaction_count_90d_1d", + "dataType": { + "type": "int64" + } + } + ] + } +} diff --git a/target/test-classes/response/single/sample_response.json b/target/test-classes/response/single/sample_response.json new file mode 100644 index 00000000..7dcfea7c --- /dev/null +++ b/target/test-classes/response/single/sample_response.json @@ -0,0 +1,45 @@ +{ + "result": { + "features": [ + "0", + false, + null, + "nimbostratus", + 55.5 + ] + }, + "metadata": { + "features": [ + { + "name":"average_rain.rain_in_last_24_hrs", + "dataType": { + "type": "int64" + } + }, + { + "name":"average_rain.precipitation_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name":"average_rain.atmospheric_pressure", + "dataType": { + "type": "float64" + } + }, + { + "name":"average_rain.cloud_type", + "dataType": { + "type": "string" + } + }, + { + "name":"average_rain.average_temperate_24hrs", + "dataType": { + "type": "float64" + } + } + ] + } +} diff --git a/target/test-classes/response/single/sample_response_list.json b/target/test-classes/response/single/sample_response_list.json new file mode 100644 index 00000000..b7490af2 --- /dev/null +++ b/target/test-classes/response/single/sample_response_list.json @@ -0,0 +1,40 @@ +{ + "result": { + "features": [ + ["0"], + [null], + [55.5, 57.88, 58.96, 57.66, null, 55.98] + ] + }, + "metadata": { + "features": [ + { + "name":"average_rain.rain_in_last_24_hrs", + "dataType": { + "type": "array", + "elementType": { + "type": "int64" + } + } + }, + { + "name":"average_rain.cloud_type", + "dataType": { + "type": "array", + "elementType": { + "type": "string" + } + } + }, + { + "name":"average_rain.average_temperate_6hrs", + "dataType": { + "type": "array", + "elementType": { + "type": "float64" + } + } + } + ] + } +} diff --git a/target/test-classes/response/single/sample_response_slo.json b/target/test-classes/response/single/sample_response_slo.json new file mode 100644 index 00000000..1d1c3f05 --- /dev/null +++ b/target/test-classes/response/single/sample_response_slo.json @@ -0,0 +1,53 @@ +{ + "result": { + "features": [ + "0", + false, + null, + "nimbostratus", + 55.5 + ] + }, + "metadata": { + "features": [ + { + "name":"average_rain.rain_in_last_24_hrs", + "dataType": { + "type": "int64" + } + }, + { + "name":"average_rain.precipitation_higher_than_average", + "dataType": { + "type": "boolean" + } + }, + { + "name":"average_rain.atmospheric_pressure", + "dataType": { + "type": "float64" + } + }, + { + "name":"average_rain.cloud_type", + "dataType": { + "type": "string" + } + }, + { + "name":"average_rain.average_temperate_24hrs", + "dataType": { + "type": "float64" + } + } + ], + "sloInfo": { + "storeResponseSizeBytes": 13100000, + "serverTimeSeconds": 0.034437937, + "sloEligible": false, + "sloIneligibilityReasons": [ + "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" + ] + } + } +} diff --git a/target/test-classes/response/single/sample_response_with_null_list.json b/target/test-classes/response/single/sample_response_with_null_list.json new file mode 100644 index 00000000..d9611251 --- /dev/null +++ b/target/test-classes/response/single/sample_response_with_null_list.json @@ -0,0 +1,47 @@ +{ + "result": { + "features": [ + null, null, null, null + ] + }, + "metadata": { + "features": [ + { + "name":"average_rain.cloud_type", + "dataType": { + "type": "array", + "elementType": { + "type": "string" + } + } + }, + { + "name":"average_rain.cloud_number", + "dataType": { + "type": "array", + "elementType": { + "type": "int64" + } + } + }, + { + "name":"average_rain.precipitation", + "dataType": { + "type": "array", + "elementType": { + "type": "float32" + } + } + }, + { + "name":"average_rain.rainfall", + "dataType": { + "type": "array", + "elementType": { + "type": "float64" + } + } + } + ] + } +} From 41d816bb3e70f380719188449633dc7d13d94b41 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 09/19] RequestOptions From 571bd8d2f94b04688249ca45bf6b38efdd1fc209 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 10/19] RequestOptions --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 632f1c25..0a06b369 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ bin/ .gradle/ gradle/ build/ +target/ From e9e529524bbf9459ee52b74988d8f2cf7f4a52d5 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Wed, 23 Jul 2025 21:04:40 -0400 Subject: [PATCH 11/19] remove target folder --- .../tecton/client/TectonClient.Builder.html | 421 - .../ai/tecton/client/TectonClient.html | 554 - .../client/TectonClientOptions.Builder.html | 440 - .../ai/tecton/client/TectonClientOptions.html | 470 - .../class-use/TectonClient.Builder.html | 217 - .../tecton/client/class-use/TectonClient.html | 196 - .../TectonClientOptions.Builder.html | 224 - .../client/class-use/TectonClientOptions.html | 258 - .../exceptions/BadRequestException.html | 322 - .../client/exceptions/ForbiddenException.html | 323 - .../exceptions/GatewayTimeoutException.html | 323 - .../HttpStatusExceptionFactory.html | 311 - .../InternalServerErrorException.html | 322 - .../InvalidRequestParameterException.html | 320 - .../ResourceExhaustedException.html | 322 - .../exceptions/ResourceNotFoundException.html | 323 - .../ServiceUnavailableException.html | 323 - .../exceptions/TectonClientException.html | 361 - .../client/exceptions/TectonErrorMessage.html | 695 - .../client/exceptions/TectonException.html | 393 - .../exceptions/TectonServiceException.html | 361 - .../exceptions/UnauthorizedException.html | 322 - .../class-use/BadRequestException.html | 150 - .../class-use/ForbiddenException.html | 150 - .../class-use/GatewayTimeoutException.html | 150 - .../class-use/HttpStatusExceptionFactory.html | 150 - .../InternalServerErrorException.html | 150 - .../InvalidRequestParameterException.html | 245 - .../class-use/ResourceExhaustedException.html | 150 - .../class-use/ResourceNotFoundException.html | 150 - .../ServiceUnavailableException.html | 150 - .../class-use/TectonClientException.html | 479 - .../class-use/TectonErrorMessage.html | 150 - .../exceptions/class-use/TectonException.html | 286 - .../class-use/TectonServiceException.html | 255 - .../class-use/UnauthorizedException.html | 150 - .../client/exceptions/package-summary.html | 266 - .../client/exceptions/package-tree.html | 199 - .../tecton/client/exceptions/package-use.html | 344 - .../client/model/FeatureServiceMetadata.html | 468 - .../ai/tecton/client/model/FeatureStatus.html | 468 - .../ai/tecton/client/model/FeatureValue.html | 709 - .../tecton/client/model/MetadataOption.html | 515 - .../ai/tecton/client/model/NameAndType.html | 436 - .../client/model/SloInformation.Builder.html | 396 - ...SloInformation.SloIneligibilityReason.html | 411 - .../tecton/client/model/SloInformation.html | 508 - .../ai/tecton/client/model/ValueType.html | 474 - .../class-use/FeatureServiceMetadata.html | 198 - .../client/model/class-use/FeatureStatus.html | 231 - .../client/model/class-use/FeatureValue.html | 205 - .../model/class-use/MetadataOption.html | 347 - .../client/model/class-use/NameAndType.html | 252 - .../class-use/SloInformation.Builder.html | 222 - ...SloInformation.SloIneligibilityReason.html | 257 - .../model/class-use/SloInformation.html | 236 - .../client/model/class-use/ValueType.html | 307 - .../tecton/client/model/package-summary.html | 238 - .../ai/tecton/client/model/package-tree.html | 186 - .../ai/tecton/client/model/package-use.html | 292 - .../ai/tecton/client/package-summary.html | 190 - .../ai/tecton/client/package-tree.html | 168 - .../apidocs/ai/tecton/client/package-use.html | 232 - ...ractGetFeaturesRequest.SerializeNulls.html | 244 - .../request/AbstractGetFeaturesRequest.html | 330 - .../client/request/AbstractTectonRequest.html | 439 - ...FeatureServiceMetadataRequest.Builder.html | 371 - .../GetFeatureServiceMetadataRequest.html | 393 - .../GetFeaturesBatchRequest.Builder.html | 532 - .../request/GetFeaturesBatchRequest.html | 691 - .../request/GetFeaturesRequest.Builder.html | 449 - .../client/request/GetFeaturesRequest.html | 503 - .../GetFeaturesRequestData.Builder.html | 380 - .../request/GetFeaturesRequestData.html | 635 - .../client/request/RequestConstants.html | 412 - .../request/RequestOptions.Builder.html | 351 - .../tecton/client/request/RequestOptions.html | 524 - ...ractGetFeaturesRequest.SerializeNulls.html | 150 - .../class-use/AbstractGetFeaturesRequest.html | 216 - .../class-use/AbstractTectonRequest.html | 216 - ...FeatureServiceMetadataRequest.Builder.html | 205 - .../GetFeatureServiceMetadataRequest.html | 226 - .../GetFeaturesBatchRequest.Builder.html | 245 - .../class-use/GetFeaturesBatchRequest.html | 228 - .../class-use/GetFeaturesRequest.Builder.html | 226 - .../request/class-use/GetFeaturesRequest.html | 226 - .../GetFeaturesRequestData.Builder.html | 205 - .../class-use/GetFeaturesRequestData.html | 390 - .../request/class-use/RequestConstants.html | 150 - .../class-use/RequestOptions.Builder.html | 199 - .../request/class-use/RequestOptions.html | 263 - .../client/request/package-summary.html | 271 - .../tecton/client/request/package-tree.html | 189 - .../ai/tecton/client/request/package-use.html | 303 - .../GetFeatureServiceMetadataResponse.html | 338 - .../response/GetFeaturesBatchResponse.html | 419 - .../client/response/GetFeaturesResponse.html | 426 - .../GetFeatureServiceMetadataResponse.html | 196 - .../class-use/GetFeaturesBatchResponse.html | 197 - .../class-use/GetFeaturesResponse.html | 227 - .../client/response/package-summary.html | 189 - .../tecton/client/response/package-tree.html | 167 - .../tecton/client/response/package-use.html | 227 - .../tecton/client/transport/HttpResponse.html | 338 - .../TectonHttpClient.HttpMethod.html | 410 - .../client/transport/TectonHttpClient.html | 423 - .../transport/class-use/HttpResponse.html | 244 - .../TectonHttpClient.HttpMethod.html | 285 - .../transport/class-use/TectonHttpClient.html | 150 - .../client/transport/package-summary.html | 196 - .../tecton/client/transport/package-tree.html | 180 - .../tecton/client/transport/package-use.html | 237 - .../ai/tecton/client/version/Version.html | 316 - .../client/version/class-use/Version.html | 150 - .../client/version/package-summary.html | 168 - .../tecton/client/version/package-tree.html | 165 - .../ai/tecton/client/version/package-use.html | 150 - target/apidocs/allclasses-index.html | 464 - target/apidocs/allclasses.html | 78 - target/apidocs/allpackages-index.html | 203 - target/apidocs/constant-values.html | 379 - target/apidocs/deprecated-list.html | 150 - target/apidocs/element-list | 7 - target/apidocs/help-doc.html | 282 - target/apidocs/index-all.html | 1468 -- target/apidocs/index.html | 199 - target/apidocs/jquery-ui.overrides.css | 35 - .../apidocs/jquery/external/jquery/jquery.js | 10872 --------------- target/apidocs/jquery/jquery-3.6.1.min.js | 2 - target/apidocs/jquery/jquery-ui.min.css | 6 - target/apidocs/jquery/jquery-ui.min.js | 6 - .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 - .../jszip-utils/dist/jszip-utils-ie.min.js | 10 - .../jquery/jszip-utils/dist/jszip-utils.js | 118 - .../jszip-utils/dist/jszip-utils.min.js | 10 - target/apidocs/jquery/jszip/dist/jszip.js | 11370 ---------------- target/apidocs/jquery/jszip/dist/jszip.min.js | 13 - target/apidocs/legal/ADDITIONAL_LICENSE_INFO | 37 - target/apidocs/legal/ASSEMBLY_EXCEPTION | 27 - target/apidocs/legal/LICENSE | 347 - target/apidocs/legal/jquery.md | 72 - target/apidocs/legal/jqueryUI.md | 49 - target/apidocs/legal/jszip.md | 653 - target/apidocs/legal/pako.md | 43 - target/apidocs/member-search-index.js | 1 - target/apidocs/member-search-index.zip | Bin 3428 -> 0 bytes target/apidocs/overview-summary.html | 23 - target/apidocs/overview-tree.html | 263 - target/apidocs/package-search-index.js | 1 - target/apidocs/package-search-index.zip | Bin 282 -> 0 bytes target/apidocs/resources/glass.png | Bin 499 -> 0 bytes target/apidocs/resources/x.png | Bin 394 -> 0 bytes target/apidocs/script.js | 149 - target/apidocs/search.js | 326 - target/apidocs/serialized-form.html | 231 - target/apidocs/stylesheet.css | 910 -- target/apidocs/type-search-index.js | 1 - target/apidocs/type-search-index.zip | Bin 672 -> 0 bytes .../tecton/client/TectonClient$Builder.class | Bin 1542 -> 0 bytes .../ai/tecton/client/TectonClient.class | Bin 5811 -> 0 bytes .../client/TectonClientOptions$Builder.class | Bin 1492 -> 0 bytes .../tecton/client/TectonClientOptions.class | Bin 1958 -> 0 bytes .../exceptions/BadRequestException.class | Bin 662 -> 0 bytes .../exceptions/ForbiddenException.class | Bin 466 -> 0 bytes .../exceptions/GatewayTimeoutException.class | Bin 482 -> 0 bytes .../HttpStatusExceptionFactory.class | Bin 1560 -> 0 bytes .../InternalServerErrorException.class | Bin 497 -> 0 bytes .../InvalidRequestParameterException.class | Bin 479 -> 0 bytes .../ResourceExhaustedException.class | Bin 490 -> 0 bytes .../ResourceNotFoundException.class | Bin 678 -> 0 bytes .../ServiceUnavailableException.class | Bin 494 -> 0 bytes .../exceptions/TectonClientException.class | Bin 872 -> 0 bytes .../exceptions/TectonErrorMessage.class | Bin 2484 -> 0 bytes .../client/exceptions/TectonException.class | Bin 1177 -> 0 bytes .../exceptions/TectonServiceException.class | Bin 875 -> 0 bytes .../exceptions/UnauthorizedException.class | Bin 669 -> 0 bytes .../client/exceptions/package-info.class | Bin 133 -> 0 bytes .../client/model/FeatureServiceMetadata.class | Bin 3349 -> 0 bytes .../tecton/client/model/FeatureStatus.class | Bin 2899 -> 0 bytes .../tecton/client/model/FeatureValue$1.class | Bin 918 -> 0 bytes .../client/model/FeatureValue$Value.class | Bin 3975 -> 0 bytes .../ai/tecton/client/model/FeatureValue.class | Bin 7525 -> 0 bytes .../tecton/client/model/ListDataType$1.class | Bin 823 -> 0 bytes .../ai/tecton/client/model/ListDataType.class | Bin 4135 -> 0 bytes .../tecton/client/model/MetadataOption.class | Bin 2013 -> 0 bytes .../ai/tecton/client/model/NameAndType.class | Bin 1776 -> 0 bytes .../client/model/SloInformation$Builder.class | Bin 2200 -> 0 bytes ...loInformation$SloIneligibilityReason.class | Bin 1471 -> 0 bytes .../tecton/client/model/SloInformation.class | Bin 3021 -> 0 bytes .../ai/tecton/client/model/ValueType.class | Bin 2885 -> 0 bytes .../ai/tecton/client/model/package-info.class | Bin 128 -> 0 bytes ...tGetFeaturesRequest$SerializeNulls$1.class | Bin 1795 -> 0 bytes ...actGetFeaturesRequest$SerializeNulls.class | Bin 873 -> 0 bytes .../request/AbstractGetFeaturesRequest.class | Bin 3701 -> 0 bytes .../request/AbstractTectonRequest.class | Bin 2650 -> 0 bytes ...eatureServiceMetadataRequest$Builder.class | Bin 1025 -> 0 bytes ...uest$GetFeatureServiceMetadataFields.class | Bin 640 -> 0 bytes ...equest$GetFeatureServiceMetadataJson.class | Bin 935 -> 0 bytes .../GetFeatureServiceMetadataRequest.class | Bin 3201 -> 0 bytes .../GetFeaturesBatchRequest$Builder.class | Bin 3284 -> 0 bytes ...oBatchRequest$GetFeaturesBatchFields.class | Bin 1263 -> 0 bytes ...hRequest$GetFeaturesRequestBatchJson.class | Bin 1097 -> 0 bytes ...esMicroBatchRequest$RequestDataField.class | Bin 1138 -> 0 bytes ...Request$GetFeaturesMicroBatchRequest.class | Bin 7221 -> 0 bytes .../request/GetFeaturesBatchRequest.class | Bin 10134 -> 0 bytes .../request/GetFeaturesRequest$Builder.class | Bin 2613 -> 0 bytes ...GetFeaturesRequest$GetFeaturesFields.class | Bin 1156 -> 0 bytes ...aturesRequest$GetFeaturesRequestJson.class | Bin 760 -> 0 bytes .../client/request/GetFeaturesRequest.class | Bin 7248 -> 0 bytes .../GetFeaturesRequestData$Builder.class | Bin 1548 -> 0 bytes .../request/GetFeaturesRequestData.class | Bin 5094 -> 0 bytes .../client/request/RequestConstants.class | Bin 1484 -> 0 bytes .../request/RequestOptions$Builder.class | Bin 988 -> 0 bytes .../client/request/RequestOptions.class | Bin 2870 -> 0 bytes .../tecton/client/request/package-info.class | Bin 130 -> 0 bytes ...tractTectonResponse$ResponseDataType.class | Bin 1105 -> 0 bytes .../response/AbstractTectonResponse.class | Bin 733 -> 0 bytes ...sponse$GetFeatureServiceMetadataJson.class | Bin 1373 -> 0 bytes ...viceMetadataResponse$NameAndTypeJson.class | Bin 829 -> 0 bytes .../GetFeatureServiceMetadataResponse.class | Bin 5305 -> 0 bytes ...tchResponseJson$ResponseMetadataJson.class | Bin 1351 -> 0 bytes ...esponse$GetFeaturesBatchResponseJson.class | Bin 1337 -> 0 bytes ...sponse$GetFeaturesMicroBatchResponse.class | Bin 5377 -> 0 bytes .../response/GetFeaturesBatchResponse.class | Bin 11987 -> 0 bytes ...FeaturesResponseJson$FeatureMetadata.class | Bin 1102 -> 0 bytes ...eaturesResponseJson$ResponseMetadata.class | Bin 969 -> 0 bytes ...ponse$GetFeaturesResponseJson$Result.class | Bin 693 -> 0 bytes ...uresResponse$GetFeaturesResponseJson.class | Bin 1033 -> 0 bytes .../client/response/GetFeaturesResponse.class | Bin 8216 -> 0 bytes ...eaturesResponseUtils$FeatureMetadata.class | Bin 1031 -> 0 bytes ...turesResponseUtils$FeatureVectorJson.class | Bin 589 -> 0 bytes .../response/GetFeaturesResponseUtils.class | Bin 4054 -> 0 bytes .../tecton/client/response/package-info.class | Bin 131 -> 0 bytes .../tecton/client/transport/HttpRequest.class | Bin 1862 -> 0 bytes .../HttpResponse$ErrorResponseJson.class | Bin 521 -> 0 bytes .../client/transport/HttpResponse.class | Bin 4279 -> 0 bytes .../client/transport/TectonHttpClient$1.class | Bin 1161 -> 0 bytes .../client/transport/TectonHttpClient$2.class | Bin 2985 -> 0 bytes .../client/transport/TectonHttpClient$3.class | Bin 808 -> 0 bytes .../TectonHttpClient$HttpHeader.class | Bin 1659 -> 0 bytes .../TectonHttpClient$HttpMethod.class | Bin 1341 -> 0 bytes .../TectonHttpClient$MediaType.class | Bin 1499 -> 0 bytes ...TectonHttpClient$ParallelCallHandler.class | Bin 1413 -> 0 bytes .../client/transport/TectonHttpClient.class | Bin 12350 -> 0 bytes .../client/transport/package-info.class | Bin 132 -> 0 bytes .../ai/tecton/client/version/Version.class | Bin 379 -> 0 bytes .../ai/tecton/client/version/Version.java | 7 - target/java-client-0.9.4-SNAPSHOT-javadoc.jar | Bin 646469 -> 0 bytes target/java-client-0.9.4-SNAPSHOT-sources.jar | Bin 53238 -> 0 bytes target/java-client-0.9.4-SNAPSHOT.jar | Bin 103693 -> 0 bytes .../javadoc-options-javadoc-resources.xml | 10 - target/javadoc-bundle-options/package-list | 217 - target/maven-archiver/pom.properties | 3 - target/maven-javadoc-plugin-stale-data.txt | 73 - .../compile/default-compile/createdFiles.lst | 88 - .../compile/default-compile/inputFiles.lst | 46 - .../default-testCompile/createdFiles.lst | 22 - .../default-testCompile/inputFiles.lst | 13 - ...TEST-ai.tecton.client.TectonClientTest.xml | 78 - ...i.tecton.client.model.FeatureValueTest.xml | 77 - ...ient.request.GetFeatureRequestDataTest.xml | 80 - ...t.GetFeatureServiceMetadataRequestTest.xml | 71 - ...nt.request.GetFeaturesBatchRequestTest.xml | 81 - ....client.request.GetFeaturesRequestTest.xml | 79 - ...uest.GetFeaturesRequestWithOptionsTest.xml | 69 - ...cton.client.request.RequestOptionsTest.xml | 74 - ....GetFeatureServiceMetadataResponseTest.xml | 67 - ....response.GetFeaturesBatchResponseTest.xml | 71 - ...lient.response.GetFeaturesResponseTest.xml | 72 - ....client.transport.TectonHttpClientTest.xml | 72 - .../ai.tecton.client.TectonClientTest.txt | 4 - ...i.tecton.client.model.FeatureValueTest.txt | 4 - ...ient.request.GetFeatureRequestDataTest.txt | 4 - ...t.GetFeatureServiceMetadataRequestTest.txt | 4 - ...nt.request.GetFeaturesBatchRequestTest.txt | 4 - ....client.request.GetFeaturesRequestTest.txt | 4 - ...uest.GetFeaturesRequestWithOptionsTest.txt | 4 - ...cton.client.request.RequestOptionsTest.txt | 4 - ....GetFeatureServiceMetadataResponseTest.txt | 4 - ....response.GetFeaturesBatchResponseTest.txt | 4 - ...lient.response.GetFeaturesResponseTest.txt | 4 - ....client.transport.TectonHttpClientTest.txt | 4 - .../ai/tecton/client/TectonClientTest.class | Bin 17852 -> 0 bytes .../client/model/FeatureValueTest$1.class | Bin 824 -> 0 bytes .../client/model/FeatureValueTest$2.class | Bin 828 -> 0 bytes .../client/model/FeatureValueTest$3.class | Bin 760 -> 0 bytes .../client/model/FeatureValueTest.class | Bin 6935 -> 0 bytes .../request/GetFeatureRequestDataTest$1.class | Bin 922 -> 0 bytes .../request/GetFeatureRequestDataTest$2.class | Bin 996 -> 0 bytes .../request/GetFeatureRequestDataTest$3.class | Bin 848 -> 0 bytes .../request/GetFeatureRequestDataTest$4.class | Bin 917 -> 0 bytes .../request/GetFeatureRequestDataTest.class | Bin 7235 -> 0 bytes ...GetFeatureServiceMetadataRequestTest.class | Bin 3552 -> 0 bytes .../request/GetFeaturesBatchRequestTest.class | Bin 14511 -> 0 bytes .../request/GetFeaturesRequestTest.class | Bin 10677 -> 0 bytes .../GetFeaturesRequestWithOptionsTest.class | Bin 4383 -> 0 bytes .../client/request/RequestOptionsTest.class | Bin 3346 -> 0 bytes ...etFeatureServiceMetadataResponseTest.class | Bin 3687 -> 0 bytes .../GetFeaturesBatchResponseTest.class | Bin 10036 -> 0 bytes .../response/GetFeaturesResponseTest$1.class | Bin 954 -> 0 bytes .../response/GetFeaturesResponseTest.class | Bin 6989 -> 0 bytes .../transport/TectonHttpClientTest$1.class | Bin 1380 -> 0 bytes .../transport/TectonHttpClientTest.class | Bin 9306 -> 0 bytes .../ai/tecton/client/utils/TestUtils.class | Bin 5119 -> 0 bytes .../getfeatures/sampleFeatureResponse1.json | 141 - .../getfeatures/sampleFeatureResponse2.json | 141 - .../getfeatures/sampleFeatureResponse3.json | 141 - .../mocktest/getfeaturesbatch/batch1.json | 198 - .../mocktest/getfeaturesbatch/batch2.json | 198 - .../mocktest/getfeaturesbatch/batch3.json | 150 - .../mocktest/getfeaturesbatch/input.csv | 7 - .../metadata/sampleMetadataResponse1.json | 128 - target/test-classes/request/input.csv | 5 - .../test-classes/response/batch/batch1.json | 218 - .../test-classes/response/batch/batch2.json | 232 - .../test-classes/response/batch/batch3.json | 289 - .../response/sample_metadata_response.json | 36 - .../response/single/sample_null_response.json | 108 - .../response/single/sample_response.json | 45 - .../response/single/sample_response_list.json | 40 - .../response/single/sample_response_slo.json | 53 - .../sample_response_with_null_list.json | 47 - 322 files changed, 67737 deletions(-) delete mode 100644 target/apidocs/ai/tecton/client/TectonClient.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/TectonClient.html delete mode 100644 target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/TectonClientOptions.html delete mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClient.html delete mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/BadRequestException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonClientException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/exceptions/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html delete mode 100644 target/apidocs/ai/tecton/client/model/FeatureStatus.html delete mode 100644 target/apidocs/ai/tecton/client/model/FeatureValue.html delete mode 100644 target/apidocs/ai/tecton/client/model/MetadataOption.html delete mode 100644 target/apidocs/ai/tecton/client/model/NameAndType.html delete mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html delete mode 100644 target/apidocs/ai/tecton/client/model/SloInformation.html delete mode 100644 target/apidocs/ai/tecton/client/model/ValueType.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/NameAndType.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/SloInformation.html delete mode 100644 target/apidocs/ai/tecton/client/model/class-use/ValueType.html delete mode 100644 target/apidocs/ai/tecton/client/model/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/model/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/model/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html delete mode 100644 target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html delete mode 100644 target/apidocs/ai/tecton/client/request/RequestConstants.html delete mode 100644 target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/RequestOptions.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html delete mode 100644 target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html delete mode 100644 target/apidocs/ai/tecton/client/request/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/request/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/request/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html delete mode 100644 target/apidocs/ai/tecton/client/response/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/response/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/response/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/transport/HttpResponse.html delete mode 100644 target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html delete mode 100644 target/apidocs/ai/tecton/client/transport/TectonHttpClient.html delete mode 100644 target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html delete mode 100644 target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html delete mode 100644 target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html delete mode 100644 target/apidocs/ai/tecton/client/transport/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/transport/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/transport/package-use.html delete mode 100644 target/apidocs/ai/tecton/client/version/Version.html delete mode 100644 target/apidocs/ai/tecton/client/version/class-use/Version.html delete mode 100644 target/apidocs/ai/tecton/client/version/package-summary.html delete mode 100644 target/apidocs/ai/tecton/client/version/package-tree.html delete mode 100644 target/apidocs/ai/tecton/client/version/package-use.html delete mode 100644 target/apidocs/allclasses-index.html delete mode 100644 target/apidocs/allclasses.html delete mode 100644 target/apidocs/allpackages-index.html delete mode 100644 target/apidocs/constant-values.html delete mode 100644 target/apidocs/deprecated-list.html delete mode 100644 target/apidocs/element-list delete mode 100644 target/apidocs/help-doc.html delete mode 100644 target/apidocs/index-all.html delete mode 100644 target/apidocs/index.html delete mode 100644 target/apidocs/jquery-ui.overrides.css delete mode 100644 target/apidocs/jquery/external/jquery/jquery.js delete mode 100644 target/apidocs/jquery/jquery-3.6.1.min.js delete mode 100644 target/apidocs/jquery/jquery-ui.min.css delete mode 100644 target/apidocs/jquery/jquery-ui.min.js delete mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.js delete mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js delete mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils.js delete mode 100644 target/apidocs/jquery/jszip-utils/dist/jszip-utils.min.js delete mode 100644 target/apidocs/jquery/jszip/dist/jszip.js delete mode 100644 target/apidocs/jquery/jszip/dist/jszip.min.js delete mode 100644 target/apidocs/legal/ADDITIONAL_LICENSE_INFO delete mode 100644 target/apidocs/legal/ASSEMBLY_EXCEPTION delete mode 100644 target/apidocs/legal/LICENSE delete mode 100644 target/apidocs/legal/jquery.md delete mode 100644 target/apidocs/legal/jqueryUI.md delete mode 100644 target/apidocs/legal/jszip.md delete mode 100644 target/apidocs/legal/pako.md delete mode 100644 target/apidocs/member-search-index.js delete mode 100644 target/apidocs/member-search-index.zip delete mode 100644 target/apidocs/overview-summary.html delete mode 100644 target/apidocs/overview-tree.html delete mode 100644 target/apidocs/package-search-index.js delete mode 100644 target/apidocs/package-search-index.zip delete mode 100644 target/apidocs/resources/glass.png delete mode 100644 target/apidocs/resources/x.png delete mode 100644 target/apidocs/script.js delete mode 100644 target/apidocs/search.js delete mode 100644 target/apidocs/serialized-form.html delete mode 100644 target/apidocs/stylesheet.css delete mode 100644 target/apidocs/type-search-index.js delete mode 100644 target/apidocs/type-search-index.zip delete mode 100644 target/classes/ai/tecton/client/TectonClient$Builder.class delete mode 100644 target/classes/ai/tecton/client/TectonClient.class delete mode 100644 target/classes/ai/tecton/client/TectonClientOptions$Builder.class delete mode 100644 target/classes/ai/tecton/client/TectonClientOptions.class delete mode 100644 target/classes/ai/tecton/client/exceptions/BadRequestException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/ForbiddenException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/GatewayTimeoutException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class delete mode 100644 target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/ResourceNotFoundException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/TectonClientException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class delete mode 100644 target/classes/ai/tecton/client/exceptions/TectonException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/TectonServiceException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/UnauthorizedException.class delete mode 100644 target/classes/ai/tecton/client/exceptions/package-info.class delete mode 100644 target/classes/ai/tecton/client/model/FeatureServiceMetadata.class delete mode 100644 target/classes/ai/tecton/client/model/FeatureStatus.class delete mode 100644 target/classes/ai/tecton/client/model/FeatureValue$1.class delete mode 100644 target/classes/ai/tecton/client/model/FeatureValue$Value.class delete mode 100644 target/classes/ai/tecton/client/model/FeatureValue.class delete mode 100644 target/classes/ai/tecton/client/model/ListDataType$1.class delete mode 100644 target/classes/ai/tecton/client/model/ListDataType.class delete mode 100644 target/classes/ai/tecton/client/model/MetadataOption.class delete mode 100644 target/classes/ai/tecton/client/model/NameAndType.class delete mode 100644 target/classes/ai/tecton/client/model/SloInformation$Builder.class delete mode 100644 target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class delete mode 100644 target/classes/ai/tecton/client/model/SloInformation.class delete mode 100644 target/classes/ai/tecton/client/model/ValueType.class delete mode 100644 target/classes/ai/tecton/client/model/package-info.class delete mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class delete mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class delete mode 100644 target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class delete mode 100644 target/classes/ai/tecton/client/request/AbstractTectonRequest.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$Builder.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$RequestDataField.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequest.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class delete mode 100644 target/classes/ai/tecton/client/request/GetFeaturesRequestData.class delete mode 100644 target/classes/ai/tecton/client/request/RequestConstants.class delete mode 100644 target/classes/ai/tecton/client/request/RequestOptions$Builder.class delete mode 100644 target/classes/ai/tecton/client/request/RequestOptions.class delete mode 100644 target/classes/ai/tecton/client/request/package-info.class delete mode 100644 target/classes/ai/tecton/client/response/AbstractTectonResponse$ResponseDataType.class delete mode 100644 target/classes/ai/tecton/client/response/AbstractTectonResponse.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$GetFeatureServiceMetadataJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson$ResponseMetadataJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesBatchResponse.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$FeatureMetadata.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$Result.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponse.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class delete mode 100644 target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class delete mode 100644 target/classes/ai/tecton/client/response/package-info.class delete mode 100644 target/classes/ai/tecton/client/transport/HttpRequest.class delete mode 100644 target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class delete mode 100644 target/classes/ai/tecton/client/transport/HttpResponse.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$1.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$2.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$3.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$MediaType.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class delete mode 100644 target/classes/ai/tecton/client/transport/TectonHttpClient.class delete mode 100644 target/classes/ai/tecton/client/transport/package-info.class delete mode 100644 target/classes/ai/tecton/client/version/Version.class delete mode 100644 target/generated-sources/java-templates/ai/tecton/client/version/Version.java delete mode 100644 target/java-client-0.9.4-SNAPSHOT-javadoc.jar delete mode 100644 target/java-client-0.9.4-SNAPSHOT-sources.jar delete mode 100644 target/java-client-0.9.4-SNAPSHOT.jar delete mode 100644 target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml delete mode 100644 target/javadoc-bundle-options/package-list delete mode 100644 target/maven-archiver/pom.properties delete mode 100644 target/maven-javadoc-plugin-stale-data.txt delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml delete mode 100644 target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml delete mode 100644 target/surefire-reports/ai.tecton.client.TectonClientTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt delete mode 100644 target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt delete mode 100644 target/test-classes/ai/tecton/client/TectonClientTest.class delete mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$1.class delete mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class delete mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest$3.class delete mode 100644 target/test-classes/ai/tecton/client/model/FeatureValueTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.class delete mode 100644 target/test-classes/ai/tecton/client/request/RequestOptionsTest.class delete mode 100644 target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class delete mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesBatchResponseTest.class delete mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class delete mode 100644 target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class delete mode 100644 target/test-classes/ai/tecton/client/transport/TectonHttpClientTest$1.class delete mode 100644 target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class delete mode 100644 target/test-classes/ai/tecton/client/utils/TestUtils.class delete mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json delete mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json delete mode 100644 target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json delete mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch1.json delete mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch2.json delete mode 100644 target/test-classes/mocktest/getfeaturesbatch/batch3.json delete mode 100644 target/test-classes/mocktest/getfeaturesbatch/input.csv delete mode 100644 target/test-classes/mocktest/metadata/sampleMetadataResponse1.json delete mode 100644 target/test-classes/request/input.csv delete mode 100644 target/test-classes/response/batch/batch1.json delete mode 100644 target/test-classes/response/batch/batch2.json delete mode 100644 target/test-classes/response/batch/batch3.json delete mode 100644 target/test-classes/response/sample_metadata_response.json delete mode 100644 target/test-classes/response/single/sample_null_response.json delete mode 100644 target/test-classes/response/single/sample_response.json delete mode 100644 target/test-classes/response/single/sample_response_list.json delete mode 100644 target/test-classes/response/single/sample_response_slo.json delete mode 100644 target/test-classes/response/single/sample_response_with_null_list.json diff --git a/target/apidocs/ai/tecton/client/TectonClient.Builder.html b/target/apidocs/ai/tecton/client/TectonClient.Builder.html deleted file mode 100644 index fb8405c6..00000000 --- a/target/apidocs/ai/tecton/client/TectonClient.Builder.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - -TectonClient.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - -

    JavaScript is disabled on your browser.
    - -
    - -
    - -
    -
    - -

    Class TectonClient.Builder

    -
    -
    - -
    -
      -
    • -
      -
      Enclosing class:
      -
      TectonClient
      -
      -
      -
      public static class TectonClient.Builder
      -extends Object
      -
      A Builder class for creating an instance of TectonClient object with specific - configurations
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Builder

          -
          public Builder()
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          url

          -
          public TectonClient.Builder url​(String url)
          -
          Setter for url
          -
          -
          Parameters:
          -
          url - The Tecton Base Url
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          httpClient

          -
          public TectonClient.Builder httpClient​(okhttp3.OkHttpClient httpClient)
          -
          Setter for httpClient
          -
          -
          Parameters:
          -
          httpClient - An OkHttpClient for making requests and receiving responses from the - Feature Service API. Please refer to OkHttp - Documentation for recommendations on creating and maintaining an OkHttp Client in - your application. Tecton recommends configuring the ConnectionPool - in the OkHttpClient for efficiently managing HTTP connections. If you intend to use the - GetFeaturesBatchRequest to send parallel requests to Tecton, please also - configure the maxRequestsPerHost - in the client's Dispatcher.
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - - -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/TectonClient.html b/target/apidocs/ai/tecton/client/TectonClient.html deleted file mode 100644 index 0a9b3930..00000000 --- a/target/apidocs/ai/tecton/client/TectonClient.html +++ /dev/null @@ -1,554 +0,0 @@ - - - - - -TectonClient (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonClient

    -
    -
    - -
    -
      -
    • -
      -
      public class TectonClient
      -extends Object
      -
      A client for interacting with the Tecton FeatureService API. The client provides several methods - that make HTTP requests to the corresponding API endpoint and returns the response as a Java - object. - -

      Note: Each method throws TectonServiceException when it receives an error response from the - API and a TectonClientException when an error or exception is encountered by the client. The - message included in the exception will provide more information about the error.

      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html b/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html deleted file mode 100644 index 1bac6a25..00000000 --- a/target/apidocs/ai/tecton/client/TectonClientOptions.Builder.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - -TectonClientOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonClientOptions.Builder

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Builder

          -
          public Builder()
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          readTimeout

          -
          public TectonClientOptions.Builder readTimeout​(Duration readTimeout)
          -
          Setter for the readTimeout value for new connections. A value of 0 means no timeout, - otherwise values must be between 1 and Integer.MAX_VALUE when converted to milliseconds
          -
          -
          Parameters:
          -
          readTimeout - readTimeout as a Duration
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - -
          -
        • -

          connectTimeout

          -
          public TectonClientOptions.Builder connectTimeout​(Duration connectTimeout)
          -
          Setter for the connectTimeout value for new connections. A value of 0 means no timeout, - otherwise values must be between 1 and Integer.MAX_VALUE when converted to milliseconds
          -
          -
          Parameters:
          -
          connectTimeout - connectTimeout as a Duration
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - -
          -
        • -

          maxIdleConnections

          -
          public TectonClientOptions.Builder maxIdleConnections​(int maxIdleConnections)
          -
          Setter for the maximum number of idle connections to keep in the pool. If not set, the client - will use a default value of 5
          -
          -
          Parameters:
          -
          maxIdleConnections - int value, must be between 1 and Integer.MAX_VALUE
          -
          Returns:
          -
          this builder
          -
          -
        • -
        - - - -
          -
        • -

          keepAliveDuration

          -
          public TectonClientOptions.Builder keepAliveDuration​(Duration keepAliveDuration)
          -
          Setter for the time to keep an idle connection alive in the pool before closing it
          -
          -
          Parameters:
          -
          keepAliveDuration - as a Duration
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - -
          -
        • -

          maxParallelRequests

          -
          public TectonClientOptions.Builder maxParallelRequests​(int maxParallelRequests)
          -
          Setter for the maximum number of requests to execute concurrently. Above this requests queue - in memory, waiting for the running calls to complete. Default value is 5
          -
          -
          Parameters:
          -
          maxParallelRequests - int value, must be between 1 and Integer.MAX_VALUE
          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - - -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/TectonClientOptions.html b/target/apidocs/ai/tecton/client/TectonClientOptions.html deleted file mode 100644 index d1e721dd..00000000 --- a/target/apidocs/ai/tecton/client/TectonClientOptions.html +++ /dev/null @@ -1,470 +0,0 @@ - - - - - -TectonClientOptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonClientOptions

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TectonClientOptions

          -
          public TectonClientOptions()
          -
          Constructor that instantiates a TectonClientOptions with default configurations - -

          Read Timeout = 5 seconds, Connect Timeout = 5 seconds, Max Idle Connections = 5, Keep Alive - Duration = 5 minutes, Max Parallel Requests = 5

          -
        • -
        - - - -
          -
        • -

          TectonClientOptions

          -
          public TectonClientOptions​(Duration readTimeout,
          -                           Duration connectTimeout,
          -                           int maxIdleConnections,
          -                           Duration keepAliveDuration,
          -                           int maxParallelRequests)
          -
          Constructor that configures the TectonClientOptions with specified configurations
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getConnectTimeout

          -
          public Duration getConnectTimeout()
          -
          Returns the connectTimeout configuration for the client
          -
          -
          Returns:
          -
          connectTimeout represented as a Duration
          -
          -
        • -
        - - - -
          -
        • -

          getKeepAliveDuration

          -
          public Duration getKeepAliveDuration()
          -
          Returns the keepAliveDuration configuration for the client's ConnectionPool
          -
          -
          Returns:
          -
          keepAliveDuration represented as a Duration
          -
          -
        • -
        - - - -
          -
        • -

          getReadTimeout

          -
          public Duration getReadTimeout()
          -
          Returns the readTimeout configuration for the client
          -
          -
          Returns:
          -
          readTimeout represented as a Duration
          -
          -
        • -
        - - - -
          -
        • -

          getMaxIdleConnections

          -
          public int getMaxIdleConnections()
          -
          Returns the maxIdleConnections configuration for the client's ConnectionPool
          -
          -
          Returns:
          -
          maxIdleConnections
          -
          -
        • -
        - - - -
          -
        • -

          getMaxParallelRequests

          -
          public int getMaxParallelRequests()
          -
          Returns the maxParallelRequests configuration for the client
          -
          -
          Returns:
          -
          maxParallelRequests
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html b/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html deleted file mode 100644 index ceffc185..00000000 --- a/target/apidocs/ai/tecton/client/class-use/TectonClient.Builder.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.TectonClient.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.TectonClient.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClient.html b/target/apidocs/ai/tecton/client/class-use/TectonClient.html deleted file mode 100644 index c175ee94..00000000 --- a/target/apidocs/ai/tecton/client/class-use/TectonClient.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.TectonClient (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.TectonClient

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html deleted file mode 100644 index ba503123..00000000 --- a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.Builder.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.TectonClientOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.TectonClientOptions.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html b/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html deleted file mode 100644 index a4437f06..00000000 --- a/target/apidocs/ai/tecton/client/class-use/TectonClientOptions.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.TectonClientOptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.TectonClientOptions

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html b/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html deleted file mode 100644 index 14efa6f2..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/BadRequestException.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - -BadRequestException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class BadRequestException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class BadRequestException
      -extends TectonClientException
      -
      An exception class representing a client error caused by a bad request. This exception is - typically thrown when the client's request is malformed or contains invalid data, resulting in a - "400 Bad Request" HTTP response status. It extends the TectonClientException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          BadRequestException

          -
          public BadRequestException​(String errorMessage,
          -                           int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html b/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html deleted file mode 100644 index 932554c5..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/ForbiddenException.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -ForbiddenException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class ForbiddenException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class ForbiddenException
      -extends TectonClientException
      -
      An exception class representing a client error caused by forbidden access. This exception is - typically thrown when the API Key in the request is authenticated, but the Service Account - associated with the API Key is not authorized to access the workspace, resulting in a "403 - Forbidden" HTTP response status. It extends the TectonClientException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ForbiddenException

          -
          public ForbiddenException​(String errorMessage,
          -                          int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html b/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html deleted file mode 100644 index 52668d6a..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/GatewayTimeoutException.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -GatewayTimeoutException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GatewayTimeoutException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class GatewayTimeoutException
      -extends TectonServiceException
      -
      An exception class representing a client error caused by a gateway timeout. This exception is - typically thrown when a server acting as a gateway or proxy did not receive a timely response - from the Feature Server, resulting in a "504 Gateway Timeout" HTTP response status. It extends - the TectonServiceException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GatewayTimeoutException

          -
          public GatewayTimeoutException​(String errorMessage,
          -                               int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html b/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html deleted file mode 100644 index 363b28d3..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/HttpStatusExceptionFactory.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - -HttpStatusExceptionFactory (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class HttpStatusExceptionFactory

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.exceptions.HttpStatusExceptionFactory
      • -
      -
    • -
    -
    -
      -
    • -
      -
      public class HttpStatusExceptionFactory
      -extends Object
      -
      An exception factory that maps HTTP Status code to a custom Exception
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          HttpStatusExceptionFactory

          -
          public HttpStatusExceptionFactory()
          -
        • -
        -
      • -
      -
      - -
      - -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html b/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html deleted file mode 100644 index f6fb86f7..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/InternalServerErrorException.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - -InternalServerErrorException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class InternalServerErrorException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class InternalServerErrorException
      -extends TectonServiceException
      -
      An exception class representing a server error caused by an internal server failure. This - exception is typically thrown when an unexpected error occurs on the server, resulting in a "500 - Internal Server Error" HTTP response status. It extends the TectonServiceException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InternalServerErrorException

          -
          public InternalServerErrorException​(String errorMessage,
          -                                    int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html b/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html deleted file mode 100644 index 83e007e4..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/InvalidRequestParameterException.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - -InvalidRequestParameterException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class InvalidRequestParameterException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class InvalidRequestParameterException
      -extends TectonClientException
      -
      An exception class representing a client error caused by a misconfigured request, such as missing - workspace name, missing feature service name etc. It extends the TectonClientException - class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          InvalidRequestParameterException

          -
          public InvalidRequestParameterException​(String errorMessage)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html b/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html deleted file mode 100644 index 3db61e4f..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/ResourceExhaustedException.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - -ResourceExhaustedException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class ResourceExhaustedException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class ResourceExhaustedException
      -extends TectonClientException
      -
      An exception class representing a client error caused by resource exhaustion. This exception - indicates that request rate exceeds the concurrent request limit set for your deployment, - resulting in a "429 Too Many Requests" HTTP response status. It extends the TectonClientException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ResourceExhaustedException

          -
          public ResourceExhaustedException​(String errorMessage,
          -                                  int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html b/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html deleted file mode 100644 index c7ff4987..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/ResourceNotFoundException.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -ResourceNotFoundException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class ResourceNotFoundException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class ResourceNotFoundException
      -extends TectonClientException
      -
      An exception class representing a client error caused by a resource not being found. This - exception is typically thrown when the request references a workspace, feature service or other - resources that do not exist in Tecton, resulting in a "404 Not Found" HTTP response status. It - extends the TectonClientException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ResourceNotFoundException

          -
          public ResourceNotFoundException​(String errorMessage,
          -                                 int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html b/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html deleted file mode 100644 index d1da8773..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/ServiceUnavailableException.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - -ServiceUnavailableException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class ServiceUnavailableException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class ServiceUnavailableException
      -extends TectonServiceException
      -
      An exception class representing a server error caused by a temporarily unavailable service. This - exception is typically thrown when the Tecton is temporarily unable to handle the client's - request due to being overloaded or undergoing maintenance, resulting in a "503 Service - Unavailable" HTTP response status. It extends the TectonServiceException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          ServiceUnavailableException

          -
          public ServiceUnavailableException​(String errorMessage,
          -                                   int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html b/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html deleted file mode 100644 index 324b86de..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/TectonClientException.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - -TectonClientException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonClientException

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TectonClientException

          -
          public TectonClientException​(String errorMessage)
          -
        • -
        - - - -
          -
        • -

          TectonClientException

          -
          public TectonClientException​(String errorMessage,
          -                             int statusCode)
          -
        • -
        - - - -
          -
        • -

          TectonClientException

          -
          public TectonClientException​(String message,
          -                             Throwable t)
          -
        • -
        - - - -
          -
        • -

          TectonClientException

          -
          public TectonClientException​(Throwable t)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html b/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html deleted file mode 100644 index 3bbf351d..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/TectonErrorMessage.html +++ /dev/null @@ -1,695 +0,0 @@ - - - - - -TectonErrorMessage (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonErrorMessage

    -
    -
    - -
    -
      -
    • -
      -
      public class TectonErrorMessage
      -extends Object
      -
      Class that declares all the different error messages included in the TectonClientException
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonException.html b/target/apidocs/ai/tecton/client/exceptions/TectonException.html deleted file mode 100644 index 51e6e116..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/TectonException.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - -TectonException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonException

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TectonException

          -
          public TectonException​(String errorMessage)
          -
        • -
        - - - -
          -
        • -

          TectonException

          -
          public TectonException​(String errorMessage,
          -                       int statusCode)
          -
        • -
        - - - -
          -
        • -

          TectonException

          -
          public TectonException​(String message,
          -                       Throwable t)
          -
        • -
        - - - -
          -
        • -

          TectonException

          -
          public TectonException​(Throwable t)
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getStatusCode

          -
          public Optional<Integer> getStatusCode()
          -
          Returns the HTTP Status Code associated with the exception
          -
          -
          Returns:
          -
          HTTP Status Code if present, Optional.empty() otherwise
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html b/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html deleted file mode 100644 index 9b0ff934..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/TectonServiceException.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - -TectonServiceException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonServiceException

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          TectonServiceException

          -
          public TectonServiceException​(String errorMessage)
          -
        • -
        - - - -
          -
        • -

          TectonServiceException

          -
          public TectonServiceException​(String errorMessage,
          -                              int statusCode)
          -
        • -
        - - - -
          -
        • -

          TectonServiceException

          -
          public TectonServiceException​(String message,
          -                              Throwable t)
          -
        • -
        - - - -
          -
        • -

          TectonServiceException

          -
          public TectonServiceException​(Throwable t)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html b/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html deleted file mode 100644 index 08145b63..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/UnauthorizedException.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - -UnauthorizedException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class UnauthorizedException

    -
    -
    - -
    -
      -
    • -
      -
      All Implemented Interfaces:
      -
      Serializable
      -
      -
      -
      public class UnauthorizedException
      -extends TectonClientException
      -
      An exception class representing a client error caused by unauthorized access. This exception is - typically thrown when the API Key in the request is missing or invalid, resulting in a "401 - Unauthorized" HTTP response status. It extends the TectonClientException class.
      -
      -
      See Also:
      -
      Serialized Form
      -
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          UnauthorizedException

          -
          public UnauthorizedException​(String errorMessage,
          -                             int statusCode)
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html deleted file mode 100644 index 593b901e..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/BadRequestException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.BadRequestException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.BadRequestException

    -
    -
    No usage of ai.tecton.client.exceptions.BadRequestException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html deleted file mode 100644 index 0ea86434..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/ForbiddenException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.ForbiddenException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.ForbiddenException

    -
    -
    No usage of ai.tecton.client.exceptions.ForbiddenException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html deleted file mode 100644 index 069d2286..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/GatewayTimeoutException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.GatewayTimeoutException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.GatewayTimeoutException

    -
    -
    No usage of ai.tecton.client.exceptions.GatewayTimeoutException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html b/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html deleted file mode 100644 index 09112db1..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/HttpStatusExceptionFactory.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.HttpStatusExceptionFactory (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.HttpStatusExceptionFactory

    -
    -
    No usage of ai.tecton.client.exceptions.HttpStatusExceptionFactory
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html deleted file mode 100644 index 86c5eacd..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/InternalServerErrorException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.InternalServerErrorException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.InternalServerErrorException

    -
    -
    No usage of ai.tecton.client.exceptions.InternalServerErrorException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html deleted file mode 100644 index 08ea5c64..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/InvalidRequestParameterException.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.InvalidRequestParameterException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.InvalidRequestParameterException

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html deleted file mode 100644 index fafdb8a2..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceExhaustedException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.ResourceExhaustedException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.ResourceExhaustedException

    -
    -
    No usage of ai.tecton.client.exceptions.ResourceExhaustedException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html deleted file mode 100644 index f83d5b39..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/ResourceNotFoundException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.ResourceNotFoundException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.ResourceNotFoundException

    -
    -
    No usage of ai.tecton.client.exceptions.ResourceNotFoundException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html deleted file mode 100644 index b3171039..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/ServiceUnavailableException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.ServiceUnavailableException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.ServiceUnavailableException

    -
    -
    No usage of ai.tecton.client.exceptions.ServiceUnavailableException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html deleted file mode 100644 index 9c4c0acb..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonClientException.html +++ /dev/null @@ -1,479 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.TectonClientException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.TectonClientException

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html deleted file mode 100644 index 2ca53208..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonErrorMessage.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.TectonErrorMessage (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.TectonErrorMessage

    -
    -
    No usage of ai.tecton.client.exceptions.TectonErrorMessage
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html deleted file mode 100644 index 33fd0441..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonException.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.TectonException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.TectonException

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html deleted file mode 100644 index 3c1d3926..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/TectonServiceException.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.TectonServiceException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.TectonServiceException

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html b/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html deleted file mode 100644 index d807ad6d..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/class-use/UnauthorizedException.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.exceptions.UnauthorizedException (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.exceptions.UnauthorizedException

    -
    -
    No usage of ai.tecton.client.exceptions.UnauthorizedException
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/exceptions/package-summary.html b/target/apidocs/ai/tecton/client/exceptions/package-summary.html deleted file mode 100644 index f1a75f7d..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/package-summary.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - -ai.tecton.client.exceptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.exceptions

    -
    -
    -
    - - -
    This package contains exception classes with error messages for Tecton Client
    -
    -
      -
    • - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      HttpStatusExceptionFactory -
      An exception factory that maps HTTP Status code to a custom Exception
      -
      TectonErrorMessage -
      Class that declares all the different error messages included in the TectonClientException
      -
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Exception Summary 
      ExceptionDescription
      BadRequestException -
      An exception class representing a client error caused by a bad request.
      -
      ForbiddenException -
      An exception class representing a client error caused by forbidden access.
      -
      GatewayTimeoutException -
      An exception class representing a client error caused by a gateway timeout.
      -
      InternalServerErrorException -
      An exception class representing a server error caused by an internal server failure.
      -
      InvalidRequestParameterException -
      An exception class representing a client error caused by a misconfigured request, such as missing - workspace name, missing feature service name etc.
      -
      ResourceExhaustedException -
      An exception class representing a client error caused by resource exhaustion.
      -
      ResourceNotFoundException -
      An exception class representing a client error caused by a resource not being found.
      -
      ServiceUnavailableException -
      An exception class representing a server error caused by a temporarily unavailable service.
      -
      TectonClientException -
      Exception class that is used to represent various client side errors, such as bad request - parameters, unauthorized requests etc.
      -
      TectonException -
      Base class that is used to represent various errors encountered by the Java client.
      -
      TectonServiceException -
      Exception class that is used to represent server side errors.
      -
      UnauthorizedException -
      An exception class representing a client error caused by unauthorized access.
      -
      -
    • -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/package-tree.html b/target/apidocs/ai/tecton/client/exceptions/package-tree.html deleted file mode 100644 index c215c429..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/package-tree.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - -ai.tecton.client.exceptions Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.exceptions

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/exceptions/package-use.html b/target/apidocs/ai/tecton/client/exceptions/package-use.html deleted file mode 100644 index e710b9eb..00000000 --- a/target/apidocs/ai/tecton/client/exceptions/package-use.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.exceptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.exceptions

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html b/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html deleted file mode 100644 index 918bd851..00000000 --- a/target/apidocs/ai/tecton/client/model/FeatureServiceMetadata.html +++ /dev/null @@ -1,468 +0,0 @@ - - - - - -FeatureServiceMetadata (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class FeatureServiceMetadata

    -
    -
    - -
    -
      -
    • -
      -
      public class FeatureServiceMetadata
      -extends Object
      -
      Class that encapsulates metadata for a FeatureService, including the schema for join keys and - request context in GetFeaturesRequestData, as well as the in-order output schema of feature - values in GetFeaturesResponse.
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getInputJoinKeys

          -
          public List<NameAndType> getInputJoinKeys()
          -
          Get the input join keys that are expected to be passed in the joinKeyMap parameter for a GetFeaturesRequest for the feature service
          -
          -
          Returns:
          -
          Returns a List of NameAndType representing the input join - keys
          -
          -
        • -
        - - - -
          -
        • -

          getInputRequestContextKeys

          -
          public List<NameAndType> getInputRequestContextKeys()
          -
          Get the request context keys that are expected to be passed in the requestContextMap parameter - for a GetFeaturesRequest for the feature service
          -
          -
          Returns:
          -
          Returns a List of NameAndType representing the input request - context keys
          -
          -
        • -
        - - - -
          -
        • -

          getFeatureValues

          -
          public List<NameAndType> getFeatureValues()
          -
          Get metadata for feature values to be returned in the GetFeaturesResponse. - -

          The order of returned features will match the order returned by GetFeaturesResponse

          -
          -
          Returns:
          -
          Returns a List of NameAndType representing the feature - metadata
          -
          -
        • -
        - - - -
          -
        • -

          getInputJoinKeysAsMap

          -
          public Map<String,​NameAndType> getInputJoinKeysAsMap()
          -
          Returns the input join keys as a Map with the join key name as the key
          -
        • -
        - - - -
          -
        • -

          getInputRequestContextKeysAsMap

          -
          public Map<String,​NameAndType> getInputRequestContextKeysAsMap()
          -
          Returns the request context keys as a Map with the request context name as - the key
          -
        • -
        - - - -
          -
        • -

          getFeatureValuesAsMap

          -
          public Map<String,​NameAndType> getFeatureValuesAsMap()
          -
          Returns the feature metadata as a Map with the (featureNamespace.featureName) - as the key
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/FeatureStatus.html b/target/apidocs/ai/tecton/client/model/FeatureStatus.html deleted file mode 100644 index 1cbedd26..00000000 --- a/target/apidocs/ai/tecton/client/model/FeatureStatus.html +++ /dev/null @@ -1,468 +0,0 @@ - - - - - -FeatureStatus (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Enum FeatureStatus

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Enum Constant Detail

        - - - -
          -
        • -

          PRESENT

          -
          public static final FeatureStatus PRESENT
          -
          Feature value is present and returned with no errors.
          -
        • -
        - - - -
          -
        • -

          MISSING_DATA

          -
          public static final FeatureStatus MISSING_DATA
          -
          Either the join keys requested are missing in the online store or the feature value is outside - ttl.
          -
        • -
        - - - -
          -
        • -

          CACHED_PRESENT

          -
          public static final FeatureStatus CACHED_PRESENT
          -
          Unable to infer feature status.
          -
        • -
        - - - -
          -
        • -

          CACHED_UNKNOWN

          -
          public static final FeatureStatus CACHED_UNKNOWN
          -
        • -
        - - - -
          -
        • -

          CACHED_MISSING_DATA

          -
          public static final FeatureStatus CACHED_MISSING_DATA
          -
        • -
        - - - - -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static FeatureStatus[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (FeatureStatus c : FeatureStatus.values())
          -    System.out.println(c);
          -
          -
          -
          Returns:
          -
          an array containing the constants of this enum type, in the order they are declared
          -
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static FeatureStatus valueOf​(String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          -
          Parameters:
          -
          name - the name of the enum constant to be returned.
          -
          Returns:
          -
          the enum constant with the specified name
          -
          Throws:
          -
          IllegalArgumentException - if this enum type has no constant with the specified name
          -
          NullPointerException - if the argument is null
          -
          -
        • -
        - - - -
          -
        • -

          fromString

          -
          public static Optional<FeatureStatus> fromString​(String name)
          -
          Returns the Status that matches the String representation passed as a parameter
          -
          -
          Parameters:
          -
          name - The String representation of the Status
          -
          Returns:
          -
          Optional<ValueType> if a match is found, Optional.empty() otherwise
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/model/FeatureValue.html b/target/apidocs/ai/tecton/client/model/FeatureValue.html deleted file mode 100644 index abdc226e..00000000 --- a/target/apidocs/ai/tecton/client/model/FeatureValue.html +++ /dev/null @@ -1,709 +0,0 @@ - - - - - -FeatureValue (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class FeatureValue

    -
    -
    - -
    -
      -
    • -
      -
      public class FeatureValue
      -extends Object
      -
      Class that represents each feature value in the feature vector returned in the - GetFeaturesResponse
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getValueType

          -
          public ValueType getValueType()
          -
          Returns the ValueType representing the Tecton data_type for the feature value. Currently - supported types are ARRAY, STRING, INT64, BOOLEAN and FLOAT64
          -
          -
          Returns:
          -
          ValueType of the feature value
          -
          -
        • -
        - - - -
          -
        • -

          getListElementType

          -
          public Optional<ValueType> getListElementType()
          -
          Returns the individual array element type if the feature valueType is ARRAY.
          -
          -
          Returns:
          -
          ValueType of the feature values in the array wrapped in Optional if the getValueType() is ARRAY, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          getFeatureStatus

          -
          public Optional<FeatureStatus> getFeatureStatus()
          -
          Returns the feature status of the feature value. PRESENT if the feature value is retrieved and - present in the online store or MISSING_DATA if the feature value is missing or outside TTL
          -
          -
          Returns:
          -
          Optional<String> of the feature value statuses Optional.
          -
          -
        • -
        - - - -
          -
        • -

          getFeatureDescription

          -
          public String getFeatureDescription()
          -
          Returns the description of the feature
          -
          -
          Returns:
          -
          String
          -
          -
        • -
        - - - -
          -
        • -

          getFeatureTags

          -
          public Map<String,​String> getFeatureTags()
          -
          Returns the tags of the feature
          -
        • -
        - - - -
          -
        • -

          getEffectiveTime

          -
          public Optional<Instant> getEffectiveTime()
          -
          Returns the effective serving time for this feature. This is the most recent time that's - aligned to the interval for which a full aggregation is available for this feature. Note: Only - present if MetadataOption.EFFECTIVE_TIME is included in the GetFeaturesRequest
          -
          -
          Returns:
          -
          Optional<Instant> representing the effectiveTime if present, Optional.empty() - otherwise
          -
          -
        • -
        - - - -
          -
        • -

          getFeatureName

          -
          public String getFeatureName()
          -
          Returns the feature service name
          -
        • -
        - - - -
          -
        • -

          getFeatureNamespace

          -
          public String getFeatureNamespace()
          -
          Returns the feature service namespace
          -
        • -
        - - - -
          -
        • -

          stringValue

          -
          public String stringValue()
          -                   throws TectonClientException
          -
          A Feature Value of type String
          -
          -
          Returns:
          -
          feature value cast to java.lang.String
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose ValueType is not STRING
          -
          -
        • -
        - - - -
          -
        • -

          int64value

          -
          public Long int64value()
          -                throws TectonClientException
          -
          A Feature Value of type int64 (Long)
          -
          -
          Returns:
          -
          feature value cast to java.lang.Long
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose ValueType is not INT64
          -
          -
        • -
        - - - -
          -
        • -

          booleanValue

          -
          public Boolean booleanValue()
          -                     throws TectonClientException
          -
          A Feature Value of type Boolean
          -
          -
          Returns:
          -
          feature value cast to java.lang.Boolean
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose ValueType is not BOOLEAN
          -
          -
        • -
        - - - -
          -
        • -

          float64Value

          -
          public Double float64Value()
          -                    throws TectonClientException
          -
          A Feature Value of type Float64 (Double)
          -
          -
          Returns:
          -
          feature value cast to java.lang.Double
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose ValueType is not FLOAT64
          -
          -
        • -
        - - - -
          -
        • -

          float64ArrayValue

          -
          public List<Double> float64ArrayValue()
          -                               throws TectonClientException
          -
          A Feature Value of type ARRAY with FLOAT64 values
          -
          -
          Returns:
          -
          feature value cast to List<Double>
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose valueType is not ARRAY - or listElementType is not FLOAT64
          -
          -
        • -
        - - - -
          -
        • -

          float32ArrayValue

          -
          public List<Float> float32ArrayValue()
          -                              throws TectonClientException
          -
          A Feature Value of type ARRAY with FLOAT32 values
          -
          -
          Returns:
          -
          feature value cast to List<Float>
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose valueType is not ARRAY - or listElementType is not FLOAT32
          -
          -
        • -
        - - - -
          -
        • -

          int64ArrayValue

          -
          public List<Long> int64ArrayValue()
          -                           throws TectonClientException
          -
          A Feature Value of type ARRAY with INT64 values
          -
          -
          Returns:
          -
          feature value cast to List<Long>
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose valueType is not ARRAY - or listElementType is not INT64
          -
          -
        • -
        - - - -
          -
        • -

          stringArrayValue

          -
          public List<String> stringArrayValue()
          -                              throws TectonClientException
          -
          A Feature Value of type ARRAY with String values
          -
          -
          Returns:
          -
          feature value cast to List<String>
          -
          Throws:
          -
          TectonClientException - if the method is called on a value whose valueType is not ARRAY - or listElementType is not STRING
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/MetadataOption.html b/target/apidocs/ai/tecton/client/model/MetadataOption.html deleted file mode 100644 index c201ef53..00000000 --- a/target/apidocs/ai/tecton/client/model/MetadataOption.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - - -MetadataOption (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Enum MetadataOption

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Enum Constant Detail

        - - - -
          -
        • -

          NAME

          -
          public static final MetadataOption NAME
          -
          Include feature name in the response
          -
        • -
        - - - -
          -
        • -

          EFFECTIVE_TIME

          -
          public static final MetadataOption EFFECTIVE_TIME
          -
          Include feature effective_time in the response
          -
        • -
        - - - -
          -
        • -

          DATA_TYPE

          -
          public static final MetadataOption DATA_TYPE
          -
          Include feature data_type in the response.
          -
        • -
        - - - -
          -
        • -

          SLO_INFO

          -
          public static final MetadataOption SLO_INFO
          -
          Include SLO Info in the response
          -
        • -
        - - - -
          -
        • -

          FEATURE_STATUS

          -
          public static final MetadataOption FEATURE_STATUS
          -
          Include feature status of the feature value in the response
          -
        • -
        - - - -
          -
        • -

          FEATURE_DESCRIPTION

          -
          public static final MetadataOption FEATURE_DESCRIPTION
          -
          Include user defined description of the feature in the response
          -
        • -
        - - - -
          -
        • -

          FEATURE_TAGS

          -
          public static final MetadataOption FEATURE_TAGS
          -
          Include user defined tags of the feature in the response
          -
        • -
        - - - -
          -
        • -

          ALL

          -
          public static final MetadataOption ALL
          -
          Include all metadata in the response
          -
        • -
        - - - -
          -
        • -

          NONE

          -
          public static final MetadataOption NONE
          -
          Include no metadata in the response. Note that the default metadata options - NAME and - DATA_TYPE will still be included
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static MetadataOption[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (MetadataOption c : MetadataOption.values())
          -    System.out.println(c);
          -
          -
          -
          Returns:
          -
          an array containing the constants of this enum type, in the order they are declared
          -
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static MetadataOption valueOf​(String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          -
          Parameters:
          -
          name - the name of the enum constant to be returned.
          -
          Returns:
          -
          the enum constant with the specified name
          -
          Throws:
          -
          IllegalArgumentException - if this enum type has no constant with the specified name
          -
          NullPointerException - if the argument is null
          -
          -
        • -
        - - - -
          -
        • -

          getJsonName

          -
          public String getJsonName()
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/model/NameAndType.html b/target/apidocs/ai/tecton/client/model/NameAndType.html deleted file mode 100644 index 9d898c1d..00000000 --- a/target/apidocs/ai/tecton/client/model/NameAndType.html +++ /dev/null @@ -1,436 +0,0 @@ - - - - - -NameAndType (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class NameAndType

    -
    -
    - -
    -
      -
    • -
      -
      public class NameAndType
      -extends Object
      -
      Class that represents the return types for parameters of FeatureServiceMetadata
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          NameAndType

          -
          public NameAndType​(String name,
          -                   ValueType dataType)
          -
          Constructor that creates a NameAndType with specified name and dataType
          -
          -
          Parameters:
          -
          name - Name
          -
          dataType - one of ValueType values
          -
          -
        • -
        - - - -
          -
        • -

          NameAndType

          -
          public NameAndType​(String name,
          -                   ValueType dataType,
          -                   ValueType listElementType)
          -
          Constructor that creates a NameAndType with specified name, dataType and listElementType
          -
          -
          Parameters:
          -
          name - Name
          -
          dataType - dataType
          -
          listElementType - array element type when dataType is ARRAY
          -
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getName

          -
          public String getName()
          -
          Returns the name
          -
          -
          Returns:
          -
          name
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getListElementType

          -
          public Optional<ValueType> getListElementType()
          -
          Returns the array element type if present, Optional.empty() otherwise
          -
          -
          Returns:
          -
          Optional<ValueType> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html b/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html deleted file mode 100644 index 344b4823..00000000 --- a/target/apidocs/ai/tecton/client/model/SloInformation.Builder.html +++ /dev/null @@ -1,396 +0,0 @@ - - - - - -SloInformation.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class SloInformation.Builder

    -
    -
    - -
    -
      -
    • -
      -
      Enclosing class:
      -
      SloInformation
      -
      -
      -
      public static class SloInformation.Builder
      -extends Object
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html b/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html deleted file mode 100644 index d4559d3d..00000000 --- a/target/apidocs/ai/tecton/client/model/SloInformation.SloIneligibilityReason.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - -SloInformation.SloIneligibilityReason (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Enum SloInformation.SloIneligibilityReason

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static SloInformation.SloIneligibilityReason[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (SloInformation.SloIneligibilityReason c : SloInformation.SloIneligibilityReason.values())
          -    System.out.println(c);
          -
          -
          -
          Returns:
          -
          an array containing the constants of this enum type, in the order they are declared
          -
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static SloInformation.SloIneligibilityReason valueOf​(String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          -
          Parameters:
          -
          name - the name of the enum constant to be returned.
          -
          Returns:
          -
          the enum constant with the specified name
          -
          Throws:
          -
          IllegalArgumentException - if this enum type has no constant with the specified name
          -
          NullPointerException - if the argument is null
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/model/SloInformation.html b/target/apidocs/ai/tecton/client/model/SloInformation.html deleted file mode 100644 index cc437b4a..00000000 --- a/target/apidocs/ai/tecton/client/model/SloInformation.html +++ /dev/null @@ -1,508 +0,0 @@ - - - - - -SloInformation (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class SloInformation

    -
    -
    - -
    -
      -
    • -
      -
      public class SloInformation
      -extends Object
      -
      Class that represents SLO Info provided by Tecton when serving feature values. All values - returned are wrapped in
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          isSloEligible

          -
          public Optional<Boolean> isSloEligible()
          -
          Returns true if the response was eligible for SLO, false otherwise.
          -
          -
          Returns:
          -
          Optional<Boolean> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - - - - - -
          -
        • -

          getServerTimeSeconds

          -
          public Optional<Double> getServerTimeSeconds()
          -
          This includes the total time spent in the feature server including online transforms and store - latency
          -
          -
          Returns:
          -
          Optional<Double> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          getStoreMaxLatency

          -
          public Optional<Double> getStoreMaxLatency()
          -
          Max latency observed by the request from the store in seconds
          -
          -
          Returns:
          -
          Optional<Double> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          getStoreResponseSizeBytes

          -
          public Optional<Integer> getStoreResponseSizeBytes()
          -
          Total store response size bytes
          -
          -
          Returns:
          -
          Optional<Integer> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          getSloServerTimeSeconds

          -
          public Optional<Double> getSloServerTimeSeconds()
          -
          The server time minus any time spent waiting on line transforms to finish after all table - transforms have finished.
          -
          -
          Returns:
          -
          Optional<Double> if present, Optional.empty() otherwise
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/model/ValueType.html b/target/apidocs/ai/tecton/client/model/ValueType.html deleted file mode 100644 index 991a1c6b..00000000 --- a/target/apidocs/ai/tecton/client/model/ValueType.html +++ /dev/null @@ -1,474 +0,0 @@ - - - - - -ValueType (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Enum ValueType

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Enum Constant Detail

        - - - -
          -
        • -

          BOOLEAN

          -
          public static final ValueType BOOLEAN
          -
          java.lang.Boolean
          -
        • -
        - - - -
          -
        • -

          INT64

          -
          public static final ValueType INT64
          -
          java.lang.Long
          -
        • -
        - - - -
          -
        • -

          STRING

          -
          public static final ValueType STRING
          -
          java.lang.String
          -
        • -
        - - - -
          -
        • -

          FLOAT32

          -
          public static final ValueType FLOAT32
          -
          java.lang.Float
          -
        • -
        - - - -
          -
        • -

          FLOAT64

          -
          public static final ValueType FLOAT64
          -
          java.lang.Double
          -
        • -
        - - - -
          -
        • -

          ARRAY

          -
          public static final ValueType ARRAY
          -
          java.util.List
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static ValueType[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (ValueType c : ValueType.values())
          -    System.out.println(c);
          -
          -
          -
          Returns:
          -
          an array containing the constants of this enum type, in the order they are declared
          -
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static ValueType valueOf​(String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          -
          Parameters:
          -
          name - the name of the enum constant to be returned.
          -
          Returns:
          -
          the enum constant with the specified name
          -
          Throws:
          -
          IllegalArgumentException - if this enum type has no constant with the specified name
          -
          NullPointerException - if the argument is null
          -
          -
        • -
        - - - -
          -
        • -

          fromString

          -
          public static Optional<ValueType> fromString​(String name)
          -
          Returns the ValueType that matches the String representation passed as a parameter
          -
          -
          Parameters:
          -
          name - The String representation of the ValueType
          -
          Returns:
          -
          Optional<ValueType> if a match is found, Optional.empty() otherwise
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html deleted file mode 100644 index 2cae9511..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/FeatureServiceMetadata.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.FeatureServiceMetadata (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.FeatureServiceMetadata

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html deleted file mode 100644 index b58fc466..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/FeatureStatus.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.FeatureStatus (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.FeatureStatus

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html b/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html deleted file mode 100644 index 94ecfe0b..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/FeatureValue.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.FeatureValue (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.FeatureValue

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html b/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html deleted file mode 100644 index b598f00a..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/MetadataOption.html +++ /dev/null @@ -1,347 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.MetadataOption (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.MetadataOption

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html b/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html deleted file mode 100644 index 71ad1ce8..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/NameAndType.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.NameAndType (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.NameAndType

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html deleted file mode 100644 index 01b879b5..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.Builder.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.SloInformation.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.SloInformation.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html deleted file mode 100644 index 84ac2ba8..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.SloIneligibilityReason.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.SloInformation.SloIneligibilityReason (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.SloInformation.SloIneligibilityReason

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html b/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html deleted file mode 100644 index e0c5802d..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/SloInformation.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.SloInformation (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.SloInformation

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/class-use/ValueType.html b/target/apidocs/ai/tecton/client/model/class-use/ValueType.html deleted file mode 100644 index c06b95bf..00000000 --- a/target/apidocs/ai/tecton/client/model/class-use/ValueType.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.model.ValueType (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.model.ValueType

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/model/package-summary.html b/target/apidocs/ai/tecton/client/model/package-summary.html deleted file mode 100644 index e9fe1da7..00000000 --- a/target/apidocs/ai/tecton/client/model/package-summary.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - -ai.tecton.client.model (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.model

    -
    -
    -
    - - -
    This package contains classes modeling the various types representing the results from the - FeatureService API
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      FeatureServiceMetadata -
      Class that encapsulates metadata for a FeatureService, including the schema for join keys and - request context in GetFeaturesRequestData, as well as the in-order output schema of feature - values in GetFeaturesResponse.
      -
      FeatureValue -
      Class that represents each feature value in the feature vector returned in the - GetFeaturesResponse
      -
      NameAndType -
      Class that represents the return types for parameters of FeatureServiceMetadata
      -
      SloInformation -
      Class that represents SLO Info provided by Tecton when serving feature values.
      -
      SloInformation.Builder 
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - - - -
      Enum Summary 
      EnumDescription
      FeatureStatus -
      Enum that represents the different feature statuses that can be returned when requesting feature - values.
      -
      MetadataOption -
      Enum representing options for different metadata information that can be requested from the - FeatureService API
      -
      SloInformation.SloIneligibilityReason -
      Reasons due to which the Feature Serving Response can be ineligible for SLO
      -
      ValueType -
      Enum that represents the different data types (primitive or custom) of feature values
      -
      -
    • -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/package-tree.html b/target/apidocs/ai/tecton/client/model/package-tree.html deleted file mode 100644 index cb067d79..00000000 --- a/target/apidocs/ai/tecton/client/model/package-tree.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - -ai.tecton.client.model Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.model

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -

    Enum Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/model/package-use.html b/target/apidocs/ai/tecton/client/model/package-use.html deleted file mode 100644 index 5ba5b396..00000000 --- a/target/apidocs/ai/tecton/client/model/package-use.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.model (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.model

    -
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - -
      Packages that use ai.tecton.client.model 
      PackageDescription
      ai.tecton.client.model -
      This package contains classes modeling the various types representing the results from the - FeatureService API
      -
      ai.tecton.client.request -
      This package contains classes modeling the different requests to the FeatureService API
      -
      ai.tecton.client.response -
      This package contains classes representing the high-level responses from FeatureService API
      -
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Classes in ai.tecton.client.model used by ai.tecton.client.model 
      ClassDescription
      FeatureStatus -
      Enum that represents the different feature statuses that can be returned when requesting feature - values.
      -
      MetadataOption -
      Enum representing options for different metadata information that can be requested from the - FeatureService API
      -
      NameAndType -
      Class that represents the return types for parameters of FeatureServiceMetadata
      -
      SloInformation -
      Class that represents SLO Info provided by Tecton when serving feature values.
      -
      SloInformation.Builder 
      SloInformation.SloIneligibilityReason -
      Reasons due to which the Feature Serving Response can be ineligible for SLO
      -
      ValueType -
      Enum that represents the different data types (primitive or custom) of feature values
      -
      -
    • -
    • - - - - - - - - - - - - - - -
      Classes in ai.tecton.client.model used by ai.tecton.client.request 
      ClassDescription
      MetadataOption -
      Enum representing options for different metadata information that can be requested from the - FeatureService API
      -
      -
    • -
    • - - - - - - - - - - - - - - - - - - - - - - -
      Classes in ai.tecton.client.model used by ai.tecton.client.response 
      ClassDescription
      FeatureServiceMetadata -
      Class that encapsulates metadata for a FeatureService, including the schema for join keys and - request context in GetFeaturesRequestData, as well as the in-order output schema of feature - values in GetFeaturesResponse.
      -
      FeatureValue -
      Class that represents each feature value in the feature vector returned in the - GetFeaturesResponse
      -
      SloInformation -
      Class that represents SLO Info provided by Tecton when serving feature values.
      -
      -
    • -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/package-summary.html b/target/apidocs/ai/tecton/client/package-summary.html deleted file mode 100644 index 938940c6..00000000 --- a/target/apidocs/ai/tecton/client/package-summary.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - -ai.tecton.client (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/package-tree.html b/target/apidocs/ai/tecton/client/package-tree.html deleted file mode 100644 index 9f9d5100..00000000 --- a/target/apidocs/ai/tecton/client/package-tree.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -ai.tecton.client Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/package-use.html b/target/apidocs/ai/tecton/client/package-use.html deleted file mode 100644 index c46ee719..00000000 --- a/target/apidocs/ai/tecton/client/package-use.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - -Uses of Package ai.tecton.client (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html deleted file mode 100644 index 51587ff1..00000000 --- a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.SerializeNulls.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - -AbstractGetFeaturesRequest.SerializeNulls (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Annotation Type AbstractGetFeaturesRequest.SerializeNulls

    -
    -
    -
    -
      -
    • -
      -
      @Retention(RUNTIME)
      -@JsonQualifier
      -public static @interface AbstractGetFeaturesRequest.SerializeNulls
      -
    • -
    -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Field Summary

        - - - - - - - - - - - - -
        Fields 
        Modifier and TypeFieldsDescription
        static com.squareup.moshi.JsonAdapter.FactoryJSON_ADAPTER_FACTORY 
        -
      • -
      -
      -
    • -
    -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          JSON_ADAPTER_FACTORY

          -
          static final com.squareup.moshi.JsonAdapter.Factory JSON_ADAPTER_FACTORY
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html deleted file mode 100644 index 316d015e..00000000 --- a/target/apidocs/ai/tecton/client/request/AbstractGetFeaturesRequest.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - -AbstractGetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class AbstractGetFeaturesRequest

    -
    -
    - -
    -
      -
    • -
      -
      Direct Known Subclasses:
      -
      GetFeaturesRequest
      -
      -
      -
      public abstract class AbstractGetFeaturesRequest
      -extends AbstractTectonRequest
      -
      Parent class for GetFeaturesRequest and GetFeaturesBatchRequest and extends AbstractTectonRequest
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html b/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html deleted file mode 100644 index 0cb524d5..00000000 --- a/target/apidocs/ai/tecton/client/request/AbstractTectonRequest.html +++ /dev/null @@ -1,439 +0,0 @@ - - - - - -AbstractTectonRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class AbstractTectonRequest

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          AbstractTectonRequest

          -
          public AbstractTectonRequest​(String endpoint,
          -                             TectonHttpClient.HttpMethod method,
          -                             String workspaceName,
          -                             String featureServiceName)
          -                      throws TectonClientException
          -
          Parent class constructor that configures the request endpoint, request method, workspaceName - and featureServiceName
          -
          -
          Parameters:
          -
          endpoint -
          -
          method -
          -
          workspaceName -
          -
          featureServiceName -
          -
          Throws:
          -
          TectonClientException - when workspaceName or featureServiceName is null or empty
          -
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          getEndpoint

          -
          public String getEndpoint()
          -
          Returns the endpoint for request type. This endpoint will be appended to the base URL provided - to the TectonClient
          -
        • -
        - - - - - - - -
          -
        • -

          getFeatureServiceName

          -
          public String getFeatureServiceName()
          -
          Returns the featureServiceName set for the request
          -
        • -
        - - - -
          -
        • -

          getWorkspaceName

          -
          public String getWorkspaceName()
          -
          Returns the workspaceName set for the request
          -
        • -
        - - - -
          -
        • -

          requestToJson

          -
          public abstract String requestToJson()
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html deleted file mode 100644 index 59d8976a..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.Builder.html +++ /dev/null @@ -1,371 +0,0 @@ - - - - - -GetFeatureServiceMetadataRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeatureServiceMetadataRequest.Builder

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html b/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html deleted file mode 100644 index 2fca319f..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeatureServiceMetadataRequest.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - -GetFeatureServiceMetadataRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeatureServiceMetadataRequest

    -
    -
    - -
    -
      -
    • -
      -
      public class GetFeatureServiceMetadataRequest
      -extends AbstractTectonRequest
      -
      A subclass of AbstractTectonRequest that represents a request to the - feature-service/metadata endpoint to retrieve metadata about a FeatureService, including - the schema for join keys and request context, and the in-order output schema of returned feature - values.
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GetFeatureServiceMetadataRequest

          -
          public GetFeatureServiceMetadataRequest​(String featureServiceName,
          -                                        String workspaceName)
          -
          Constructor that creates a new GetFeatureServiceMetadataRequest with the specified - workspaceName and featureServiceName
          -
          -
          Parameters:
          -
          featureServiceName - Name of the Feature Service for which the metadata is being requested
          -
          workspaceName - Name of the workspace in which the Feature Service is defined
          -
          -
        • -
        - - - -
          -
        • -

          GetFeatureServiceMetadataRequest

          -
          public GetFeatureServiceMetadataRequest​(String featureServiceName)
          -
          Constructor that creates a new GetFeatureServiceMetadataRequest with default workspaceName - "prod" and featureServiceName provided.
          -
          -
          Parameters:
          -
          featureServiceName - Name of the Feature Service for which the metadata is being requested
          -
          -
        • -
        -
      • -
      -
      - -
      - -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html deleted file mode 100644 index 28d49b16..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.Builder.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - -GetFeaturesBatchRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesBatchRequest.Builder

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.request.GetFeaturesBatchRequest.Builder
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html b/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html deleted file mode 100644 index aa70580e..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesBatchRequest.html +++ /dev/null @@ -1,691 +0,0 @@ - - - - - -GetFeaturesBatchRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesBatchRequest

    -
    -
    - -
    -
      -
    • -
      -
      public class GetFeaturesBatchRequest
      -extends Object
      -
      A class that represents a batch request to retrieve a list of feature vectors from the feature - server, for a given workspaceName and featureServiceName. The class can be used to make parallel - requests to retrieve multiple feature vectors from the feature server API. The actual number of - concurrent calls depends on the ConnectionPool size and maxParallelRequests - configurations in the TectonClientOptions. - -

      GetFeaturesBatchRequest uses either the /get-features or the /get-features-batch endpoint - depending on the configuration microBatchSize. By default, the microBatchSize is set to - RequestConstants.DEFAULT_MICRO_BATCH_SIZE. It can be configured to any value in the range - [ 1, RequestConstants.MAX_MICRO_BATCH_SIZE ] - -

      For a GetFeaturesBatchRequest with a GetFeaturesRequestData of size n and a - microBatchSize of 1, the client enqueues n HTTP calls to be sent parallely to the - /get-features endpoint. The client waits until all calls are complete or a specific time - (configured with timeout) has elapsed and returns a List of GetFeaturesResponse objects of size n. - -

      For a GetFeaturesBatchRequest with a GetFeaturesRequestData of size n and a - microBatchSize of k where k is in the range [ 1, RequestConstants.MAX_MICRO_BATCH_SIZE ], the client enqueues Math.ceil(n/k) microbatch requests - to be sent parallely to the /get-features-batch endpoint, waits until all microbatch requests are - complete or a specific configured timeout has elapsed and returns a List of GetFeaturesResponse objects of size n.

      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html deleted file mode 100644 index c0abe8cf..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.Builder.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - -GetFeaturesRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesRequest.Builder

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.request.GetFeaturesRequest.Builder
      • -
      -
    • -
    -
    -
      -
    • -
      -
      Enclosing class:
      -
      GetFeaturesRequest
      -
      -
      -
      public static final class GetFeaturesRequest.Builder
      -extends Object
      -
      A Builder class for building instances of GetFeaturesRequest objects from values - configured by setters
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html deleted file mode 100644 index b1c54b1b..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesRequest.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - - -GetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesRequest

    -
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html deleted file mode 100644 index 88288900..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.Builder.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - -GetFeaturesRequestData.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesRequestData.Builder

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.request.GetFeaturesRequestData.Builder
      • -
      -
    • -
    -
    - -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Builder

          -
          public Builder()
          -
          Instantiates a new Builder
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          joinKeyMap

          -
          public GetFeaturesRequestData.Builder joinKeyMap​(Map<String,​String> joinKeyMap)
          -
          Setter for joinKeyMap
          -
          -
          Parameters:
          -
          joinKeyMap - Join keys used for table-based FeatureViews. -

          The key of this map is the join key name and the value is the join key value for this - request -

          For string keys, the value should be a string -

          For int64 (Long) keys, the value should be a string of the decimal representation of - the integer

          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - -
          -
        • -

          requestContextMap

          -
          public GetFeaturesRequestData.Builder requestContextMap​(Map<String,​Object> requestContextMap)
          -
          Setter for requestContextMap
          -
          -
          Parameters:
          -
          requestContextMap - Request context used for OnDemand FeatureViews. -

          The key of this map is the join key name and the value is the join key value for this - request -

          For string values, the value should be a java.lang.String -

          For int64 values, the value should be a java.lang.String of the decimal representation - of the integer -

          For double values, the value should be a java.lang.Double

          -
          Returns:
          -
          this Builder
          -
          -
        • -
        - - - - -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html b/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html deleted file mode 100644 index 50bf39e8..00000000 --- a/target/apidocs/ai/tecton/client/request/GetFeaturesRequestData.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - -GetFeaturesRequestData (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesRequestData

    -
    -
    - -
    -
      -
    • -
      -
      public class GetFeaturesRequestData
      -extends Object
      -
      Class that represents the map parameters passed to a GetFeaturesRequest
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GetFeaturesRequestData

          -
          public GetFeaturesRequestData()
          -
          Constructor that creates a new GetFeaturesRequestData object with an empty joinKeyMap and - requestContextMap
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          addJoinKeyMap

          -
          public GetFeaturesRequestData addJoinKeyMap​(Map<String,​String> joinKeyMap)
          -                                     throws InvalidRequestParameterException
          -
          Setter method for joinKeyMap
          -
          -
          Parameters:
          -
          joinKeyMap - Join keys used for table-based FeatureViews. -

          The key of this map is the join key name and the value is the join key value for this - request -

          For string keys, the value should be a string -

          For int64 (Long) keys, the value should be a string of the decimal representation of the - integer

          -
          Returns:
          -
          Returns the GetFeaturesRequestData object after setting joinKeyMap
          -
          Throws:
          -
          InvalidRequestParameterException - when joinKeyMap is null or empty, or any key in the - map is null or empty
          -
          -
        • -
        - - - -
          -
        • -

          addRequestContextMap

          -
          public GetFeaturesRequestData addRequestContextMap​(Map<String,​Object> requestContextMap)
          -                                            throws InvalidRequestParameterException
          -
          Setter method for requestContextMap
          -
          -
          Parameters:
          -
          requestContextMap - Request context used for OnDemand FeatureViews. -

          The key of this map is the join key name and the value is the join key value for this - request -

          For string values, the value should be a java.lang.String -

          For int64 values, the value should be a java.lang.String of the decimal representation - of the integer -

          For double values, the value should be a java.lang.Double

          -
          Returns:
          -
          Returns the GetFeaturesRequestData object after setting requestContextMap
          -
          Throws:
          -
          InvalidRequestParameterException - when requestContextMap is null or empty, or any key in - the map is null or empty
          -
          -
        • -
        - - - - - - - - - - - - - - - -
          -
        • -

          addRequestContext

          -
          public GetFeaturesRequestData addRequestContext​(String key,
          -                                                Long value)
          -                                         throws InvalidRequestParameterException
          -
          Add an int64 request context value to the requestContextMap
          -
          -
          Parameters:
          -
          key - request context name
          -
          value - int64 (Long) request context value -

          Note: The int64 value is converted to a String of the decimal representation of the - integer

          -
          Returns:
          -
          Returns the GetFeaturesRequestData object after adding the request context key value
          -
          Throws:
          -
          InvalidRequestParameterException - when the request context key is null or empty
          -
          -
        • -
        - - - - - - - - - - - -
          -
        • -

          getRequestContextMap

          -
          public Map<String,​Object> getRequestContextMap()
          -
        • -
        - - - -
          -
        • -

          isEmptyJoinKeyMap

          -
          public boolean isEmptyJoinKeyMap()
          -
        • -
        - - - -
          -
        • -

          isEmptyRequestContextMap

          -
          public boolean isEmptyRequestContextMap()
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/RequestConstants.html b/target/apidocs/ai/tecton/client/request/RequestConstants.html deleted file mode 100644 index 90918b9e..00000000 --- a/target/apidocs/ai/tecton/client/request/RequestConstants.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - -RequestConstants (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class RequestConstants

    -
    -
    - -
    -
      -
    • -
      -
      public final class RequestConstants
      -extends Object
      -
      Class that provides static constants that can be used as default parameters to various Request - objects
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html b/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html deleted file mode 100644 index 59f319db..00000000 --- a/target/apidocs/ai/tecton/client/request/RequestOptions.Builder.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - -RequestOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class RequestOptions.Builder

    -
    -
    - -
    -
      -
    • -
      -
      Enclosing class:
      -
      RequestOptions
      -
      -
      -
      public static class RequestOptions.Builder
      -extends Object
      -
      A Builder class for creating an instance of RequestOptions object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Builder

          -
          public Builder()
          -
          Instantiates a new Builder
          -
        • -
        -
      • -
      -
      - -
      - -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/RequestOptions.html b/target/apidocs/ai/tecton/client/request/RequestOptions.html deleted file mode 100644 index c17cb590..00000000 --- a/target/apidocs/ai/tecton/client/request/RequestOptions.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - -RequestOptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class RequestOptions

    -
    -
    - -
    -
      -
    • -
      -
      public class RequestOptions
      -extends Object
      -
      Class that represents request-level options to control feature server behavior. These options are - sent as part of the requestOptions field in GetFeatures and GetFeaturesBatch requests. Option - values must be either Integer or Boolean.
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          RequestOptions

          -
          public RequestOptions()
          -
          Constructor that creates a new RequestOptions object with default empty options
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          setOption

          -
          public RequestOptions setOption​(String key,
          -                                Object value)
          -
          Sets a request option with the given key and value.
          -
          -
          Parameters:
          -
          key - the option key
          -
          value - the option value (must be either Integer or Boolean)
          -
          Returns:
          -
          Returns the RequestOptions object for method chaining
          -
          Throws:
          -
          IllegalArgumentException - if value is not Integer or Boolean
          -
          -
        • -
        - - - -
          -
        • -

          getOption

          -
          public Object getOption​(String key)
          -
          Gets a specific option value by key.
          -
          -
          Parameters:
          -
          key - the option key
          -
          Returns:
          -
          the option value, or null if not set
          -
          -
        • -
        - - - -
          -
        • -

          getIntegerOption

          -
          public Integer getIntegerOption​(String key)
          -
          Gets a specific option value by key as an Integer.
          -
          -
          Parameters:
          -
          key - the option key
          -
          Returns:
          -
          the option value as Integer, or null if not set or not an Integer
          -
          -
        • -
        - - - -
          -
        • -

          getBooleanOption

          -
          public Boolean getBooleanOption​(String key)
          -
          Gets a specific option value by key as a Boolean.
          -
          -
          Parameters:
          -
          key - the option key
          -
          Returns:
          -
          the option value as Boolean, or null if not set or not a Boolean
          -
          -
        • -
        - - - -
          -
        • -

          getOptions

          -
          public Map<String,​Object> getOptions()
          -
          Gets all options as an unmodifiable map.
          -
          -
          Returns:
          -
          Map containing all request options
          -
          -
        • -
        - - - -
          -
        • -

          isEmpty

          -
          public boolean isEmpty()
          -
          Checks if any options are set.
          -
          -
          Returns:
          -
          true if no options are set, false otherwise
          -
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        - - - - -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html deleted file mode 100644 index 4bacaf00..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.SerializeNulls.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls

    -
    -
    No usage of ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html deleted file mode 100644 index 112056ae..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/AbstractGetFeaturesRequest.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.AbstractGetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.AbstractGetFeaturesRequest

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html b/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html deleted file mode 100644 index 60f3d926..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/AbstractTectonRequest.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.AbstractTectonRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.AbstractTectonRequest

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html deleted file mode 100644 index 36a14183..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.Builder.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html deleted file mode 100644 index e387edd2..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeatureServiceMetadataRequest.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeatureServiceMetadataRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeatureServiceMetadataRequest

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html deleted file mode 100644 index 61cd4b51..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.Builder.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesBatchRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesBatchRequest.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html deleted file mode 100644 index b54f757d..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesBatchRequest.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesBatchRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesBatchRequest

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html deleted file mode 100644 index 5a82b26c..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.Builder.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesRequest.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesRequest.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html deleted file mode 100644 index 7508c7d3..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequest.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesRequest (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesRequest

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html deleted file mode 100644 index 97c560d8..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.Builder.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesRequestData.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesRequestData.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html b/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html deleted file mode 100644 index a2ddca59..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/GetFeaturesRequestData.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.GetFeaturesRequestData (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.GetFeaturesRequestData

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html b/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html deleted file mode 100644 index e7b8712e..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/RequestConstants.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.RequestConstants (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.RequestConstants

    -
    -
    No usage of ai.tecton.client.request.RequestConstants
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html deleted file mode 100644 index 1178a32b..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.Builder.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.RequestOptions.Builder (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.RequestOptions.Builder

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html b/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html deleted file mode 100644 index 175384b0..00000000 --- a/target/apidocs/ai/tecton/client/request/class-use/RequestOptions.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.request.RequestOptions (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.request.RequestOptions

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/request/package-summary.html b/target/apidocs/ai/tecton/client/request/package-summary.html deleted file mode 100644 index 46fbafa0..00000000 --- a/target/apidocs/ai/tecton/client/request/package-summary.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - -ai.tecton.client.request (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.request

    -
    -
    -
    - - -
    This package contains classes modeling the different requests to the FeatureService API
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/package-tree.html b/target/apidocs/ai/tecton/client/request/package-tree.html deleted file mode 100644 index d164e3eb..00000000 --- a/target/apidocs/ai/tecton/client/request/package-tree.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - -ai.tecton.client.request Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.request

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -

    Annotation Type Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/request/package-use.html b/target/apidocs/ai/tecton/client/request/package-use.html deleted file mode 100644 index ad77a8aa..00000000 --- a/target/apidocs/ai/tecton/client/request/package-use.html +++ /dev/null @@ -1,303 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.request (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.request

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html b/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html deleted file mode 100644 index ad4b9488..00000000 --- a/target/apidocs/ai/tecton/client/response/GetFeatureServiceMetadataResponse.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - -GetFeatureServiceMetadataResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeatureServiceMetadataResponse

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.response.GetFeatureServiceMetadataResponse
      • -
      -
    • -
    -
    -
      -
    • -
      -
      public class GetFeatureServiceMetadataResponse
      -extends Object
      -
      A class that represents the response from the HTTP API for a call to the /metadata - endpoint.
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GetFeatureServiceMetadataResponse

          -
          public GetFeatureServiceMetadataResponse​(String response,
          -                                         Duration requestLatency)
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          getRequestLatency

          -
          public Duration getRequestLatency()
          -
          Returns the response time (network latency + online store latency) as provided by the - underlying Http Client
          -
          -
          Returns:
          -
          response time as Duration
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html b/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html deleted file mode 100644 index 8df21a03..00000000 --- a/target/apidocs/ai/tecton/client/response/GetFeaturesBatchResponse.html +++ /dev/null @@ -1,419 +0,0 @@ - - - - - -GetFeaturesBatchResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesBatchResponse

    -
    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • ai.tecton.client.response.GetFeaturesBatchResponse
      • -
      -
    • -
    -
    -
      -
    • -
      -
      public class GetFeaturesBatchResponse
      -extends Object
      -
      A class that represents the response from the HTTP API for when fetching batch features. The - class provides methods to access the list of feature vector returned, along with its metadata, if - present. - -

      The List of GetFeaturesResponse objects represents the list of response, each - of which encapsulates a feature vector and its metadata. Note: The list may contain nulls for any - request that was never completed, due to a timeout. - -

      The batchSloInformation is only present for batch requests to the /get-features-batch endpoint - (i.e. microBatchSize>1)

      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          GetFeaturesBatchResponse

          -
          public GetFeaturesBatchResponse​(List<HttpResponse> httpResponseList,
          -                                Duration totalDuration,
          -                                int microBatchSize)
          -
        • -
        -
      • -
      -
      - -
      -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          getRequestLatency

          -
          public Duration getRequestLatency()
          -
          Returns the response time (network latency + online store latency) as provided by the - underlying Http Client
          -
          -
          Returns:
          -
          response time as Duration
          -
          -
        • -
        - - - - - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html b/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html deleted file mode 100644 index cb68dd3b..00000000 --- a/target/apidocs/ai/tecton/client/response/GetFeaturesResponse.html +++ /dev/null @@ -1,426 +0,0 @@ - - - - - -GetFeaturesResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class GetFeaturesResponse

    -
    -
    - -
    -
      -
    • -
      -
      public class GetFeaturesResponse
      -extends Object
      -
      A class that represents the response from the HTTP API for a call to the /get-features - endpoint. The class provides methods to access the feature vector returned, along with its - metadata, if present.
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - - - - - -
          -
        • -

          getFeatureValuesAsMap

          -
          public Map<String,​FeatureValue> getFeatureValuesAsMap()
          -
          Returns the feature vector as a Map, with the feature name as the key
          -
        • -
        - - - -
          -
        • -

          getSloInformation

          -
          public Optional<SloInformation> getSloInformation()
          -
          Returns an SloInformation objected wrapped in Optional if present in - the response received from the HTTP API, Optional.empty() otherwise
          -
        • -
        - - - -
          -
        • -

          equals

          -
          public boolean equals​(Object o)
          -
          Overrides equals() in class Object
          -
          -
          Overrides:
          -
          equals in class Object
          -
          -
        • -
        - - - -
          -
        • -

          hashCode

          -
          public int hashCode()
          -
          Overrides hashCode() in class Object
          -
          -
          Overrides:
          -
          hashCode in class Object
          -
          -
        • -
        - - - -
          -
        • -

          getRequestLatency

          -
          public Duration getRequestLatency()
          -
          Returns the response time (network latency + online store latency) as provided by the - underlying Http Client
          -
          -
          Returns:
          -
          response time as Duration
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html deleted file mode 100644 index 4d82e97e..00000000 --- a/target/apidocs/ai/tecton/client/response/class-use/GetFeatureServiceMetadataResponse.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.response.GetFeatureServiceMetadataResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.response.GetFeatureServiceMetadataResponse

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html deleted file mode 100644 index 5d02b0f7..00000000 --- a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesBatchResponse.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.response.GetFeaturesBatchResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.response.GetFeaturesBatchResponse

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html b/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html deleted file mode 100644 index b81027f1..00000000 --- a/target/apidocs/ai/tecton/client/response/class-use/GetFeaturesResponse.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.response.GetFeaturesResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.response.GetFeaturesResponse

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/response/package-summary.html b/target/apidocs/ai/tecton/client/response/package-summary.html deleted file mode 100644 index e0dbff87..00000000 --- a/target/apidocs/ai/tecton/client/response/package-summary.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - -ai.tecton.client.response (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.response

    -
    -
    -
    - - -
    This package contains classes representing the high-level responses from FeatureService API
    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      GetFeaturesBatchResponse -
      A class that represents the response from the HTTP API for when fetching batch features.
      -
      GetFeatureServiceMetadataResponse -
      A class that represents the response from the HTTP API for a call to the /metadata - endpoint.
      -
      GetFeaturesResponse -
      A class that represents the response from the HTTP API for a call to the /get-features - endpoint.
      -
      -
    • -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/package-tree.html b/target/apidocs/ai/tecton/client/response/package-tree.html deleted file mode 100644 index 3277de16..00000000 --- a/target/apidocs/ai/tecton/client/response/package-tree.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - -ai.tecton.client.response Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.response

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/response/package-use.html b/target/apidocs/ai/tecton/client/response/package-use.html deleted file mode 100644 index 76e2af25..00000000 --- a/target/apidocs/ai/tecton/client/response/package-use.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.response (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.response

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/transport/HttpResponse.html b/target/apidocs/ai/tecton/client/transport/HttpResponse.html deleted file mode 100644 index acb0dd88..00000000 --- a/target/apidocs/ai/tecton/client/transport/HttpResponse.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - -HttpResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class HttpResponse

    -
    -
    - -
    -
      -
    • -
      -
      public class HttpResponse
      -extends Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          isSuccessful

          -
          public boolean isSuccessful()
          -
        • -
        - - - -
          -
        • -

          getResponseCode

          -
          public int getResponseCode()
          -
        • -
        - - - -
          -
        • -

          getRequestDuration

          -
          public Duration getRequestDuration()
          -
        • -
        - - - -
          -
        • -

          getMessage

          -
          public String getMessage()
          -
        • -
        - - - - - - - -
          -
        • -

          validateResponse

          -
          public void validateResponse()
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html deleted file mode 100644 index 6cd2c49e..00000000 --- a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.HttpMethod.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - -TectonHttpClient.HttpMethod (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Enum TectonHttpClient.HttpMethod

    -
    -
    - -
    - -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          values

          -
          public static TectonHttpClient.HttpMethod[] values()
          -
          Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
          -for (TectonHttpClient.HttpMethod c : TectonHttpClient.HttpMethod.values())
          -    System.out.println(c);
          -
          -
          -
          Returns:
          -
          an array containing the constants of this enum type, in the order they are declared
          -
          -
        • -
        - - - -
          -
        • -

          valueOf

          -
          public static TectonHttpClient.HttpMethod valueOf​(String name)
          -
          Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.)
          -
          -
          Parameters:
          -
          name - the name of the enum constant to be returned.
          -
          Returns:
          -
          the enum constant with the specified name
          -
          Throws:
          -
          IllegalArgumentException - if this enum type has no constant with the specified name
          -
          NullPointerException - if the argument is null
          -
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html b/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html deleted file mode 100644 index fe06851d..00000000 --- a/target/apidocs/ai/tecton/client/transport/TectonHttpClient.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - -TectonHttpClient (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class TectonHttpClient

    -
    -
    - -
    -
      -
    • -
      -
      public class TectonHttpClient
      -extends Object
      -
    • -
    -
    -
    - -
    -
    - -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html b/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html deleted file mode 100644 index d037dc98..00000000 --- a/target/apidocs/ai/tecton/client/transport/class-use/HttpResponse.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.transport.HttpResponse (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.transport.HttpResponse

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html deleted file mode 100644 index 6fae813b..00000000 --- a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.HttpMethod.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.transport.TectonHttpClient.HttpMethod (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.transport.TectonHttpClient.HttpMethod

    -
    -
    - -
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html b/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html deleted file mode 100644 index 73cab0f0..00000000 --- a/target/apidocs/ai/tecton/client/transport/class-use/TectonHttpClient.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.transport.TectonHttpClient (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.transport.TectonHttpClient

    -
    -
    No usage of ai.tecton.client.transport.TectonHttpClient
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/transport/package-summary.html b/target/apidocs/ai/tecton/client/transport/package-summary.html deleted file mode 100644 index 82684181..00000000 --- a/target/apidocs/ai/tecton/client/transport/package-summary.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - -ai.tecton.client.transport (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.transport

    -
    -
    -
    - - -
    This package contains implementation of an HTTP Client using OkHttp library from Square.
    -
    -
    See Also:
    -
    https://square.github.io/okhttp//
    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/transport/package-tree.html b/target/apidocs/ai/tecton/client/transport/package-tree.html deleted file mode 100644 index 5357ea66..00000000 --- a/target/apidocs/ai/tecton/client/transport/package-tree.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - -ai.tecton.client.transport Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.transport

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -

    Enum Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/transport/package-use.html b/target/apidocs/ai/tecton/client/transport/package-use.html deleted file mode 100644 index ecadf5ea..00000000 --- a/target/apidocs/ai/tecton/client/transport/package-use.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.transport (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.transport

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/version/Version.html b/target/apidocs/ai/tecton/client/version/Version.html deleted file mode 100644 index a989e259..00000000 --- a/target/apidocs/ai/tecton/client/version/Version.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - -Version (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - -

    Class Version

    -
    -
    - -
    -
      -
    • -
      -
      public class Version
      -extends Object
      -
    • -
    -
    -
    - -
    -
    -
      -
    • - -
      - -
      - -
      -
        -
      • - - -

        Constructor Detail

        - - - -
          -
        • -

          Version

          -
          public Version()
          -
        • -
        -
      • -
      -
      -
    • -
    -
    -
    -
    - - - - diff --git a/target/apidocs/ai/tecton/client/version/class-use/Version.html b/target/apidocs/ai/tecton/client/version/class-use/Version.html deleted file mode 100644 index e83d60a2..00000000 --- a/target/apidocs/ai/tecton/client/version/class-use/Version.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Class ai.tecton.client.version.Version (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Class
    ai.tecton.client.version.Version

    -
    -
    No usage of ai.tecton.client.version.Version
    -
    - - - diff --git a/target/apidocs/ai/tecton/client/version/package-summary.html b/target/apidocs/ai/tecton/client/version/package-summary.html deleted file mode 100644 index f7f07114..00000000 --- a/target/apidocs/ai/tecton/client/version/package-summary.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -ai.tecton.client.version (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Package ai.tecton.client.version

    -
    -
    -
      -
    • - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      Version 
      -
    • -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/version/package-tree.html b/target/apidocs/ai/tecton/client/version/package-tree.html deleted file mode 100644 index d6540481..00000000 --- a/target/apidocs/ai/tecton/client/version/package-tree.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - -ai.tecton.client.version Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Hierarchy For Package ai.tecton.client.version

    -Package Hierarchies: - -
    -
    -
    -

    Class Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/ai/tecton/client/version/package-use.html b/target/apidocs/ai/tecton/client/version/package-use.html deleted file mode 100644 index 8c887bb8..00000000 --- a/target/apidocs/ai/tecton/client/version/package-use.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Uses of Package ai.tecton.client.version (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Uses of Package
    ai.tecton.client.version

    -
    -
    No usage of ai.tecton.client.version
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/allclasses-index.html b/target/apidocs/allclasses-index.html deleted file mode 100644 index 136dd16c..00000000 --- a/target/apidocs/allclasses-index.html +++ /dev/null @@ -1,464 +0,0 @@ - - - - - -All Classes (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    All Classes

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/allclasses.html b/target/apidocs/allclasses.html deleted file mode 100644 index aa436ad3..00000000 --- a/target/apidocs/allclasses.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - -All Classes (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - -
    -

    All Classes

    - -
    - - diff --git a/target/apidocs/allpackages-index.html b/target/apidocs/allpackages-index.html deleted file mode 100644 index 59b73346..00000000 --- a/target/apidocs/allpackages-index.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - -All Packages (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    All Packages

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/constant-values.html b/target/apidocs/constant-values.html deleted file mode 100644 index 214efec1..00000000 --- a/target/apidocs/constant-values.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - -Constant Field Values (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Constant Field Values

    -
    -

    Contents

    - -
    -
    -
    - - -
    -

    ai.tecton.*

    - - -
      -
    • - - - - - - - - - - - - - - -
      ai.tecton.client.version.Version 
      Modifier and TypeConstant FieldValue
      - -public static final StringVERSION"0.9.4-SNAPSHOT"
      -
    • -
    -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/deprecated-list.html b/target/apidocs/deprecated-list.html deleted file mode 100644 index eef93224..00000000 --- a/target/apidocs/deprecated-list.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Deprecated List (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Deprecated API

    -

    Contents

    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/element-list b/target/apidocs/element-list deleted file mode 100644 index 8917071a..00000000 --- a/target/apidocs/element-list +++ /dev/null @@ -1,7 +0,0 @@ -ai.tecton.client -ai.tecton.client.exceptions -ai.tecton.client.model -ai.tecton.client.request -ai.tecton.client.response -ai.tecton.client.transport -ai.tecton.client.version diff --git a/target/apidocs/help-doc.html b/target/apidocs/help-doc.html deleted file mode 100644 index 38998de3..00000000 --- a/target/apidocs/help-doc.html +++ /dev/null @@ -1,282 +0,0 @@ - - - - - -API Help (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    How This API Document Is Organized

    -
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    -
    -
    -
      -
    • -
      -

      Overview

      -

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      -
      -
    • -
    • -
      -

      Package

      -

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

      -
        -
      • Interfaces
      • -
      • Classes
      • -
      • Enums
      • -
      • Exceptions
      • -
      • Errors
      • -
      • Annotation Types
      • -
      -
      -
    • -
    • -
      -

      Class or Interface

      -

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      -
        -
      • Class Inheritance Diagram
      • -
      • Direct Subclasses
      • -
      • All Known Subinterfaces
      • -
      • All Known Implementing Classes
      • -
      • Class or Interface Declaration
      • -
      • Class or Interface Description
      • -
      -
      -
        -
      • Nested Class Summary
      • -
      • Field Summary
      • -
      • Property Summary
      • -
      • Constructor Summary
      • -
      • Method Summary
      • -
      -
      -
        -
      • Field Detail
      • -
      • Property Detail
      • -
      • Constructor Detail
      • -
      • Method Detail
      • -
      -

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      -
      -
    • -
    • -
      -

      Annotation Type

      -

      Each annotation type has its own separate page with the following sections:

      -
        -
      • Annotation Type Declaration
      • -
      • Annotation Type Description
      • -
      • Required Element Summary
      • -
      • Optional Element Summary
      • -
      • Element Detail
      • -
      -
      -
    • -
    • -
      -

      Enum

      -

      Each enum has its own separate page with the following sections:

      -
        -
      • Enum Declaration
      • -
      • Enum Description
      • -
      • Enum Constant Summary
      • -
      • Enum Constant Detail
      • -
      -
      -
    • -
    • -
      -

      Use

      -

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      -
      -
    • -
    • -
      -

      Tree (Class Hierarchy)

      -

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

      -
        -
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • -
      • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
      • -
      -
      -
    • -
    • -
      -

      Deprecated API

      -

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      -
      -
    • -
    • -
      -

      Index

      -

      The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

      -
      -
    • -
    • -
      -

      All Classes

      -

      The All Classes link shows all classes and interfaces except non-static nested types.

      -
      -
    • -
    • -
      -

      Serialized Form

      -

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      -
      -
    • -
    • -
      -

      Constant Field Values

      -

      The Constant Field Values page lists the static final fields and their values.

      -
      -
    • -
    • -
      -

      Search

      -

      You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

      -
      -
    • -
    -
    -This help file applies to API documentation generated by the standard doclet.
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/index-all.html b/target/apidocs/index-all.html deleted file mode 100644 index 545a5e36..00000000 --- a/target/apidocs/index-all.html +++ /dev/null @@ -1,1468 +0,0 @@ - - - - - -Index (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    A B C D E F G H I J K M N O P R S T U V W 
    All Classes All Packages - - -

    A

    -
    -
    AbstractGetFeaturesRequest - Class in ai.tecton.client.request
    -
    -
    Parent class for GetFeaturesRequest and GetFeaturesBatchRequest and extends AbstractTectonRequest
    -
    -
    AbstractGetFeaturesRequest.SerializeNulls - Annotation Type in ai.tecton.client.request
    -
     
    -
    AbstractTectonRequest - Class in ai.tecton.client.request
    -
    -
    An abstract parent class for Tecton FeatureService API Request subclasses
    -
    -
    AbstractTectonRequest(String, TectonHttpClient.HttpMethod, String, String) - Constructor for class ai.tecton.client.request.AbstractTectonRequest
    -
    -
    Parent class constructor that configures the request endpoint, request method, workspaceName - and featureServiceName
    -
    -
    addJoinKey(String, Long) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Add an int64 join key value to the joinKeyMap
    -
    -
    addJoinKey(String, String) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Add a String join key value to the joinKeyMap
    -
    -
    addJoinKeyMap(Map<String, String>) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Setter method for joinKeyMap
    -
    -
    addRequestContext(String, Double) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Add a Double request context value to the requestContextMap
    -
    -
    addRequestContext(String, Long) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Add an int64 request context value to the requestContextMap
    -
    -
    addRequestContext(String, String) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Add a String request context value to the requestContextMap
    -
    -
    addRequestContextMap(Map<String, Object>) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Setter method for requestContextMap
    -
    -
    addRequestData(GetFeaturesRequestData) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Adds a single GetFeaturesRequestData object to the List
    -
    -
    ai.tecton.client - package ai.tecton.client
    -
     
    -
    ai.tecton.client.exceptions - package ai.tecton.client.exceptions
    -
    -
    This package contains exception classes with error messages for Tecton Client
    -
    -
    ai.tecton.client.model - package ai.tecton.client.model
    -
    -
    This package contains classes modeling the various types representing the results from the - FeatureService API
    -
    -
    ai.tecton.client.request - package ai.tecton.client.request
    -
    -
    This package contains classes modeling the different requests to the FeatureService API
    -
    -
    ai.tecton.client.response - package ai.tecton.client.response
    -
    -
    This package contains classes representing the high-level responses from FeatureService API
    -
    -
    ai.tecton.client.transport - package ai.tecton.client.transport
    -
    -
    This package contains implementation of an HTTP Client using OkHttp library from Square.
    -
    -
    ai.tecton.client.version - package ai.tecton.client.version
    -
     
    -
    ALL - ai.tecton.client.model.MetadataOption
    -
    -
    Include all metadata in the response
    -
    -
    ALL_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
    -
    - -
    -
    apiKey(String) - Method in class ai.tecton.client.TectonClient.Builder
    -
    -
    Setter for apiKey
    -
    -
    ARRAY - ai.tecton.client.model.ValueType
    -
    -
    java.util.List
    -
    -
    - - - -

    B

    -
    -
    BadRequestException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by a bad request.
    -
    -
    BadRequestException(String, int) - Constructor for exception ai.tecton.client.exceptions.BadRequestException
    -
     
    -
    BOOLEAN - ai.tecton.client.model.ValueType
    -
    -
    java.lang.Boolean
    -
    -
    booleanValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type Boolean
    -
    -
    build() - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    build() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Returns an instance of GetFeaturesBatchRequest created from the fields set on this - builder
    -
    -
    build() - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
    -
    -
    Returns an instance of GetFeatureServiceMetadataRequest
    -
    -
    build() - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Returns an instance of GetFeaturesRequest created from the fields set on this builder
    -
    -
    build() - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
    -
    -
    Build a GetFeaturesRequestData object from the Builder
    -
    -
    build() - Method in class ai.tecton.client.request.RequestOptions.Builder
    -
    -
    Build a RequestOptions object from the Builder
    -
    -
    build() - Method in class ai.tecton.client.TectonClient.Builder
    -
    -
    Build a TectonClient object from the Builder
    -
    -
    build() - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Build a TectonClientOptions object from the Builder
    -
    -
    Builder() - Constructor for class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    Builder() - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Constructs an empty Builder
    -
    -
    Builder() - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
    -
     
    -
    Builder() - Constructor for class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Constructor for instantiating an empty Builder
    -
    -
    Builder() - Constructor for class ai.tecton.client.request.GetFeaturesRequestData.Builder
    -
    -
    Instantiates a new Builder
    -
    -
    Builder() - Constructor for class ai.tecton.client.request.RequestOptions.Builder
    -
    -
    Instantiates a new Builder
    -
    -
    Builder() - Constructor for class ai.tecton.client.TectonClient.Builder
    -
     
    -
    Builder() - Constructor for class ai.tecton.client.TectonClientOptions.Builder
    -
     
    -
    buildRequestWithDefaultHeaders(HttpRequest) - Method in class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    - - - -

    C

    -
    -
    CACHED_MISSING_DATA - ai.tecton.client.model.FeatureStatus
    -
     
    -
    CACHED_PRESENT - ai.tecton.client.model.FeatureStatus
    -
    -
    Unable to infer feature status.
    -
    -
    CACHED_UNKNOWN - ai.tecton.client.model.FeatureStatus
    -
     
    -
    CALL_FAILURE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    close() - Method in class ai.tecton.client.TectonClient
    -
    -
    Releases all resources (connection pool, threads) held by the Tecton Client.
    -
    -
    close() - Method in class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    connectTimeout(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Setter for the connectTimeout value for new connections.
    -
    -
    createException(int, String) - Static method in class ai.tecton.client.exceptions.HttpStatusExceptionFactory
    -
     
    -
    - - - -

    D

    -
    -
    DATA_TYPE - ai.tecton.client.model.MetadataOption
    -
    -
    Include feature data_type in the response.
    -
    -
    DEFAULT_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
    -
    -
    The default set of MetadataOptions for a GetFeaturesRequest and a GetFeaturesBatchRequest, includes MetadataOption.NAME and MetadataOption.DATA_TYPE
    -
    -
    DEFAULT_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.request.RequestConstants
    -
    -
    The default microBatchSize for a GetFeaturesBatchRequest, set to 1
    -
    -
    DELETE - ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
     
    -
    DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
     
    -
    - - - -

    E

    -
    -
    EFFECTIVE_TIME - ai.tecton.client.model.MetadataOption
    -
    -
    Include feature effective_time in the response
    -
    -
    EMPTY_FEATURE_VECTOR - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    EMPTY_REQUEST_MAPS - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    EMPTY_RESPONSE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    equals(Object) - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.model.NameAndType
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.request.AbstractGetFeaturesRequest
    -
     
    -
    equals(Object) - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
     
    -
    equals(Object) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
    -
    -
    Overrides equals() in class Object
    -
    -
    equals(Object) - Method in class ai.tecton.client.response.GetFeaturesResponse
    -
    -
    Overrides equals() in class Object
    -
    -
    ERROR_RESPONSE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    - - - -

    F

    -
    -
    FEATURE_DESCRIPTION - ai.tecton.client.model.MetadataOption
    -
    -
    Include user defined description of the feature in the response
    -
    -
    FEATURE_STATUS - ai.tecton.client.model.MetadataOption
    -
    -
    Include feature status of the feature value in the response
    -
    -
    FEATURE_TAGS - ai.tecton.client.model.MetadataOption
    -
    -
    Include user defined tags of the feature in the response
    -
    -
    FeatureServiceMetadata - Class in ai.tecton.client.model
    -
    -
    Class that encapsulates metadata for a FeatureService, including the schema for join keys and - request context in GetFeaturesRequestData, as well as the in-order output schema of feature - values in GetFeaturesResponse.
    -
    -
    FeatureServiceMetadata(List<NameAndType>, List<NameAndType>, List<NameAndType>) - Constructor for class ai.tecton.client.model.FeatureServiceMetadata
    -
     
    -
    featureServiceName(String) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Setter for featureServiceName
    -
    -
    featureServiceName(String) - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
    -
    -
    Setter for featureServiceName
    -
    -
    featureServiceName(String) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Setter for featureServiceName
    -
    -
    FeatureStatus - Enum in ai.tecton.client.model
    -
    -
    Enum that represents the different feature statuses that can be returned when requesting feature - values.
    -
    -
    FeatureValue - Class in ai.tecton.client.model
    -
    -
    Class that represents each feature value in the feature vector returned in the - GetFeaturesResponse
    -
    -
    FeatureValue(Object, String, ValueType, Optional<ValueType>, String, Optional<FeatureStatus>, String, Map<String, String>) - Constructor for class ai.tecton.client.model.FeatureValue
    -
     
    -
    FLOAT32 - ai.tecton.client.model.ValueType
    -
    -
    java.lang.Float
    -
    -
    float32ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type ARRAY with FLOAT32 values
    -
    -
    FLOAT64 - ai.tecton.client.model.ValueType
    -
    -
    java.lang.Double
    -
    -
    float64ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type ARRAY with FLOAT64 values
    -
    -
    float64Value() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type Float64 (Double)
    -
    -
    ForbiddenException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by forbidden access.
    -
    -
    ForbiddenException(String, int) - Constructor for exception ai.tecton.client.exceptions.ForbiddenException
    -
     
    -
    fromString(String) - Static method in enum ai.tecton.client.model.FeatureStatus
    -
    -
    Returns the Status that matches the String representation passed as a parameter
    -
    -
    fromString(String) - Static method in enum ai.tecton.client.model.ValueType
    -
    -
    Returns the ValueType that matches the String representation passed as a parameter
    -
    -
    - - - -

    G

    -
    -
    GatewayTimeoutException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by a gateway timeout.
    -
    -
    GatewayTimeoutException(String, int) - Constructor for exception ai.tecton.client.exceptions.GatewayTimeoutException
    -
     
    -
    GET - ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
     
    -
    getBatchResponseList() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
    -
    -
    Returns a list of GetFeaturesResponse objects, each encapsulating a feature vector and - its metadata
    -
    -
    getBatchSloInformation() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
    -
    -
    Returns an SloInformation object wrapped in Optional if present in - the response received from the HTTP API, Optional.empty() otherwise
    -
    -
    getBooleanOption(String) - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Gets a specific option value by key as a Boolean.
    -
    -
    getConnectTimeout() - Method in class ai.tecton.client.TectonClientOptions
    -
    -
    Returns the connectTimeout configuration for the client
    -
    -
    getDataType() - Method in class ai.tecton.client.model.NameAndType
    -
    -
    Returns the Tecton data type as a ValueType
    -
    -
    getEffectiveTime() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the effective serving time for this feature.
    -
    -
    getEndpoint() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
    -
    Returns the endpoint for request type.
    -
    -
    getEndpoint() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
     
    -
    getFeatureDescription() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the description of the feature
    -
    -
    getFeatureName() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the feature service name
    -
    -
    getFeatureNamespace() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the feature service namespace
    -
    -
    getFeatures(GetFeaturesRequest) - Method in class ai.tecton.client.TectonClient
    -
    -
    Makes a request to the /get-features endpoint and returns the response in the form of a GetFeaturesResponse object
    -
    -
    getFeaturesBatch(GetFeaturesBatchRequest) - Method in class ai.tecton.client.TectonClient
    -
    -
    Makes a batch request to retrieve a list of feature vector and metadata for a given workspace - and feature service
    -
    -
    GetFeaturesBatchRequest - Class in ai.tecton.client.request
    -
    -
    A class that represents a batch request to retrieve a list of feature vectors from the feature - server, for a given workspaceName and featureServiceName.
    -
    -
    GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
    -
    -
    GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
    -
    -
    GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Constructor that creates a new GetFeaturesBatchRequest with the specified parameters.
    -
    -
    GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int, Duration) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Constructor that creates a new GetFeaturesBatchRequest with the specified parameters
    -
    -
    GetFeaturesBatchRequest(String, String, List<GetFeaturesRequestData>, Set<MetadataOption>, int, Duration, RequestOptions) - Constructor for class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Constructor that creates a new GetFeaturesBatchRequest with the specified parameters including - requestOptions
    -
    -
    GetFeaturesBatchRequest.Builder - Class in ai.tecton.client.request
    -
    -
    A Builder class for building instances of GetFeaturesBatchRequest objects from values - configured by setters
    -
    -
    GetFeaturesBatchResponse - Class in ai.tecton.client.response
    -
    -
    A class that represents the response from the HTTP API for when fetching batch features.
    -
    -
    GetFeaturesBatchResponse(List<HttpResponse>, Duration, int) - Constructor for class ai.tecton.client.response.GetFeaturesBatchResponse
    -
     
    -
    getFeatureServiceMetadata() - Method in class ai.tecton.client.response.GetFeatureServiceMetadataResponse
    -
    -
    Returns a FeatureServiceMetadata object that represents the metadata returned
    -
    -
    getFeatureServiceMetadata(GetFeatureServiceMetadataRequest) - Method in class ai.tecton.client.TectonClient
    -
    -
    Makes a request to the /metadata endpoint and returns the response in the form of a GetFeatureServiceMetadataResponse object
    -
    -
    GetFeatureServiceMetadataRequest - Class in ai.tecton.client.request
    -
    -
    A subclass of AbstractTectonRequest that represents a request to the - feature-service/metadata endpoint to retrieve metadata about a FeatureService, including - the schema for join keys and request context, and the in-order output schema of returned feature - values.
    -
    -
    GetFeatureServiceMetadataRequest(String) - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest
    -
    -
    Constructor that creates a new GetFeatureServiceMetadataRequest with default workspaceName - "prod" and featureServiceName provided.
    -
    -
    GetFeatureServiceMetadataRequest(String, String) - Constructor for class ai.tecton.client.request.GetFeatureServiceMetadataRequest
    -
    -
    Constructor that creates a new GetFeatureServiceMetadataRequest with the specified - workspaceName and featureServiceName
    -
    -
    GetFeatureServiceMetadataRequest.Builder - Class in ai.tecton.client.request
    -
    -
    A Builder class for building instances of GetFeatureServiceMetadataRequest objects from - values configured by setters
    -
    -
    GetFeatureServiceMetadataResponse - Class in ai.tecton.client.response
    -
    -
    A class that represents the response from the HTTP API for a call to the /metadata - endpoint.
    -
    -
    GetFeatureServiceMetadataResponse(String, Duration) - Constructor for class ai.tecton.client.response.GetFeatureServiceMetadataResponse
    -
     
    -
    getFeatureServiceName() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
    -
    Returns the featureServiceName set for the request
    -
    -
    GetFeaturesRequest - Class in ai.tecton.client.request
    -
    -
    A subclass of AbstractTectonRequest that represents a request to the /get-features - endpoint to retrieve feature values from Tecton's online store
    -
    -
    GetFeaturesRequest(String, String, GetFeaturesRequestData) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Constructor that creates a new GetFeaturesRequest with specified parameters.
    -
    -
    GetFeaturesRequest(String, String, GetFeaturesRequestData, Set<MetadataOption>) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Constructor that creates a new GetFeaturesRequest with the specified parameters
    -
    -
    GetFeaturesRequest(String, String, GetFeaturesRequestData, Set<MetadataOption>, RequestOptions) - Constructor for class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Constructor that creates a new GetFeaturesRequest with the specified parameters including - requestOptions
    -
    -
    GetFeaturesRequest.Builder - Class in ai.tecton.client.request
    -
    -
    A Builder class for building instances of GetFeaturesRequest objects from values - configured by setters
    -
    -
    getFeaturesRequestData(GetFeaturesRequestData) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    - -
    -
    GetFeaturesRequestData - Class in ai.tecton.client.request
    -
    -
    Class that represents the map parameters passed to a GetFeaturesRequest
    -
    -
    GetFeaturesRequestData() - Constructor for class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Constructor that creates a new GetFeaturesRequestData object with an empty joinKeyMap and - requestContextMap
    -
    -
    GetFeaturesRequestData.Builder - Class in ai.tecton.client.request
    -
    -
    A Builder class for creating an instance of GetFeaturesRequestData object
    -
    -
    GetFeaturesResponse - Class in ai.tecton.client.response
    -
    -
    A class that represents the response from the HTTP API for a call to the /get-features - endpoint.
    -
    -
    GetFeaturesResponse(String, Duration) - Constructor for class ai.tecton.client.response.GetFeaturesResponse
    -
     
    -
    getFeatureStatus() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the feature status of the feature value.
    -
    -
    getFeatureTags() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the tags of the feature
    -
    -
    getFeatureValues() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Get metadata for feature values to be returned in the GetFeaturesResponse.
    -
    -
    getFeatureValues() - Method in class ai.tecton.client.response.GetFeaturesResponse
    -
    -
    Returns the feature vector as a List of FeatureValue objects
    -
    -
    getFeatureValuesAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Returns the feature metadata as a Map with the (featureNamespace.featureName) - as the key
    -
    -
    getFeatureValuesAsMap() - Method in class ai.tecton.client.response.GetFeaturesResponse
    -
    -
    Returns the feature vector as a Map, with the feature name as the key
    -
    -
    getInputJoinKeys() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Get the input join keys that are expected to be passed in the joinKeyMap parameter for a GetFeaturesRequest for the feature service
    -
    -
    getInputJoinKeysAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Returns the input join keys as a Map with the join key name as the key
    -
    -
    getInputRequestContextKeys() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Get the request context keys that are expected to be passed in the requestContextMap parameter - for a GetFeaturesRequest for the feature service
    -
    -
    getInputRequestContextKeysAsMap() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Returns the request context keys as a Map with the request context name as - the key
    -
    -
    getIntegerOption(String) - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Gets a specific option value by key as an Integer.
    -
    -
    getJoinKeyMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
     
    -
    getJsonName() - Method in enum ai.tecton.client.model.MetadataOption
    -
     
    -
    getKeepAliveDuration() - Method in class ai.tecton.client.TectonClientOptions
    -
    -
    Returns the keepAliveDuration configuration for the client's ConnectionPool
    -
    -
    getListElementType() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the individual array element type if the feature valueType is ARRAY.
    -
    -
    getListElementType() - Method in class ai.tecton.client.model.NameAndType
    -
    -
    Returns the array element type if present, Optional.empty() otherwise
    -
    -
    getMaxIdleConnections() - Method in class ai.tecton.client.TectonClientOptions
    -
    -
    Returns the maxIdleConnections configuration for the client's ConnectionPool
    -
    -
    getMaxParallelRequests() - Method in class ai.tecton.client.TectonClientOptions
    -
    -
    Returns the maxParallelRequests configuration for the client
    -
    -
    getMessage() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    getMethod() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
    -
    Returns the Http Method used by the request type.
    -
    -
    getMethod() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
     
    -
    getMicroBatchSize() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Getter for microBatchSize
    -
    -
    getName() - Method in class ai.tecton.client.model.NameAndType
    -
    -
    Returns the name
    -
    -
    getOption(String) - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Gets a specific option value by key.
    -
    -
    getOptions() - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Gets all options as an unmodifiable map.
    -
    -
    getReadTimeout() - Method in class ai.tecton.client.TectonClientOptions
    -
    -
    Returns the readTimeout configuration for the client
    -
    -
    getRequestContextMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
     
    -
    getRequestDuration() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    getRequestLatency() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
    -
    -
    Returns the response time (network latency + online store latency) as provided by the - underlying Http Client
    -
    -
    getRequestList() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Return Batch Request List
    -
    -
    getResponseBody() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    getResponseCode() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    getServerTimeSeconds() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    This includes the total time spent in the feature server including online transforms and store - latency
    -
    -
    getSloIneligibilityReasons() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Reasons for the response not being eligible for SLO.
    -
    -
    getSloInformation() - Method in class ai.tecton.client.response.GetFeaturesResponse
    -
    -
    Returns an SloInformation objected wrapped in Optional if present in - the response received from the HTTP API, Optional.empty() otherwise
    -
    -
    getSloServerTimeSeconds() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    The server time minus any time spent waiting on line transforms to finish after all table - transforms have finished.
    -
    -
    getStatusCode() - Method in exception ai.tecton.client.exceptions.TectonException
    -
    -
    Returns the HTTP Status Code associated with the exception
    -
    -
    getStoreMaxLatency() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Max latency observed by the request from the store in seconds
    -
    -
    getStoreResponseSizeBytes() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Total store response size bytes
    -
    -
    getTimeout() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Getter for timeout
    -
    -
    getValueType() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Returns the ValueType representing the Tecton data_type for the feature value.
    -
    -
    getWorkspaceName() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
    -
    Returns the workspaceName set for the request
    -
    -
    - - - -

    H

    -
    -
    hashCode() - Method in class ai.tecton.client.model.FeatureServiceMetadata
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.model.NameAndType
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.request.AbstractGetFeaturesRequest
    -
     
    -
    hashCode() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
     
    -
    hashCode() - Method in class ai.tecton.client.request.GetFeaturesBatchRequest
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.response.GetFeaturesBatchResponse
    -
    -
    Overrides hashCode() in class Object
    -
    -
    hashCode() - Method in class ai.tecton.client.response.GetFeaturesResponse
    -
    -
    Overrides hashCode() in class Object
    -
    -
    httpClient(OkHttpClient) - Method in class ai.tecton.client.TectonClient.Builder
    -
    -
    Setter for httpClient
    -
    -
    HttpResponse - Class in ai.tecton.client.transport
    -
     
    -
    HttpStatusExceptionFactory - Class in ai.tecton.client.exceptions
    -
    -
    An exception factory that maps HTTP Status code to a custom Exception
    -
    -
    HttpStatusExceptionFactory() - Constructor for class ai.tecton.client.exceptions.HttpStatusExceptionFactory
    -
     
    -
    - - - -

    I

    -
    -
    INT64 - ai.tecton.client.model.ValueType
    -
    -
    java.lang.Long
    -
    -
    int64ArrayValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type ARRAY with INT64 values
    -
    -
    int64value() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type int64 (Long)
    -
    -
    InternalServerErrorException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a server error caused by an internal server failure.
    -
    -
    InternalServerErrorException(String, int) - Constructor for exception ai.tecton.client.exceptions.InternalServerErrorException
    -
     
    -
    INVALID_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_FEATURESERVICENAME - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_GET_FEATURE_BATCH_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_GET_FEATURE_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_GET_SERVICE_METADATA_REQUEST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_KEY - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_KEY_VALUE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_REQUEST_DATA_LIST - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_RESPONSE_FORMAT - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_URL - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    INVALID_WORKSPACENAME - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    InvalidRequestParameterException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by a misconfigured request, such as missing - workspace name, missing feature service name etc.
    -
    -
    InvalidRequestParameterException(String) - Constructor for exception ai.tecton.client.exceptions.InvalidRequestParameterException
    -
     
    -
    isClosed() - Method in class ai.tecton.client.TectonClient
    -
    -
    Returns true if the Tecton Client has been closed, false otherwise
    -
    -
    isClosed() - Method in class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    isEmpty() - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Checks if any options are set.
    -
    -
    isEmptyJoinKeyMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
     
    -
    isEmptyRequestContextMap() - Method in class ai.tecton.client.request.GetFeaturesRequestData
    -
     
    -
    isSloEligible() - Method in class ai.tecton.client.model.SloInformation
    -
    -
    Returns true if the response was eligible for SLO, false otherwise.
    -
    -
    isSloEligible(boolean) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    isSuccessful() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    - - - -

    J

    -
    -
    joinKeyMap(Map<String, String>) - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
    -
    -
    Setter for joinKeyMap
    -
    -
    JSON_ADAPTER_FACTORY - Static variable in annotation type ai.tecton.client.request.AbstractGetFeaturesRequest.SerializeNulls
    -
     
    -
    - - - -

    K

    -
    -
    keepAliveDuration(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Setter for the time to keep an idle connection alive in the pool before closing it
    -
    -
    - - - -

    M

    -
    -
    MAX_MICRO_BATCH_SIZE - Static variable in class ai.tecton.client.request.RequestConstants
    -
    -
    The maximum microBatchSize supported by Tecton for a GetFeaturesBatchRequest, set to - 5
    -
    -
    maxIdleConnections(int) - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Setter for the maximum number of idle connections to keep in the pool.
    -
    -
    maxParallelRequests(int) - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Setter for the maximum number of requests to execute concurrently.
    -
    -
    MetadataOption - Enum in ai.tecton.client.model
    -
    -
    Enum representing options for different metadata information that can be requested from the - FeatureService API
    -
    -
    metadataOptions(Set<MetadataOption>) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Setter for MetadataOption
    -
    -
    metadataOptions(Set<MetadataOption>) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Setter for metadataOptions
    -
    -
    microBatchSize(int) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Setter for microBatchSize
    -
    -
    MISMATCHED_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    MISSING_DATA - ai.tecton.client.model.FeatureStatus
    -
    -
    Either the join keys requested are missing in the online store or the feature value is outside - ttl.
    -
    -
    MISSING_EXPECTED_METADATA - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    - - - -

    N

    -
    -
    NAME - ai.tecton.client.model.MetadataOption
    -
    -
    Include feature name in the response
    -
    -
    NameAndType - Class in ai.tecton.client.model
    -
    -
    Class that represents the return types for parameters of FeatureServiceMetadata
    -
    -
    NameAndType(String, ValueType) - Constructor for class ai.tecton.client.model.NameAndType
    -
    -
    Constructor that creates a NameAndType with specified name and dataType
    -
    -
    NameAndType(String, ValueType, ValueType) - Constructor for class ai.tecton.client.model.NameAndType
    -
    -
    Constructor that creates a NameAndType with specified name, dataType and listElementType
    -
    -
    NONE - ai.tecton.client.model.MetadataOption
    -
    -
    Include no metadata in the response.
    -
    -
    NONE_METADATA_OPTIONS - Static variable in class ai.tecton.client.request.RequestConstants
    -
    -
    An empty set representing None MetadataOptions for a GetFeaturesRequest and a GetFeaturesBatchRequest
    -
    -
    NONE_TIMEOUT - Static variable in class ai.tecton.client.request.RequestConstants
    -
    -
    The default parameter for None timeout for a GetFeaturesBatchRequest
    -
    -
    - - - -

    O

    -
    -
    option(String, Object) - Method in class ai.tecton.client.request.RequestOptions.Builder
    -
    -
    Sets a request option with the given key and value.
    -
    -
    - - - -

    P

    -
    -
    performParallelRequests(String, TectonHttpClient.HttpMethod, List<String>, Duration) - Method in class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    performRequest(String, TectonHttpClient.HttpMethod, String) - Method in class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    POST - ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
     
    -
    PRESENT - ai.tecton.client.model.FeatureStatus
    -
    -
    Feature value is present and returned with no errors.
    -
    -
    PUT - ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
     
    -
    - - - -

    R

    -
    -
    readTimeout(Duration) - Method in class ai.tecton.client.TectonClientOptions.Builder
    -
    -
    Setter for the readTimeout value for new connections.
    -
    -
    REDIS_LATENCY_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
     
    -
    REDIS_RESPONSE_SIZE_LIMIT_EXCEEDED - ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
     
    -
    RequestConstants - Class in ai.tecton.client.request
    -
    -
    Class that provides static constants that can be used as default parameters to various Request - objects
    -
    -
    RequestConstants() - Constructor for class ai.tecton.client.request.RequestConstants
    -
     
    -
    requestContextMap(Map<String, Object>) - Method in class ai.tecton.client.request.GetFeaturesRequestData.Builder
    -
    -
    Setter for requestContextMap
    -
    -
    requestDataList(List<GetFeaturesRequestData>) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    - -
    -
    requestOptions(RequestOptions) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Setter for RequestOptions
    -
    -
    requestOptions(RequestOptions) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Setter for RequestOptions
    -
    -
    RequestOptions - Class in ai.tecton.client.request
    -
    -
    Class that represents request-level options to control feature server behavior.
    -
    -
    RequestOptions() - Constructor for class ai.tecton.client.request.RequestOptions
    -
    -
    Constructor that creates a new RequestOptions object with default empty options
    -
    -
    RequestOptions.Builder - Class in ai.tecton.client.request
    -
    -
    A Builder class for creating an instance of RequestOptions object
    -
    -
    requestToJson() - Method in class ai.tecton.client.request.AbstractTectonRequest
    -
     
    -
    requestToJson() - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest
    -
    -
    Get the JSON representation of the request that will be sent to the /metadata endpoint.
    -
    -
    requestToJson() - Method in class ai.tecton.client.request.GetFeaturesRequest
    -
    -
    Get the JSON representation of the request that will be sent to the /get-features endpoint.
    -
    -
    ResourceExhaustedException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by resource exhaustion.
    -
    -
    ResourceExhaustedException(String, int) - Constructor for exception ai.tecton.client.exceptions.ResourceExhaustedException
    -
     
    -
    ResourceNotFoundException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by a resource not being found.
    -
    -
    ResourceNotFoundException(String, int) - Constructor for exception ai.tecton.client.exceptions.ResourceNotFoundException
    -
     
    -
    - - - -

    S

    -
    -
    serverTimeSeconds(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    ServiceUnavailableException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a server error caused by a temporarily unavailable service.
    -
    -
    ServiceUnavailableException(String, int) - Constructor for exception ai.tecton.client.exceptions.ServiceUnavailableException
    -
     
    -
    setOption(String, Object) - Method in class ai.tecton.client.request.RequestOptions
    -
    -
    Sets a request option with the given key and value.
    -
    -
    SLO_INFO - ai.tecton.client.model.MetadataOption
    -
    -
    Include SLO Info in the response
    -
    -
    sloIneligibilityReasons(Set<SloInformation.SloIneligibilityReason>) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    SloInformation - Class in ai.tecton.client.model
    -
    -
    Class that represents SLO Info provided by Tecton when serving feature values.
    -
    -
    SloInformation(Boolean, Double, Double, Integer, Set<SloInformation.SloIneligibilityReason>, Double) - Constructor for class ai.tecton.client.model.SloInformation
    -
     
    -
    SloInformation.Builder - Class in ai.tecton.client.model
    -
     
    -
    SloInformation.SloIneligibilityReason - Enum in ai.tecton.client.model
    -
    -
    Reasons due to which the Feature Serving Response can be ineligible for SLO
    -
    -
    sloServerTimeSeconds(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    storeMaxLatency(Double) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    storeResponseSizeBytes(Integer) - Method in class ai.tecton.client.model.SloInformation.Builder
    -
     
    -
    STRING - ai.tecton.client.model.ValueType
    -
    -
    java.lang.String
    -
    -
    stringArrayValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type ARRAY with String values
    -
    -
    stringValue() - Method in class ai.tecton.client.model.FeatureValue
    -
    -
    A Feature Value of type String
    -
    -
    - - - -

    T

    -
    -
    TectonClient - Class in ai.tecton.client
    -
    -
    A client for interacting with the Tecton FeatureService API.
    -
    -
    TectonClient(String, String) - Constructor for class ai.tecton.client.TectonClient
    -
    -
    Constructor for a simple Tecton Client
    -
    -
    TectonClient(String, String, TectonClientOptions) - Constructor for class ai.tecton.client.TectonClient
    -
    -
    Constructor for a Tecton Client with custom configurations
    -
    -
    TectonClient(String, String, OkHttpClient) - Constructor for class ai.tecton.client.TectonClient
    -
    -
    Constructor for a Tecton Client with a custom OkHttpClient
    -
    -
    TectonClient.Builder - Class in ai.tecton.client
    -
    -
    A Builder class for creating an instance of TectonClient object with specific - configurations
    -
    -
    TectonClientException - Exception in ai.tecton.client.exceptions
    -
    -
    Exception class that is used to represent various client side errors, such as bad request - parameters, unauthorized requests etc.
    -
    -
    TectonClientException(String) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
    -
     
    -
    TectonClientException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
    -
     
    -
    TectonClientException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
    -
     
    -
    TectonClientException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonClientException
    -
     
    -
    tectonClientOptions(TectonClientOptions) - Method in class ai.tecton.client.TectonClient.Builder
    -
    -
    Setter for tectonClientOptions
    -
    -
    TectonClientOptions - Class in ai.tecton.client
    -
    -
    A class that provides custom configuration options for the underlying Http Client.
    -
    -
    TectonClientOptions() - Constructor for class ai.tecton.client.TectonClientOptions
    -
    -
    Constructor that instantiates a TectonClientOptions with default configurations
    -
    -
    TectonClientOptions(Duration, Duration, int, Duration, int) - Constructor for class ai.tecton.client.TectonClientOptions
    -
    -
    Constructor that configures the TectonClientOptions with specified configurations
    -
    -
    TectonClientOptions.Builder - Class in ai.tecton.client
    -
    -
    A Builder class for creating an instance of TectonClientOptions object with specific - configurations
    -
    -
    TectonErrorMessage - Class in ai.tecton.client.exceptions
    -
    -
    Class that declares all the different error messages included in the TectonClientException
    -
    -
    TectonErrorMessage() - Constructor for class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    TectonException - Exception in ai.tecton.client.exceptions
    -
    -
    Base class that is used to represent various errors encountered by the Java client.
    -
    -
    TectonException(String) - Constructor for exception ai.tecton.client.exceptions.TectonException
    -
     
    -
    TectonException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonException
    -
     
    -
    TectonException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonException
    -
     
    -
    TectonException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonException
    -
     
    -
    TectonHttpClient - Class in ai.tecton.client.transport
    -
     
    -
    TectonHttpClient(String, String, TectonClientOptions) - Constructor for class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    TectonHttpClient(String, String, OkHttpClient) - Constructor for class ai.tecton.client.transport.TectonHttpClient
    -
     
    -
    TectonHttpClient.HttpMethod - Enum in ai.tecton.client.transport
    -
     
    -
    TectonServiceException - Exception in ai.tecton.client.exceptions
    -
    -
    Exception class that is used to represent server side errors.
    -
    -
    TectonServiceException(String) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
    -
     
    -
    TectonServiceException(String, int) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
    -
     
    -
    TectonServiceException(String, Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
    -
     
    -
    TectonServiceException(Throwable) - Constructor for exception ai.tecton.client.exceptions.TectonServiceException
    -
     
    -
    timeout(Duration) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
     
    -
    toString() - Method in class ai.tecton.client.request.RequestOptions
    -
     
    -
    - - - -

    U

    -
    -
    UnauthorizedException - Exception in ai.tecton.client.exceptions
    -
    -
    An exception class representing a client error caused by unauthorized access.
    -
    -
    UnauthorizedException(String, int) - Constructor for exception ai.tecton.client.exceptions.UnauthorizedException
    -
     
    -
    UNKNOWN - ai.tecton.client.model.FeatureStatus
    -
     
    -
    UNKNOWN - ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
     
    -
    UNKNOWN_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    UNKNOWN_DATETIME_FORMAT - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    UNSUPPORTED_LIST_DATA_TYPE - Static variable in class ai.tecton.client.exceptions.TectonErrorMessage
    -
     
    -
    url(String) - Method in class ai.tecton.client.TectonClient.Builder
    -
    -
    Setter for url
    -
    -
    - - - -

    V

    -
    -
    validateResponse() - Method in class ai.tecton.client.transport.HttpResponse
    -
     
    -
    valueOf(String) - Static method in enum ai.tecton.client.model.FeatureStatus
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    valueOf(String) - Static method in enum ai.tecton.client.model.MetadataOption
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    valueOf(String) - Static method in enum ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    valueOf(String) - Static method in enum ai.tecton.client.model.ValueType
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    valueOf(String) - Static method in enum ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
    -
    Returns the enum constant of this type with the specified name.
    -
    -
    values() - Static method in enum ai.tecton.client.model.FeatureStatus
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    values() - Static method in enum ai.tecton.client.model.MetadataOption
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    values() - Static method in enum ai.tecton.client.model.SloInformation.SloIneligibilityReason
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    values() - Static method in enum ai.tecton.client.model.ValueType
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    values() - Static method in enum ai.tecton.client.transport.TectonHttpClient.HttpMethod
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared.
    -
    -
    ValueType - Enum in ai.tecton.client.model
    -
    -
    Enum that represents the different data types (primitive or custom) of feature values
    -
    -
    Version - Class in ai.tecton.client.version
    -
     
    -
    Version() - Constructor for class ai.tecton.client.version.Version
    -
     
    -
    VERSION - Static variable in class ai.tecton.client.version.Version
    -
     
    -
    - - - -

    W

    -
    -
    workspaceName(String) - Method in class ai.tecton.client.request.GetFeaturesBatchRequest.Builder
    -
    -
    Setter for workspaceName
    -
    -
    workspaceName(String) - Method in class ai.tecton.client.request.GetFeatureServiceMetadataRequest.Builder
    -
    -
    Setter for workspaceName
    -
    -
    workspaceName(String) - Method in class ai.tecton.client.request.GetFeaturesRequest.Builder
    -
    -
    Setter for workspaceName
    -
    -
    -A B C D E F G H I J K M N O P R S T U V W 
    All Classes All Packages
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/index.html b/target/apidocs/index.html deleted file mode 100644 index 4002c9ba..00000000 --- a/target/apidocs/index.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - -Overview (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Tecton Java Client 0.9.4-SNAPSHOT API

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    ai.tecton.client 
    ai.tecton.client.exceptions -
    This package contains exception classes with error messages for Tecton Client
    -
    ai.tecton.client.model -
    This package contains classes modeling the various types representing the results from the - FeatureService API
    -
    ai.tecton.client.request -
    This package contains classes modeling the different requests to the FeatureService API
    -
    ai.tecton.client.response -
    This package contains classes representing the high-level responses from FeatureService API
    -
    ai.tecton.client.transport -
    This package contains implementation of an HTTP Client using OkHttp library from Square.
    -
    ai.tecton.client.version 
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/jquery-ui.overrides.css b/target/apidocs/jquery-ui.overrides.css deleted file mode 100644 index facf852c..00000000 --- a/target/apidocs/jquery-ui.overrides.css +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - /* Overrides the color of selection used in jQuery UI */ - background: #F8981D; - border: 1px solid #F8981D; -} diff --git a/target/apidocs/jquery/external/jquery/jquery.js b/target/apidocs/jquery/external/jquery/jquery.js deleted file mode 100644 index 50937333..00000000 --- a/target/apidocs/jquery/external/jquery/jquery.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( "\r\n"; - -// inject VBScript -document.write(IEBinaryToArray_ByteStr_Script); - -global.JSZipUtils._getBinaryFromXHR = function (xhr) { - var binary = xhr.responseBody; - var byteMapping = {}; - for ( var i = 0; i < 256; i++ ) { - for ( var j = 0; j < 256; j++ ) { - byteMapping[ String.fromCharCode( i + (j << 8) ) ] = - String.fromCharCode(i) + String.fromCharCode(j); - } - } - var rawBytes = IEBinaryToArray_ByteStr(binary); - var lastChr = IEBinaryToArray_ByteStr_Last(binary); - return rawBytes.replace(/[\s\S]/g, function( match ) { - return byteMapping[match]; - }) + lastChr; -}; - -// enforcing Stuk's coding style -// vim: set shiftwidth=4 softtabstop=4: - -},{}]},{},[1]) -; diff --git a/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js deleted file mode 100644 index 93d8bc8e..00000000 --- a/target/apidocs/jquery/jszip-utils/dist/jszip-utils-ie.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - -JSZipUtils - A collection of cross-browser utilities to go along with JSZip. - - -(c) 2014 Stuart Knightley, David Duponchel -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. - -*/ -!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js b/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js deleted file mode 100644 index 775895ec..00000000 --- a/target/apidocs/jquery/jszip-utils/dist/jszip-utils.js +++ /dev/null @@ -1,118 +0,0 @@ -/*! - -JSZipUtils - A collection of cross-browser utilities to go along with JSZip. - - -(c) 2014 Stuart Knightley, David Duponchel -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. - -*/ -!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o - -(c) 2014 Stuart Knightley, David Duponchel -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. - -*/ -!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g - -(c) 2009-2016 Stuart Knightley -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/master/LICENSE -*/ - -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; - enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); - enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; - enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; - - output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); - - } - - return output.join(""); -}; - -// public method for decoding -exports.decode = function(input) { - var chr1, chr2, chr3; - var enc1, enc2, enc3, enc4; - var i = 0, resultIndex = 0; - - var dataUrlPrefix = "data:"; - - if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { - // This is a common error: people give a data url - // (data:image/png;base64,iVBOR...) with a {base64: true} and - // wonders why things don't work. - // We can detect that the string input looks like a data url but we - // *can't* be sure it is one: removing everything up to the comma would - // be too dangerous. - throw new Error("Invalid base64 input, it looks like a data url."); - } - - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); - - var totalLength = input.length * 3 / 4; - if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { - totalLength--; - } - if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { - totalLength--; - } - if (totalLength % 1 !== 0) { - // totalLength is not an integer, the length does not match a valid - // base64 content. That can happen if: - // - the input is not a base64 content - // - the input is *almost* a base64 content, with a extra chars at the - // beginning or at the end - // - the input uses a base64 variant (base64url for example) - throw new Error("Invalid base64 input, bad content length."); - } - var output; - if (support.uint8array) { - output = new Uint8Array(totalLength|0); - } else { - output = new Array(totalLength|0); - } - - while (i < input.length) { - - enc1 = _keyStr.indexOf(input.charAt(i++)); - enc2 = _keyStr.indexOf(input.charAt(i++)); - enc3 = _keyStr.indexOf(input.charAt(i++)); - enc4 = _keyStr.indexOf(input.charAt(i++)); - - chr1 = (enc1 << 2) | (enc2 >> 4); - chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); - chr3 = ((enc3 & 3) << 6) | enc4; - - output[resultIndex++] = chr1; - - if (enc3 !== 64) { - output[resultIndex++] = chr2; - } - if (enc4 !== 64) { - output[resultIndex++] = chr3; - } - - } - - return output; -}; - -},{"./support":30,"./utils":32}],2:[function(require,module,exports){ -'use strict'; - -var external = require("./external"); -var DataWorker = require('./stream/DataWorker'); -var Crc32Probe = require('./stream/Crc32Probe'); -var DataLengthProbe = require('./stream/DataLengthProbe'); - -/** - * Represent a compressed object, with everything needed to decompress it. - * @constructor - * @param {number} compressedSize the size of the data compressed. - * @param {number} uncompressedSize the size of the data after decompression. - * @param {number} crc32 the crc32 of the decompressed file. - * @param {object} compression the type of compression, see lib/compressions.js. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. - */ -function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { - this.compressedSize = compressedSize; - this.uncompressedSize = uncompressedSize; - this.crc32 = crc32; - this.compression = compression; - this.compressedContent = data; -} - -CompressedObject.prototype = { - /** - * Create a worker to get the uncompressed content. - * @return {GenericWorker} the worker. - */ - getContentWorker: function () { - var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) - .pipe(this.compression.uncompressWorker()) - .pipe(new DataLengthProbe("data_length")); - - var that = this; - worker.on("end", function () { - if (this.streamInfo['data_length'] !== that.uncompressedSize) { - throw new Error("Bug : uncompressed data size mismatch"); - } - }); - return worker; - }, - /** - * Create a worker to get the compressed content. - * @return {GenericWorker} the worker. - */ - getCompressedWorker: function () { - return new DataWorker(external.Promise.resolve(this.compressedContent)) - .withStreamInfo("compressedSize", this.compressedSize) - .withStreamInfo("uncompressedSize", this.uncompressedSize) - .withStreamInfo("crc32", this.crc32) - .withStreamInfo("compression", this.compression) - ; - } -}; - -/** - * Chain the given worker with other workers to compress the content with the - * given compression. - * @param {GenericWorker} uncompressedWorker the worker to pipe. - * @param {Object} compression the compression object. - * @param {Object} compressionOptions the options to use when compressing. - * @return {GenericWorker} the new worker compressing the content. - */ -CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { - return uncompressedWorker - .pipe(new Crc32Probe()) - .pipe(new DataLengthProbe("uncompressedSize")) - .pipe(compression.compressWorker(compressionOptions)) - .pipe(new DataLengthProbe("compressedSize")) - .withStreamInfo("compression", compression); -}; - -module.exports = CompressedObject; - -},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ -'use strict'; - -var GenericWorker = require("./stream/GenericWorker"); - -exports.STORE = { - magic: "\x00\x00", - compressWorker : function (compressionOptions) { - return new GenericWorker("STORE compression"); - }, - uncompressWorker : function () { - return new GenericWorker("STORE decompression"); - } -}; -exports.DEFLATE = require('./flate'); - -},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); - -/** - * The following functions come from pako, from pako/lib/zlib/crc32.js - * released under the MIT license, see pako https://github.com/nodeca/pako/ - */ - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for(var n =0; n < 256; n++){ - c = n; - for(var k =0; k < 8; k++){ - c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, end = pos + len; - - crc = crc ^ (-1); - - for (var i = pos; i < end; i++ ) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - -// That's all for the pako functions. - -/** - * Compute the crc32 of a string. - * This is almost the same as the function crc32, but for strings. Using the - * same function for the two use cases leads to horrible performances. - * @param {Number} crc the starting value of the crc. - * @param {String} str the string to use. - * @param {Number} len the length of the string. - * @param {Number} pos the starting position for the crc32 computation. - * @return {Number} the computed crc32. - */ -function crc32str(crc, str, len, pos) { - var t = crcTable, end = pos + len; - - crc = crc ^ (-1); - - for (var i = pos; i < end; i++ ) { - crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - -module.exports = function crc32wrapper(input, crc) { - if (typeof input === "undefined" || !input.length) { - return 0; - } - - var isArray = utils.getTypeOf(input) !== "string"; - - if(isArray) { - return crc32(crc|0, input, input.length, 0); - } else { - return crc32str(crc|0, input, input.length, 0); - } -}; - -},{"./utils":32}],5:[function(require,module,exports){ -'use strict'; -exports.base64 = false; -exports.binary = false; -exports.dir = false; -exports.createFolders = true; -exports.date = null; -exports.compression = null; -exports.compressionOptions = null; -exports.comment = null; -exports.unixPermissions = null; -exports.dosPermissions = null; - -},{}],6:[function(require,module,exports){ -/* global Promise */ -'use strict'; - -// load the global object first: -// - it should be better integrated in the system (unhandledRejection in node) -// - the environment may have a custom Promise implementation (see zone.js) -var ES6Promise = null; -if (typeof Promise !== "undefined") { - ES6Promise = Promise; -} else { - ES6Promise = require("lie"); -} - -/** - * Let the user use/change some implementations. - */ -module.exports = { - Promise: ES6Promise -}; - -},{"lie":37}],7:[function(require,module,exports){ -'use strict'; -var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); - -var pako = require("pako"); -var utils = require("./utils"); -var GenericWorker = require("./stream/GenericWorker"); - -var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; - -exports.magic = "\x08\x00"; - -/** - * Create a worker that uses pako to inflate/deflate. - * @constructor - * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". - * @param {Object} options the options to use when (de)compressing. - */ -function FlateWorker(action, options) { - GenericWorker.call(this, "FlateWorker/" + action); - - this._pako = null; - this._pakoAction = action; - this._pakoOptions = options; - // the `meta` object from the last chunk received - // this allow this worker to pass around metadata - this.meta = {}; -} - -utils.inherits(FlateWorker, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -FlateWorker.prototype.processChunk = function (chunk) { - this.meta = chunk.meta; - if (this._pako === null) { - this._createPako(); - } - this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); -}; - -/** - * @see GenericWorker.flush - */ -FlateWorker.prototype.flush = function () { - GenericWorker.prototype.flush.call(this); - if (this._pako === null) { - this._createPako(); - } - this._pako.push([], true); -}; -/** - * @see GenericWorker.cleanUp - */ -FlateWorker.prototype.cleanUp = function () { - GenericWorker.prototype.cleanUp.call(this); - this._pako = null; -}; - -/** - * Create the _pako object. - * TODO: lazy-loading this object isn't the best solution but it's the - * quickest. The best solution is to lazy-load the worker list. See also the - * issue #446. - */ -FlateWorker.prototype._createPako = function () { - this._pako = new pako[this._pakoAction]({ - raw: true, - level: this._pakoOptions.level || -1 // default compression - }); - var self = this; - this._pako.onData = function(data) { - self.push({ - data : data, - meta : self.meta - }); - }; -}; - -exports.compressWorker = function (compressionOptions) { - return new FlateWorker("Deflate", compressionOptions); -}; -exports.uncompressWorker = function () { - return new FlateWorker("Inflate", {}); -}; - -},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var GenericWorker = require('../stream/GenericWorker'); -var utf8 = require('../utf8'); -var crc32 = require('../crc32'); -var signature = require('../signature'); - -/** - * Transform an integer into a string in hexadecimal. - * @private - * @param {number} dec the number to convert. - * @param {number} bytes the number of bytes to generate. - * @returns {string} the result. - */ -var decToHex = function(dec, bytes) { - var hex = "", i; - for (i = 0; i < bytes; i++) { - hex += String.fromCharCode(dec & 0xff); - dec = dec >>> 8; - } - return hex; -}; - -/** - * Generate the UNIX part of the external file attributes. - * @param {Object} unixPermissions the unix permissions or null. - * @param {Boolean} isDir true if the entry is a directory, false otherwise. - * @return {Number} a 32 bit integer. - * - * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : - * - * TTTTsstrwxrwxrwx0000000000ADVSHR - * ^^^^____________________________ file type, see zipinfo.c (UNX_*) - * ^^^_________________________ setuid, setgid, sticky - * ^^^^^^^^^________________ permissions - * ^^^^^^^^^^______ not used ? - * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only - */ -var generateUnixExternalFileAttr = function (unixPermissions, isDir) { - - var result = unixPermissions; - if (!unixPermissions) { - // I can't use octal values in strict mode, hence the hexa. - // 040775 => 0x41fd - // 0100664 => 0x81b4 - result = isDir ? 0x41fd : 0x81b4; - } - return (result & 0xFFFF) << 16; -}; - -/** - * Generate the DOS part of the external file attributes. - * @param {Object} dosPermissions the dos permissions or null. - * @param {Boolean} isDir true if the entry is a directory, false otherwise. - * @return {Number} a 32 bit integer. - * - * Bit 0 Read-Only - * Bit 1 Hidden - * Bit 2 System - * Bit 3 Volume Label - * Bit 4 Directory - * Bit 5 Archive - */ -var generateDosExternalFileAttr = function (dosPermissions, isDir) { - - // the dir flag is already set for compatibility - return (dosPermissions || 0) & 0x3F; -}; - -/** - * Generate the various parts used in the construction of the final zip file. - * @param {Object} streamInfo the hash with information about the compressed file. - * @param {Boolean} streamedContent is the content streamed ? - * @param {Boolean} streamingEnded is the stream finished ? - * @param {number} offset the current offset from the start of the zip file. - * @param {String} platform let's pretend we are this platform (change platform dependents fields) - * @param {Function} encodeFileName the function to encode the file name / comment. - * @return {Object} the zip parts. - */ -var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { - var file = streamInfo['file'], - compression = streamInfo['compression'], - useCustomEncoding = encodeFileName !== utf8.utf8encode, - encodedFileName = utils.transformTo("string", encodeFileName(file.name)), - utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), - comment = file.comment, - encodedComment = utils.transformTo("string", encodeFileName(comment)), - utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), - useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, - useUTF8ForComment = utfEncodedComment.length !== comment.length, - dosTime, - dosDate, - extraFields = "", - unicodePathExtraField = "", - unicodeCommentExtraField = "", - dir = file.dir, - date = file.date; - - - var dataInfo = { - crc32 : 0, - compressedSize : 0, - uncompressedSize : 0 - }; - - // if the content is streamed, the sizes/crc32 are only available AFTER - // the end of the stream. - if (!streamedContent || streamingEnded) { - dataInfo.crc32 = streamInfo['crc32']; - dataInfo.compressedSize = streamInfo['compressedSize']; - dataInfo.uncompressedSize = streamInfo['uncompressedSize']; - } - - var bitflag = 0; - if (streamedContent) { - // Bit 3: the sizes/crc32 are set to zero in the local header. - // The correct values are put in the data descriptor immediately - // following the compressed data. - bitflag |= 0x0008; - } - if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { - // Bit 11: Language encoding flag (EFS). - bitflag |= 0x0800; - } - - - var extFileAttr = 0; - var versionMadeBy = 0; - if (dir) { - // dos or unix, we set the dos dir flag - extFileAttr |= 0x00010; - } - if(platform === "UNIX") { - versionMadeBy = 0x031E; // UNIX, version 3.0 - extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); - } else { // DOS or other, fallback to DOS - versionMadeBy = 0x0014; // DOS, version 2.0 - extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); - } - - // date - // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html - // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html - // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html - - dosTime = date.getUTCHours(); - dosTime = dosTime << 6; - dosTime = dosTime | date.getUTCMinutes(); - dosTime = dosTime << 5; - dosTime = dosTime | date.getUTCSeconds() / 2; - - dosDate = date.getUTCFullYear() - 1980; - dosDate = dosDate << 4; - dosDate = dosDate | (date.getUTCMonth() + 1); - dosDate = dosDate << 5; - dosDate = dosDate | date.getUTCDate(); - - if (useUTF8ForFileName) { - // set the unicode path extra field. unzip needs at least one extra - // field to correctly handle unicode path, so using the path is as good - // as any other information. This could improve the situation with - // other archive managers too. - // This field is usually used without the utf8 flag, with a non - // unicode path in the header (winrar, winzip). This helps (a bit) - // with the messy Windows' default compressed folders feature but - // breaks on p7zip which doesn't seek the unicode path extra field. - // So for now, UTF-8 everywhere ! - unicodePathExtraField = - // Version - decToHex(1, 1) + - // NameCRC32 - decToHex(crc32(encodedFileName), 4) + - // UnicodeName - utfEncodedFileName; - - extraFields += - // Info-ZIP Unicode Path Extra Field - "\x75\x70" + - // size - decToHex(unicodePathExtraField.length, 2) + - // content - unicodePathExtraField; - } - - if(useUTF8ForComment) { - - unicodeCommentExtraField = - // Version - decToHex(1, 1) + - // CommentCRC32 - decToHex(crc32(encodedComment), 4) + - // UnicodeName - utfEncodedComment; - - extraFields += - // Info-ZIP Unicode Path Extra Field - "\x75\x63" + - // size - decToHex(unicodeCommentExtraField.length, 2) + - // content - unicodeCommentExtraField; - } - - var header = ""; - - // version needed to extract - header += "\x0A\x00"; - // general purpose bit flag - header += decToHex(bitflag, 2); - // compression method - header += compression.magic; - // last mod file time - header += decToHex(dosTime, 2); - // last mod file date - header += decToHex(dosDate, 2); - // crc-32 - header += decToHex(dataInfo.crc32, 4); - // compressed size - header += decToHex(dataInfo.compressedSize, 4); - // uncompressed size - header += decToHex(dataInfo.uncompressedSize, 4); - // file name length - header += decToHex(encodedFileName.length, 2); - // extra field length - header += decToHex(extraFields.length, 2); - - - var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; - - var dirRecord = signature.CENTRAL_FILE_HEADER + - // version made by (00: DOS) - decToHex(versionMadeBy, 2) + - // file header (common to file and central directory) - header + - // file comment length - decToHex(encodedComment.length, 2) + - // disk number start - "\x00\x00" + - // internal file attributes TODO - "\x00\x00" + - // external file attributes - decToHex(extFileAttr, 4) + - // relative offset of local header - decToHex(offset, 4) + - // file name - encodedFileName + - // extra field - extraFields + - // file comment - encodedComment; - - return { - fileRecord: fileRecord, - dirRecord: dirRecord - }; -}; - -/** - * Generate the EOCD record. - * @param {Number} entriesCount the number of entries in the zip file. - * @param {Number} centralDirLength the length (in bytes) of the central dir. - * @param {Number} localDirLength the length (in bytes) of the local dir. - * @param {String} comment the zip file comment as a binary string. - * @param {Function} encodeFileName the function to encode the comment. - * @return {String} the EOCD record. - */ -var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { - var dirEnd = ""; - var encodedComment = utils.transformTo("string", encodeFileName(comment)); - - // end of central dir signature - dirEnd = signature.CENTRAL_DIRECTORY_END + - // number of this disk - "\x00\x00" + - // number of the disk with the start of the central directory - "\x00\x00" + - // total number of entries in the central directory on this disk - decToHex(entriesCount, 2) + - // total number of entries in the central directory - decToHex(entriesCount, 2) + - // size of the central directory 4 bytes - decToHex(centralDirLength, 4) + - // offset of start of central directory with respect to the starting disk number - decToHex(localDirLength, 4) + - // .ZIP file comment length - decToHex(encodedComment.length, 2) + - // .ZIP file comment - encodedComment; - - return dirEnd; -}; - -/** - * Generate data descriptors for a file entry. - * @param {Object} streamInfo the hash generated by a worker, containing information - * on the file entry. - * @return {String} the data descriptors. - */ -var generateDataDescriptors = function (streamInfo) { - var descriptor = ""; - descriptor = signature.DATA_DESCRIPTOR + - // crc-32 4 bytes - decToHex(streamInfo['crc32'], 4) + - // compressed size 4 bytes - decToHex(streamInfo['compressedSize'], 4) + - // uncompressed size 4 bytes - decToHex(streamInfo['uncompressedSize'], 4); - - return descriptor; -}; - - -/** - * A worker to concatenate other workers to create a zip file. - * @param {Boolean} streamFiles `true` to stream the content of the files, - * `false` to accumulate it. - * @param {String} comment the comment to use. - * @param {String} platform the platform to use, "UNIX" or "DOS". - * @param {Function} encodeFileName the function to encode file names and comments. - */ -function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { - GenericWorker.call(this, "ZipFileWorker"); - // The number of bytes written so far. This doesn't count accumulated chunks. - this.bytesWritten = 0; - // The comment of the zip file - this.zipComment = comment; - // The platform "generating" the zip file. - this.zipPlatform = platform; - // the function to encode file names and comments. - this.encodeFileName = encodeFileName; - // Should we stream the content of the files ? - this.streamFiles = streamFiles; - // If `streamFiles` is false, we will need to accumulate the content of the - // files to calculate sizes / crc32 (and write them *before* the content). - // This boolean indicates if we are accumulating chunks (it will change a lot - // during the lifetime of this worker). - this.accumulate = false; - // The buffer receiving chunks when accumulating content. - this.contentBuffer = []; - // The list of generated directory records. - this.dirRecords = []; - // The offset (in bytes) from the beginning of the zip file for the current source. - this.currentSourceOffset = 0; - // The total number of entries in this zip file. - this.entriesCount = 0; - // the name of the file currently being added, null when handling the end of the zip file. - // Used for the emitted metadata. - this.currentFile = null; - - - - this._sources = []; -} -utils.inherits(ZipFileWorker, GenericWorker); - -/** - * @see GenericWorker.push - */ -ZipFileWorker.prototype.push = function (chunk) { - - var currentFilePercent = chunk.meta.percent || 0; - var entriesCount = this.entriesCount; - var remainingFiles = this._sources.length; - - if(this.accumulate) { - this.contentBuffer.push(chunk); - } else { - this.bytesWritten += chunk.data.length; - - GenericWorker.prototype.push.call(this, { - data : chunk.data, - meta : { - currentFile : this.currentFile, - percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 - } - }); - } -}; - -/** - * The worker started a new source (an other worker). - * @param {Object} streamInfo the streamInfo object from the new source. - */ -ZipFileWorker.prototype.openedSource = function (streamInfo) { - this.currentSourceOffset = this.bytesWritten; - this.currentFile = streamInfo['file'].name; - - var streamedContent = this.streamFiles && !streamInfo['file'].dir; - - // don't stream folders (because they don't have any content) - if(streamedContent) { - var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); - this.push({ - data : record.fileRecord, - meta : {percent:0} - }); - } else { - // we need to wait for the whole file before pushing anything - this.accumulate = true; - } -}; - -/** - * The worker finished a source (an other worker). - * @param {Object} streamInfo the streamInfo object from the finished source. - */ -ZipFileWorker.prototype.closedSource = function (streamInfo) { - this.accumulate = false; - var streamedContent = this.streamFiles && !streamInfo['file'].dir; - var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); - - this.dirRecords.push(record.dirRecord); - if(streamedContent) { - // after the streamed file, we put data descriptors - this.push({ - data : generateDataDescriptors(streamInfo), - meta : {percent:100} - }); - } else { - // the content wasn't streamed, we need to push everything now - // first the file record, then the content - this.push({ - data : record.fileRecord, - meta : {percent:0} - }); - while(this.contentBuffer.length) { - this.push(this.contentBuffer.shift()); - } - } - this.currentFile = null; -}; - -/** - * @see GenericWorker.flush - */ -ZipFileWorker.prototype.flush = function () { - - var localDirLength = this.bytesWritten; - for(var i = 0; i < this.dirRecords.length; i++) { - this.push({ - data : this.dirRecords[i], - meta : {percent:100} - }); - } - var centralDirLength = this.bytesWritten - localDirLength; - - var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); - - this.push({ - data : dirEnd, - meta : {percent:100} - }); -}; - -/** - * Prepare the next source to be read. - */ -ZipFileWorker.prototype.prepareNextSource = function () { - this.previous = this._sources.shift(); - this.openedSource(this.previous.streamInfo); - if (this.isPaused) { - this.previous.pause(); - } else { - this.previous.resume(); - } -}; - -/** - * @see GenericWorker.registerPrevious - */ -ZipFileWorker.prototype.registerPrevious = function (previous) { - this._sources.push(previous); - var self = this; - - previous.on('data', function (chunk) { - self.processChunk(chunk); - }); - previous.on('end', function () { - self.closedSource(self.previous.streamInfo); - if(self._sources.length) { - self.prepareNextSource(); - } else { - self.end(); - } - }); - previous.on('error', function (e) { - self.error(e); - }); - return this; -}; - -/** - * @see GenericWorker.resume - */ -ZipFileWorker.prototype.resume = function () { - if(!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if (!this.previous && this._sources.length) { - this.prepareNextSource(); - return true; - } - if (!this.previous && !this._sources.length && !this.generatedError) { - this.end(); - return true; - } -}; - -/** - * @see GenericWorker.error - */ -ZipFileWorker.prototype.error = function (e) { - var sources = this._sources; - if(!GenericWorker.prototype.error.call(this, e)) { - return false; - } - for(var i = 0; i < sources.length; i++) { - try { - sources[i].error(e); - } catch(e) { - // the `error` exploded, nothing to do - } - } - return true; -}; - -/** - * @see GenericWorker.lock - */ -ZipFileWorker.prototype.lock = function () { - GenericWorker.prototype.lock.call(this); - var sources = this._sources; - for(var i = 0; i < sources.length; i++) { - sources[i].lock(); - } -}; - -module.exports = ZipFileWorker; - -},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ -'use strict'; - -var compressions = require('../compressions'); -var ZipFileWorker = require('./ZipFileWorker'); - -/** - * Find the compression to use. - * @param {String} fileCompression the compression defined at the file level, if any. - * @param {String} zipCompression the compression defined at the load() level. - * @return {Object} the compression object to use. - */ -var getCompression = function (fileCompression, zipCompression) { - - var compressionName = fileCompression || zipCompression; - var compression = compressions[compressionName]; - if (!compression) { - throw new Error(compressionName + " is not a valid compression method !"); - } - return compression; -}; - -/** - * Create a worker to generate a zip file. - * @param {JSZip} zip the JSZip instance at the right root level. - * @param {Object} options to generate the zip file. - * @param {String} comment the comment to use. - */ -exports.generateWorker = function (zip, options, comment) { - - var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); - var entriesCount = 0; - try { - - zip.forEach(function (relativePath, file) { - entriesCount++; - var compression = getCompression(file.options.compression, options.compression); - var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; - var dir = file.dir, date = file.date; - - file._compressWorker(compression, compressionOptions) - .withStreamInfo("file", { - name : relativePath, - dir : dir, - date : date, - comment : file.comment || "", - unixPermissions : file.unixPermissions, - dosPermissions : file.dosPermissions - }) - .pipe(zipFileWorker); - }); - zipFileWorker.entriesCount = entriesCount; - } catch (e) { - zipFileWorker.error(e); - } - - return zipFileWorker; -}; - -},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ -'use strict'; - -/** - * Representation a of zip file in js - * @constructor - */ -function JSZip() { - // if this constructor is used without `new`, it adds `new` before itself: - if(!(this instanceof JSZip)) { - return new JSZip(); - } - - if(arguments.length) { - throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); - } - - // object containing the files : - // { - // "folder/" : {...}, - // "folder/data.txt" : {...} - // } - // NOTE: we use a null prototype because we do not - // want filenames like "toString" coming from a zip file - // to overwrite methods and attributes in a normal Object. - this.files = Object.create(null); - - this.comment = null; - - // Where we are in the hierarchy - this.root = ""; - this.clone = function() { - var newObj = new JSZip(); - for (var i in this) { - if (typeof this[i] !== "function") { - newObj[i] = this[i]; - } - } - return newObj; - }; -} -JSZip.prototype = require('./object'); -JSZip.prototype.loadAsync = require('./load'); -JSZip.support = require('./support'); -JSZip.defaults = require('./defaults'); - -// TODO find a better way to handle this version, -// a require('package.json').version doesn't work with webpack, see #327 -JSZip.version = "3.7.1"; - -JSZip.loadAsync = function (content, options) { - return new JSZip().loadAsync(content, options); -}; - -JSZip.external = require("./external"); -module.exports = JSZip; - -},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ -'use strict'; -var utils = require('./utils'); -var external = require("./external"); -var utf8 = require('./utf8'); -var ZipEntries = require('./zipEntries'); -var Crc32Probe = require('./stream/Crc32Probe'); -var nodejsUtils = require("./nodejsUtils"); - -/** - * Check the CRC32 of an entry. - * @param {ZipEntry} zipEntry the zip entry to check. - * @return {Promise} the result. - */ -function checkEntryCRC32(zipEntry) { - return new external.Promise(function (resolve, reject) { - var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); - worker.on("error", function (e) { - reject(e); - }) - .on("end", function () { - if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { - reject(new Error("Corrupted zip : CRC32 mismatch")); - } else { - resolve(); - } - }) - .resume(); - }); -} - -module.exports = function (data, options) { - var zip = this; - options = utils.extend(options || {}, { - base64: false, - checkCRC32: false, - optimizedBinaryString: false, - createFolders: false, - decodeFileName: utf8.utf8decode - }); - - if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { - return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); - } - - return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) - .then(function (data) { - var zipEntries = new ZipEntries(options); - zipEntries.load(data); - return zipEntries; - }).then(function checkCRC32(zipEntries) { - var promises = [external.Promise.resolve(zipEntries)]; - var files = zipEntries.files; - if (options.checkCRC32) { - for (var i = 0; i < files.length; i++) { - promises.push(checkEntryCRC32(files[i])); - } - } - return external.Promise.all(promises); - }).then(function addFiles(results) { - var zipEntries = results.shift(); - var files = zipEntries.files; - for (var i = 0; i < files.length; i++) { - var input = files[i]; - zip.file(input.fileNameStr, input.decompressed, { - binary: true, - optimizedBinaryString: true, - date: input.date, - dir: input.dir, - comment: input.fileCommentStr.length ? input.fileCommentStr : null, - unixPermissions: input.unixPermissions, - dosPermissions: input.dosPermissions, - createFolders: options.createFolders - }); - } - if (zipEntries.zipComment.length) { - zip.comment = zipEntries.zipComment; - } - - return zip; - }); -}; - -},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ -"use strict"; - -var utils = require('../utils'); -var GenericWorker = require('../stream/GenericWorker'); - -/** - * A worker that use a nodejs stream as source. - * @constructor - * @param {String} filename the name of the file entry for this stream. - * @param {Readable} stream the nodejs stream. - */ -function NodejsStreamInputAdapter(filename, stream) { - GenericWorker.call(this, "Nodejs stream input adapter for " + filename); - this._upstreamEnded = false; - this._bindStream(stream); -} - -utils.inherits(NodejsStreamInputAdapter, GenericWorker); - -/** - * Prepare the stream and bind the callbacks on it. - * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. - * @param {Stream} stream the nodejs stream to use. - */ -NodejsStreamInputAdapter.prototype._bindStream = function (stream) { - var self = this; - this._stream = stream; - stream.pause(); - stream - .on("data", function (chunk) { - self.push({ - data: chunk, - meta : { - percent : 0 - } - }); - }) - .on("error", function (e) { - if(self.isPaused) { - this.generatedError = e; - } else { - self.error(e); - } - }) - .on("end", function () { - if(self.isPaused) { - self._upstreamEnded = true; - } else { - self.end(); - } - }); -}; -NodejsStreamInputAdapter.prototype.pause = function () { - if(!GenericWorker.prototype.pause.call(this)) { - return false; - } - this._stream.pause(); - return true; -}; -NodejsStreamInputAdapter.prototype.resume = function () { - if(!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if(this._upstreamEnded) { - this.end(); - } else { - this._stream.resume(); - } - - return true; -}; - -module.exports = NodejsStreamInputAdapter; - -},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ -'use strict'; - -var Readable = require('readable-stream').Readable; - -var utils = require('../utils'); -utils.inherits(NodejsStreamOutputAdapter, Readable); - -/** -* A nodejs stream using a worker as source. -* @see the SourceWrapper in http://nodejs.org/api/stream.html -* @constructor -* @param {StreamHelper} helper the helper wrapping the worker -* @param {Object} options the nodejs stream options -* @param {Function} updateCb the update callback. -*/ -function NodejsStreamOutputAdapter(helper, options, updateCb) { - Readable.call(this, options); - this._helper = helper; - - var self = this; - helper.on("data", function (data, meta) { - if (!self.push(data)) { - self._helper.pause(); - } - if(updateCb) { - updateCb(meta); - } - }) - .on("error", function(e) { - self.emit('error', e); - }) - .on("end", function () { - self.push(null); - }); -} - - -NodejsStreamOutputAdapter.prototype._read = function() { - this._helper.resume(); -}; - -module.exports = NodejsStreamOutputAdapter; - -},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ -'use strict'; - -module.exports = { - /** - * True if this is running in Nodejs, will be undefined in a browser. - * In a browser, browserify won't include this file and the whole module - * will be resolved an empty object. - */ - isNode : typeof Buffer !== "undefined", - /** - * Create a new nodejs Buffer from an existing content. - * @param {Object} data the data to pass to the constructor. - * @param {String} encoding the encoding to use. - * @return {Buffer} a new Buffer. - */ - newBufferFrom: function(data, encoding) { - if (Buffer.from && Buffer.from !== Uint8Array.from) { - return Buffer.from(data, encoding); - } else { - if (typeof data === "number") { - // Safeguard for old Node.js versions. On newer versions, - // Buffer.from(number) / Buffer(number, encoding) already throw. - throw new Error("The \"data\" argument must not be a number"); - } - return new Buffer(data, encoding); - } - }, - /** - * Create a new nodejs Buffer with the specified size. - * @param {Integer} size the size of the buffer. - * @return {Buffer} a new Buffer. - */ - allocBuffer: function (size) { - if (Buffer.alloc) { - return Buffer.alloc(size); - } else { - var buf = new Buffer(size); - buf.fill(0); - return buf; - } - }, - /** - * Find out if an object is a Buffer. - * @param {Object} b the object to test. - * @return {Boolean} true if the object is a Buffer, false otherwise. - */ - isBuffer : function(b){ - return Buffer.isBuffer(b); - }, - - isStream : function (obj) { - return obj && - typeof obj.on === "function" && - typeof obj.pause === "function" && - typeof obj.resume === "function"; - } -}; - -},{}],15:[function(require,module,exports){ -'use strict'; -var utf8 = require('./utf8'); -var utils = require('./utils'); -var GenericWorker = require('./stream/GenericWorker'); -var StreamHelper = require('./stream/StreamHelper'); -var defaults = require('./defaults'); -var CompressedObject = require('./compressedObject'); -var ZipObject = require('./zipObject'); -var generate = require("./generate"); -var nodejsUtils = require("./nodejsUtils"); -var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); - - -/** - * Add a file in the current folder. - * @private - * @param {string} name the name of the file - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file - * @param {Object} originalOptions the options of the file - * @return {Object} the new file. - */ -var fileAdd = function(name, data, originalOptions) { - // be sure sub folders exist - var dataType = utils.getTypeOf(data), - parent; - - - /* - * Correct options. - */ - - var o = utils.extend(originalOptions || {}, defaults); - o.date = o.date || new Date(); - if (o.compression !== null) { - o.compression = o.compression.toUpperCase(); - } - - if (typeof o.unixPermissions === "string") { - o.unixPermissions = parseInt(o.unixPermissions, 8); - } - - // UNX_IFDIR 0040000 see zipinfo.c - if (o.unixPermissions && (o.unixPermissions & 0x4000)) { - o.dir = true; - } - // Bit 4 Directory - if (o.dosPermissions && (o.dosPermissions & 0x0010)) { - o.dir = true; - } - - if (o.dir) { - name = forceTrailingSlash(name); - } - if (o.createFolders && (parent = parentFolder(name))) { - folderAdd.call(this, parent, true); - } - - var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; - if (!originalOptions || typeof originalOptions.binary === "undefined") { - o.binary = !isUnicodeString; - } - - - var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; - - if (isCompressedEmpty || o.dir || !data || data.length === 0) { - o.base64 = false; - o.binary = true; - data = ""; - o.compression = "STORE"; - dataType = "string"; - } - - /* - * Convert content to fit. - */ - - var zipObjectContent = null; - if (data instanceof CompressedObject || data instanceof GenericWorker) { - zipObjectContent = data; - } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { - zipObjectContent = new NodejsStreamInputAdapter(name, data); - } else { - zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); - } - - var object = new ZipObject(name, zipObjectContent, o); - this.files[name] = object; - /* - TODO: we can't throw an exception because we have async promises - (we can have a promise of a Date() for example) but returning a - promise is useless because file(name, data) returns the JSZip - object for chaining. Should we break that to allow the user - to catch the error ? - - return external.Promise.resolve(zipObjectContent) - .then(function () { - return object; - }); - */ -}; - -/** - * Find the parent folder of the path. - * @private - * @param {string} path the path to use - * @return {string} the parent folder, or "" - */ -var parentFolder = function (path) { - if (path.slice(-1) === '/') { - path = path.substring(0, path.length - 1); - } - var lastSlash = path.lastIndexOf('/'); - return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; -}; - -/** - * Returns the path with a slash at the end. - * @private - * @param {String} path the path to check. - * @return {String} the path with a trailing slash. - */ -var forceTrailingSlash = function(path) { - // Check the name ends with a / - if (path.slice(-1) !== "/") { - path += "/"; // IE doesn't like substr(-1) - } - return path; -}; - -/** - * Add a (sub) folder in the current folder. - * @private - * @param {string} name the folder's name - * @param {boolean=} [createFolders] If true, automatically create sub - * folders. Defaults to false. - * @return {Object} the new folder. - */ -var folderAdd = function(name, createFolders) { - createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; - - name = forceTrailingSlash(name); - - // Does this folder already exist? - if (!this.files[name]) { - fileAdd.call(this, name, null, { - dir: true, - createFolders: createFolders - }); - } - return this.files[name]; -}; - -/** -* Cross-window, cross-Node-context regular expression detection -* @param {Object} object Anything -* @return {Boolean} true if the object is a regular expression, -* false otherwise -*/ -function isRegExp(object) { - return Object.prototype.toString.call(object) === "[object RegExp]"; -} - -// return the actual prototype of JSZip -var out = { - /** - * @see loadAsync - */ - load: function() { - throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); - }, - - - /** - * Call a callback function for each entry at this folder level. - * @param {Function} cb the callback function: - * function (relativePath, file) {...} - * It takes 2 arguments : the relative path and the file. - */ - forEach: function(cb) { - var filename, relativePath, file; - /* jshint ignore:start */ - // ignore warning about unwanted properties because this.files is a null prototype object - for (filename in this.files) { - file = this.files[filename]; - relativePath = filename.slice(this.root.length, filename.length); - if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root - cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... - } - } - /* jshint ignore:end */ - }, - - /** - * Filter nested files/folders with the specified function. - * @param {Function} search the predicate to use : - * function (relativePath, file) {...} - * It takes 2 arguments : the relative path and the file. - * @return {Array} An array of matching elements. - */ - filter: function(search) { - var result = []; - this.forEach(function (relativePath, entry) { - if (search(relativePath, entry)) { // the file matches the function - result.push(entry); - } - - }); - return result; - }, - - /** - * Add a file to the zip file, or search a file. - * @param {string|RegExp} name The name of the file to add (if data is defined), - * the name of the file to find (if no data) or a regex to match files. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded - * @param {Object} o File options - * @return {JSZip|Object|Array} this JSZip object (when adding a file), - * a file (when searching by string) or an array of files (when searching by regex). - */ - file: function(name, data, o) { - if (arguments.length === 1) { - if (isRegExp(name)) { - var regexp = name; - return this.filter(function(relativePath, file) { - return !file.dir && regexp.test(relativePath); - }); - } - else { // text - var obj = this.files[this.root + name]; - if (obj && !obj.dir) { - return obj; - } else { - return null; - } - } - } - else { // more than one argument : we have data ! - name = this.root + name; - fileAdd.call(this, name, data, o); - } - return this; - }, - - /** - * Add a directory to the zip file, or search. - * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. - * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. - */ - folder: function(arg) { - if (!arg) { - return this; - } - - if (isRegExp(arg)) { - return this.filter(function(relativePath, file) { - return file.dir && arg.test(relativePath); - }); - } - - // else, name is a new folder - var name = this.root + arg; - var newFolder = folderAdd.call(this, name); - - // Allow chaining by returning a new object with this folder as the root - var ret = this.clone(); - ret.root = newFolder.name; - return ret; - }, - - /** - * Delete a file, or a directory and all sub-files, from the zip - * @param {string} name the name of the file to delete - * @return {JSZip} this JSZip object - */ - remove: function(name) { - name = this.root + name; - var file = this.files[name]; - if (!file) { - // Look for any folders - if (name.slice(-1) !== "/") { - name += "/"; - } - file = this.files[name]; - } - - if (file && !file.dir) { - // file - delete this.files[name]; - } else { - // maybe a folder, delete recursively - var kids = this.filter(function(relativePath, file) { - return file.name.slice(0, name.length) === name; - }); - for (var i = 0; i < kids.length; i++) { - delete this.files[kids[i].name]; - } - } - - return this; - }, - - /** - * Generate the complete zip file - * @param {Object} options the options to generate the zip file : - * - compression, "STORE" by default. - * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. - * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file - */ - generate: function(options) { - throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); - }, - - /** - * Generate the complete zip file as an internal stream. - * @param {Object} options the options to generate the zip file : - * - compression, "STORE" by default. - * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. - * @return {StreamHelper} the streamed zip file. - */ - generateInternalStream: function(options) { - var worker, opts = {}; - try { - opts = utils.extend(options || {}, { - streamFiles: false, - compression: "STORE", - compressionOptions : null, - type: "", - platform: "DOS", - comment: null, - mimeType: 'application/zip', - encodeFileName: utf8.utf8encode - }); - - opts.type = opts.type.toLowerCase(); - opts.compression = opts.compression.toUpperCase(); - - // "binarystring" is preferred but the internals use "string". - if(opts.type === "binarystring") { - opts.type = "string"; - } - - if (!opts.type) { - throw new Error("No output type specified."); - } - - utils.checkSupport(opts.type); - - // accept nodejs `process.platform` - if( - opts.platform === 'darwin' || - opts.platform === 'freebsd' || - opts.platform === 'linux' || - opts.platform === 'sunos' - ) { - opts.platform = "UNIX"; - } - if (opts.platform === 'win32') { - opts.platform = "DOS"; - } - - var comment = opts.comment || this.comment || ""; - worker = generate.generateWorker(this, opts, comment); - } catch (e) { - worker = new GenericWorker("error"); - worker.error(e); - } - return new StreamHelper(worker, opts.type || "string", opts.mimeType); - }, - /** - * Generate the complete zip file asynchronously. - * @see generateInternalStream - */ - generateAsync: function(options, onUpdate) { - return this.generateInternalStream(options).accumulate(onUpdate); - }, - /** - * Generate the complete zip file asynchronously. - * @see generateInternalStream - */ - generateNodeStream: function(options, onUpdate) { - options = options || {}; - if (!options.type) { - options.type = "nodebuffer"; - } - return this.generateInternalStream(options).toNodejsStream(onUpdate); - } -}; -module.exports = out; - -},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ -/* - * This file is used by module bundlers (browserify/webpack/etc) when - * including a stream implementation. We use "readable-stream" to get a - * consistent behavior between nodejs versions but bundlers often have a shim - * for "stream". Using this shim greatly improve the compatibility and greatly - * reduce the final size of the bundle (only one stream implementation, not - * two). - */ -module.exports = require("stream"); - -},{"stream":undefined}],17:[function(require,module,exports){ -'use strict'; -var DataReader = require('./DataReader'); -var utils = require('../utils'); - -function ArrayReader(data) { - DataReader.call(this, data); - for(var i = 0; i < this.data.length; i++) { - data[i] = data[i] & 0xFF; - } -} -utils.inherits(ArrayReader, DataReader); -/** - * @see DataReader.byteAt - */ -ArrayReader.prototype.byteAt = function(i) { - return this.data[this.zero + i]; -}; -/** - * @see DataReader.lastIndexOfSignature - */ -ArrayReader.prototype.lastIndexOfSignature = function(sig) { - var sig0 = sig.charCodeAt(0), - sig1 = sig.charCodeAt(1), - sig2 = sig.charCodeAt(2), - sig3 = sig.charCodeAt(3); - for (var i = this.length - 4; i >= 0; --i) { - if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { - return i - this.zero; - } - } - - return -1; -}; -/** - * @see DataReader.readAndCheckSignature - */ -ArrayReader.prototype.readAndCheckSignature = function (sig) { - var sig0 = sig.charCodeAt(0), - sig1 = sig.charCodeAt(1), - sig2 = sig.charCodeAt(2), - sig3 = sig.charCodeAt(3), - data = this.readData(4); - return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; -}; -/** - * @see DataReader.readData - */ -ArrayReader.prototype.readData = function(size) { - this.checkOffset(size); - if(size === 0) { - return []; - } - var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); - this.index += size; - return result; -}; -module.exports = ArrayReader; - -},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ -'use strict'; -var utils = require('../utils'); - -function DataReader(data) { - this.data = data; // type : see implementation - this.length = data.length; - this.index = 0; - this.zero = 0; -} -DataReader.prototype = { - /** - * Check that the offset will not go too far. - * @param {string} offset the additional offset to check. - * @throws {Error} an Error if the offset is out of bounds. - */ - checkOffset: function(offset) { - this.checkIndex(this.index + offset); - }, - /** - * Check that the specified index will not be too far. - * @param {string} newIndex the index to check. - * @throws {Error} an Error if the index is out of bounds. - */ - checkIndex: function(newIndex) { - if (this.length < this.zero + newIndex || newIndex < 0) { - throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); - } - }, - /** - * Change the index. - * @param {number} newIndex The new index. - * @throws {Error} if the new index is out of the data. - */ - setIndex: function(newIndex) { - this.checkIndex(newIndex); - this.index = newIndex; - }, - /** - * Skip the next n bytes. - * @param {number} n the number of bytes to skip. - * @throws {Error} if the new index is out of the data. - */ - skip: function(n) { - this.setIndex(this.index + n); - }, - /** - * Get the byte at the specified index. - * @param {number} i the index to use. - * @return {number} a byte. - */ - byteAt: function(i) { - // see implementations - }, - /** - * Get the next number with a given byte size. - * @param {number} size the number of bytes to read. - * @return {number} the corresponding number. - */ - readInt: function(size) { - var result = 0, - i; - this.checkOffset(size); - for (i = this.index + size - 1; i >= this.index; i--) { - result = (result << 8) + this.byteAt(i); - } - this.index += size; - return result; - }, - /** - * Get the next string with a given byte size. - * @param {number} size the number of bytes to read. - * @return {string} the corresponding string. - */ - readString: function(size) { - return utils.transformTo("string", this.readData(size)); - }, - /** - * Get raw data without conversion, bytes. - * @param {number} size the number of bytes to read. - * @return {Object} the raw data, implementation specific. - */ - readData: function(size) { - // see implementations - }, - /** - * Find the last occurrence of a zip signature (4 bytes). - * @param {string} sig the signature to find. - * @return {number} the index of the last occurrence, -1 if not found. - */ - lastIndexOfSignature: function(sig) { - // see implementations - }, - /** - * Read the signature (4 bytes) at the current position and compare it with sig. - * @param {string} sig the expected signature - * @return {boolean} true if the signature matches, false otherwise. - */ - readAndCheckSignature: function(sig) { - // see implementations - }, - /** - * Get the next date. - * @return {Date} the date. - */ - readDate: function() { - var dostime = this.readInt(4); - return new Date(Date.UTC( - ((dostime >> 25) & 0x7f) + 1980, // year - ((dostime >> 21) & 0x0f) - 1, // month - (dostime >> 16) & 0x1f, // day - (dostime >> 11) & 0x1f, // hour - (dostime >> 5) & 0x3f, // minute - (dostime & 0x1f) << 1)); // second - } -}; -module.exports = DataReader; - -},{"../utils":32}],19:[function(require,module,exports){ -'use strict'; -var Uint8ArrayReader = require('./Uint8ArrayReader'); -var utils = require('../utils'); - -function NodeBufferReader(data) { - Uint8ArrayReader.call(this, data); -} -utils.inherits(NodeBufferReader, Uint8ArrayReader); - -/** - * @see DataReader.readData - */ -NodeBufferReader.prototype.readData = function(size) { - this.checkOffset(size); - var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); - this.index += size; - return result; -}; -module.exports = NodeBufferReader; - -},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ -'use strict'; -var DataReader = require('./DataReader'); -var utils = require('../utils'); - -function StringReader(data) { - DataReader.call(this, data); -} -utils.inherits(StringReader, DataReader); -/** - * @see DataReader.byteAt - */ -StringReader.prototype.byteAt = function(i) { - return this.data.charCodeAt(this.zero + i); -}; -/** - * @see DataReader.lastIndexOfSignature - */ -StringReader.prototype.lastIndexOfSignature = function(sig) { - return this.data.lastIndexOf(sig) - this.zero; -}; -/** - * @see DataReader.readAndCheckSignature - */ -StringReader.prototype.readAndCheckSignature = function (sig) { - var data = this.readData(4); - return sig === data; -}; -/** - * @see DataReader.readData - */ -StringReader.prototype.readData = function(size) { - this.checkOffset(size); - // this will work because the constructor applied the "& 0xff" mask. - var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); - this.index += size; - return result; -}; -module.exports = StringReader; - -},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ -'use strict'; -var ArrayReader = require('./ArrayReader'); -var utils = require('../utils'); - -function Uint8ArrayReader(data) { - ArrayReader.call(this, data); -} -utils.inherits(Uint8ArrayReader, ArrayReader); -/** - * @see DataReader.readData - */ -Uint8ArrayReader.prototype.readData = function(size) { - this.checkOffset(size); - if(size === 0) { - // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. - return new Uint8Array(0); - } - var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); - this.index += size; - return result; -}; -module.exports = Uint8ArrayReader; - -},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var support = require('../support'); -var ArrayReader = require('./ArrayReader'); -var StringReader = require('./StringReader'); -var NodeBufferReader = require('./NodeBufferReader'); -var Uint8ArrayReader = require('./Uint8ArrayReader'); - -/** - * Create a reader adapted to the data. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. - * @return {DataReader} the data reader. - */ -module.exports = function (data) { - var type = utils.getTypeOf(data); - utils.checkSupport(type); - if (type === "string" && !support.uint8array) { - return new StringReader(data); - } - if (type === "nodebuffer") { - return new NodeBufferReader(data); - } - if (support.uint8array) { - return new Uint8ArrayReader(utils.transformTo("uint8array", data)); - } - return new ArrayReader(utils.transformTo("array", data)); -}; - -},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ -'use strict'; -exports.LOCAL_FILE_HEADER = "PK\x03\x04"; -exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; -exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; -exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; -exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; -exports.DATA_DESCRIPTOR = "PK\x07\x08"; - -},{}],24:[function(require,module,exports){ -'use strict'; - -var GenericWorker = require('./GenericWorker'); -var utils = require('../utils'); - -/** - * A worker which convert chunks to a specified type. - * @constructor - * @param {String} destType the destination type. - */ -function ConvertWorker(destType) { - GenericWorker.call(this, "ConvertWorker to " + destType); - this.destType = destType; -} -utils.inherits(ConvertWorker, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -ConvertWorker.prototype.processChunk = function (chunk) { - this.push({ - data : utils.transformTo(this.destType, chunk.data), - meta : chunk.meta - }); -}; -module.exports = ConvertWorker; - -},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ -'use strict'; - -var GenericWorker = require('./GenericWorker'); -var crc32 = require('../crc32'); -var utils = require('../utils'); - -/** - * A worker which calculate the crc32 of the data flowing through. - * @constructor - */ -function Crc32Probe() { - GenericWorker.call(this, "Crc32Probe"); - this.withStreamInfo("crc32", 0); -} -utils.inherits(Crc32Probe, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -Crc32Probe.prototype.processChunk = function (chunk) { - this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); - this.push(chunk); -}; -module.exports = Crc32Probe; - -},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var GenericWorker = require('./GenericWorker'); - -/** - * A worker which calculate the total length of the data flowing through. - * @constructor - * @param {String} propName the name used to expose the length - */ -function DataLengthProbe(propName) { - GenericWorker.call(this, "DataLengthProbe for " + propName); - this.propName = propName; - this.withStreamInfo(propName, 0); -} -utils.inherits(DataLengthProbe, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -DataLengthProbe.prototype.processChunk = function (chunk) { - if(chunk) { - var length = this.streamInfo[this.propName] || 0; - this.streamInfo[this.propName] = length + chunk.data.length; - } - GenericWorker.prototype.processChunk.call(this, chunk); -}; -module.exports = DataLengthProbe; - - -},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var GenericWorker = require('./GenericWorker'); - -// the size of the generated chunks -// TODO expose this as a public variable -var DEFAULT_BLOCK_SIZE = 16 * 1024; - -/** - * A worker that reads a content and emits chunks. - * @constructor - * @param {Promise} dataP the promise of the data to split - */ -function DataWorker(dataP) { - GenericWorker.call(this, "DataWorker"); - var self = this; - this.dataIsReady = false; - this.index = 0; - this.max = 0; - this.data = null; - this.type = ""; - - this._tickScheduled = false; - - dataP.then(function (data) { - self.dataIsReady = true; - self.data = data; - self.max = data && data.length || 0; - self.type = utils.getTypeOf(data); - if(!self.isPaused) { - self._tickAndRepeat(); - } - }, function (e) { - self.error(e); - }); -} - -utils.inherits(DataWorker, GenericWorker); - -/** - * @see GenericWorker.cleanUp - */ -DataWorker.prototype.cleanUp = function () { - GenericWorker.prototype.cleanUp.call(this); - this.data = null; -}; - -/** - * @see GenericWorker.resume - */ -DataWorker.prototype.resume = function () { - if(!GenericWorker.prototype.resume.call(this)) { - return false; - } - - if (!this._tickScheduled && this.dataIsReady) { - this._tickScheduled = true; - utils.delay(this._tickAndRepeat, [], this); - } - return true; -}; - -/** - * Trigger a tick a schedule an other call to this function. - */ -DataWorker.prototype._tickAndRepeat = function() { - this._tickScheduled = false; - if(this.isPaused || this.isFinished) { - return; - } - this._tick(); - if(!this.isFinished) { - utils.delay(this._tickAndRepeat, [], this); - this._tickScheduled = true; - } -}; - -/** - * Read and push a chunk. - */ -DataWorker.prototype._tick = function() { - - if(this.isPaused || this.isFinished) { - return false; - } - - var size = DEFAULT_BLOCK_SIZE; - var data = null, nextIndex = Math.min(this.max, this.index + size); - if (this.index >= this.max) { - // EOF - return this.end(); - } else { - switch(this.type) { - case "string": - data = this.data.substring(this.index, nextIndex); - break; - case "uint8array": - data = this.data.subarray(this.index, nextIndex); - break; - case "array": - case "nodebuffer": - data = this.data.slice(this.index, nextIndex); - break; - } - this.index = nextIndex; - return this.push({ - data : data, - meta : { - percent : this.max ? this.index / this.max * 100 : 0 - } - }); - } -}; - -module.exports = DataWorker; - -},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ -'use strict'; - -/** - * A worker that does nothing but passing chunks to the next one. This is like - * a nodejs stream but with some differences. On the good side : - * - it works on IE 6-9 without any issue / polyfill - * - it weights less than the full dependencies bundled with browserify - * - it forwards errors (no need to declare an error handler EVERYWHERE) - * - * A chunk is an object with 2 attributes : `meta` and `data`. The former is an - * object containing anything (`percent` for example), see each worker for more - * details. The latter is the real data (String, Uint8Array, etc). - * - * @constructor - * @param {String} name the name of the stream (mainly used for debugging purposes) - */ -function GenericWorker(name) { - // the name of the worker - this.name = name || "default"; - // an object containing metadata about the workers chain - this.streamInfo = {}; - // an error which happened when the worker was paused - this.generatedError = null; - // an object containing metadata to be merged by this worker into the general metadata - this.extraStreamInfo = {}; - // true if the stream is paused (and should not do anything), false otherwise - this.isPaused = true; - // true if the stream is finished (and should not do anything), false otherwise - this.isFinished = false; - // true if the stream is locked to prevent further structure updates (pipe), false otherwise - this.isLocked = false; - // the event listeners - this._listeners = { - 'data':[], - 'end':[], - 'error':[] - }; - // the previous worker, if any - this.previous = null; -} - -GenericWorker.prototype = { - /** - * Push a chunk to the next workers. - * @param {Object} chunk the chunk to push - */ - push : function (chunk) { - this.emit("data", chunk); - }, - /** - * End the stream. - * @return {Boolean} true if this call ended the worker, false otherwise. - */ - end : function () { - if (this.isFinished) { - return false; - } - - this.flush(); - try { - this.emit("end"); - this.cleanUp(); - this.isFinished = true; - } catch (e) { - this.emit("error", e); - } - return true; - }, - /** - * End the stream with an error. - * @param {Error} e the error which caused the premature end. - * @return {Boolean} true if this call ended the worker with an error, false otherwise. - */ - error : function (e) { - if (this.isFinished) { - return false; - } - - if(this.isPaused) { - this.generatedError = e; - } else { - this.isFinished = true; - - this.emit("error", e); - - // in the workers chain exploded in the middle of the chain, - // the error event will go downward but we also need to notify - // workers upward that there has been an error. - if(this.previous) { - this.previous.error(e); - } - - this.cleanUp(); - } - return true; - }, - /** - * Add a callback on an event. - * @param {String} name the name of the event (data, end, error) - * @param {Function} listener the function to call when the event is triggered - * @return {GenericWorker} the current object for chainability - */ - on : function (name, listener) { - this._listeners[name].push(listener); - return this; - }, - /** - * Clean any references when a worker is ending. - */ - cleanUp : function () { - this.streamInfo = this.generatedError = this.extraStreamInfo = null; - this._listeners = []; - }, - /** - * Trigger an event. This will call registered callback with the provided arg. - * @param {String} name the name of the event (data, end, error) - * @param {Object} arg the argument to call the callback with. - */ - emit : function (name, arg) { - if (this._listeners[name]) { - for(var i = 0; i < this._listeners[name].length; i++) { - this._listeners[name][i].call(this, arg); - } - } - }, - /** - * Chain a worker with an other. - * @param {Worker} next the worker receiving events from the current one. - * @return {worker} the next worker for chainability - */ - pipe : function (next) { - return next.registerPrevious(this); - }, - /** - * Same as `pipe` in the other direction. - * Using an API with `pipe(next)` is very easy. - * Implementing the API with the point of view of the next one registering - * a source is easier, see the ZipFileWorker. - * @param {Worker} previous the previous worker, sending events to this one - * @return {Worker} the current worker for chainability - */ - registerPrevious : function (previous) { - if (this.isLocked) { - throw new Error("The stream '" + this + "' has already been used."); - } - - // sharing the streamInfo... - this.streamInfo = previous.streamInfo; - // ... and adding our own bits - this.mergeStreamInfo(); - this.previous = previous; - var self = this; - previous.on('data', function (chunk) { - self.processChunk(chunk); - }); - previous.on('end', function () { - self.end(); - }); - previous.on('error', function (e) { - self.error(e); - }); - return this; - }, - /** - * Pause the stream so it doesn't send events anymore. - * @return {Boolean} true if this call paused the worker, false otherwise. - */ - pause : function () { - if(this.isPaused || this.isFinished) { - return false; - } - this.isPaused = true; - - if(this.previous) { - this.previous.pause(); - } - return true; - }, - /** - * Resume a paused stream. - * @return {Boolean} true if this call resumed the worker, false otherwise. - */ - resume : function () { - if(!this.isPaused || this.isFinished) { - return false; - } - this.isPaused = false; - - // if true, the worker tried to resume but failed - var withError = false; - if(this.generatedError) { - this.error(this.generatedError); - withError = true; - } - if(this.previous) { - this.previous.resume(); - } - - return !withError; - }, - /** - * Flush any remaining bytes as the stream is ending. - */ - flush : function () {}, - /** - * Process a chunk. This is usually the method overridden. - * @param {Object} chunk the chunk to process. - */ - processChunk : function(chunk) { - this.push(chunk); - }, - /** - * Add a key/value to be added in the workers chain streamInfo once activated. - * @param {String} key the key to use - * @param {Object} value the associated value - * @return {Worker} the current worker for chainability - */ - withStreamInfo : function (key, value) { - this.extraStreamInfo[key] = value; - this.mergeStreamInfo(); - return this; - }, - /** - * Merge this worker's streamInfo into the chain's streamInfo. - */ - mergeStreamInfo : function () { - for(var key in this.extraStreamInfo) { - if (!this.extraStreamInfo.hasOwnProperty(key)) { - continue; - } - this.streamInfo[key] = this.extraStreamInfo[key]; - } - }, - - /** - * Lock the stream to prevent further updates on the workers chain. - * After calling this method, all calls to pipe will fail. - */ - lock: function () { - if (this.isLocked) { - throw new Error("The stream '" + this + "' has already been used."); - } - this.isLocked = true; - if (this.previous) { - this.previous.lock(); - } - }, - - /** - * - * Pretty print the workers chain. - */ - toString : function () { - var me = "Worker " + this.name; - if (this.previous) { - return this.previous + " -> " + me; - } else { - return me; - } - } -}; - -module.exports = GenericWorker; - -},{}],29:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var ConvertWorker = require('./ConvertWorker'); -var GenericWorker = require('./GenericWorker'); -var base64 = require('../base64'); -var support = require("../support"); -var external = require("../external"); - -var NodejsStreamOutputAdapter = null; -if (support.nodestream) { - try { - NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); - } catch(e) {} -} - -/** - * Apply the final transformation of the data. If the user wants a Blob for - * example, it's easier to work with an U8intArray and finally do the - * ArrayBuffer/Blob conversion. - * @param {String} type the name of the final type - * @param {String|Uint8Array|Buffer} content the content to transform - * @param {String} mimeType the mime type of the content, if applicable. - * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. - */ -function transformZipOutput(type, content, mimeType) { - switch(type) { - case "blob" : - return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); - case "base64" : - return base64.encode(content); - default : - return utils.transformTo(type, content); - } -} - -/** - * Concatenate an array of data of the given type. - * @param {String} type the type of the data in the given array. - * @param {Array} dataArray the array containing the data chunks to concatenate - * @return {String|Uint8Array|Buffer} the concatenated data - * @throws Error if the asked type is unsupported - */ -function concat (type, dataArray) { - var i, index = 0, res = null, totalLength = 0; - for(i = 0; i < dataArray.length; i++) { - totalLength += dataArray[i].length; - } - switch(type) { - case "string": - return dataArray.join(""); - case "array": - return Array.prototype.concat.apply([], dataArray); - case "uint8array": - res = new Uint8Array(totalLength); - for(i = 0; i < dataArray.length; i++) { - res.set(dataArray[i], index); - index += dataArray[i].length; - } - return res; - case "nodebuffer": - return Buffer.concat(dataArray); - default: - throw new Error("concat : unsupported type '" + type + "'"); - } -} - -/** - * Listen a StreamHelper, accumulate its content and concatenate it into a - * complete block. - * @param {StreamHelper} helper the helper to use. - * @param {Function} updateCallback a callback called on each update. Called - * with one arg : - * - the metadata linked to the update received. - * @return Promise the promise for the accumulation. - */ -function accumulate(helper, updateCallback) { - return new external.Promise(function (resolve, reject){ - var dataArray = []; - var chunkType = helper._internalType, - resultType = helper._outputType, - mimeType = helper._mimeType; - helper - .on('data', function (data, meta) { - dataArray.push(data); - if(updateCallback) { - updateCallback(meta); - } - }) - .on('error', function(err) { - dataArray = []; - reject(err); - }) - .on('end', function (){ - try { - var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); - resolve(result); - } catch (e) { - reject(e); - } - dataArray = []; - }) - .resume(); - }); -} - -/** - * An helper to easily use workers outside of JSZip. - * @constructor - * @param {Worker} worker the worker to wrap - * @param {String} outputType the type of data expected by the use - * @param {String} mimeType the mime type of the content, if applicable. - */ -function StreamHelper(worker, outputType, mimeType) { - var internalType = outputType; - switch(outputType) { - case "blob": - case "arraybuffer": - internalType = "uint8array"; - break; - case "base64": - internalType = "string"; - break; - } - - try { - // the type used internally - this._internalType = internalType; - // the type used to output results - this._outputType = outputType; - // the mime type - this._mimeType = mimeType; - utils.checkSupport(internalType); - this._worker = worker.pipe(new ConvertWorker(internalType)); - // the last workers can be rewired without issues but we need to - // prevent any updates on previous workers. - worker.lock(); - } catch(e) { - this._worker = new GenericWorker("error"); - this._worker.error(e); - } -} - -StreamHelper.prototype = { - /** - * Listen a StreamHelper, accumulate its content and concatenate it into a - * complete block. - * @param {Function} updateCb the update callback. - * @return Promise the promise for the accumulation. - */ - accumulate : function (updateCb) { - return accumulate(this, updateCb); - }, - /** - * Add a listener on an event triggered on a stream. - * @param {String} evt the name of the event - * @param {Function} fn the listener - * @return {StreamHelper} the current helper. - */ - on : function (evt, fn) { - var self = this; - - if(evt === "data") { - this._worker.on(evt, function (chunk) { - fn.call(self, chunk.data, chunk.meta); - }); - } else { - this._worker.on(evt, function () { - utils.delay(fn, arguments, self); - }); - } - return this; - }, - /** - * Resume the flow of chunks. - * @return {StreamHelper} the current helper. - */ - resume : function () { - utils.delay(this._worker.resume, [], this._worker); - return this; - }, - /** - * Pause the flow of chunks. - * @return {StreamHelper} the current helper. - */ - pause : function () { - this._worker.pause(); - return this; - }, - /** - * Return a nodejs stream for this helper. - * @param {Function} updateCb the update callback. - * @return {NodejsStreamOutputAdapter} the nodejs stream. - */ - toNodejsStream : function (updateCb) { - utils.checkSupport("nodestream"); - if (this._outputType !== "nodebuffer") { - // an object stream containing blob/arraybuffer/uint8array/string - // is strange and I don't know if it would be useful. - // I you find this comment and have a good usecase, please open a - // bug report ! - throw new Error(this._outputType + " is not supported by this method"); - } - - return new NodejsStreamOutputAdapter(this, { - objectMode : this._outputType !== "nodebuffer" - }, updateCb); - } -}; - - -module.exports = StreamHelper; - -},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ -'use strict'; - -exports.base64 = true; -exports.array = true; -exports.string = true; -exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; -exports.nodebuffer = typeof Buffer !== "undefined"; -// contains true if JSZip can read/generate Uint8Array, false otherwise. -exports.uint8array = typeof Uint8Array !== "undefined"; - -if (typeof ArrayBuffer === "undefined") { - exports.blob = false; -} -else { - var buffer = new ArrayBuffer(0); - try { - exports.blob = new Blob([buffer], { - type: "application/zip" - }).size === 0; - } - catch (e) { - try { - var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; - var builder = new Builder(); - builder.append(buffer); - exports.blob = builder.getBlob('application/zip').size === 0; - } - catch (e) { - exports.blob = false; - } - } -} - -try { - exports.nodestream = !!require('readable-stream').Readable; -} catch(e) { - exports.nodestream = false; -} - -},{"readable-stream":16}],31:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var support = require('./support'); -var nodejsUtils = require('./nodejsUtils'); -var GenericWorker = require('./stream/GenericWorker'); - -/** - * The following functions come from pako, from pako/lib/utils/strings - * released under the MIT license, see pako https://github.com/nodeca/pako/ - */ - -// Table with utf8 lengths (calculated by first byte of sequence) -// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, -// because max possible codepoint is 0x10ffff -var _utf8len = new Array(256); -for (var i=0; i<256; i++) { - _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); -} -_utf8len[254]=_utf8len[254]=1; // Invalid sequence start - -// convert string to array (typed, when possible) -var string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { - c2 = str.charCodeAt(m_pos+1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - if (support.uint8array) { - buf = new Uint8Array(buf_len); - } else { - buf = new Array(buf_len); - } - - // convert - for (i=0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { - c2 = str.charCodeAt(m_pos+1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; -}; - -// Calculate max possible position in utf8 buffer, -// that will not break sequence. If that's not possible -// - (very small limits) return max size as is. -// -// buf[] - utf8 bytes array -// max - length limit (mandatory); -var utf8border = function(buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max-1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; -}; - -// convert array to string -var buf2string = function (buf) { - var str, i, out, c, c_len; - var len = buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len*2); - - for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - // shrinkBuf(utf16buf, out) - if (utf16buf.length !== out) { - if(utf16buf.subarray) { - utf16buf = utf16buf.subarray(0, out); - } else { - utf16buf.length = out; - } - } - - // return String.fromCharCode.apply(null, utf16buf); - return utils.applyFromCharCode(utf16buf); -}; - - -// That's all for the pako functions. - - -/** - * Transform a javascript string into an array (typed if possible) of bytes, - * UTF-8 encoded. - * @param {String} str the string to encode - * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. - */ -exports.utf8encode = function utf8encode(str) { - if (support.nodebuffer) { - return nodejsUtils.newBufferFrom(str, "utf-8"); - } - - return string2buf(str); -}; - - -/** - * Transform a bytes array (or a representation) representing an UTF-8 encoded - * string into a javascript string. - * @param {Array|Uint8Array|Buffer} buf the data de decode - * @return {String} the decoded string. - */ -exports.utf8decode = function utf8decode(buf) { - if (support.nodebuffer) { - return utils.transformTo("nodebuffer", buf).toString("utf-8"); - } - - buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); - - return buf2string(buf); -}; - -/** - * A worker to decode utf8 encoded binary chunks into string chunks. - * @constructor - */ -function Utf8DecodeWorker() { - GenericWorker.call(this, "utf-8 decode"); - // the last bytes if a chunk didn't end with a complete codepoint. - this.leftOver = null; -} -utils.inherits(Utf8DecodeWorker, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -Utf8DecodeWorker.prototype.processChunk = function (chunk) { - - var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); - - // 1st step, re-use what's left of the previous chunk - if (this.leftOver && this.leftOver.length) { - if(support.uint8array) { - var previousData = data; - data = new Uint8Array(previousData.length + this.leftOver.length); - data.set(this.leftOver, 0); - data.set(previousData, this.leftOver.length); - } else { - data = this.leftOver.concat(data); - } - this.leftOver = null; - } - - var nextBoundary = utf8border(data); - var usableData = data; - if (nextBoundary !== data.length) { - if (support.uint8array) { - usableData = data.subarray(0, nextBoundary); - this.leftOver = data.subarray(nextBoundary, data.length); - } else { - usableData = data.slice(0, nextBoundary); - this.leftOver = data.slice(nextBoundary, data.length); - } - } - - this.push({ - data : exports.utf8decode(usableData), - meta : chunk.meta - }); -}; - -/** - * @see GenericWorker.flush - */ -Utf8DecodeWorker.prototype.flush = function () { - if(this.leftOver && this.leftOver.length) { - this.push({ - data : exports.utf8decode(this.leftOver), - meta : {} - }); - this.leftOver = null; - } -}; -exports.Utf8DecodeWorker = Utf8DecodeWorker; - -/** - * A worker to endcode string chunks into utf8 encoded binary chunks. - * @constructor - */ -function Utf8EncodeWorker() { - GenericWorker.call(this, "utf-8 encode"); -} -utils.inherits(Utf8EncodeWorker, GenericWorker); - -/** - * @see GenericWorker.processChunk - */ -Utf8EncodeWorker.prototype.processChunk = function (chunk) { - this.push({ - data : exports.utf8encode(chunk.data), - meta : chunk.meta - }); -}; -exports.Utf8EncodeWorker = Utf8EncodeWorker; - -},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ -'use strict'; - -var support = require('./support'); -var base64 = require('./base64'); -var nodejsUtils = require('./nodejsUtils'); -var setImmediate = require('set-immediate-shim'); -var external = require("./external"); - - -/** - * Convert a string that pass as a "binary string": it should represent a byte - * array but may have > 255 char codes. Be sure to take only the first byte - * and returns the byte array. - * @param {String} str the string to transform. - * @return {Array|Uint8Array} the string in a binary format. - */ -function string2binary(str) { - var result = null; - if (support.uint8array) { - result = new Uint8Array(str.length); - } else { - result = new Array(str.length); - } - return stringToArrayLike(str, result); -} - -/** - * Create a new blob with the given content and the given type. - * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use - * an Uint8Array because the stock browser of android 4 won't accept it (it - * will be silently converted to a string, "[object Uint8Array]"). - * - * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: - * when a large amount of Array is used to create the Blob, the amount of - * memory consumed is nearly 100 times the original data amount. - * - * @param {String} type the mime type of the blob. - * @return {Blob} the created blob. - */ -exports.newBlob = function(part, type) { - exports.checkSupport("blob"); - - try { - // Blob constructor - return new Blob([part], { - type: type - }); - } - catch (e) { - - try { - // deprecated, browser only, old way - var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; - var builder = new Builder(); - builder.append(part); - return builder.getBlob(type); - } - catch (e) { - - // well, fuck ?! - throw new Error("Bug : can't construct the Blob."); - } - } - - -}; -/** - * The identity function. - * @param {Object} input the input. - * @return {Object} the same input. - */ -function identity(input) { - return input; -} - -/** - * Fill in an array with a string. - * @param {String} str the string to use. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). - * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. - */ -function stringToArrayLike(str, array) { - for (var i = 0; i < str.length; ++i) { - array[i] = str.charCodeAt(i) & 0xFF; - } - return array; -} - -/** - * An helper for the function arrayLikeToString. - * This contains static information and functions that - * can be optimized by the browser JIT compiler. - */ -var arrayToStringHelper = { - /** - * Transform an array of int into a string, chunk by chunk. - * See the performances notes on arrayLikeToString. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @param {String} type the type of the array. - * @param {Integer} chunk the chunk size. - * @return {String} the resulting string. - * @throws Error if the chunk is too big for the stack. - */ - stringifyByChunk: function(array, type, chunk) { - var result = [], k = 0, len = array.length; - // shortcut - if (len <= chunk) { - return String.fromCharCode.apply(null, array); - } - while (k < len) { - if (type === "array" || type === "nodebuffer") { - result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); - } - else { - result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); - } - k += chunk; - } - return result.join(""); - }, - /** - * Call String.fromCharCode on every item in the array. - * This is the naive implementation, which generate A LOT of intermediate string. - * This should be used when everything else fail. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @return {String} the result. - */ - stringifyByChar: function(array){ - var resultStr = ""; - for(var i = 0; i < array.length; i++) { - resultStr += String.fromCharCode(array[i]); - } - return resultStr; - }, - applyCanBeUsed : { - /** - * true if the browser accepts to use String.fromCharCode on Uint8Array - */ - uint8array : (function () { - try { - return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; - } catch (e) { - return false; - } - })(), - /** - * true if the browser accepts to use String.fromCharCode on nodejs Buffer. - */ - nodebuffer : (function () { - try { - return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; - } catch (e) { - return false; - } - })() - } -}; - -/** - * Transform an array-like object to a string. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. - * @return {String} the result. - */ -function arrayLikeToString(array) { - // Performances notes : - // -------------------- - // String.fromCharCode.apply(null, array) is the fastest, see - // see http://jsperf.com/converting-a-uint8array-to-a-string/2 - // but the stack is limited (and we can get huge arrays !). - // - // result += String.fromCharCode(array[i]); generate too many strings ! - // - // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 - // TODO : we now have workers that split the work. Do we still need that ? - var chunk = 65536, - type = exports.getTypeOf(array), - canUseApply = true; - if (type === "uint8array") { - canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; - } else if (type === "nodebuffer") { - canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; - } - - if (canUseApply) { - while (chunk > 1) { - try { - return arrayToStringHelper.stringifyByChunk(array, type, chunk); - } catch (e) { - chunk = Math.floor(chunk / 2); - } - } - } - - // no apply or chunk error : slow and painful algorithm - // default browser on android 4.* - return arrayToStringHelper.stringifyByChar(array); -} - -exports.applyFromCharCode = arrayLikeToString; - - -/** - * Copy the data from an array-like to an other array-like. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. - * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. - * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. - */ -function arrayLikeToArrayLike(arrayFrom, arrayTo) { - for (var i = 0; i < arrayFrom.length; i++) { - arrayTo[i] = arrayFrom[i]; - } - return arrayTo; -} - -// a matrix containing functions to transform everything into everything. -var transform = {}; - -// string to ? -transform["string"] = { - "string": identity, - "array": function(input) { - return stringToArrayLike(input, new Array(input.length)); - }, - "arraybuffer": function(input) { - return transform["string"]["uint8array"](input).buffer; - }, - "uint8array": function(input) { - return stringToArrayLike(input, new Uint8Array(input.length)); - }, - "nodebuffer": function(input) { - return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); - } -}; - -// array to ? -transform["array"] = { - "string": arrayLikeToString, - "array": identity, - "arraybuffer": function(input) { - return (new Uint8Array(input)).buffer; - }, - "uint8array": function(input) { - return new Uint8Array(input); - }, - "nodebuffer": function(input) { - return nodejsUtils.newBufferFrom(input); - } -}; - -// arraybuffer to ? -transform["arraybuffer"] = { - "string": function(input) { - return arrayLikeToString(new Uint8Array(input)); - }, - "array": function(input) { - return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); - }, - "arraybuffer": identity, - "uint8array": function(input) { - return new Uint8Array(input); - }, - "nodebuffer": function(input) { - return nodejsUtils.newBufferFrom(new Uint8Array(input)); - } -}; - -// uint8array to ? -transform["uint8array"] = { - "string": arrayLikeToString, - "array": function(input) { - return arrayLikeToArrayLike(input, new Array(input.length)); - }, - "arraybuffer": function(input) { - return input.buffer; - }, - "uint8array": identity, - "nodebuffer": function(input) { - return nodejsUtils.newBufferFrom(input); - } -}; - -// nodebuffer to ? -transform["nodebuffer"] = { - "string": arrayLikeToString, - "array": function(input) { - return arrayLikeToArrayLike(input, new Array(input.length)); - }, - "arraybuffer": function(input) { - return transform["nodebuffer"]["uint8array"](input).buffer; - }, - "uint8array": function(input) { - return arrayLikeToArrayLike(input, new Uint8Array(input.length)); - }, - "nodebuffer": identity -}; - -/** - * Transform an input into any type. - * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. - * If no output type is specified, the unmodified input will be returned. - * @param {String} outputType the output type. - * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. - * @throws {Error} an Error if the browser doesn't support the requested output type. - */ -exports.transformTo = function(outputType, input) { - if (!input) { - // undefined, null, etc - // an empty string won't harm. - input = ""; - } - if (!outputType) { - return input; - } - exports.checkSupport(outputType); - var inputType = exports.getTypeOf(input); - var result = transform[inputType][outputType](input); - return result; -}; - -/** - * Return the type of the input. - * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. - * @param {Object} input the input to identify. - * @return {String} the (lowercase) type of the input. - */ -exports.getTypeOf = function(input) { - if (typeof input === "string") { - return "string"; - } - if (Object.prototype.toString.call(input) === "[object Array]") { - return "array"; - } - if (support.nodebuffer && nodejsUtils.isBuffer(input)) { - return "nodebuffer"; - } - if (support.uint8array && input instanceof Uint8Array) { - return "uint8array"; - } - if (support.arraybuffer && input instanceof ArrayBuffer) { - return "arraybuffer"; - } -}; - -/** - * Throw an exception if the type is not supported. - * @param {String} type the type to check. - * @throws {Error} an Error if the browser doesn't support the requested type. - */ -exports.checkSupport = function(type) { - var supported = support[type.toLowerCase()]; - if (!supported) { - throw new Error(type + " is not supported by this platform"); - } -}; - -exports.MAX_VALUE_16BITS = 65535; -exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 - -/** - * Prettify a string read as binary. - * @param {string} str the string to prettify. - * @return {string} a pretty string. - */ -exports.pretty = function(str) { - var res = '', - code, i; - for (i = 0; i < (str || "").length; i++) { - code = str.charCodeAt(i); - res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); - } - return res; -}; - -/** - * Defer the call of a function. - * @param {Function} callback the function to call asynchronously. - * @param {Array} args the arguments to give to the callback. - */ -exports.delay = function(callback, args, self) { - setImmediate(function () { - callback.apply(self || null, args || []); - }); -}; - -/** - * Extends a prototype with an other, without calling a constructor with - * side effects. Inspired by nodejs' `utils.inherits` - * @param {Function} ctor the constructor to augment - * @param {Function} superCtor the parent constructor to use - */ -exports.inherits = function (ctor, superCtor) { - var Obj = function() {}; - Obj.prototype = superCtor.prototype; - ctor.prototype = new Obj(); -}; - -/** - * Merge the objects passed as parameters into a new one. - * @private - * @param {...Object} var_args All objects to merge. - * @return {Object} a new object with the data of the others. - */ -exports.extend = function() { - var result = {}, i, attr; - for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers - for (attr in arguments[i]) { - if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { - result[attr] = arguments[i][attr]; - } - } - } - return result; -}; - -/** - * Transform arbitrary content into a Promise. - * @param {String} name a name for the content being processed. - * @param {Object} inputData the content to process. - * @param {Boolean} isBinary true if the content is not an unicode string - * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. - * @param {Boolean} isBase64 true if the string content is encoded with base64. - * @return {Promise} a promise in a format usable by JSZip. - */ -exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { - - // if inputData is already a promise, this flatten it. - var promise = external.Promise.resolve(inputData).then(function(data) { - - - var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); - - if (isBlob && typeof FileReader !== "undefined") { - return new external.Promise(function (resolve, reject) { - var reader = new FileReader(); - - reader.onload = function(e) { - resolve(e.target.result); - }; - reader.onerror = function(e) { - reject(e.target.error); - }; - reader.readAsArrayBuffer(data); - }); - } else { - return data; - } - }); - - return promise.then(function(data) { - var dataType = exports.getTypeOf(data); - - if (!dataType) { - return external.Promise.reject( - new Error("Can't read the data of '" + name + "'. Is it " + - "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") - ); - } - // special case : it's way easier to work with Uint8Array than with ArrayBuffer - if (dataType === "arraybuffer") { - data = exports.transformTo("uint8array", data); - } else if (dataType === "string") { - if (isBase64) { - data = base64.decode(data); - } - else if (isBinary) { - // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask - if (isOptimizedBinaryString !== true) { - // this is a string, not in a base64 format. - // Be sure that this is a correct "binary string" - data = string2binary(data); - } - } - } - return data; - }); -}; - -},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){ -'use strict'; -var readerFor = require('./reader/readerFor'); -var utils = require('./utils'); -var sig = require('./signature'); -var ZipEntry = require('./zipEntry'); -var utf8 = require('./utf8'); -var support = require('./support'); -// class ZipEntries {{{ -/** - * All the entries in the zip file. - * @constructor - * @param {Object} loadOptions Options for loading the stream. - */ -function ZipEntries(loadOptions) { - this.files = []; - this.loadOptions = loadOptions; -} -ZipEntries.prototype = { - /** - * Check that the reader is on the specified signature. - * @param {string} expectedSignature the expected signature. - * @throws {Error} if it is an other signature. - */ - checkSignature: function(expectedSignature) { - if (!this.reader.readAndCheckSignature(expectedSignature)) { - this.reader.index -= 4; - var signature = this.reader.readString(4); - throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); - } - }, - /** - * Check if the given signature is at the given index. - * @param {number} askedIndex the index to check. - * @param {string} expectedSignature the signature to expect. - * @return {boolean} true if the signature is here, false otherwise. - */ - isSignature: function(askedIndex, expectedSignature) { - var currentIndex = this.reader.index; - this.reader.setIndex(askedIndex); - var signature = this.reader.readString(4); - var result = signature === expectedSignature; - this.reader.setIndex(currentIndex); - return result; - }, - /** - * Read the end of the central directory. - */ - readBlockEndOfCentral: function() { - this.diskNumber = this.reader.readInt(2); - this.diskWithCentralDirStart = this.reader.readInt(2); - this.centralDirRecordsOnThisDisk = this.reader.readInt(2); - this.centralDirRecords = this.reader.readInt(2); - this.centralDirSize = this.reader.readInt(4); - this.centralDirOffset = this.reader.readInt(4); - - this.zipCommentLength = this.reader.readInt(2); - // warning : the encoding depends of the system locale - // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. - // On a windows machine, this field is encoded with the localized windows code page. - var zipComment = this.reader.readData(this.zipCommentLength); - var decodeParamType = support.uint8array ? "uint8array" : "array"; - // To get consistent behavior with the generation part, we will assume that - // this is utf8 encoded unless specified otherwise. - var decodeContent = utils.transformTo(decodeParamType, zipComment); - this.zipComment = this.loadOptions.decodeFileName(decodeContent); - }, - /** - * Read the end of the Zip 64 central directory. - * Not merged with the method readEndOfCentral : - * The end of central can coexist with its Zip64 brother, - * I don't want to read the wrong number of bytes ! - */ - readBlockZip64EndOfCentral: function() { - this.zip64EndOfCentralSize = this.reader.readInt(8); - this.reader.skip(4); - // this.versionMadeBy = this.reader.readString(2); - // this.versionNeeded = this.reader.readInt(2); - this.diskNumber = this.reader.readInt(4); - this.diskWithCentralDirStart = this.reader.readInt(4); - this.centralDirRecordsOnThisDisk = this.reader.readInt(8); - this.centralDirRecords = this.reader.readInt(8); - this.centralDirSize = this.reader.readInt(8); - this.centralDirOffset = this.reader.readInt(8); - - this.zip64ExtensibleData = {}; - var extraDataSize = this.zip64EndOfCentralSize - 44, - index = 0, - extraFieldId, - extraFieldLength, - extraFieldValue; - while (index < extraDataSize) { - extraFieldId = this.reader.readInt(2); - extraFieldLength = this.reader.readInt(4); - extraFieldValue = this.reader.readData(extraFieldLength); - this.zip64ExtensibleData[extraFieldId] = { - id: extraFieldId, - length: extraFieldLength, - value: extraFieldValue - }; - } - }, - /** - * Read the end of the Zip 64 central directory locator. - */ - readBlockZip64EndOfCentralLocator: function() { - this.diskWithZip64CentralDirStart = this.reader.readInt(4); - this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); - this.disksCount = this.reader.readInt(4); - if (this.disksCount > 1) { - throw new Error("Multi-volumes zip are not supported"); - } - }, - /** - * Read the local files, based on the offset read in the central part. - */ - readLocalFiles: function() { - var i, file; - for (i = 0; i < this.files.length; i++) { - file = this.files[i]; - this.reader.setIndex(file.localHeaderOffset); - this.checkSignature(sig.LOCAL_FILE_HEADER); - file.readLocalPart(this.reader); - file.handleUTF8(); - file.processAttributes(); - } - }, - /** - * Read the central directory. - */ - readCentralDir: function() { - var file; - - this.reader.setIndex(this.centralDirOffset); - while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { - file = new ZipEntry({ - zip64: this.zip64 - }, this.loadOptions); - file.readCentralPart(this.reader); - this.files.push(file); - } - - if (this.centralDirRecords !== this.files.length) { - if (this.centralDirRecords !== 0 && this.files.length === 0) { - // We expected some records but couldn't find ANY. - // This is really suspicious, as if something went wrong. - throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); - } else { - // We found some records but not all. - // Something is wrong but we got something for the user: no error here. - // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); - } - } - }, - /** - * Read the end of central directory. - */ - readEndOfCentral: function() { - var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); - if (offset < 0) { - // Check if the content is a truncated zip or complete garbage. - // A "LOCAL_FILE_HEADER" is not required at the beginning (auto - // extractible zip for example) but it can give a good hint. - // If an ajax request was used without responseType, we will also - // get unreadable data. - var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); - - if (isGarbage) { - throw new Error("Can't find end of central directory : is this a zip file ? " + - "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); - } else { - throw new Error("Corrupted zip: can't find end of central directory"); - } - - } - this.reader.setIndex(offset); - var endOfCentralDirOffset = offset; - this.checkSignature(sig.CENTRAL_DIRECTORY_END); - this.readBlockEndOfCentral(); - - - /* extract from the zip spec : - 4) If one of the fields in the end of central directory - record is too small to hold required data, the field - should be set to -1 (0xFFFF or 0xFFFFFFFF) and the - ZIP64 format record should be created. - 5) The end of central directory record and the - Zip64 end of central directory locator record must - reside on the same disk when splitting or spanning - an archive. - */ - if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { - this.zip64 = true; - - /* - Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from - the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents - all numbers as 64-bit double precision IEEE 754 floating point numbers. - So, we have 53bits for integers and bitwise operations treat everything as 32bits. - see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators - and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 - */ - - // should look for a zip64 EOCD locator - offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); - if (offset < 0) { - throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); - } - this.reader.setIndex(offset); - this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); - this.readBlockZip64EndOfCentralLocator(); - - // now the zip64 EOCD record - if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { - // console.warn("ZIP64 end of central directory not where expected."); - this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); - if (this.relativeOffsetEndOfZip64CentralDir < 0) { - throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); - } - } - this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); - this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); - this.readBlockZip64EndOfCentral(); - } - - var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; - if (this.zip64) { - expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator - expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; - } - - var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; - - if (extraBytes > 0) { - // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); - if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { - // The offsets seem wrong, but we have something at the specified offset. - // So… we keep it. - } else { - // the offset is wrong, update the "zero" of the reader - // this happens if data has been prepended (crx files for example) - this.reader.zero = extraBytes; - } - } else if (extraBytes < 0) { - throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); - } - }, - prepareReader: function(data) { - this.reader = readerFor(data); - }, - /** - * Read a zip file and create ZipEntries. - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. - */ - load: function(data) { - this.prepareReader(data); - this.readEndOfCentral(); - this.readCentralDir(); - this.readLocalFiles(); - } -}; -// }}} end of ZipEntries -module.exports = ZipEntries; - -},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ -'use strict'; -var readerFor = require('./reader/readerFor'); -var utils = require('./utils'); -var CompressedObject = require('./compressedObject'); -var crc32fn = require('./crc32'); -var utf8 = require('./utf8'); -var compressions = require('./compressions'); -var support = require('./support'); - -var MADE_BY_DOS = 0x00; -var MADE_BY_UNIX = 0x03; - -/** - * Find a compression registered in JSZip. - * @param {string} compressionMethod the method magic to find. - * @return {Object|null} the JSZip compression object, null if none found. - */ -var findCompression = function(compressionMethod) { - for (var method in compressions) { - if (!compressions.hasOwnProperty(method)) { - continue; - } - if (compressions[method].magic === compressionMethod) { - return compressions[method]; - } - } - return null; -}; - -// class ZipEntry {{{ -/** - * An entry in the zip file. - * @constructor - * @param {Object} options Options of the current file. - * @param {Object} loadOptions Options for loading the stream. - */ -function ZipEntry(options, loadOptions) { - this.options = options; - this.loadOptions = loadOptions; -} -ZipEntry.prototype = { - /** - * say if the file is encrypted. - * @return {boolean} true if the file is encrypted, false otherwise. - */ - isEncrypted: function() { - // bit 1 is set - return (this.bitFlag & 0x0001) === 0x0001; - }, - /** - * say if the file has utf-8 filename/comment. - * @return {boolean} true if the filename/comment is in utf-8, false otherwise. - */ - useUTF8: function() { - // bit 11 is set - return (this.bitFlag & 0x0800) === 0x0800; - }, - /** - * Read the local part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readLocalPart: function(reader) { - var compression, localExtraFieldsLength; - - // we already know everything from the central dir ! - // If the central dir data are false, we are doomed. - // On the bright side, the local part is scary : zip64, data descriptors, both, etc. - // The less data we get here, the more reliable this should be. - // Let's skip the whole header and dash to the data ! - reader.skip(22); - // in some zip created on windows, the filename stored in the central dir contains \ instead of /. - // Strangely, the filename here is OK. - // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes - // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... - // Search "unzip mismatching "local" filename continuing with "central" filename version" on - // the internet. - // - // I think I see the logic here : the central directory is used to display - // content and the local directory is used to extract the files. Mixing / and \ - // may be used to display \ to windows users and use / when extracting the files. - // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 - this.fileNameLength = reader.readInt(2); - localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir - // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. - this.fileName = reader.readData(this.fileNameLength); - reader.skip(localExtraFieldsLength); - - if (this.compressedSize === -1 || this.uncompressedSize === -1) { - throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); - } - - compression = findCompression(this.compressionMethod); - if (compression === null) { // no compression found - throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); - } - this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); - }, - - /** - * Read the central part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readCentralPart: function(reader) { - this.versionMadeBy = reader.readInt(2); - reader.skip(2); - // this.versionNeeded = reader.readInt(2); - this.bitFlag = reader.readInt(2); - this.compressionMethod = reader.readString(2); - this.date = reader.readDate(); - this.crc32 = reader.readInt(4); - this.compressedSize = reader.readInt(4); - this.uncompressedSize = reader.readInt(4); - var fileNameLength = reader.readInt(2); - this.extraFieldsLength = reader.readInt(2); - this.fileCommentLength = reader.readInt(2); - this.diskNumberStart = reader.readInt(2); - this.internalFileAttributes = reader.readInt(2); - this.externalFileAttributes = reader.readInt(4); - this.localHeaderOffset = reader.readInt(4); - - if (this.isEncrypted()) { - throw new Error("Encrypted zip are not supported"); - } - - // will be read in the local part, see the comments there - reader.skip(fileNameLength); - this.readExtraFields(reader); - this.parseZIP64ExtraField(reader); - this.fileComment = reader.readData(this.fileCommentLength); - }, - - /** - * Parse the external file attributes and get the unix/dos permissions. - */ - processAttributes: function () { - this.unixPermissions = null; - this.dosPermissions = null; - var madeBy = this.versionMadeBy >> 8; - - // Check if we have the DOS directory flag set. - // We look for it in the DOS and UNIX permissions - // but some unknown platform could set it as a compatibility flag. - this.dir = this.externalFileAttributes & 0x0010 ? true : false; - - if(madeBy === MADE_BY_DOS) { - // first 6 bits (0 to 5) - this.dosPermissions = this.externalFileAttributes & 0x3F; - } - - if(madeBy === MADE_BY_UNIX) { - this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; - // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); - } - - // fail safe : if the name ends with a / it probably means a folder - if (!this.dir && this.fileNameStr.slice(-1) === '/') { - this.dir = true; - } - }, - - /** - * Parse the ZIP64 extra field and merge the info in the current ZipEntry. - * @param {DataReader} reader the reader to use. - */ - parseZIP64ExtraField: function(reader) { - - if (!this.extraFields[0x0001]) { - return; - } - - // should be something, preparing the extra reader - var extraReader = readerFor(this.extraFields[0x0001].value); - - // I really hope that these 64bits integer can fit in 32 bits integer, because js - // won't let us have more. - if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { - this.uncompressedSize = extraReader.readInt(8); - } - if (this.compressedSize === utils.MAX_VALUE_32BITS) { - this.compressedSize = extraReader.readInt(8); - } - if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { - this.localHeaderOffset = extraReader.readInt(8); - } - if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { - this.diskNumberStart = extraReader.readInt(4); - } - }, - /** - * Read the central part of a zip file and add the info in this object. - * @param {DataReader} reader the reader to use. - */ - readExtraFields: function(reader) { - var end = reader.index + this.extraFieldsLength, - extraFieldId, - extraFieldLength, - extraFieldValue; - - if (!this.extraFields) { - this.extraFields = {}; - } - - while (reader.index + 4 < end) { - extraFieldId = reader.readInt(2); - extraFieldLength = reader.readInt(2); - extraFieldValue = reader.readData(extraFieldLength); - - this.extraFields[extraFieldId] = { - id: extraFieldId, - length: extraFieldLength, - value: extraFieldValue - }; - } - - reader.setIndex(end); - }, - /** - * Apply an UTF8 transformation if needed. - */ - handleUTF8: function() { - var decodeParamType = support.uint8array ? "uint8array" : "array"; - if (this.useUTF8()) { - this.fileNameStr = utf8.utf8decode(this.fileName); - this.fileCommentStr = utf8.utf8decode(this.fileComment); - } else { - var upath = this.findExtraFieldUnicodePath(); - if (upath !== null) { - this.fileNameStr = upath; - } else { - // ASCII text or unsupported code page - var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); - this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); - } - - var ucomment = this.findExtraFieldUnicodeComment(); - if (ucomment !== null) { - this.fileCommentStr = ucomment; - } else { - // ASCII text or unsupported code page - var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); - this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); - } - } - }, - - /** - * Find the unicode path declared in the extra field, if any. - * @return {String} the unicode path, null otherwise. - */ - findExtraFieldUnicodePath: function() { - var upathField = this.extraFields[0x7075]; - if (upathField) { - var extraReader = readerFor(upathField.value); - - // wrong version - if (extraReader.readInt(1) !== 1) { - return null; - } - - // the crc of the filename changed, this field is out of date. - if (crc32fn(this.fileName) !== extraReader.readInt(4)) { - return null; - } - - return utf8.utf8decode(extraReader.readData(upathField.length - 5)); - } - return null; - }, - - /** - * Find the unicode comment declared in the extra field, if any. - * @return {String} the unicode comment, null otherwise. - */ - findExtraFieldUnicodeComment: function() { - var ucommentField = this.extraFields[0x6375]; - if (ucommentField) { - var extraReader = readerFor(ucommentField.value); - - // wrong version - if (extraReader.readInt(1) !== 1) { - return null; - } - - // the crc of the comment changed, this field is out of date. - if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { - return null; - } - - return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); - } - return null; - } -}; -module.exports = ZipEntry; - -},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ -'use strict'; - -var StreamHelper = require('./stream/StreamHelper'); -var DataWorker = require('./stream/DataWorker'); -var utf8 = require('./utf8'); -var CompressedObject = require('./compressedObject'); -var GenericWorker = require('./stream/GenericWorker'); - -/** - * A simple object representing a file in the zip file. - * @constructor - * @param {string} name the name of the file - * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data - * @param {Object} options the options of the file - */ -var ZipObject = function(name, data, options) { - this.name = name; - this.dir = options.dir; - this.date = options.date; - this.comment = options.comment; - this.unixPermissions = options.unixPermissions; - this.dosPermissions = options.dosPermissions; - - this._data = data; - this._dataBinary = options.binary; - // keep only the compression - this.options = { - compression : options.compression, - compressionOptions : options.compressionOptions - }; -}; - -ZipObject.prototype = { - /** - * Create an internal stream for the content of this object. - * @param {String} type the type of each chunk. - * @return StreamHelper the stream. - */ - internalStream: function (type) { - var result = null, outputType = "string"; - try { - if (!type) { - throw new Error("No output type specified."); - } - outputType = type.toLowerCase(); - var askUnicodeString = outputType === "string" || outputType === "text"; - if (outputType === "binarystring" || outputType === "text") { - outputType = "string"; - } - result = this._decompressWorker(); - - var isUnicodeString = !this._dataBinary; - - if (isUnicodeString && !askUnicodeString) { - result = result.pipe(new utf8.Utf8EncodeWorker()); - } - if (!isUnicodeString && askUnicodeString) { - result = result.pipe(new utf8.Utf8DecodeWorker()); - } - } catch (e) { - result = new GenericWorker("error"); - result.error(e); - } - - return new StreamHelper(result, outputType, ""); - }, - - /** - * Prepare the content in the asked type. - * @param {String} type the type of the result. - * @param {Function} onUpdate a function to call on each internal update. - * @return Promise the promise of the result. - */ - async: function (type, onUpdate) { - return this.internalStream(type).accumulate(onUpdate); - }, - - /** - * Prepare the content as a nodejs stream. - * @param {String} type the type of each chunk. - * @param {Function} onUpdate a function to call on each internal update. - * @return Stream the stream. - */ - nodeStream: function (type, onUpdate) { - return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); - }, - - /** - * Return a worker for the compressed content. - * @private - * @param {Object} compression the compression object to use. - * @param {Object} compressionOptions the options to use when compressing. - * @return Worker the worker. - */ - _compressWorker: function (compression, compressionOptions) { - if ( - this._data instanceof CompressedObject && - this._data.compression.magic === compression.magic - ) { - return this._data.getCompressedWorker(); - } else { - var result = this._decompressWorker(); - if(!this._dataBinary) { - result = result.pipe(new utf8.Utf8EncodeWorker()); - } - return CompressedObject.createWorkerFrom(result, compression, compressionOptions); - } - }, - /** - * Return a worker for the decompressed content. - * @private - * @return Worker the worker. - */ - _decompressWorker : function () { - if (this._data instanceof CompressedObject) { - return this._data.getContentWorker(); - } else if (this._data instanceof GenericWorker) { - return this._data; - } else { - return new DataWorker(this._data); - } - } -}; - -var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; -var removedFn = function () { - throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); -}; - -for(var i = 0; i < removedMethods.length; i++) { - ZipObject.prototype[removedMethods[i]] = removedFn; -} -module.exports = ZipObject; - -},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ -(function (global){ -'use strict'; -var Mutation = global.MutationObserver || global.WebKitMutationObserver; - -var scheduleDrain; - -{ - if (Mutation) { - var called = 0; - var observer = new Mutation(nextTick); - var element = global.document.createTextNode(''); - observer.observe(element, { - characterData: true - }); - scheduleDrain = function () { - element.data = (called = ++called % 2); - }; - } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { - var channel = new global.MessageChannel(); - channel.port1.onmessage = nextTick; - scheduleDrain = function () { - channel.port2.postMessage(0); - }; - } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { - scheduleDrain = function () { - - // Create a - - - - - -
    - -

    index.html

    -
    - - diff --git a/target/apidocs/overview-tree.html b/target/apidocs/overview-tree.html deleted file mode 100644 index 311fe59d..00000000 --- a/target/apidocs/overview-tree.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - -Class Hierarchy (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    - -
    -
    -

    Class Hierarchy

    - -
    -
    -

    Annotation Type Hierarchy

    - -
    -
    -

    Enum Hierarchy

    - -
    -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/package-search-index.js b/target/apidocs/package-search-index.js deleted file mode 100644 index 4c4e8b66..00000000 --- a/target/apidocs/package-search-index.js +++ /dev/null @@ -1 +0,0 @@ -packageSearchIndex = [{"l":"ai.tecton.client"},{"l":"ai.tecton.client.exceptions"},{"l":"ai.tecton.client.model"},{"l":"ai.tecton.client.request"},{"l":"ai.tecton.client.response"},{"l":"ai.tecton.client.transport"},{"l":"ai.tecton.client.version"},{"l":"All Packages","url":"allpackages-index.html"}] diff --git a/target/apidocs/package-search-index.zip b/target/apidocs/package-search-index.zip deleted file mode 100644 index 9b0e5f56a5cb8fc1f7fd7445abc84422762081c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmWIWW@Zs#;Nak32&?)Y#ef7Pf$W0BR3-ORj{)C#?<;{3eYK5xE5 z20Sk7oA&5gGFaywklWaCNzi47--g%_&adxWI5sNXJ-6rQocJRp3uZJcS5BN@;XLQs z!~KFAR6@?Xt~u|M%JMz;XmVR_j>ej8j9)mfYxG|1ouq!{)>-+2lzVfNb{*I5VVm`J za?-l^-1(_Tg!1gRzMgI#;LXnQw{2!|8PI7Gj0_9`-i%Bl3<&2V%YmGa3UGQRz?+o~ Oq?8c|-GTI8us#62=v(9f diff --git a/target/apidocs/resources/glass.png b/target/apidocs/resources/glass.png deleted file mode 100644 index a7f591f467a1c0c949bbc510156a0c1afb860a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY diff --git a/target/apidocs/script.js b/target/apidocs/script.js deleted file mode 100644 index 7dc93c48..00000000 --- a/target/apidocs/script.js +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var moduleSearchIndex; -var packageSearchIndex; -var typeSearchIndex; -var memberSearchIndex; -var tagSearchIndex; -function loadScripts(doc, tag) { - createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); - createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); - if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || - window.navigator.userAgent.indexOf('Edge/') > 0) { - createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); - } - createElem(doc, tag, 'search.js'); - - $.get(pathtoroot + "module-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("module-search-index.json").async("text").then(function(content){ - moduleSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "package-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("package-search-index.json").async("text").then(function(content){ - packageSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "type-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("type-search-index.json").async("text").then(function(content){ - typeSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "member-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("member-search-index.json").async("text").then(function(content){ - memberSearchIndex = JSON.parse(content); - }); - }); - }); - }); - $.get(pathtoroot + "tag-search-index.zip") - .done(function() { - JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { - JSZip.loadAsync(data).then(function(zip){ - zip.file("tag-search-index.json").async("text").then(function(content){ - tagSearchIndex = JSON.parse(content); - }); - }); - }); - }); - if (!moduleSearchIndex) { - createElem(doc, tag, 'module-search-index.js'); - } - if (!packageSearchIndex) { - createElem(doc, tag, 'package-search-index.js'); - } - if (!typeSearchIndex) { - createElem(doc, tag, 'type-search-index.js'); - } - if (!memberSearchIndex) { - createElem(doc, tag, 'member-search-index.js'); - } - if (!tagSearchIndex) { - createElem(doc, tag, 'tag-search-index.js'); - } - $(window).resize(function() { - $('.navPadding').css('padding-top', $('.fixedNav').css("height")); - }); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -function show(type) { - count = 0; - for (var key in data) { - var row = document.getElementById(key); - if ((data[key] & type) !== 0) { - row.style.display = ''; - row.className = (count++ % 2) ? rowColor : altColor; - } - else - row.style.display = 'none'; - } - updateTabs(type); -} - -function updateTabs(type) { - for (var value in tabs) { - var sNode = document.getElementById(tabs[value][0]); - var spanNode = sNode.firstChild; - if (value == type) { - sNode.className = activeTableTab; - spanNode.innerHTML = tabs[value][1]; - } - else { - sNode.className = tableTab; - spanNode.innerHTML = "" + tabs[value][1] + ""; - } - } -} - -function updateModuleFrame(pFrame, cFrame) { - top.packageFrame.location = pFrame; - top.classFrame.location = cFrame; -} diff --git a/target/apidocs/search.js b/target/apidocs/search.js deleted file mode 100644 index 8492271e..00000000 --- a/target/apidocs/search.js +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var noResult = {l: "No results found"}; -var catModules = "Modules"; -var catPackages = "Packages"; -var catTypes = "Types"; -var catMembers = "Members"; -var catSearchTags = "SearchTags"; -var highlight = "$&"; -var camelCaseRegexp = ""; -var secondaryMatcher = ""; -function getHighlightedText(item) { - var ccMatcher = new RegExp(camelCaseRegexp); - var label = item.replace(ccMatcher, highlight); - if (label === item) { - label = item.replace(secondaryMatcher, highlight); - } - return label; -} -function getURLPrefix(ui) { - var urlPrefix=""; - if (useModuleDirectories) { - var slash = "/"; - if (ui.item.category === catModules) { - return ui.item.l + slash; - } else if (ui.item.category === catPackages && ui.item.m) { - return ui.item.m + slash; - } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { - $.each(packageSearchIndex, function(index, item) { - if (item.m && ui.item.p == item.l) { - urlPrefix = item.m + slash; - } - }); - return urlPrefix; - } else { - return urlPrefix; - } - } - return urlPrefix; -} -var watermark = 'Search'; -$(function() { - $("#search").val(''); - $("#search").prop("disabled", false); - $("#reset").prop("disabled", false); - $("#search").val(watermark).addClass('watermark'); - $("#search").blur(function() { - if ($(this).val().length == 0) { - $(this).val(watermark).addClass('watermark'); - } - }); - $("#search").on('click keydown', function() { - if ($(this).val() == watermark) { - $(this).val('').removeClass('watermark'); - } - }); - $("#reset").click(function() { - $("#search").val(''); - $("#search").focus(); - }); - $("#search").focus(); - $("#search")[0].setSelectionRange(0, 0); -}); -$.widget("custom.catcomplete", $.ui.autocomplete, { - _create: function() { - this._super(); - this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); - }, - _renderMenu: function(ul, items) { - var rMenu = this, - currentCategory = ""; - rMenu.menu.bindings = $(); - $.each(items, function(index, item) { - var li; - if (item.l !== noResult.l && item.category !== currentCategory) { - ul.append("
  • " + item.category + "
  • "); - currentCategory = item.category; - } - li = rMenu._renderItemData(ul, item); - if (item.category) { - li.attr("aria-label", item.category + " : " + item.l); - li.attr("class", "resultItem"); - } else { - li.attr("aria-label", item.l); - li.attr("class", "resultItem"); - } - }); - }, - _renderItem: function(ul, item) { - var label = ""; - if (item.category === catModules) { - label = getHighlightedText(item.l); - } else if (item.category === catPackages) { - label = (item.m) - ? getHighlightedText(item.m + "/" + item.l) - : getHighlightedText(item.l); - } else if (item.category === catTypes) { - label = (item.p) - ? getHighlightedText(item.p + "." + item.l) - : getHighlightedText(item.l); - } else if (item.category === catMembers) { - label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); - } else if (item.category === catSearchTags) { - label = getHighlightedText(item.l); - } else { - label = item.l; - } - var li = $("
  • ").appendTo(ul); - var div = $("
    ").appendTo(li); - if (item.category === catSearchTags) { - if (item.d) { - div.html(label + " (" + item.h + ")
    " - + item.d + "
    "); - } else { - div.html(label + " (" + item.h + ")"); - } - } else { - div.html(label); - } - return li; - } -}); -$(function() { - $("#search").catcomplete({ - minLength: 1, - delay: 100, - source: function(request, response) { - var result = new Array(); - var presult = new Array(); - var tresult = new Array(); - var mresult = new Array(); - var tgresult = new Array(); - var secondaryresult = new Array(); - var displayCount = 0; - var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); - camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); - var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); - secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); - - // Return the nested innermost name from the specified object - function nestedName(e) { - return e.l.substring(e.l.lastIndexOf(".") + 1); - } - - function concatResults(a1, a2) { - a1 = a1.concat(a2); - a2.length = 0; - return a1; - } - - if (moduleSearchIndex) { - var mdleCount = 0; - $.each(moduleSearchIndex, function(index, item) { - item.category = catModules; - if (exactMatcher.test(item.l)) { - result.push(item); - mdleCount++; - } else if (camelCaseMatcher.test(item.l)) { - result.push(item); - } else if (secondaryMatcher.test(item.l)) { - secondaryresult.push(item); - } - }); - displayCount = mdleCount; - result = concatResults(result, secondaryresult); - } - if (packageSearchIndex) { - var pCount = 0; - var pkg = ""; - $.each(packageSearchIndex, function(index, item) { - item.category = catPackages; - pkg = (item.m) - ? (item.m + "/" + item.l) - : item.l; - if (exactMatcher.test(item.l)) { - presult.push(item); - pCount++; - } else if (camelCaseMatcher.test(pkg)) { - presult.push(item); - } else if (secondaryMatcher.test(pkg)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(presult, secondaryresult)); - displayCount = (pCount > displayCount) ? pCount : displayCount; - } - if (typeSearchIndex) { - var tCount = 0; - $.each(typeSearchIndex, function(index, item) { - item.category = catTypes; - var s = nestedName(item); - if (exactMatcher.test(s)) { - tresult.push(item); - tCount++; - } else if (camelCaseMatcher.test(s)) { - tresult.push(item); - } else if (secondaryMatcher.test(item.p + "." + item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(tresult, secondaryresult)); - displayCount = (tCount > displayCount) ? tCount : displayCount; - } - if (memberSearchIndex) { - var mCount = 0; - $.each(memberSearchIndex, function(index, item) { - item.category = catMembers; - var s = nestedName(item); - if (exactMatcher.test(s)) { - mresult.push(item); - mCount++; - } else if (camelCaseMatcher.test(s)) { - mresult.push(item); - } else if (secondaryMatcher.test(item.c + "." + item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(mresult, secondaryresult)); - displayCount = (mCount > displayCount) ? mCount : displayCount; - } - if (tagSearchIndex) { - var tgCount = 0; - $.each(tagSearchIndex, function(index, item) { - item.category = catSearchTags; - if (exactMatcher.test(item.l)) { - tgresult.push(item); - tgCount++; - } else if (secondaryMatcher.test(item.l)) { - secondaryresult.push(item); - } - }); - result = result.concat(concatResults(tgresult, secondaryresult)); - displayCount = (tgCount > displayCount) ? tgCount : displayCount; - } - displayCount = (displayCount > 500) ? displayCount : 500; - var counter = function() { - var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; - var f = function(item) { - count[item.category] += 1; - return (count[item.category] <= displayCount); - }; - return f; - }(); - response(result.filter(counter)); - }, - response: function(event, ui) { - if (!ui.content.length) { - ui.content.push(noResult); - } else { - $("#search").empty(); - } - }, - autoFocus: true, - position: { - collision: "flip" - }, - select: function(event, ui) { - if (ui.item.l !== noResult.l) { - var url = getURLPrefix(ui); - if (ui.item.category === catModules) { - if (useModuleDirectories) { - url += "module-summary.html"; - } else { - url = ui.item.l + "-summary.html"; - } - } else if (ui.item.category === catPackages) { - if (ui.item.url) { - url = ui.item.url; - } else { - url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; - } - } else if (ui.item.category === catTypes) { - if (ui.item.url) { - url = ui.item.url; - } else if (ui.item.p === "") { - url += ui.item.l + ".html"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; - } - } else if (ui.item.category === catMembers) { - if (ui.item.p === "") { - url += ui.item.c + ".html" + "#"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; - } - if (ui.item.url) { - url += ui.item.url; - } else { - url += ui.item.l; - } - } else if (ui.item.category === catSearchTags) { - url += ui.item.u; - } - if (top !== window) { - parent.classFrame.location = pathtoroot + url; - } else { - window.location.href = pathtoroot + url; - } - $("#search").focus(); - } - } - }); -}); diff --git a/target/apidocs/serialized-form.html b/target/apidocs/serialized-form.html deleted file mode 100644 index a2612184..00000000 --- a/target/apidocs/serialized-form.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -Serialized Form (Tecton Java Client 0.9.4-SNAPSHOT API) - - - - - - - - - - - - - - - -
    - -
    -
    -
    -

    Serialized Form

    -
    -
    - -
    -
    -
    - -

    Copyright © 2025. All rights reserved.

    -
    - - diff --git a/target/apidocs/stylesheet.css b/target/apidocs/stylesheet.css deleted file mode 100644 index 7d48b952..00000000 --- a/target/apidocs/stylesheet.css +++ /dev/null @@ -1,910 +0,0 @@ -/* - * Javadoc style sheet - */ - -@import url('resources/fonts/dejavu.css'); - -/* - * Styles for individual HTML elements. - * - * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular - * HTML element throughout the page. - */ - -body { - background-color:#ffffff; - color:#353833; - font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:14px; - margin:0; - padding:0; - height:100%; - width:100%; -} -iframe { - margin:0; - padding:0; - height:100%; - width:100%; - overflow-y:scroll; - border:none; -} -a:link, a:visited { - text-decoration:none; - color:#4A6782; -} -a[href]:hover, a[href]:focus { - text-decoration:none; - color:#bb7a2a; -} -a[name] { - color:#353833; -} -a[name]:before, a[name]:target, a[id]:before, a[id]:target { - content:""; - display:inline-block; - position:relative; - padding-top:129px; - margin-top:-129px; -} -pre { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; -} -h1 { - font-size:20px; -} -h2 { - font-size:18px; -} -h3 { - font-size:16px; - font-style:italic; -} -h4 { - font-size:13px; -} -h5 { - font-size:12px; -} -h6 { - font-size:11px; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; -} -table tr td dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} - -/* - * Styles for HTML generated by javadoc. - * - * These are style classes that are used by the standard doclet to generate HTML documentation. - */ - -/* - * Styles for document title and copyright. - */ -.clear { - clear:both; - height:0px; - overflow:hidden; -} -.aboutLanguage { - float:right; - padding:0px 21px; - font-size:11px; - z-index:200; - margin-top:-9px; -} -.legalCopy { - margin-left:.5em; -} -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color:#FFFFFF; - text-decoration:none; -} -.bar a:hover, .bar a:focus { - color:#bb7a2a; -} -.tab { - background-color:#0066FF; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* - * Styles for navigation bar. - */ -.bar { - background-color:#4D7A97; - color:#FFFFFF; - padding:.8em .5em .4em .8em; - height:auto;/*height:1.8em;*/ - font-size:11px; - margin:0; -} -.navPadding { - padding-top: 107px; -} -.fixedNav { - position:fixed; - width:100%; - z-index:999; - background-color:#ffffff; -} -.topNav { - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.bottomNav { - margin-top:10px; - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.subNav { - background-color:#dee3e9; - float:left; - width:100%; - overflow:hidden; - font-size:12px; -} -.subNav div { - clear:left; - float:left; - padding:0 0 5px 6px; - text-transform:uppercase; -} -ul.navList, ul.subNavList { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.navList li{ - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -ul.navListSearch { - float:right; - margin:0 0 0 0; - padding:0; -} -ul.navListSearch li { - list-style:none; - float:right; - padding: 5px 6px; - text-transform:uppercase; -} -ul.navListSearch li label { - position:relative; - right:-16px; -} -ul.subNavList li { - list-style:none; - float:left; -} -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { - color:#FFFFFF; - text-decoration:none; - text-transform:uppercase; -} -.topNav a:hover, .bottomNav a:hover { - text-decoration:none; - color:#bb7a2a; - text-transform:uppercase; -} -.navBarCell1Rev { - background-color:#F8981D; - color:#253441; - margin: auto 5px; -} -.skipNav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* - * Styles for page header and footer. - */ -.header, .footer { - clear:both; - margin:0 20px; - padding:5px 0 0 0; -} -.indexNav { - position:relative; - font-size:12px; - background-color:#dee3e9; -} -.indexNav ul { - margin-top:0; - padding:5px; -} -.indexNav ul li { - display:inline; - list-style-type:none; - padding-right:10px; - text-transform:uppercase; -} -.indexNav h1 { - font-size:13px; -} -.title { - color:#2c4557; - margin:10px 0; -} -.subTitle { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 15px 0; - padding:0; -} -.footer ul { - margin:20px 0 5px 0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:13px; -} -/* - * Styles for headings. - */ -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -ul.blockList ul.blockList li.blockList h3 { - padding:0; - margin:15px 0; -} -ul.blockList li.blockList h2 { - padding:0px 0 20px 0; -} -/* - * Styles for page layout containers. - */ -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, -.allClassesContainer, .allPackagesContainer { - clear:both; - padding:10px 20px; - position:relative; -} -.indexContainer { - margin:10px; - position:relative; - font-size:12px; -} -.indexContainer h2 { - font-size:13px; - padding:0 0 3px 0; -} -.indexContainer ul { - margin:0; - padding:0; -} -.indexContainer ul li { - list-style:none; - padding-top:2px; -} -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { - font-size:12px; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin:5px 0 10px 0px; - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -.serializedFormContainer dl.nameValue dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -.serializedFormContainer dl.nameValue dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* - * Styles for lists. - */ -li.circle { - list-style:circle; -} -ul.horizontal li { - display:inline; - font-size:0.9em; -} -ul.inheritance { - margin:0; - padding:0; -} -ul.inheritance li { - display:inline; - list-style:none; -} -ul.inheritance li ul.inheritance { - margin-left:15px; - padding-left:15px; - padding-top:1px; -} -ul.blockList, ul.blockListLast { - margin:10px 0 10px 0; - padding:0; -} -ul.blockList li.blockList, ul.blockListLast li.blockList { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { - padding:0px 20px 5px 10px; - border:1px solid #ededed; - background-color:#f8f8f8; -} -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left:0; - padding-left:0; - padding-bottom:15px; - border:none; -} -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style:none; - border-bottom:none; - padding-bottom:0; -} -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top:0; - margin-bottom:1px; -} -/* - * Styles for tables. - */ -.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, -.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { - width:100%; - border-spacing:0; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; -} -.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { - padding:0px; -} -.overviewSummary caption, .memberSummary caption, .typeSummary caption, -.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, -.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#253441; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0px; - padding-top:10px; - padding-left:1px; - margin:0px; - white-space:pre; -} -.constantsSummary caption a:link, .constantsSummary caption a:visited, -.useSummary caption a:link, .useSummary caption a:visited { - color:#1f389c; -} -.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, -.deprecatedSummary caption a:link, -.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, -.usesSummary caption a:link, -.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, -.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, -.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, -.usesSummary caption a:hover, -.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, -.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, -.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, -.usesSummary caption a:active, -.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, -.deprecatedSummary caption a:visited, -.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, -.usesSummary caption a:visited { - color:#FFFFFF; -} -.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, -.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, -.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, -.usesSummary caption span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - padding-bottom:7px; - display:inline-block; - float:left; - background-color:#F8981D; - border: none; - height:16px; -} -.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, -.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#F8981D; - height:16px; -} -.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, -.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - margin-right:3px; - display:inline-block; - float:left; - background-color:#4D7A97; - height:16px; -} -.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, -.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, -.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, -.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { - padding-top:0px; - padding-left:0px; - padding-right:0px; - background-image:none; - float:none; - display:inline; -} -.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, -.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, -.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { - display:none; - width:5px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, -.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - float:left; - background-color:#F8981D; -} -.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, -.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { - display:none; - width:5px; - margin-right:3px; - position:relative; - background-color:#4D7A97; - float:left; -} -.rowColor th, .altColor th { - font-weight:normal; -} -.overviewSummary td, .memberSummary td, .typeSummary td, -.useSummary td, .constantsSummary td, .deprecatedSummary td, -.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { - text-align:left; - padding:0px 0px 12px 10px; -} -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, -.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, -.constantsSummary td { - vertical-align:top; - padding-right:0px; - padding-top:8px; - padding-bottom:3px; -} -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, -.packagesSummary th { - background:#dee3e9; - text-align:left; - padding:8px 3px 3px 7px; -} -td.colFirst, th.colFirst { - font-size:13px; -} -td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { - font-size:13px; -} -.constantsSummary th, .packagesSummary th { - font-size:13px; -} -.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, -.providesSummary td.colLast { - white-space:normal; - font-size:13px; -} -.overviewSummary td.colFirst, .overviewSummary th.colFirst, -.requiresSummary td.colFirst, .requiresSummary th.colFirst, -.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, -.usesSummary td.colFirst, .usesSummary th.colFirst, -.providesSummary td.colFirst, .providesSummary th.colFirst, -.memberSummary td.colFirst, .memberSummary th.colFirst, -.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, -.typeSummary td.colFirst, .typeSummary th.colFirst { - vertical-align:top; -} -.packagesSummary th.colLast, .packagesSummary td.colLast { - white-space:normal; -} -td.colFirst a:link, td.colFirst a:visited, -td.colSecond a:link, td.colSecond a:visited, -th.colFirst a:link, th.colFirst a:visited, -th.colSecond a:link, th.colSecond a:visited, -th.colConstructorName a:link, th.colConstructorName a:visited, -th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, -.constantValuesContainer td a:link, .constantValuesContainer td a:visited, -.allClassesContainer td a:link, .allClassesContainer td a:visited, -.allPackagesContainer td a:link, .allPackagesContainer td a:visited { - font-weight:bold; -} -.tableSubHeadingColor { - background-color:#EEEEFF; -} -.altColor, .altColor th { - background-color:#FFFFFF; -} -.rowColor, .rowColor th { - background-color:#EEEEEF; -} -/* - * Styles for contents. - */ -.description pre { - margin-top:0; -} -.deprecatedContent { - margin:0; - padding:10px 0; -} -.docSummary { - padding:0; -} -ul.blockList ul.blockList ul.blockList li.blockList h3 { - font-style:normal; -} -div.block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -td.colLast div { - padding-top:0px; -} -td.colLast a { - padding-bottom:3px; -} -/* - * Styles for formatting effect. - */ -.sourceLineNo { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:10px; -} -.block { - display:block; - margin:3px 10px 2px 0px; - color:#474747; -} -.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, -.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, -.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, -.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { - font-weight:bold; -} -.deprecationComment, .emphasizedPhrase, .interfaceName { - font-style:italic; -} -.deprecationBlock { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, -div.block div.block span.interfaceName { - font-style:normal; -} -div.contentContainer ul.blockList li.blockList h2 { - padding-bottom:0px; -} -/* - * Styles for IFRAME. - */ -.mainContainer { - margin:0 auto; - padding:0; - height:100%; - width:100%; - position:fixed; - top:0; - left:0; -} -.leftContainer { - height:100%; - position:fixed; - width:320px; -} -.leftTop { - position:relative; - float:left; - width:315px; - top:0; - left:0; - height:30%; - border-right:6px solid #ccc; - border-bottom:6px solid #ccc; -} -.leftBottom { - position:relative; - float:left; - width:315px; - bottom:0; - left:0; - height:70%; - border-right:6px solid #ccc; - border-top:1px solid #000; -} -.rightContainer { - position:absolute; - left:320px; - top:0; - bottom:0; - height:100%; - right:0; - border-left:1px solid #000; -} -.rightIframe { - margin:0; - padding:0; - height:100%; - right:30px; - width:100%; - overflow:visible; - margin-bottom:30px; -} -/* - * Styles specific to HTML5 elements. - */ -main, nav, header, footer, section { - display:block; -} -/* - * Styles for javadoc search. - */ -.ui-autocomplete-category { - font-weight:bold; - font-size:15px; - padding:7px 0 7px 3px; - background-color:#4D7A97; - color:#FFFFFF; -} -.resultItem { - font-size:13px; -} -.ui-autocomplete { - max-height:85%; - max-width:65%; - overflow-y:scroll; - overflow-x:scroll; - white-space:nowrap; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -ul.ui-autocomplete { - position:fixed; - z-index:999999; - background-color: #FFFFFF; -} -ul.ui-autocomplete li { - float:left; - clear:both; - width:100%; -} -.resultHighlight { - font-weight:bold; -} -.ui-autocomplete .result-item { - font-size: inherit; -} -#search { - background-image:url('resources/glass.png'); - background-size:13px; - background-repeat:no-repeat; - background-position:2px 3px; - padding-left:20px; - position:relative; - right:-18px; -} -#reset { - background-color: rgb(255,255,255); - background-image:url('resources/x.png'); - background-position:center; - background-repeat:no-repeat; - background-size:12px; - border:0 none; - width:16px; - height:17px; - position:relative; - left:-4px; - top:-4px; - font-size:0px; -} -.watermark { - color:#545454; -} -.searchTagDescResult { - font-style:italic; - font-size:11px; -} -.searchTagHolderResult { - font-style:italic; - font-size:12px; -} -.searchTagResult:before, .searchTagResult:target { - color:red; -} -.moduleGraph span { - display:none; - position:absolute; -} -.moduleGraph:hover span { - display:block; - margin: -100px 0 0 100px; - z-index: 1; -} -.methodSignature { - white-space:normal; -} - -/* - * Styles for user-provided tables. - * - * borderless: - * No borders, vertical margins, styled caption. - * This style is provided for use with existing doc comments. - * In general, borderless tables should not be used for layout purposes. - * - * plain: - * Plain borders around table and cells, vertical margins, styled caption. - * Best for small tables or for complex tables for tables with cells that span - * rows and columns, when the "striped" style does not work well. - * - * striped: - * Borders around the table and vertical borders between cells, striped rows, - * vertical margins, styled caption. - * Best for tables that have a header row, and a body containing a series of simple rows. - */ - -table.borderless, -table.plain, -table.striped { - margin-top: 10px; - margin-bottom: 10px; -} -table.borderless > caption, -table.plain > caption, -table.striped > caption { - font-weight: bold; - font-size: smaller; -} -table.borderless th, table.borderless td, -table.plain th, table.plain td, -table.striped th, table.striped td { - padding: 2px 5px; -} -table.borderless, -table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, -table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { - border: none; -} -table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { - background-color: transparent; -} -table.plain { - border-collapse: collapse; - border: 1px solid black; -} -table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { - background-color: transparent; -} -table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, -table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { - border: 1px solid black; -} -table.striped { - border-collapse: collapse; - border: 1px solid black; -} -table.striped > thead { - background-color: #E3E3E3; -} -table.striped > thead > tr > th, table.striped > thead > tr > td { - border: 1px solid black; -} -table.striped > tbody > tr:nth-child(even) { - background-color: #EEE -} -table.striped > tbody > tr:nth-child(odd) { - background-color: #FFF -} -table.striped > tbody > tr > th, table.striped > tbody > tr > td { - border-left: 1px solid black; - border-right: 1px solid black; -} -table.striped > tbody > tr > th { - font-weight: normal; -} diff --git a/target/apidocs/type-search-index.js b/target/apidocs/type-search-index.js deleted file mode 100644 index a795559d..00000000 --- a/target/apidocs/type-search-index.js +++ /dev/null @@ -1 +0,0 @@ -typeSearchIndex = [{"p":"ai.tecton.client.request","l":"AbstractGetFeaturesRequest"},{"p":"ai.tecton.client.request","l":"AbstractTectonRequest"},{"l":"All Classes","url":"allclasses-index.html"},{"p":"ai.tecton.client.exceptions","l":"BadRequestException"},{"p":"ai.tecton.client","l":"TectonClient.Builder"},{"p":"ai.tecton.client","l":"TectonClientOptions.Builder"},{"p":"ai.tecton.client.model","l":"SloInformation.Builder"},{"p":"ai.tecton.client.request","l":"GetFeatureServiceMetadataRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesBatchRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequest.Builder"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequestData.Builder"},{"p":"ai.tecton.client.request","l":"RequestOptions.Builder"},{"p":"ai.tecton.client.model","l":"FeatureServiceMetadata"},{"p":"ai.tecton.client.model","l":"FeatureStatus"},{"p":"ai.tecton.client.model","l":"FeatureValue"},{"p":"ai.tecton.client.exceptions","l":"ForbiddenException"},{"p":"ai.tecton.client.exceptions","l":"GatewayTimeoutException"},{"p":"ai.tecton.client.request","l":"GetFeaturesBatchRequest"},{"p":"ai.tecton.client.response","l":"GetFeaturesBatchResponse"},{"p":"ai.tecton.client.request","l":"GetFeatureServiceMetadataRequest"},{"p":"ai.tecton.client.response","l":"GetFeatureServiceMetadataResponse"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequest"},{"p":"ai.tecton.client.request","l":"GetFeaturesRequestData"},{"p":"ai.tecton.client.response","l":"GetFeaturesResponse"},{"p":"ai.tecton.client.transport","l":"TectonHttpClient.HttpMethod"},{"p":"ai.tecton.client.transport","l":"HttpResponse"},{"p":"ai.tecton.client.exceptions","l":"HttpStatusExceptionFactory"},{"p":"ai.tecton.client.exceptions","l":"InternalServerErrorException"},{"p":"ai.tecton.client.exceptions","l":"InvalidRequestParameterException"},{"p":"ai.tecton.client.model","l":"MetadataOption"},{"p":"ai.tecton.client.model","l":"NameAndType"},{"p":"ai.tecton.client.request","l":"RequestConstants"},{"p":"ai.tecton.client.request","l":"RequestOptions"},{"p":"ai.tecton.client.exceptions","l":"ResourceExhaustedException"},{"p":"ai.tecton.client.exceptions","l":"ResourceNotFoundException"},{"p":"ai.tecton.client.request","l":"AbstractGetFeaturesRequest.SerializeNulls"},{"p":"ai.tecton.client.exceptions","l":"ServiceUnavailableException"},{"p":"ai.tecton.client.model","l":"SloInformation.SloIneligibilityReason"},{"p":"ai.tecton.client.model","l":"SloInformation"},{"p":"ai.tecton.client","l":"TectonClient"},{"p":"ai.tecton.client.exceptions","l":"TectonClientException"},{"p":"ai.tecton.client","l":"TectonClientOptions"},{"p":"ai.tecton.client.exceptions","l":"TectonErrorMessage"},{"p":"ai.tecton.client.exceptions","l":"TectonException"},{"p":"ai.tecton.client.transport","l":"TectonHttpClient"},{"p":"ai.tecton.client.exceptions","l":"TectonServiceException"},{"p":"ai.tecton.client.exceptions","l":"UnauthorizedException"},{"p":"ai.tecton.client.model","l":"ValueType"},{"p":"ai.tecton.client.version","l":"Version"}] diff --git a/target/apidocs/type-search-index.zip b/target/apidocs/type-search-index.zip deleted file mode 100644 index 5092fe69aaa8ab38a85b3498a3a37ff3b6e59ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 672 zcmWIWW@Zs#;Nak32&?)Y#ef9Ffb5dWf>hn&)Wo9X4BgDUl++5ntm6E*Afm@e0+=W0)wq_)k)zf*Vb_SJW{pa1n~ zbw*b?>x)Snld?~BnMmo$*73jCxkJli+WPDBWJ7A2ZQLI`xN!eCuYb5F&+5GMhC8BF ztBh4Y$nAZ@zpj?uCG`KRwPsx9PusGsa5zTj!r35Opm~(Y1+v6Zhw{yQHE%7<{XY{a^Nk@ordnMK=$Z#G{*^fBs?FaqEx$ z+0}-7rUx(GW+5ItUeQd-r2P^jO*-%Q~n3d5By;MrX9POSNU1W zoCv*xwaOPi>e%V+pY+36$WrmtS&gd-@z<*TG~0{C)Xg>>xBb3>|BUaKec#qkNl3n0 zF-go==9f#8?i%^Y_Mc{-E>u- z9B;0^S9-l(^;F9vl-`l;5k9TtyyHc3@2#C=wF^Xh_aw;ew8Xe~d&K56OG zoxEv0$8W6m(7b#7(*F57cw98qyPf}^JRoLraF)Twr~hjX?{-)DyW;vRllSihYve*t zy;XjA;P{3$w*z-oRh5{}+Wx}UX4woE7Jl>86E`O%yJbG{h5&21GhSmII|DRDeBI1$eWv Rfz&Yqp$m|91Degi0046s8lM0F diff --git a/target/classes/ai/tecton/client/TectonClient$Builder.class b/target/classes/ai/tecton/client/TectonClient$Builder.class deleted file mode 100644 index 2285bb67cd6e16f5e65a29917d4be0d278f587f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1542 zcma)6%Wl(95Ixs=#te)zxbj{N3W3BEwrhQxzi0WPQnekd+!8KZL$1Yo@ zVY{`iYj*6Oz)n>+wb6;z@{Y8_pdaBVC$8Ha1q-CBoi?xUYPI&0vwgnpfoYrWBg!aW zXb6PMog+gaUNvpwdH-e8a1QmRMLWrAr=?pB-7$IXZ-(6ylTwl&_f6}_a0Jw+wrx0N zOYijzI>=4Vb<2;VG)nm(6@{szYx&8pK6$0-5%=@s37Z}v(qvKuviVD5sQTHutGC(* zde`SwsdxHL%cz*leByk2_jq7bEFh&q#jJ`s7IDn0NFXV&GI2OKP-Ah6#chG@iSB>< zBQXDOPHW9m8aIK5V>%Y>;RP(xq#aBbKQY0xz7k$;D!f7iS$df>^l-zFm_o87X3^6` zq^F5X(oxVOM2h4htu)etbfh?hc`)6I!O-Rr%NQ#a&h-P zq~d@~2^_9?+usnucMl>xa`Pc5z{`fSjUFQ;=b7Q@)~up;?tj{7#fqzGBss`YzdoK NCaq9j{5!vf*dOICRN?>t diff --git a/target/classes/ai/tecton/client/TectonClient.class b/target/classes/ai/tecton/client/TectonClient.class deleted file mode 100644 index 4e13fa34aa5ecdeec5a91381121e672d2544ebe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5811 zcmb_g`Fk718GhG?)>$t;QwJvy=P<;vohS}1M;r{;`jh&>1Htkwk#~ZJ;VzqLU z^r9C>=v@eu-Yt|CLYq)xCvh8~H4qQTp@;t!8Jw?|Z*{X7<(p zT)YI}o%pwg9?Yn)RLp9q#*BE_8mch20^LZ6k)v^xRB^8c7by)M(kkY~%Lg@RIHuyb zh9(@-Z~`By$CdbS3uS+z9-qXgG<+KOi_rrr9@Ovy6;Qqbg?G0#ct^}OVeZJ7yA!In|OipuF|EHfANTqBW6I<6O;C?fAy5ZP%ZEN?); zrmoSW#=H@=jl_}YxaV4lBmLo-%?B0K3^{RALF1^EFz-yyO_}b5F=cb6Wz>lo_Cdq7 z#JfLP!SN+^O4HHYhpedxwg@gbPDQ^nBH#F@Y1e``QfgxcCLAE z+Dv)TJ$b_Ya;krGDQadzB4rkm%Q?oOB>?A3DVbJfK$)n*vi+tMs-T1x`K%O9$&wOZ z+jT5v${4Bmx{7ZoXwR!OZo2bU%p5a4BW`$xf)f?_qloSDyc1&1`D)#=isd}lUn&5_ z;R+#S2XdELV(sMr?M>Ncvr{&Pol5 z^>~KhZgx)wHkkMd?kN-3+on>4j(M_WmWk>z3Q{52>2k5$7B86>d=F1E_lh?j9pA?f1i~}SjY@=vs#wCScvi=0Jg4J__z`gi z9mf;lOtOj1IPp|t1ZSFXwy_qQn((}iAL9iT=X5M!QN?*37jRL>5`LnfA){h0K~?-z z$0fX|<0ZVT<7fD#j$a9te~sU$ctyvn_^pENm8hPrTB)&)*YG=G`Rh7907mwGIIQ9g z9d8Pp-{UPEZ;M!89TFW3U4cvYO&#UoL%}s=S+ZeP&=;aJbK8P{j*%N@Znr39X^6)U zQGls41QfI(cP6Nv5@#?4U0o&ivJxEZ2%AEZOIN3C2H72O(24V)(?*zlu%#A;O`$E} zS+*256Sl=HPv!_G9WFSy=$C!ASq9`6H_^?@9%%|GMU&eWGBDdh_T&#DnO!T_b{g`^ z$oAfnRXUf|R5`-(FpW6{YYJB7tT>!oYeJ%j z9NQL0e3$3Mi04QTuPxBg7m}l-95p7{7|@_HAiClshB8R zYVAUH&=Cy_`xWkp^eSLc~;DIGG#YzoscJzVbQpXapZfUgke$FTSG3+)^*9F z0S_1c`h+u*auVF9eCPU3Rq(+7-KW88YT29!9uZHx>V6fsQ)PY?>|LwV-o+0W#tD z8i}}VraC2MiR-uwVa68)j1xTk2FWX5l#u0lgN?wKJj5azw>-07#lN`8ha6JM9tCU5 z(_uZomGtn73oAmL_BdL>aUZtxc^%)Tq4J{+a8>srlLkM_at7od`CHGgY*`M7EUSMR9h$_}D6dHI5X~on0Lih|e;#qXzIrQ?v z(1$amJV0P`tI8E9}{s|l)=1o{j zzHyp2fOhg6pwss7`{sKvi8|a(Ic=nuocC}f>EBEG!cg%xKm?I0Bm5VI(%8L#4NpK5 z?pVM^QFGEnnU|NSd_nfX@& zg6e!hRpJ`x^UtslL}OU($LAXQ{#yPvEud?RDZIHipFnN24|tu=H|dKv80xq9rT6VX z60Od8cQxWLiLsKNlSy37CM0w_g01}DK-^w7tu0KTY8=h{|D3D8xV0UB#Xs;j`u!uM P6E65DDL#h#@bUiwUJRC@ diff --git a/target/classes/ai/tecton/client/TectonClientOptions$Builder.class b/target/classes/ai/tecton/client/TectonClientOptions$Builder.class deleted file mode 100644 index 1d3ed31579f50699e63ed1aac6e43bcb53374313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1492 zcmb7^+fNfg6vn?PrM1g)zlehOs%=3EczMxiu!N*ZBSr~{kK1;li_0$VZjonw*LQu^ zXE7xhN&Ex+qm19#wvxy;DKB%*nLYEH^Uayr-+zAo0&oZS(#RSZ#B~D-H!?7BQ@osb zc^L{4&WSfK!z~FH(kP~}s4(DbtG;1xYp)S1OjNe4U8@)}F0M9wE3`fLzQRz=b6s5v z|K*KsTYKfYqf4!MW(5kWtT6go>zx(H-qoGu3gb+EYWbGqXy=)J)6hZ4?9>C>wZn%B zeYyOmLbBx5wZd@4cJ-6Sc2)ZuR@LFmSjDSZ&Zgzt61OLl;VYYr^y7x@)U~f*mRX=* za;zZG{IF25>|)4@J-1kMZ0&}{jVLNb!TOE}3$pFyRJfXpQ=UI9W+_)b^_u>wh+xBV zy)9+6#&fUX*Yuh#2Q(d{Y(d(nknQCZOiW_R#1fWG3}M*BZSh9L8^xH(8^&;4!U+i{ zaaUo!7jWlz6-J_4Oh7Yj?BfPEnBV;7j5k-$cAiKCpvab+{2 z`~S*55%#$YOb%LLz+5^DdWK+0JA?ytngSpYxvm>+e7Q1aJ@gQH1e@kS~SYk6{KoBISiV z2xC|HLm`iZ6haJ>FA&3H6o*5f9Y>^Qnpw9Rf;cNOMJ#$Ms1 zQg76ZLa9+N9~jk>I?a`r=4&(OTIV`f>UB)lYCAg$i$m{X_3+Rr*8dGi4NndVUpLC7 ziqROjl&gow3aYGdt=M+DuIad^rrpyM>^P*bJdE2njH5!Od}=gGC$&PIVG1k5LrHp6 zs1+&|qry&~ofyY;W}WJ2vsGu0?VhWUXtp_8(;XR-=jIRPmaSP=>>Pmu&wQu#tAcI4 z*2B3JX6bljc1+vWc1?fZ(_NRIlX=Ur++Br<%=)Q9u-I;Ch4(6!qYr!MXS!22&um(f zm3Gs#PtA@c`oI`;zqOd-X2rB}E{nIFT+_C+KNfv+n258>aLAI1~w*YnM@-r{TZ{M}opTUFe^VgBLTKP2KILx3;zvhRXJ3 z<&G$kJW=VR96N6JI!(Q238vS5P}-E0j3b4GI2MJ>3;77?I95e^9}5cUcfmW3H7v#P zfkb_Xr7*sV;|a=fJOyW(_Ez6Eofo<4*-PG*!p6H~O^@DKa{TcqMBC4gHCMF7wOGtN z{hw>0*Ma5qT-{}RVLp8zhGiL*(z49$@#|Ou9}ndKZjcic&%W{>ds2X*Jt^3DoO64e zqkEjwlTR@haU}hi+H>Yq z1hL6{Io8}_x7)PeVeY&5gs1U-USzONO=@NbHGgE5N!r%Dnzy9lhSXb;dP_kmHy`q; zcc1lk5JesdJish=InP5*`^c-e+s`?u$Lt;+GTWMmNWhZ>6Zsph$wDxnNP0*KTkF0i3mO&EpeXr zBVTF`Q*UwY4JL*{U=E45n0^B#%iHfN;Vr-oE>en%yUN(lcox9tm?MwTE6MeqMf4wA C_+!Zc diff --git a/target/classes/ai/tecton/client/exceptions/BadRequestException.class b/target/classes/ai/tecton/client/exceptions/BadRequestException.class deleted file mode 100644 index 7682fcf99cf34f365c86983c79a6762b11887b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmb7B(MkeA6g{J+wrQ4?X<1plXi-bhQ$`O;fnYtP2+`BH4mPpv+U{)hTfHb0^Z|WT zbVsd+l%O5<&YU}Q59gly@%j1=;266xWDGE@#*x)~PKPxEajeIXk70u$dMX{M&KNSq z`aOT*rp=wM*-)Nzy5(A_#Sp2w9l?;QOGjJ<4{hN!dE2H;y6#%sZgEd)JWfW`o%9)w z>Rg&iSju%w%a+1Xrg*kQPf6GD%?j^ai^o9t>ij!dW=IInbG=L9`@B1(pU}f#_=>B* zA4y_0N;KTSv&4nein3FP4>b!}@SCg>NV_Av1ZJ_xkfh4OSkp-%fh|zj#*V%=7|efm zLk9d+(Ht669s2U)07JN_{f_cpPdFWhgDDd!O$=$=2l*FQ?r3fd%f-ouW$GtJqt_p! zMU7FMBXo-}Eg-k|26i(*C>`!2vQK{>Gx-6cFLW6~f}%k?s3=P)NvFc75c5b8A_^>E Rk!bZPjU{?bVhDw>@&$H1szCq% diff --git a/target/classes/ai/tecton/client/exceptions/ForbiddenException.class b/target/classes/ai/tecton/client/exceptions/ForbiddenException.class deleted file mode 100644 index d5e3585049d68d9105efd910a5edf68a7a5156a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmb7BO-sZu5Ph@Ot=6s|tLVjp-u!^Ag0~efiwlM7WtY9DZK#o&NSca&%ah>2AK;G? zr(N~3AUJ`^%$t|Vo8;s3?H#}cb^wt4b7Y_XRnGpmM_1)m#z93`|UIGdWg`puNSugQiIc z56gtX|0EI4|2i;jha0uC{f>b{bog}}BVK$h`z~iOqYdt#obJDZUO4Q)XCLqmgiPvT cg`?^ZD)lGfcYPX)|nh zw)=$e)Lt`TDb;2-1&`+vRaO=j(~8|#d}C&DHI`Rz(bjx-lt6R#s^g-1KPt!L1am;oZu jvD`pik{Xy3Yh#**d5KgKVL_rau^L#EY*~$X0hT`i|CW9g diff --git a/target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class b/target/classes/ai/tecton/client/exceptions/HttpStatusExceptionFactory.class deleted file mode 100644 index 961556adc710957f2b4c18b8fe26e4679b814566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1560 zcma)6+fEZf82+X}OP3-i1;qm@9ttQca#WBD4QOM5gd%~?2;S%eXrj>@ zeE_{MCKyd1lK22VkBKHG#(#FPmLMB8>3sA3Gv9ye%zXR(NNHmXb8l8G4#hUzz`jgmQjjpLm5I_tv}DC-EWL}`VgBbiDs^HpvZxRp0E%8^!nxFaxm zN*2s1-!Cta+HifpLC!42kPwbzI}^fndEQTYk0*v&N+x@Mf){s+h-YNpqVyaR%pElN zNNCA3elJQz4Ug(vGq&es#kkbnY}>yn-8$t2n$f~whV}I(&rOR5o^Vwukd_U`FqFVG zTxaMBli#zrr$XrfXWrF@N!L)GwswZtVZhKaFpn-$v#@3d& z=c-*94uuI*mJ*J|3mM_83TI58hO%4-!=zdwvx54v%4I>H@-k&_nDREA;D>yDMy?3k zEB`l!F~Sg9=>F$`q5j|DomyC?BgN31+6O9&48`e_cQ{Z=vPhl=Y)3&Ul7g_z9bZcuLvE&4}^~izY{(s{6YAd@F(HhZA9j~ zS~pR#h02X>RQV(tkeE-Z0}}U%5s(_6Bmz?FlS2Wi^GSU`8hp~I$rhS6C|(70y`3;< zj3Z5t?>s%ci}dKa^x!^06P{7y-cZBd(az7*1>KY8pl-C`G%@M`HTW#`sh#Gvi2p)5 RvGd^^nIbq(ix>Ra#Xr?rvw{Es diff --git a/target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class b/target/classes/ai/tecton/client/exceptions/InternalServerErrorException.class deleted file mode 100644 index 4163cfaac0e0f9e993ab6c42e1f3598cdb2e2c55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmbVJO-sZu5Phk2tF?Zu;>m-1^8+l12XV!VtWc<4y6in$hZ?D=Bo`hn)dlaOdz&Sy4KFPiHw1wX-!Gj%2Vsj z>u~JLB?z%7aQ0uC0w?pH4yU90`BX{2v!RE8Ki`Ys!wgt=*vlC8cyxHQ`wH>GW`Kxw j%r~&YNePzN+MA_enIm2zjwM{gTdP>(Y~B=m0XDt>W{rd~ diff --git a/target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class b/target/classes/ai/tecton/client/exceptions/InvalidRequestParameterException.class deleted file mode 100644 index 7ed07e57fbfcc59e12392a5c56c595492beae029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmbtQO-sZu5Phk&)oyilLGK;}Kfoe*+ohL9L8v0`viEFvsF7}>X}b8gJP98B0sbg) zT0bs=9-P1=@6F5POoUG(=S z0{+mw2(a6*`r!&>K+5M~OQPUxY zk7a?uf7}Ti|8{-cPCaag{+6*BT=a>+f6JgIoXr diff --git a/target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class b/target/classes/ai/tecton/client/exceptions/ResourceExhaustedException.class deleted file mode 100644 index a1f21e87f300c4d16f62d32ee36baf219a89a296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 490 zcmbVJO-sW-5Pef)qcQcPiYGz6`2hw&M5uTv6#~(NExm8kC0&V|vb&M~El+|6e}F$q zoTTbS^x!Pa&b*nOd9(BO{_+ao3|j#fu;HWaW0TOlR9d+!!uCOOFCImd3!O!MXOzx5 z@!^o*b&IhitR+gz+wx%~%|MKDM%qb{ihL-Hs{BvTa}#9=7l}}jlc_6ol;%om7s**F zr%n~xMt9N{rAcLPHW8(Da@_lhbqJv}rZ6|sT9MUVe$XNW)(KbIIWvkG=+_0WRYh#~ z_xdMQu@D{>3FrT#NI3oL;h-M6ThIJG7WUELU$2DtaC_EG_F_gW+&?()b`L2?^z)5E9d;<=D_Q=PtS1GyW}K zG||K#;Eyt$J!~JO^`W=9*`1l)Z@>9wZ||;d0DQn^0qY(JFN>(Ux#r9(4@JB#pkBZm zLjH@=${rBbo4sRkD*RCBsXwrh($iLVYedMk%|sH)J*8zoIT_1nD8?a2Dm@d3a3mt- z{QF?e{!}sHQ%@-0%D@`!2ceSM`tmH0Gpme_{qHh1NfgMwu^p4>$=Bbh7NI1g$VA^{ z9E)js$pR~a7h7SIcutJE92lf{9p!j!{1bl9VX+(!ArBK3PGnTV5;h3SOskRd`rIht zE!e!ndzbVGAOEW^!v16DhN)2PRHr{$5VB3De_qUHQcnoGf9cTHLeuVRVI_;!%=<`K zYc6hVaa9F=3hpBwTprtH_I@DC1E_6ZgN`ndsbnvZ+u{ELPwJP*pK~&U5?haF;3=wj e#ujMI53*Ngk0J0JD-7#a6|C}ZCc|C^FMa_FQL!Na diff --git a/target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class b/target/classes/ai/tecton/client/exceptions/ServiceUnavailableException.class deleted file mode 100644 index eba849851b02d04df4601717ce022fcbb65f67c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmbVJO-sW-5PcJ4qcQcPiYE{C<_8!ML8RhE6avvpYVX^)#Fe;_&8GObJP98B0sbg) zHmzQS9-M{QnKv^#Z+1Sv-ai1GU@OD|HUjhlY!W)>N-KLo*xpMY#YDuV&_$eCqjWJy z_D2N&vbvXqwNz<&+dPe>8H#bqNH48&QI3RB&Yyw4eNZ*wEEOuYGPjkE^HND|WBHQH zXR9h*$C)$}mCHNL4OQu?uYQ69LL`l;%#EyTQM7IT@FIk@6}G9T)F@#fs~VHbYvq{r z=QKESuSM{&NI3l`Ny72G%3(YAjKl9_*oDVG?}Yd;0oEP%5=I>!931YvfnM445U>vU g1|m-CVu`K(G!4rfaS~vKqtsemta3K5i9HYN-{>oXl>h($ diff --git a/target/classes/ai/tecton/client/exceptions/TectonClientException.class b/target/classes/ai/tecton/client/exceptions/TectonClientException.class deleted file mode 100644 index 62b84612c4d7021829eaf8aec719443dfe7f4d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmb7>O-sW-5Qg8avC&wqwzl>AJvITa}FH16e-bbT4L z+-no*pmn@^BVe6{cS<1N(1E(@Jlv|NDQ|ts6dIu?{Tmr+KBq~`v~?_S*pS*a$}?f$ zdcIbHan*~b9*quz*li{s&XWB3cluZ$r=lo~E>#@MR&v46Kmz3vW7c_2CpOY_;@-5P zE>Im&`NLwf9fi+4dE(N3_`X#b+QrB^fu*0w-vH-2>_ncr(7c+Jkq-CSP7XGvSms%Z zEER!+f3HiR_IFQzx!A@e{dImU2p)lSnog(4PypF#tqbu=Zy7kGPLg$~YlZ?S_o|S? zES;zxbI22eS@S8YjtL6DuGZGN$PB{fs41Vowt8iKn4Q9?6$>cPRg5hTWB0n47{nF` lTO5O3OlD+kDRIEqN{apE+!~~o$$4drb7rygCGwiV@)xJbtzrNG diff --git a/target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class b/target/classes/ai/tecton/client/exceptions/TectonErrorMessage.class deleted file mode 100644 index 85f4c4a01d38023b78c38ad65ebcd1d4dd52b70f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2484 zcmb7_ZFAE`5XbidAufc+@(gW{7H9%AriDUzC{(fKpv1C`B!|*Y$8(X-L|{wqNe)TB zRbO?cFZu!cp*sDaY{eHIru2h(^|a_VglD;A?8w&yjyj%WL=X2ZwYGNV();b%>6&2L#1yJ5N5sxUfV zY}ITlfDhmH)}3O%iiB;q6+DN#r)}F0IA6-=B1hkPl4f!1RYoVrYejPFb|q+f zC0b*2&UJj>X{>bYA6r##*EKtkKDH2%fhfm1~s1SZ**n3TH^8@&s`OZ&B!$b1LZc&rm zvyM?BpV5JbQ5x}kSlCDIO^(dB&(O^TWKy37}a-yDuqQ5RwqCiMcULrg~SS^RI$sHbwI8HLYA-Nn3vmHjaD&v(fiDQ`ZEaBsH zU=xZ_DtWdkIp&H-DUaeU(T}=}F7EXekNSO{sIku_UC&s{q@4|=>LqG`!2SLbzXG{x zo(yHQCA&Nqg?lm`LMX|5Dj5{PUq{&{4^a#p;UeyGsRiVNv4Zz=M^~RE>Qy=vq2vuQ zkjCBiyydtjJsHWOU*|C z#2N~PbTX+@yrwBG3LUhHD>9p8QaBSz7NU;DseYh?bXjEK=6l_^ALwSHh$}PE6`6Ri zzeS^VJ1WO$VYj|{i%qRIlJ1UKWJZf`nD)kX;#+!V)Lz@NPA*bV6WZq4 z>efJ04x%*0p8-1NA{R+9;_diVoV<>C6<6cI&MLqC3Dw5*-=BPfQm)3#104U`L> zNtb8_e}1CVbdL7ZEa77enxQ#x$>5K`2Ms<1o;Ua~_=v$r!N&|f4nAS< z$KaC&p8}sY_zd{0!RNr|4ZZ-rXz(ZCPYwPI%niN-{@ma%z?Tia0={bSm*5417s1yI zz7D=&@K@j^gUjHX27e7@nf{gFc^e9sb0(U-_6M=wbIHHO^8l6!;@`n@K7XI3yYwB1 K(LFq8=>ET}Fp{_c diff --git a/target/classes/ai/tecton/client/exceptions/TectonException.class b/target/classes/ai/tecton/client/exceptions/TectonException.class deleted file mode 100644 index 40946ba487ee03b9fe54d6d140518f5f7e9f0be2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1177 zcmb7?U2hUW6o%iSlr0M_{Qyd9Rq7`nZPyFEqT$A9LV^+t>HUJ^cA90^EVI?0rHQ7E z7ybZ$l<~~$0!zgUv)ReaoHNh7=biKG_m7_dp5vK`HB_@OaHwVv)bP;6BRn?o1Wygr z4AdFSiL_-ndFj9B46MVDITfCeZH7{FusRvfXn#5NaK7rsaj0FdTPnVM#uczGsbG!98j5&m;a(3g4Sp108rZ-Dol7 zc@X%)8$OxXjz<3_g`vDeU`HuzED0oP8C(SZCnZsrV~nSlFiAx(&10w}k&A$Jhs%D# z#B!}3K|(29tEWq}U8*VD7mi0}2UJjVY0_!p_KqjH!-H0vPMUo`3`YF5P&OBDxpktf z$s>n+9$A=bR#L;Bfkqxp92q#y;{+Dn`X7(Lus`?wEcB!p^VthAY|VqQQU>G7c0=C# zpq{1^o1nXAS_}1vKDOWtL&~QkwWPzn;U%?1YpIbqq@G@*9%uAZ!8ESYoa(1>omOq6 z=mRp1<~7(?nx(Koqp5dI%Fdxc>vEKZO>EJM^0AE_VklNIX1$}F6^i9Ft8wrhsX1^% zhc*aUAo!++R-^P8G#5h&p~a>&z7*p-l&$baqj_|Vl{q@nx08l+xnrK8wI zg;Xlldogywf%I+aE(xyu!vV!o4(#I&F_oJy^jbOa4XGQf-XQaZwj)b36a=aortDW$ QMs^&rZTX5XQd+q*_rF6!5>^6pT%bH;osg2?=_Ecwg%V*FbBw3;J4~NIdueK9q5$ zfI+|*JIR;sbmq77O+P;0-T|Co*F_rZEE_DFEL#q?9qb6C&vc;exxngv?NN56*OEcg zt6QUk=IOz$KVOgN_7FYEpYv`8EtZ zzok`RJ@w+NC#%CC@*44nx-wnutIJ{jR3M{_3C*>NBH4^@n3zbQFlEjv59&r%+D_CT zS5yVcQz}P1HXcm)%%jIPo%ZlnVQCpt>jX-p$e#eW9(Ihct~BpvW4gs7_LG5wS(YW1 zJWEmF`2PzNsQlgZy;H@6WFQwy~VSxC4fXEGF$bW!1EUEM_t&WiZQ--jzz4J%;ge z^_JgrH{h!7o*6Awy>h%#V@Mr@zF;U+r4py{-L=r?{5l{{u^M_jsBtZ={pn1Z8yPWd zRk?JH@Jy&&FOWhRS3G#4VPvQx_d@a5+=N;_3jgrSU17)xtwVhxqKMbq4|HY3;6#R- zIO-(Dj>&Nr#@Z7{(&jYX6MDnq5DmZK_G20NLg&zrIfnet*qwzO=0R!^OZMDh*!*`% zf5e=(`8jCQ^GyRovTSKj^F~7`pJBa6V^+F)^;rs$m^ERieGH@J?u!+wC__KM4n{(y zkscuH3P}=RYV`%|vV}x3*+goMW)pp-7Sd02m_UxSLn~-Ei9r%zp%aKa3SR9 Pc2~p*-KJ#7N?_~*_N}gR diff --git a/target/classes/ai/tecton/client/exceptions/package-info.class b/target/classes/ai/tecton/client/exceptions/package-info.class deleted file mode 100644 index 9e038b6a78f1ea40c130bcae428be4462233af60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmX^0Z`VEs1_l!bc18w`#7zB?)Z~)9<=h#guSQo{YjRuU0e3bxFY-{@OE zfcAw4I#Xz1rX8O8(CH_2I$cLnuzX3H=}aFiX`gen*V=opy>0*T_q*Q!oQIb{66ZQ$ z;JmziEH4+j@Ch#VbN_M|KF5^=u41waS$v`6OL=}u$F&5mV_L@zd7n|xZ8>W-?}lqR zGv@QEg5KN{@l2#^o@J+VR@KWW=qy;vj__&~Q^AF%?TMVQ(wGM()5ac-GUYi8BUx{hal>jjA2OQ!F9UfA4I&@o{-mUmgfxzQ%D z%)i-V^9r;q@fGysEXSO!l^4y*oLIEE(w}pS!k!luOWNV0=B-%7Om7y(RKTrZR-Rc! zGjDpLBs{@*h8n#w%+TYDX4czGQB!RH>svBUz00OI-B|nn(Xl2L4D@2l;x?%%*t-GI zuIv&&%MUd3{jGn*B)S(^tpa9eqX z3?#D#vf+9M^(<@(XfUk04}Wv<2|FS)c2|MoO5yn}72Tpty%piH{R*Bat}>)hJv&xJ zbtO=+IyyG3AW?8@m7+OiNeS<3FUM2Tzkwm-4D_PUz)pD?M4yhlfmz&SwI^NIt9li& zMh&mHrD{(HzUsx-J#pOXMZv%vZtIvg@Qu9RF|dHUI_?>`j|XH~p9!RD;2|C4HXYoWu>{9NuUJgXQW*fTC<

    AB=)akx@JT2P_c335jOv|II$iXnS ztZUnHvR0_CxaazqAJJ5WJ-`sz zI$2v(8N|Rww)|xJi^T1#;|4GB3WVu~d6dc(491ihUO_IN7RP@Wq1`bnNF%0m|A=hAY-bL(AJ`Z6R z&+g_M-|?>TzBBa;l+^fZ#8M|-LrtB04ecl2{~lh45a)F_Pwqh{_7Zs?k@oWmNCoe6 zWj`%?3i-$<$t32lNe(K8`TP;@!Knc<2~G`sI5pr$BqKS%-Ge+G@J!Q^r{k%g5qrgl z7^wgq{^E#F#0U6XSQ^5q^%RJ*~z6XogBrnFr1qVQ-(7v!+DFi zf_IDs>(JM+<1IR4c#lNgdD73>B=eqSmM0@1!wun%(CP8EAnJBOW(bla$jp`?qisR7 z?Sjk^f2gJ3PpbnQuzyKbr@HqV$<9XVz|aW@k`$EE0PPUBwJX}B+J5r tRJB%EM~~zbRrXSw1gSXVpE?Vh_XM3j!BeaAE%7p+pd+8a2e_?~{D-}`16>@;;$bC$Roso?kYGL%@}(FK3%VA=5kc?8a8%Hb zV;C3olNgQ(`l*8Z49e1-Ieo6U%y6Q>&5UQ1J;%YC1Dnr=YG%3Wm zZdPqsA%?*Y+G!GvR}HUOKZb#c^qY7Li4E7OHIv@i3ty|@nO0_T%QGFDTU4H%)>WKASw#xRRZJkQprXP6bzkzj z<9Kz?seNj}C*d$^m@j%5xSPE(?Y&a^m@JPi)yraNXQHLjB&#E|tF%^f! zaYP(P#W609V;G}hZVjMF2ScQ6IW`5@-ZhKs4`@+PsV)YKlCyZdJ`>2OKf}R(6R4y& z6x8#@@}eL~>45BYP8yFI+^XlR zw&NN(UZ>KZ4+fmui+~C^6{DzG0*LaWz5ujoOq#M%boz+E8=~i}MIkEF>{G zHTo3M$y2{U`9;bIn|tXMI7qff(MypEtRd1Ai05QH;y)2l2WcMrDe#wqV_CQQK zAlZY-=%0ig+QmM-6y8O@UW)8uP%lMyF|3!AU5x0Z*e(w0kHJI@n|(7zJqGMSA2f1$ xfbug)?hoNMhOtIf4f~aQAJ<5(2U&bgG(p;5;#+)$5fq3QWm=#r7qN(?{{Yt2(p~@n diff --git a/target/classes/ai/tecton/client/model/FeatureValue$1.class b/target/classes/ai/tecton/client/model/FeatureValue$1.class deleted file mode 100644 index c7ed639fb666e0ce5faaff92d6868883bd70a531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 zcma)4?M@Rx6g|_A-L@=J5Eb!*O1IDovI4a+(U??hO=G(?-A#?*kJIghE-t%dyT$lK z{#FxXjNt)%1>ePZr^S>X8cBA}xo7swy)$>_$FFav0Lmz5a2?BO%-}|vqMK6QQgK^~ z6$v>BcOaJWdUl%+Yg<@QD>yV#t%3JdtFBrQ1K}$q~ps!+GMNvZucQwr7l7{aP3Xp$0?R?n~H~up?m?n+yf+8k3V7lam|clN;wZqi-{4 z4c`~xp2vqnF=WV2i?w@))H#Oy1u`+@{^2^;Y2`$Aor)BSrTymr{Erxt)lR4Snql=K zW;F==uFt*k4bqh=mfdNX&nZj8v@2x>^=Z4^tW`~l>dki5-re~VRm#~MJu{7-9m_7s z{>um{%pprWPwFS)6anHZ*y;DoXT(0qFa8CIMEe60FUC?KnVd?Mq%xH$lIm2ZNv5VU zLoz#Ye}sZG7I6(pEFq6I;&r;)2gDUr@r<~Jm#~O!yn#a;#{z9n8E^6-E>j$%u}C8a h?UhQ7)?dJsbF}u#*ngEO0tu=K6li29+YB+Xsoz_j%%T7Q diff --git a/target/classes/ai/tecton/client/model/FeatureValue$Value.class b/target/classes/ai/tecton/client/model/FeatureValue$Value.class deleted file mode 100644 index c876a1405363c9504e28aa5d8a84f50be8790b5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3975 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 diff --git a/target/classes/ai/tecton/client/model/ListDataType$1.class b/target/classes/ai/tecton/client/model/ListDataType$1.class deleted file mode 100644 index 1ef88574a7d7148d6071741c7703977a0df3dbe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcma)4O>fgc5Ph3CStq#EEro{i6&j~aDAb~qUO-4y+n@+1kw_E{J#Cy-v&FS5$0_3P zaN!I{2qDxTz>h-Ax7w< z&0THoag;fh8P=TcJC*pOmN<5VauVq$QRw)Al40T;MMD`leGyD#@BOi4$m};6%;$6* zs^kSjwpQ;m7(2vcnDtaB+moY#jC*1b(9XOU`6B3xSZRE|Inzyq|CaR5aj_dsVqZ3t zzA@*iak48Cq4m}e#fhN2d!ZjhV-+5>WHO3|92E}7LKQ0(uE4UeikgKw9xyEFD{dgd z1GgP@C;q6RWH8)|<0!VUrfCngd4w86RVeqYUiYkCH?7yb_zTWs2CEr{GTsTqcr3>Z z_Ee%XIHZ0tR4$Q;q5Kclh5qJGbgxOITC4AS|KmSn$Ti!&txbmI%aC~#4^=3F^xfzo zdBf{$_nvJ0iFBfTxA(f)ercC!fQmFw%r5C3>j)-haFzTlp%2JX1T?;Zo&G3(LFTjm zvR`2sosTeHr7%x0H-(&FehN*3JcXZNklq3fW)3A(utI(n8+b~73)|QwpM_0&`BZfg na};N2&C|L8^9?6P>u*ChuBEI6Tqkc354caONI44RVVl1J>%qLb diff --git a/target/classes/ai/tecton/client/model/ListDataType.class b/target/classes/ai/tecton/client/model/ListDataType.class deleted file mode 100644 index ba1364d0e9793a7dac49080a38f56e6b924bd504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4135 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 diff --git a/target/classes/ai/tecton/client/model/NameAndType.class b/target/classes/ai/tecton/client/model/NameAndType.class deleted file mode 100644 index 13fbb8267b2a8b2c2f4fb6b6aca7517393f01460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1776 zcmbVMT~8BR6kVq??X-0OEwz5!TSeqv+bKGJpk5VGgF;LYA8JT?eL9p8Mu#busfj&(}U%!9+1Yis|^T@%Ja;v?<2lQ`j?yyYuI~mD0+%bl0_e3%B`mK=49Jd`}j}~mfTf=k=<&~^0l}8g_v;Tf3e!F_LdZi zx3TC13QeF`ss8$Sfqe|P-4%F*LBAn!fk`tvRWAJm=mf53-(LybmM=XTlB>Imz6?5T zvbfqaXnb$b2^PvYPdn11um_Wh-JgHVj<{C+S3tD3_fULA`+_AI2=vth*?e+OuEaiN zm*nbFuQH^P0KQ5Wr2h&6!`b`X=-@s)P|KN&=t02YU zUDQjIGB9pp2-gX))$I{e6BD>0KrXbd5Z-PRlLT9jW;>o2^a~$MYWZ{D>QQ``eRY45!q{LaR z6r2cG3NRJI9ExE)?p2-Qb{OmQ2J|hg64H!0&d4ERonVz=BA*QLtSG;WSM1^y!w05R zb=4;1C2$x=Vq}}MVwJYuA@zof=vkTYuojk%Xs6@S0!Q&jk7R9U@>tL0KT#%xlJxukq41O#mc$}F-e1BxoOV(3bPg}J$r1kaM7xY{2k*V=}g|xO_`wZir zdfq6%O=Mr7%$>%awuXX2=TcvTp}&T%t+SMtuy&FiahrnOA@Qk@Qe^FPSL$inaFS%o zurNZqQ}~ND`j9sI#W#!^Fm5W1|Hi49@ie_snwK;GA=l6pwR%HWoaznbgI?c6UhznJ PF`JO1-1VXoMpb_RM}%^) diff --git a/target/classes/ai/tecton/client/model/SloInformation$Builder.class b/target/classes/ai/tecton/client/model/SloInformation$Builder.class deleted file mode 100644 index 3e9d9de3a4a2fc2dae7c00695b467d07f977d455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2200 zcmbuBT~8B16o%g^(4}>iZ&2|A6}7EG6~Cn-7Bs=2L~2O%ZYd)US$4_pmRJ*w(F?uM z3;&5G7>y?W0DqM6o!tV(7SqOyJu|yK^URs^o;m5S-`{@%xQKibCe9^s9%BjY!3AwD zYI8}O%i3Jg=Bj~fNhEOHz_@{&z+UASZ1=XUmeryy1$t&ztaU4ETh4Me@4B|MoN<9J zUwZ4(d#F}rK^9$S$rtFZ@|<={TusMb-*yYNzI}e+dU9U+Yp&zVf_g6V<>0T~W}HAS zOOKENLS`Hp#-wZ&l;@@8bD=;-v}Y+$cD5h``X&l$*|CC>Ck@;X=;vYTEEOoX;Jf|ELObE23(hCBuQzYsmC`aBetu8X1R+#ecS+{7}3znz!d*x$m@KiBQBVSVX zlJo?!4Te}*z=+0DkJC*r5|0I@Qnk`HPwKC$InOj*jo(zgdH!StvsDbuBl>q{zPz@X z{a1gn|GPe#kF9M{D=&~vHMo|FCkt-LE6O`6yvaLjcU0eN6Nhlvz=VmLm^85$`%HA8 z(?pjx-RLpVi#`*B=oC2F(4El8TLL2uIS+4@bLV!OnOj`p%@fEqhNyoB*`v0JmBz*E zvu@cXIroH(L0^U%59Z9NuEx!dSLIo0ZU6kTS;UdkRzcRTNiX0SyRgZg9p}UR(?UxS zj#MEWDMUC@3ovxfV>n1lS!mn&jWW_6;airY;MkV=3h|kf7>?4$!;dQ%;@pfJxb+FX zvFBr$Rxi%eJH|1Y8T^LW7qnzP@hu`G!(V)E7lf4l$g@J>8gfpO!Z?1LD#SpW$q_c~1CAL7&;S4c diff --git a/target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class b/target/classes/ai/tecton/client/model/SloInformation$SloIneligibilityReason.class deleted file mode 100644 index 8410f4137bed05c76154955da181eb9440576710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1471 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 Zl>7`|<2!sqnSYIFk*0advVjF$`44CY$FKkZ diff --git a/target/classes/ai/tecton/client/model/package-info.class b/target/classes/ai/tecton/client/model/package-info.class deleted file mode 100644 index 680722fdf2ad634eabee02d8844e3f8abeae4318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmX^0Z`VEs1_l!bc18x}#7zB?)Z~)(XdLSi?3|ztarA5i9Zkai$VhjvS3@kvq OK!A~f4M;LEumS)C_93wV diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class deleted file mode 100644 index 4d4d7d139968621055cf957bb2be98f2c46a45e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1795 zcmbtV+foxj5IqAM7Gf~o74UAv0P2e1HE0!H@KQl7V);H2pzSei<9X1Zt2>7MP=`TG6SX8_Zp}&>YjP7Q_WIq=fWEnjw3z-X7M?-w3O-;>^cP%xgiF=$8K;=HB_DxO;f4@>*a2B*Cpjn)<5-) zt%{Yw9qy8A2P4~J`deE(UfvQGN72WgEzr*f-oqa&k*jT-1sny(-1rBGcg|hlv(Fjt zVvzGfa|5skGnF|ET3%GLC%`K zgY+GuwIAXeiarkG2v<1d diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class deleted file mode 100644 index e3b4babcc42bbb7f2ef66e5b3fd33f1d15aab2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmbtS(N0rA5Ix(LE-kf)qF7Wws13fjG5RJkxfV(wwT0VC!V}qER$X$t3%h$s@UM&y zCYta8ew1;l#OecT^kH}I%${>+=FEKl^6?zN6Wr&hmBBDyLIJlq?s6<}EHYGk%4wPE zx2lt+sb{Ec8KYb?mEJ3IXSaLZ&Ox*u?esU|gI3h+cjJAIdknlKlVIH$!)iORL*Y*{ z=~Q+shStB)V%u929m?aNT>S$1lwoo$Nwv}88AE>c!5%}QX%7{{bXyy$U^q~&F9#__ z$~~L8M78wDS&RlgILf!FLQBbzIpt$@k|`e^9?4V5P>VAY^ib_-uZbTSV}lIZ8tP%G zJ;I1on%6@9co4A)ia6F#T@$A=%_vdh56~T(>g0?FJbu~fZ@t)HSiY?L-Hdd7rIjQ2 zy3`^l(#r@EfYJ*0y?k+bXZ2r4Q-4&!GO87nP~li%c>e$YWVkw(raL&I3Q6p7=qI(t zigMIRsJ|OILvih5-jDyGT!w|;=V{OeVS*OBNT)WEhSr_d3|CMkJ5AmSa&!YzpTPD% zAom{mcjQv*bdPAjCi0jeo5M9+Cp$x5v-EO9;U?yAi$arh<_T879q>l!8;wFJV+m8m F(pTa(`KSN@ diff --git a/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class b/target/classes/ai/tecton/client/request/AbstractGetFeaturesRequest.class deleted file mode 100644 index f682d4f73b32152f08c69adb38f9042728858ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3701 zcmb_f*?$vN6#j0LbkaC&p+IeLAp+7g0ise7Xhlm~pqjR5Dq2u+nhxziIti0o1owSk zAK_hn;X!c$^yl{CgU|js{?zZxOqVo4t3SI;&OP_uvwUZp{QAeYKLF^($1T`^u>@|$ z_zl>NBQ1Cc4-2o5;A5f%kKm|mJSrQH$#PPtW5PS0z~gvA9#0xLVc@AatOVLImB5WC zip*&Pb^<3cV_;U+P6DTJS~#T^+=e*=u7R>bTfz1mtK>XmkIk1#RRwdzb!~63WL2v+ zmx)=eE2FlaEmPtdt`9G+753yUC#UVAF1xv6$+2CX)1Kv4D`ijTCVajeAN04jF5T=? zXrHsSHEn5YyrP}5OHJ+hQ`T84H?N&iu3&4PX(>1}uBGQaTU6ET_Sb8kD^J^{98Fy& zwr@YhH1|8MqxUNuP6t9tmOGOxXwPwH`c}_bG_2>SLUfSY#Ae4OaC1|(H(^bc$mz(J zi&p8VMNqj8nNdCK(8IgyjrQy_^LAC|2BxY+uBZ>$`k?K*Tzxp$q64i@m%Y=~idD47 ztT|tYkHvB~sQ6@XkMTU~ES!wn?sTQ>xLTpJ*0A%H1>;%^+A5wNwJN@`20Q~2_u+Fz zdm%Ju{ukg@A2UI?W5(9C!K77d(>=9$Ky>!4sQWBsS*<@Y%!6BHZhM817}SWLZ0Z3Paq2<)d}_|Bq%3zj6{<)LmR)V1(<#<(s%W`xS*ND#ls#9`=f&&S zO}v3OO$=g4VOO1Q?;qQbfw$!L+X`!znobZi6Nd%RcTBvC_e{Kx4@`WBEscC!sV8tW z^g-dke=uxo?cg%-k;3jeIjb5+HNFLNflaq&-Y7Kef&We4s)mj~WvZOZ3O#jd7Vr!a zWD-=hS z8*seH9JCyn;p=&|f#&Gg_}DO8f_yaCZnmbU2TCP2x8)smuv{v!Y4GL1?;E)~>lZ+1 z+}b!Soa(UDfz%F5hZREK($a&v!ks1fq=x(hHEk<=N03m&*(Cj!B87De1IHi0K9eY{ zUCNiBJP1d3gC1Dl`oyB(wl8pm1wCVX3I==0ygh!B9XdS{j*R6es5C0gQudEG5X;^f zJu+UHP{`I{cm2AE-p04joB4*?gpJZWNv)A)359Jww;KjO)96728B#wZ#$RAZX2)fy z?Di{YN=AP{YchHb5rvCr&0I$GYs5Z-nMp>kqM7s;ybwi}&rbjHW+bR8Nkv`C##V*ojcxo%U$>}9$BO-rNLCnAg19va{ z?FL%nxQF{u-e?b9+{5)=?4x{fFvlIy8OwZy*ykjge8Zc4X4W?}P!|gg4RGp1T;@wC zobpu(kOg>A{uEA`=qgl}zfOV^n{T+1gF07-Y zo9Nm$eji9<4>|jMTQWSmhJf7b$85_YC2$Hr5<4^86{wcZchjTbyimdU?#1)M6Ce|a ztn2t4%AnrB)BW`HKHSfJf$K49l-tS7H)y?p_55hNfY$HOKH0JM3Oat2*hhQ_J7_8p zTyLX*E*w|}XA%Qkiy3lWbx|tESg7TFqA5Y&mC1gJSoBi%7qn5+x-9=cK`e49lf8oV z7lq3Hgbkw-yY2kHiq1>EyrtZmB&f%z`#3i93spCs@NGy1;umvo7lv_=%DV~PA?9O~ zZ&x#-Mw@COpR+JDZP3pp0ucKiH%>+}SI~78$--n*Y$#mCMloP{4o%fK9VB}k58%O2 v;3j^`k8v3{eF-J_v8MS9QZPwjd9Io;%7g$qNZrCBzIB^?)2m?f{mH)opgG6P diff --git a/target/classes/ai/tecton/client/request/AbstractTectonRequest.class b/target/classes/ai/tecton/client/request/AbstractTectonRequest.class deleted file mode 100644 index 3afc678c44926a65458a29a2cd314f4a2244af2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2650 zcmbVOT~`xF7=9+%WJ6fwL$N}u4V4Nc$ZBb=6+f^DiX~_b1)}|0!j!Cr-MCq7`xkoA z`~HCH4HxyCqMr8j>!ug|O+7t*X0pUU(vRasW@l#Sedn3ydEVLl@z)PO19%fo8XcHQ zqZj8p*j!M}Mb%tV&9sTjDZFc9CXFkYO<~T&RTJ0JurQxS7p|-D_e?CLk;h^hH*ixR zCB5~k?|Pv?-@;wzfn!%3Z^JHxf$MEd2_!dVSoYUV+!9D%3&Uz&j|HrG&y&GS#i`X~ zP2lW;Uefa_dPct*ex8V1bbamz_i9zABp01cNgSU^ zC)^5TK?V=p-O1#6*K@;*0{2H-VZP|zZ8Eh`Ft#jU%=qgB*1h0*a&c>OO$JNOT17!! z@Jmi**$G@VjwX$;?2?gFt*8Qde@oUv`|?_iv(t_(4W)R>Lm^ zdY-dZKaGhGEG%P1Ah%bz|44N3d7=i#0_Xn?_`Ihj-mh;X+`=kG6g5Q)w{fQ(4UuQs zyWhlz7T&<5iH|INj89B_DsZL+(f_(r1WvaEwrEhli5mC?=mM7dkRNQ=4lkp!v`hZx zCQDJ@h?DkmWN})D^32vHS!s6POxXzvs+hf!oNDrMbeZ01n%XsL)6|}5+EJHvWRX24 zkJ2f$DK64iu)x7Rw}YN!*)&sg)oNr zG3ww4%Rrwh5cc|1jp!%KL_b+6e0D(4F~<mh^V6q+JPOl-2_Iww~g=ZM)gCZT%@ zRZRC3uDI?gWCrsn{DQeypUfmQLYq$&naF;R_;>8oVI=kBgx=1oFNn4i7{wT8)bW~w zjs3xsZG*FIcTVmPKHD}p*ETq@KlnmxupuzcU?8P#xd{H(jt^n z#wjhzh`Li5!7bIr%6zBUHxVnEuoTU_Eh22cF+gEk&E_5=VQlAq$ARn<^yK*a7K!+F z?pO5Ym1yJqJwe|$nBd6Z$ask3>?YVv=okGQB{@p!k!d`F5#MI+`XTC$%M->Tj_@DU zQQX8u+`z!L5Mp>ouR2H0!9o#u3Gd^` G^uXU~y>$Wr diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class deleted file mode 100644 index 60589e7ce9cf0c174d3c44fb42b3defb78219d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmb`FZEMs(5Xb+U%UyagwP)38eJ-?ky@EmTjnC*oMK~*Xa^f4yUT&;=O%vU0&ab7Q z6cqdbekgHvn^L7GLY0u2-O0=^^Pk=CKfZhea05#r0xUMsz&UHq2e=Tz$Hf4b0$diD zeV^;?;;l?*L++5kd~Yl#GEQZ-759x++170iz9wl(O?}c6wV&CzqcUag3DnxF0|CFA zkGOuWr!v|ocZQ^&%VFw>c_Pz+)XMIwpl{x&LLhips&qtJAbOl-q`Rps3gQplo>Z}+ z#N=6=q>3^VYkF5wVd6(*)_-f~2^l$(Mn2n1Sgx4d_lx#nHLL%HTp!xT1@5;0fyW(& z{k+r(tt&gJmA^^5X3r+VF+>q&(2NkGDRA@1qq3+g0uPQ1*q^mP>)_fv9gg|n1g=h* z{*?0=;5uK-fN!hE56f~ZR>t0kuxi=P@-AjC*w;I|5FcIIakdQ?>|>7CHkA|5!b$dm zai`eY;`nr@1olmIo>+Pa`(BhuL$uA09ReK)JI3Z^-@1zKxhL00i{0RZr@3sH{ diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class deleted file mode 100644 index 7b5c6bfe994f5f4dce0d07363275469bd9fce5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmcIiJxc>Y5Ph4ki)Tz?j9O};pcY;uh$uFJh!7Qw1jHh2E@Rwy+0(tf_`9qG3x9w= zN}Rh3TBQ+e-n^N4J0H9I`Stz*-~j6`@@P0{I#?BG-jlSkp?*YWs(k8eIU#{YXDp}E z3#1--U2Bvc9Sc-nLh~3s$sbkeL}_JD1@b$)J%K_i9P-&(M`^l@Cj&A!auB4|LSF_w zX;k9Rf(84aB7u!Fvh8e!ZZ^UNSvizewiN|KR#eWlCesRJ6cM|39jQD^z74hK2a2@y z3_ZsbS#NHs>rAjUSCIAM9o=pi8=u-LnR|P#epYZlxupsmlpU-I-2U5S0`=bqxf+al zeSxDtx5FlK{0qPc6i{RYN~smhcpnHXF!R_Zk>cJP#4D2=T*guwJj5dNN+w`iOY`*< Pmr-TwaxRAzETQ}jYelwH diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class deleted file mode 100644 index cbc136b6f1c2dfb149688aced51a402c695203ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmcIjOH0E*5dOBUO&g=F_5DH*3bld(?L`zXg@{rWtW-o0w&|c-(nOPO|Ca|5Jop3r zQR2kZV=h8jc6YvEX1;msetmy@0;prnL=JOBWHE1G(ZG^G{#k~y9~oE{*f=Hakko^a zS`-eIOBbYNS8C}f^16|Lb>{mNHarB467fy$mSQc50~W#9%Ac zAmKXV)Q**}^ohVjb&NbaZGl`P=#oIGseHN|^g9&Z$d1RFN;7b!*OsA*@kp7|Pl}6Q zPp#lQ3VeaPaU>mw=GK_4U=X_Gs5r^()I>(T-s{Psv|wVz!UT#2Rt0XyFuA1ea?ECX z(totCIz4_I+=?-f{XNNSHJ;$%zZtN}-yz4}L-6MAj3g72tg#q5$nXNp+B-yT_YIj> xMj1@;InBPnKKmcAXPq&ykXWOH8Aj~)8&$Bj!YG4T6!@;NlxJImQI_vA3O`YI8@2!d diff --git a/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class b/target/classes/ai/tecton/client/request/GetFeatureServiceMetadataRequest.class deleted file mode 100644 index 3e7981ad53f940fc87b9f7e5fe442d1279f29a74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3201 zcmcIme^(Pn6ukq14a-t7LRBgdEGh(KYi+GcYK;LDOn{mQrMA)`8DTNm4Z9PxwI8ar z6?)2P`+q-F+c&!lgeFnyIZe*lot^jQ&3*U%nECUsUw;Si5x&!49yjUKAel8z{rb$o#p4PR<_q~WV5zSi(q zM-NtYd;_kd7i%3DMnOYSgJ96^RIO4`xD3XuZ3{PD;+`iwhQYf+&Im56uE+^@+bW2x zki5txpRq)#NE-c3HRe3WW@s-9x#7?@>kRrmDJx`vz8S7(xMfOFkdAE@N|vytDP3-R z6~~ok-k(?MX-Ql&%MX!f;as1!wXWA!$!qwk2;dTpFqOzJ6wOi6N49 zibTYTjAe`YYI#k#dA?SnnOMdt@X``@E%hBvM&yP?p`CntF9>Dq$&tL7=VjWi>zU&| z^(wp|g6}q;X@tgcI6~5Jk9b-$ageJ1rUU^bwqil=bWlr5Hpqv(S@cN5vI(9DglNY zb@g=IoTL0VdBrlfub5%bE{D9BRK0$=8+acV4Vc)_V3B@t2VI3;++RZV5(f7mJrn*ke10}e(ERMcoojZC;2JOdI{hEs>F=pe@! zl68>8egb;tti8=kRxu3ZB6q1us3FxXpLpH!piNG@uH$Bf=kaw)mu!AR#4G!jJQ`9f zFUF-4mn3*oF2$(<#;pL=MEnAEf$l@E7S=YYFB{lKQo}O?&+)CI;HH7^aFL-N>V5*I z);#L%1sUKCy=6$%`L@5{O)&S3ovbW0ig4;hLfy5;rLtuTT<)pTjphf5ft z*-;v|(7z9fn(t1;R1YNiWnVr)D;bsL2lTu`GgZ1mM(911h_$>#>-g9%B710C*+u&f zwE4v4Sab&+ub}_vFaMC9F@M1TIx&cM5vTtUuF`xWFhm#DkLim{;+hXcjXt4K3u$-a zI&PrVhj255P$CGeq<=nu5bHdOA)6R)h9N2x~#Be&?xrO$e zL^9lY7n-l1+JiwJcV)&ByLjgnPN;YHE1XRH41EvL6+#r-!Kojzd+1$>osRs5Gb^p* zJ2;#B1%11C?+-F~#*ae}8B`<c)S7q|z?soTXpXc}I+21eu>z`*Y09?mb45#sN z6cMDN7{P*uw0thgm5dxMX}A-^Df!I^K9RSqynQ-=yU5AWvW9#NLnvri(Xh%e_*KpR zqQ1||BG0RW;dJf+f5?prxAu&pW1H6AEG>R6xYMvjQP>a7qc4YS@nu8Qoki~OoLP4m zhP}NF$E+A~g?2`Z=APy5Wk`3tp38C5a75XuSw^{H3d=DRq;W?$OCDu?t;I4sFKwv` zhwl<+Vc#)pmd8BggDwh5e6xM!7_MqLJUyvDmP=w1NoZ%68AJI>S`3d&(#EDQ)hbGcD7ZX9y>zHW(slvW;OVXIdiP zsO|{6#CIxgc4}o_+2FP*=V~$H+&76&TWFY-U12lmS<4c3y29&qK`(9v8{&(z>#s6w zQbCbr`Gn`LUl1?x?7snX3b3V;p5VrEZ4r62e-xEi=IgR>B~sV0#_)Y7?=g~4DGZih zPo~EC?yd^3JTnZ{#Q(~SZ_jK`1`H_wJocFrlanIb4|npJnW<i%l1)Iz z7|!W9gHau4F{)u*#|AcaT*m7R*8<4`Y?kKUqc(EVeMhB}x?!u47Iq#`n`4;iLKDp* zWt7}bn06asvvx7OvY1&)t>;SH%b8MYF;z-!7gkEyLcU0KK3~XZwoBRNOkur59jFx* zuPcVB;4qw3;&dyxXUXi;XAD31*Hx?UuJyh)>b7*>T%Pu|DRsfg`p#&SlI}`vJh*ctNS{8G`!amEsC9v-Tz`Q(MB@oYXjbP6cxIrrsdR|jG znxXN#c#rOqFrx?ulYbyK{S<>CYAcORK_kDt5xPcD{s>_FPmk&Ra z55M@pv?iEFAW}PiA8ufRRy=jxq|rrusAyVA9G61rOyaLZ^IHIol%zi}j0)B*T9MYb zU`ZQV7wlt#eG&jG6)r<@8MDWM#k;`%B(N6&VDgwqusPgT4(Ac2IWYMgLtB)t0lIXV xHoC%e_0gr#6+gsqD;oWB5Bu9?@q{s{0^Slv2=jy+BHxqrlt*)f{(Vd#`Y%@DKf3?` diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class deleted file mode 100644 index ab4dd735eb9fba6ffe7df1be2b3af2a54400427d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1263 zcmb_c%We}f6g{4#nG!-Llu}*=3Iqf!7#6^$Q5P)=LP|g)s7oSe;-)SWJJ_D`U96B; z@Bw@j;?6^@X}hVE#oVWT&wY9R{QdPCz$-jyqK5k+HbXpMSlbueWk!swFh?>GBgJQe zVYPqAk9eGNHI0YPNHyJJSoyBaS3Bp&r&>mQ%Y=2K33r^KU0%wZOyj<^j;>r9%Bd;< zLOf#Fcqd%11hfO07`?+?a`35)!q9rJlrXy~w^rB?9ST|b-V#7higdzYPN8)BT*gi$ zPOCUcrBE)e(uzGaAE@Km&t%a#jkvW@ zF<+hVbdMXE>y@$Y4kQ(}?zN|AThVxO>@T>}=i^W#n?s$MMD%2ys=qV-6kp^U+QN0L zGfWn{0_P`2TX6Cy%ASXK%rICeIK!8P#yhjm3@DN4cjXcOlM*IdzG4b58^!z8-4-x|0B-+T0L4;c*x5@*!jg7*8x1jgP X4zktI#6w)B6t0l8LOdXT2h0Be(yo5C diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class deleted file mode 100644 index 037421001a890f99862e887a6349e6424a66388b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1097 zcmcgr%TB^T6g^XrLaBhL_y8XZ7l?^<;ZEa15{w2kQNw;HqYRc-+rj^GVN6{30e+P6 z7P@FKE=<5QotblH?)%=)ulElChuAWZL@9#=R&=cDSYt>%a-RfAYuSzzuCn~G z8f#J{Qoj@9f7p&+#_SxC`^VCi>V!d7|HtHRn;}{Ex`H9!l&-iO4m!fWhl(N1ieZj84}g7YYzTu4BIrQNg7;6 zKUE+)nV2UgN2mdfKESBGfz|e2p}i2&kf$|Ave0PWwJb84i2`w@@oOw#kr2s^v@&9s Z2x(YGn)Y>)Owp0!&mErsSZBscnCzKmx2RH4QCBFn5^H|ryYg*fF@3J5*dY;XQSJ>X|^c{+ zW(r;G;f})cz(k}ieKl_qYhwZR+Bp;LTOG$n%!8gLpH0A_^8-u9u^*X_iHX_Y9mgE$ zfL|Hznha%pn1|YDiwcUhdD18d9h=XbGrka~x8te6=%k!#+vJFM6c!#m9x7D#!(*9H zt4B^)%*G}<(n3{XwHF534z(~8d+x0A2?_Um3R?x_eF~y*PjhfG=b*4M*A6u6E*X2Q z@V(^7N2~F`j%Z;l`~C7WgTmxH}ea)iW^ycBRe;7 ZN#v#gsN*&o59_!lfUZmHifHRt`UCp;S%&}s diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class deleted file mode 100644 index a2651fc834bf3a26c8a8fb19771e639dfcb5249b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7221 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 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesBatchRequest.class deleted file mode 100644 index c269193809a584b0a8a472767b1cc53de64793d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10134 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�lXA1gPUff>aldTRr%STK6N(F3}@@0*?f2p^LlmM3 zMO+_+sGDud2Ak3&DEza#J4siPC2yfI7hX+q3lt80R9Y;;g>=7|?w3%oT|gr}^xlWB zp?_V7lzJPDhvyHNEm}mIh|u_*B!@lZF8aG0_u!rO(+S$2JoX@k H-G}}S&f`t8 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$Builder.class deleted file mode 100644 index 310099409efb286eb9d4acc08eae9117b9809179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2613 zcmcImO>Y}j6g|(eGqE#CoR2zjffPys+kp;kT3Sd*ah$jfauUEMP&Q@a49>Ln*o?9;!I<_Hj_2BMeNjEjes5(tctJY1!aR{p>g?)^6rFiIvPcaRxs; z!c-rbP8v;YThd2B%Nz@VJW-mxH$GB!^y-~;z2!1f!LmT2-0av@qi9O{P6ugnURDJa zPvR+o@kbTnhTh&~l~6H`2^FW1QZX&X4ALr2;|Uc7tSDGjQN)D6T%cTpzgKDOx)e90 zSQD5(#^K)c5JkX}m3$?CYxAwj+U7=C;L}4m9IScA=4Rhx4?o{eI2Nq;ACF727SU=2+fAGxrsSe#AVx=r@Q9e1`a!NPNya<4Wm1hHr8ZV;f{s<|u}`Q1{sP z^r!okx)|B(Uz7S>j7kbb-Mcx9A(CYniWtSD7(-elF)PM#MNFa~rtqFfJq%`+xp>Lt rH68Xz(xZmAC#i9s*l|SD1qE9A45NFQ3lTn!XW1vHFvh=mXOaF7Sw)+k diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class deleted file mode 100644 index d06248b29e7f6c0a6c5dc0fb5df6c485b0f1d93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmb7D+iuf95IviwaT7vwX`z&BflzJ|e&F)bQq&d&Aq9{clviuxEMe2lZm`z{`d2(5 z@xTZ0QHZgf6qm>neelfeoSE5~GwWZ!fBXdS1a~V~zzqjC9o%AA{UErF0^x-sIFi2b zG#?9wW@p5YxU0Axx?LMcJ=|hg{%nH7aKcZbsv{${cPPGkV?JT1rAd*M%6-Eplu_== zp-$>EJUxwW&)+cb*`XTi2a&dNEP67OeI<6aHkMmybm*W(O?5>exsu1?ZKPDlP<^en z2=)~ZLqW%v9WGrfd~3ApD=D;f1Mw*mp>=orp$)iiUkTezSqKkOsCBw1b+Ix{@_eJM z_+rzE&otA!{)pPxif5{ih2;Zoxo0NHC=AceLeHKtN^qUjs?9n(DOK8*TG}0kg?smV z48?sjpq17-QWHnxz6joPA~IgG@ww`8;*ZW#XVHF?L|Y?6N?QswAm598Dl^eD3Nx;> z0L@+Lnkeu^TgKO~Wg@0YkK$KX#RXh+aEIY}?&{`KTN&4^;ric4oRaTglVLBn>VH27 zhKIRDGJQ;^VtAYzoqr`ZP@q2*DA8BMBFWfJwSy%>%j7Abf^!K%D~>}@&tQ#zuqI*j zTT)a3D#a0N?$0NpG}u>b%7 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class deleted file mode 100644 index ee574330c1a1f7fccf4a5679839f39c63eae267f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmbtS%SyvQ6g`v1rj60IQCnXN7cOcGX5-EmScxb_L8bd?I_Q*iqRFIwmkSYG_yK;D zcw;LBTv-|BaSn6Neaw7(zP$t3!=?=r%ViX>VxeJSm7(~+V?IhOtTEKig!Tp3X)F?7 zig1uHIOj@)r=+RxB^6Q68u&$ zT&P6*CQ9Q#_%chR@jKY=kdL_o8|x0{P`0o^-I%ejxyTIF%-9RLy7R93LwY5K!x?>l z-oMby+T8ww3%2Ngne^WnO)77CvN2DLL&%3g1F&1KV6FBGjAudy7HC~0Es&CaOv)$1 iKz(u>71Rik?%S0S>k=}sgc9v8or-kVB2=KgiqaPi|JRBD diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequest.class b/target/classes/ai/tecton/client/request/GetFeaturesRequest.class deleted file mode 100644 index 9d1fcb4b4cdb1d65a618ed183f8a184fa557b042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7248 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 diff --git a/target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class b/target/classes/ai/tecton/client/request/GetFeaturesRequestData$Builder.class deleted file mode 100644 index 3985fa48952d84cf24d60f9f7914a7c2e55fae7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 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 diff --git a/target/classes/ai/tecton/client/request/RequestOptions$Builder.class b/target/classes/ai/tecton/client/request/RequestOptions$Builder.class deleted file mode 100644 index 7d15cee1863de3b8710fb56b2d5a81db504738e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmb_b+e#ck5Iwa!yW>tqT{W7U_Y1D8WDtDYkOzf8U~wUel9y=j+Gy+8qjM4RR|ZUk z1pI(}R7myM!8LiAhrD!mRh>SkPEXCxU*GQlY+%WQizye=9!i+1p^6!EnsqVfVxBM* z%ganAY3CwUkxmFJZJ~lx_R>fPy--P=1{M;0cm!<`s&AB5>03g%v9d>SwxT0R7;Y;q zx3lxEjCVyhWOeq#LC1r>7*x$_1w)&g-0?b`0urr@m463L~>!hXd{c3!88=* zHVFHT_NllMK`8Wbu#?70AGi84o$e_+Y!&v}Cs96=pN*q`=n0i85oWpFhoV*DV%PX2 ztTqa(vLSCL%Hp1Ur_3{sJ^lc%jfxKsPYBBeKbnsL)O;*pkq{KT^T#}){&RI3CV<|OTi~! z`~}Lp`qBqoOIwho;tLP{CYQ^7W=@hx0j)md%$#$+v-fw|-WE>g2V3x(hD#czHN39j4ISN>>c)(G&PvnEI_B`EoW7+)!wU!wva-w;S)t1Mkb>0}USvXcGSC4cN3F}lv!uI--_ zh>wiU3nV7JC8DKfY}dNns4QBwtLCD^mBAUWWIFR^&6abunDCcvdNw*^+6AA8o?9q6 zw&nVTnsvKj)&0Vi@HrO-A$_h}emE1D8;SVzTrd9%di<94iS#wdR5W;jy#1c9_S zRUQQTioRL8#jL8pddh7t_dmnS(Fj8eWPpdJUEeBOwPu6|{^hJPXI|vt3D0vZ)7|J{ zWzNHT%UxDu(}?meqLdTs*EXyV&8|;Xsy?$yfn29vSWwd;&DLmWDhJX)cvO+UZ2AJ- z%VvE!6ci6nbHVq*G7D^Jdem7Zz34S+CF`OsHMhA_J%?oB4D7{=46@w|mq^0O8Q6v0 z&5Zz5CAVWuW!b69&fRuoqhlMdv#chVuna@wXuq)3>w`y`=SqmFv+t*4(mszb^?vlX4 zs3KH5M;oOhg;Z@fRU6!MtaOJOf<+pn+HokmJ{~FBm8xT1HY-#}hX|XLyvF*1lg$R8 zcB>8Q@nqCNCE2GNIqGt&x8o!h=(q}+ntvLBH;`g#dN3yM)`(`qvrKo#1@U~B*jEYJ zOakeV8&4C;-s;HyGkja0{o#?xXr!In*u(E$n%_ggZy5WE&kScVuIqef3v%4Yl?lZ8 z1`K4^AhM4TTUbNZ|C@ufkYGAKzBdzlPLr*&mU}#2Bz)y!}E&N`EFL0QCgemlBBSRi)gU!mwzlNTFjO2Gnh;}gYKLv0S zy}TRR0SvVWh7>_B1|k6%i2aEj8qyauCPVOF&arl;Sxy;RRoL~@A zJjWTg6ptZwBcor#;QBny227z~3>9XEXJSl(kQby15HJ z(iM{6g?UCH+*5TJ&E~#EGO?0-g8nQumgDamB;zZ&$JjC};q&}Gz*b2RN^Fp-1wP~7 zzq{Cud)SH3BMBO9Rc91uDJsEz1LvsyP+m#IwSMXSd0bGwoFbr%CYAUF>4mr?Ek3}u z^&x!`2`SYIiC+{2bCC=ZX1Lim+u1D=Y!y2O?ylkmcFy{Qe;L6XR+uqN5+%m6@8nb7 L07JYVhSBpkoneN= diff --git a/target/classes/ai/tecton/client/request/package-info.class b/target/classes/ai/tecton/client/request/package-info.class deleted file mode 100644 index 52152ccec491ed30d57f7b42ea346c46a5508a3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmX^0Z`VEs1_l!bc18x(#7zB?)Z~)z)Nk})GW8D2=q(koMzWJR{H4-D?q^!AJsifXxNH<#p64(h| zlfc!kRN}>SJQQJ{4}Bv!@VGzVp^VRSXGXu3q@*|!I-z7}G+WEc#zgD81MW{nTnr_y z5U497{baG~Dq&4)rds;$!9>eIai5}BdYXIhp7Y5(bD<|kitA}e(jJ})+Wo(XJtDSy z!8G*5QyCXoJH2n)u_Om&oO58K=%9_;7VbE>i*1Jb(lz{5tOEzD4qR+l*kRaTia+bM zF_izz&%yAJE}05>69(hiFflZn%Mn zPYixQdkikMKO%L4^e1G#A$v@oMV9pimeOyQi`by3nC0c1rAjQh?}jWl<2ycq6|<#{ qrjn6fgN04PZ7r}?=d71ZEUTbqBy3WG%f{M5iFTV3<#7uu$o~Rzeh+s5 diff --git a/target/classes/ai/tecton/client/response/AbstractTectonResponse.class b/target/classes/ai/tecton/client/response/AbstractTectonResponse.class deleted file mode 100644 index d56f2bcf1e8bdee7982d8fcf51ddf4003a589fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmb7CT}#6-6g}zcHfx>V^Ba8dVVht@e47ZO43wgvWAAAVGt#A+rh@-UK@oiL2l%7J z+pa^9y+}xM@5#-%=icP&`{NV90X7}jSe`@)D;2C(uvWo3!|atv?qijRQ*L0U6n zXG#fu67eJv2}4bbhg2lS=SHaTiDA*dK(ohS zpTswmV8)k9T%?0Q=q?W;LgxKAI<| z=Ar54$D>k6%ukD)Br_Oq#Ij#@}=Q>Vx zC^|BezCK>VZq_3g4mMm=G0Cv^-zw;B@;>KMFM~TOk>U8iEZd_V{Jw9g(d^k<^bc(M z7u5SqA6X@u4yFik$?CwOK}hQzthMt7>xDcE)3ny|SeNck)6E(UpgxSo3}(s8m@-yI yDds3cmS+Kr1-C~#BW$Ae3hSASA#FJan>n333@GR!8T2k4D9OG%*aTRG}`xFd49gzKo z%+A!P@5soWH1cqqQJLx1*yf2=;-L@eOGtrfdfL#b8I8Z}g=XqLg)tKy>2k6_(!^Y( zx0F_9TVSbL>u|K`^_ZbzOKI8<2VL@yWY>*3^Bn1Rq^}}>988+eilJ8L4nLyh!$SAI z5S%&4OUI!gsMPCqfkE{@_NvXiCpS-=a?{BKFQW-2&a2pId!g^pj*2K;pL>(Z8^4J5 z(n1+|3#CZpB5@rzGI%ENev$2&+k5mxrGG!-pnJ?KDzLXmyP0JbXe@w+HU8IW{_JTa zkU^HML_`e)uEchcedcS*zdGYHsZ;0IVw@z`GrxRtlP#OIV4d3df#kOsdWB^=4sPNW z+tw%nw{aIJWpNLy9GNcuj-{^`7T+HiKRCBIak=8PbBo0#ikYp4@qCZ4%(~3Jg{LSm KBPrH*ko^nx`(A1Q diff --git a/target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class b/target/classes/ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class deleted file mode 100644 index c05c2b368c8a428d288b492976c1c73ec592940d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 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 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class b/target/classes/ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class deleted file mode 100644 index 658b63a6e1de83585f52be141b3c683b5a301a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 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 diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class deleted file mode 100644 index 595a6fdf3960e1d8e197132def04b2255f110c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmbtT+invv5Is)PY?7uVg!`qCmH=%ZScKrIQBX-$gtVm+Nh|fy*|@>g)*IPQB|eJ> zR0$+LfR92QZ#M-(mKU_z@pvxBXU5|nKfitl@Dl446w&msT0suYG8XX2!($Im7z&D? z2!=**%ul%=aW(RLR!cS7WLOeMMmP&}$I6K9OH=ioQbKnl zZj3Mt-GEEqQhKcXFp@%9U#B_#*1%ZJL)%Z>Q>fNdnPL)!qOsgg2(ErXaAIZT2hv#b zm3wle$g7D@YsTIFyPgiEEDnVUwH#X+E2`b{5kc2}%iZN;3VZdZWe(VU_+ncsX*&%0 zwel>%T9tiVBuItTDXF#>!$d zTL#U+uQ}Zt9Mk+TJkQ3RKWGduvQx6Cph?fBNYBar9!eyEa=KE9$^HszAdaNxaFt{u z^Es2pa37^}6?Gui diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class deleted file mode 100644 index 2f63cfc49276ee73bd208d18ff37189356ca938d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmb_ZyH3L}6g}=MZ3y(ib3tP001Q|{Y^}N!1%V=vD0Fv&DXvln#SZ_)gv7uH@KJ~x zw*vw(ATjtp&bjyc`1<|h^$oxYc6^kv?qSoz7DN4B3Y%xrFtnnXcoICfD&dhbw#U#I zsi}56L-!lqU*w6$=LP=)Kcp!t?YoIynires0`CP$a%WRkkV+yfhBowy=uX&s(sV%2RJf_-6 zekSd5fVo~`xAZ8}{V|sG`lB?@Vi~GJ)b4MsN5yIa)Y0&;&2ai3m(#}G!oO^g;rQ>9 zv4;|UDZuDdP$gfZs07a;q?x==2q$0ER1aUko?Xcb*_s1G1QZ900<5Ct__nhhG|BtK Km9T*|)IR~R;Gksy diff --git a/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class b/target/classes/ai/tecton/client/response/GetFeaturesResponseUtils.class deleted file mode 100644 index 396f0ea26cd01f79f72872319f75c28acd16d571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4054 zcmcgvS#uoK89i5;QIAG#WJ{KaH{7;mkYwb+HrRj^$3hDTv=B*%$gHi=mDKi3kKElO zY_LP(kd=MM>|1aZ$wN}*!WOC|JWxDP{25+dB<9>+teI)q!Y`?ky6TnCDpbY^T7Qo`UUqrtM9bxuO)P?d=}#er$a5elDo#vTVycC{W$n zHo<_e6jtC?d z0`GRlt;y4=TqdGb!Far|_&*?!nhEHpBWvTk)`zppOeZaSS{^5>;fzlz7dMwPbYebY zsik7quAuM7Xk_XLdFwn#dnRJAYiG43^f9v5-}u1l8?Qi+GHK12XJ(HMne%?UH9V=| zDGev7pfPLK_C+dit}iPr6)1nsVkDo zU%qs`@zbu|ixMUI7hc0Dfm4;H{2xhGPNv5SMJFr!Ep_*|T?+32X^Ziz`X*E ze)jS2ZMWl?C)DND@oPM-K))fwF-gajr{lLcEpS&1dd<}8_#N7HJcB=I_>+!5<1ad% z#dA8ISHmwrsh~1lYIsq{OL$qwD+=@~UQ?#OuHy~7spBo25!e&6Odik5dCy`x%Z&SJ zu*c7WebKPM?$y`yIZnYDlCEpclJmAvnU&UpoHk^B-aBE0$;MdlHDb&-g}f1*rR;lK z$2)je$9p)V<9&Rf;X`HYM*^8qd8}wT+$WN)vC}my*T`G0%kp4Yw&Bf5BO7oD$pHs_HtN$;ywa(^e5U?pry4f zZd?U}yfqD6r1tEz~cnW1Va=5b50Q^Ri&ugHqo60^T78?gBJ zu(T3;@G&FM8YaflFPtl!TQ@D;tYi5xW@tQfmS@(N*vP_0^FA%zF|5ZWu?@eXR;Q(8 zPd(; zXS&1kIAxx&{nz>^vZbFa3}3;S&6x9Mc1~upg?wJ6KZV#AetG)ec>IwD_SFoGlp&Q7X26Qn@9jr&aC)e*_r(H2_p$Bihgofn9!Y z8~Znx^jr7~0jkaskzp&tx8OV3ejehV{*qhxtnmkR>|t9E0N9It?4|h2<2D|{#o~L^ z5eaLvj)8tMK46332w)NXI|u zPXdaAeyrnjJ(6fbBYyyG!}Vyz2F`87L2SYZHsf(@!BO0RlO+EPL+~C^f5UbxVF$kE zns2ew=kOqTT0$-M;{f+-#yQ-MJ9rMc!=32lTeZ5_Qo;BRKj&-}PhI3moebG8IBNKz zQ}{#d1^8~_1Jqrd?cwMnNc>B{WYq{Omk7{Abr9HVO>gyogO|W{i!^ z0u23d2ZMhBTh3sEkG>)CFKnHxZrC<<0o&C|&Zo~|#|n^^2y*t)=Ss3cxOP*Fpwerp z{6;EVY5V{!?q|S;DBi;qu0`q2lX{o*DrqZ9J4oAo81%{Yhzx?^g~3q7H`7l*%^l)f zwYs2)S9CWa+4uu$Gz|ZMy&6&%vHc?90Zk)p-A_;zeuNHQ_70syShBN6}r diff --git a/target/classes/ai/tecton/client/transport/HttpRequest.class b/target/classes/ai/tecton/client/transport/HttpRequest.class deleted file mode 100644 index 4764b78103c19d0744905dbb30deeaeee1143aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1862 zcmbVNTT|Oc6#f=p1VV&h(h!F>7Xs9Xi;~i&4Oue+*9^IC$PEiOEqo=A>&9(?iE8+|rFFFGJs^DDBBzLv%5`lZ3%W*!WSPRNax^ORp`1rnjwQKWLf|WaK|qye;1J17F_~_^C1|mvQoe z5oK5!h-%@LKz=i9D1q^+AE+nYPEExxWUbAUQZ=m0_A43tX5Tx^>z2#i51MwJ5+7I< z0b}S+uN9|gXrL$pqZD~`*iCyo?8bF<&o@Omc_g_Nqw1iHI~Fz^Y~pJN<2dQyF77$F zkB0)nv+&5lV^l3{Ie3Dn4xVAo!2~{Xa0XKjPGd@7{+M)*c%=V#;XbYH5RewW5x9Dc z`Z1{epSgXYa)>Gh72|y~Bv6QCoUj6O8K})_nB^yTJCP>fY4KZ*U7&v0==$x3iV2EC zZhElWv%O1#XEuzRo{VI@rM!CB>4ZU&j@4>!u3l=tO*q;Krz|3-Vq$A8Bf!BfXEuJS zFYALySP$7~Jd?V$t(qOa3iP?0;bx!?2L_l*p=Od7SbUFO;R2tx6MP=?{0J>l80e%c zfs?L85!V90GR{I^n%qCsC~{qQe}`}v-(YALxuw5wacK|vpK;c8e?x8$g{4yQ4Xiy3 z?_q=z?(!~dx18U_s9P@V!ugdpa`>2Z2E(Kiv|ECMN%}m^xA_cK>Gc}@-lpGAC~<4w zFV5jScZ`5JOff3MT_iV@awdmd%9-d*cI##kn8ghFX^8)5yl7#}!lm?A+GltP%wn#W zrpMKoE|_$FAv2W5T1*emrSUlX0*CR;<5QlP8XZ-(`;})hl`B}tP#*19p3hWvGnJiw eWj8~42#aZQOE|@~#57AR^yGS(e}*e~fbv`Fr@4&) diff --git a/target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class b/target/classes/ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class deleted file mode 100644 index 7f9f3170c2f8ffce97903aef3fd16dfbf5e55e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmbVJyG{c!5S-2HLO4h+ygLdc9tGFXpdgwEM9>K&g3|jAD>%B?k?rtbR7ezj03U_e zJ3t`OAPVo!u4i{=?bo;G7XU}tYN3kN0P6uZ2z6<#v4n0i5f38Hg&xO4ZuU@RY zH8gXZ$#YdGiGI=#i#ALag0RRaW?y9L2T!0!1{H*C8)Y)Z665fLfMrDGeYdnL=&&!^RIr9Nn(v`&f}j8Z diff --git a/target/classes/ai/tecton/client/transport/HttpResponse.class b/target/classes/ai/tecton/client/transport/HttpResponse.class deleted file mode 100644 index 8ea0100d3bdbd02b6e0fa662e17a2471dad2bcde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4279 zcma)9>t7V-6@G?`1H({c@q(I=H7Z#aWsRmb3b7TGfCaH&X;Dc!ECY-#yX(v>iA~zH zX_MY>={2VJTiP^jjmo95iT3)T-}}GxOVd8*o!MnrmY@FkG4Ji1^PbCd&UyD=@4fvl zfXDDp1Ea_rIEX6-+ThC4tLM^}SwUtCGJ8fo&lzFLQ`>G-;VZ{V8-Y<$bWF1#Wf z-`4S+I(*l_9=sw_zh~h4_<@dB>yf~VIqTW-kEmz%b^HK;+KCxJD~ zRcz>zwP2+(R(3Wu=DSXIwp&BZRBrkzspf2J+IA_mc_?>z&iC_&Qv<;kiJDydO2PL0 zlLgoE9Z_XVAj@~=?No7>gthZIZ_d%Mb10pgPkC1gmTMRCDYcs#mNOEy+U2I5n6~o1 z?P`cu;uGUT3Ub$vIkQ>IFSxX5@*d!${2WYNES z*Ll19IPcoj<76HGxQ4BXl2?i>-5ulfUf}1ZAt!5}Da=pV?m25JqkNr9TbXgobz~iG z*7$P{J=}4>T2X_#Vn8K)#lVzQ&|sW;Hf`r6CKTLRLCbYay^Ocgy@VCn(Xg#DrG~~a z-%4K|w(`mf9Y5Fc3k}tY4&tq8*7l3q1g_vdK^If|WtiEP=%|bugVe)Clx`_ft;K2d zrcmJ`VZnDYsS)J_D?^_pD<1T$N56!4^MaLerY+wtnxRZ%XibIEl3Gmxj7shHt}1$Vd8gqL&uvYevdzx=)n^v4&$7B9y9SroEJfloA`jt zW-%u-F0bP)6CV|k6F9HqhKZZFWnxh{m$1x?T30_d4v&UI_og1R-32FYm%O2&>)uQ% z&Lt%FkJ@S5S+J+$YCm2CZhXeg&Bp`G#Gi5expnvN9{f5O`)ZsX75@OMmHz(oy@-do2$RbC@@B}!`A^LhVj+zmTZTpCVPR}&w? z2_5g6xP!YIj;_1weoMB7mQ{;Nn&|io`^rY`Xm4-9$*}RU1BNpbf5qQS9LEPu{2l+$ z@W_2CM2D6aXcmd`t)O;ATpx5|rnJ(1O?6;TtCY#4*I2v^I)w4i{HBFt_nwu%|Zcm)vpoDMo)PsTzDK~SbkjVsHFcGat z0miyR0c#AUIY-ucIg)8o7ubdTf>#P_zs0WZvTrq|U7O{*bin?a7>pF2@TIfCwe^m7 zmdKsIkOcQ|^fdbcwC6*wbGcVjmn!fkxu*C8h5o3ofyd^NIatC7WAjjaD_ zWWndSQ?gc#tSHdX%Xt<0U~oK%Q=Ip6){AP+03+Gixdd$)Rc|S}CuL8aJb-#Uhykv* z1(X=XX|Ck_!x*CEVa{tfCONV>g_8e`TFM5-lgp@1Qh3cGYGvHC2wlcH{@2?pFc#4u zYjY8e$^A=s-y)ilx6pVETaz4{c(i#1&5MY=9uRKkRJ5#yXxW7ZejlO+ahUYi7CcN% z_h2vo_G2G?mZV=gspSE7x0JFZ9%xpwWIVKl+F}G}X~9P*vjtWEBU`nOgE~fa{yc&n zF;PO6k{o7CnZb*C8+gm-GvX}MF*TwBh3q$2aj@bL=F4cE(V zK30*L?Y#nXtep9HMP|0ZFu;c>L~O2;Ag!RKoWD21Ul*DkfN+w0PvPlMiT~28HIy@% zT*8)XILTpa4?o+6ckN%n_A>{T(E2JGIPAEKop)|y*F@~W+IP@4Q7xn^cxY^*M(D>@ z5MRdbJDfjEo@;2ljXe{wz025lNAOakVsZqHocHt6CyAE%*PbNdh!cK$0W^{Fw6E z1;YO#cPFXNQza!En0yW{QCu_sFC)XR0D44~3Ykgq(3DC9=~o8x6$rFkm*l`=3 z6U$&$9=M6F8|aE9mXNxMcJZecQDZy3+Desn@Y_n}EYGWu!y%<;6@TL&q>t*Dhp*vB G*ztc+fKTiI diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$1.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$1.class deleted file mode 100644 index 80ec6d0fddc052db225bf37931c1fc61ff83ada6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 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 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpHeader.class deleted file mode 100644 index 2c38d2a11d43a0baa016670865eb2f9c4cc39822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1659 zcmbtV+i%lm6#spV6T7b4f@w1-Dl-iZ!AZ^e5 zK@hG24e`7`hRYtdNt33X^Cf}+eWCcl=R5cFJLi1%AOF301>iKQqfl^0$61_Hv0udn z9n-kTuLaiRH6%6spwn@Y`5!gRXjtN7LBnnhKk>1sVOGN>K9*Em7BGtSnq8{dx9rCC zl7L>0qK&fa+;&6KReawKi*2XVaXSL%tB#k8+-4N`xn|pQ{U{fOj^Eh`!YF4;IeQnS zYVKp81%X7NSS($)1;z`@cDa6|aNU!@Y?W@@DqNuo1Qg#{cLmJqUFV*YYdd}` zXGNjswSx>5vv{wq)joEe^{52G|ANj=oC`pXIRX;cBX*l%ejAg{AcCyIK&ptyUlYIj9;fEL#qy_$> z+<#*X|A1p9$&({yBpyD^6QUT7Nv|wrI*#0+KBkN)o_P%Q^V0s6;rgY;2jMiF!1n{^ z`_vqMet8L{VQMjR^cnO=7?Z4_nB$V2knCjK+$P!Wk~I_N4#`fbzms#UhcT<6^e|yH z;yrA)8i^jJtVa+Gwcp;P%=Q+Oct>#FBa1(g$D0qpPT~~Vj?gb=CsCce6r9I*OFRDu Dfr5*Z diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$HttpMethod.class deleted file mode 100644 index 3ed01a56c321494f25296c76bbaebb6a0cae3626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1341 zcmbtUZBNrs6n^g7tz9W^6NW=XRFsV=6$Avg5DZSmR3YggS^QK+9VMkDUB@SXl#WD< zM#E?S2)_IW-doog|=Vc55mYO3q6ls5vK98LBB`<&j1a`PW`Dm|1hzKClhX z_G^X}g|1&K#w|qM+kC#&z^#K*t~_X-^g!P*pA&h?NMab5 zz%WA6HRAlynqY4cJBIX{B!OYH^&}u1p@*U#Gkhy>Coc|bU^p+Q{ zQUz|OsS@QCry+z%ld z!mLKeIVnE~p)Z7ad0bHOkRh60U(aPT=~A|k-+Wpu;?z&oVkK0WNcrl*nK8up6Z4=B$&T`Cr zb9c*hOMJ^Fjq0T@ykU42Kg%J}HSAcfR^fJ;yOyleE*4B#jwO~E;^)-Lo>RU|4Hj=L zVjnJARfmhFOPKr5iB6EKS~W%9yNOE4g}@(|5uG(xo#t+;OTNo;EQ+-jI<8|`M?VH=^m)B*TNN%Wn&zEG z&5_0%I-uTwF^td}^lX2~e-u~S{%t9;QO(8lXs-am?c*Pm+-zH@&EFs&ost z+xQIHC8I#{6Vy}CnC7KxK?}6gg>VP)cJK>oj{Ii6L)nOh{IT#Mv;*{bqOQa)cw%qh w2bul*=qYX}`{*qmfJp+arnLwF5yq%#e~w`$kR%@;Cg?(_-Q=ynz{Qopzr2EDt^fc4 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class b/target/classes/ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class deleted file mode 100644 index 1873494a0a9406d86ca6a803c9a92a7ef98350f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1413 zcmb7EYflqF6g|@i3+-00Py|sP3euLx`oL!qBsGL4Rg4gfejD1M3|VK%?$+qfGLayf z_yhb=#yisug+dzru(NaT&OP_ubMEZ#KReaZr!+ojk$e9TDWxz1_hWp%g zgY2*MPxNW$#exL6{+_I-^U4 zj&UWiManwY8LF<9{@V(-V;cf^m8I6|^zAEW08)>i|UGr)#mI z2y8ZLASYXgPa!jyh#)i6@svq;3%4Wimt>p%3EY}HL0{}5_BhgP;!L^rDYlJi%n(ux Ucc{P^W-&_d6nRp3fD!cm1$E$DT>t<8 diff --git a/target/classes/ai/tecton/client/transport/TectonHttpClient.class b/target/classes/ai/tecton/client/transport/TectonHttpClient.class deleted file mode 100644 index 6f18f82da61c5e6d671b5863b06cbaa1c4fe439d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12350 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 RldaaNe45cZgBy9te*wRW?P34` diff --git a/target/classes/ai/tecton/client/transport/package-info.class b/target/classes/ai/tecton/client/transport/package-info.class deleted file mode 100644 index 8a8def0829f803774d958c48f722ce91742645f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmX^0Z`VEs1_l!bc18yE#7zB?)Z~)(XdLSi?3|ztarA5i9Zkai$VhjvS S3@kwVK!A~f4M;LEumS+-5+jiS diff --git a/target/classes/ai/tecton/client/version/Version.class b/target/classes/ai/tecton/client/version/Version.class deleted file mode 100644 index 5f0e6b3b83965620d4cd650f181c05908d80b925..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 zcmaiwK}*9x5QX2gX;N!iYt(}`^`wGb550&YNKq6*DyHPVjZ57UH;`=lzdQ*Z`~m(b zaZ&>wy}X(CvCNyDukVjf0AuX+(8jihz{3u~OKzXyhiOCz!lhhEkx8=}-to5-wEUF;IvD{ZvBCbW-F5`r_ypA}&%)J8?s>s%ExInS5`VV=q?k%g{(10DOK zOTtkowXiC+xe;lmm9b)_ic+&pek*79;=C$Sb*JlTe#1xgl0LfFARPQRgfRU3({#S% zK*HdBbTJyA#nH`Ud_SGx5G_6kK-h5 QtbWt?F<{3>VQpdf1EpG2MF0Q* diff --git a/target/generated-sources/java-templates/ai/tecton/client/version/Version.java b/target/generated-sources/java-templates/ai/tecton/client/version/Version.java deleted file mode 100644 index 0f5baf93..00000000 --- a/target/generated-sources/java-templates/ai/tecton/client/version/Version.java +++ /dev/null @@ -1,7 +0,0 @@ -// Generated by Maven templating plugin. Do not modify this file directly. - -package ai.tecton.client.version; - -public class Version { - public static final String VERSION = "0.9.4-SNAPSHOT"; -} diff --git a/target/java-client-0.9.4-SNAPSHOT-javadoc.jar b/target/java-client-0.9.4-SNAPSHOT-javadoc.jar deleted file mode 100644 index 96bf4313e06efd7e928421b9e007e9eee093f9f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646469 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 z 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 z%0A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 G}G% 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 IF^Xwk>!iq7}p&F_`xvkpj^ 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�pz(27B6_efXYY%_`6M@^5)|u}rsL(uj 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

    (|VQ5rdqNGHk>F5Xq9*MZ0+tIe7~cCV7M_X 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 KXgz>oVfjDNlTs1@ diff --git a/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml b/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml deleted file mode 100644 index 8b89c977..00000000 --- a/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - src/main/javadoc - diff --git a/target/javadoc-bundle-options/package-list b/target/javadoc-bundle-options/package-list deleted file mode 100644 index 59d42328..00000000 --- a/target/javadoc-bundle-options/package-list +++ /dev/null @@ -1,217 +0,0 @@ -java.applet -java.awt -java.awt.color -java.awt.datatransfer -java.awt.dnd -java.awt.event -java.awt.font -java.awt.geom -java.awt.im -java.awt.im.spi -java.awt.image -java.awt.image.renderable -java.awt.print -java.beans -java.beans.beancontext -java.io -java.lang -java.lang.annotation -java.lang.instrument -java.lang.invoke -java.lang.management -java.lang.ref -java.lang.reflect -java.math -java.net -java.nio -java.nio.channels -java.nio.channels.spi -java.nio.charset -java.nio.charset.spi -java.nio.file -java.nio.file.attribute -java.nio.file.spi -java.rmi -java.rmi.activation -java.rmi.dgc -java.rmi.registry -java.rmi.server -java.security -java.security.acl -java.security.cert -java.security.interfaces -java.security.spec -java.sql -java.text -java.text.spi -java.time -java.time.chrono -java.time.format -java.time.temporal -java.time.zone -java.util -java.util.concurrent -java.util.concurrent.atomic -java.util.concurrent.locks -java.util.function -java.util.jar -java.util.logging -java.util.prefs -java.util.regex -java.util.spi -java.util.stream -java.util.zip -javax.accessibility -javax.activation -javax.activity -javax.annotation -javax.annotation.processing -javax.crypto -javax.crypto.interfaces -javax.crypto.spec -javax.imageio -javax.imageio.event -javax.imageio.metadata -javax.imageio.plugins.bmp -javax.imageio.plugins.jpeg -javax.imageio.spi -javax.imageio.stream -javax.jws -javax.jws.soap -javax.lang.model -javax.lang.model.element -javax.lang.model.type -javax.lang.model.util -javax.management -javax.management.loading -javax.management.modelmbean -javax.management.monitor -javax.management.openmbean -javax.management.relation -javax.management.remote -javax.management.remote.rmi -javax.management.timer -javax.naming -javax.naming.directory -javax.naming.event -javax.naming.ldap -javax.naming.spi -javax.net -javax.net.ssl -javax.print -javax.print.attribute -javax.print.attribute.standard -javax.print.event -javax.rmi -javax.rmi.CORBA -javax.rmi.ssl -javax.script -javax.security.auth -javax.security.auth.callback -javax.security.auth.kerberos -javax.security.auth.login -javax.security.auth.spi -javax.security.auth.x500 -javax.security.cert -javax.security.sasl -javax.sound.midi -javax.sound.midi.spi -javax.sound.sampled -javax.sound.sampled.spi -javax.sql -javax.sql.rowset -javax.sql.rowset.serial -javax.sql.rowset.spi -javax.swing -javax.swing.border -javax.swing.colorchooser -javax.swing.event -javax.swing.filechooser -javax.swing.plaf -javax.swing.plaf.basic -javax.swing.plaf.metal -javax.swing.plaf.multi -javax.swing.plaf.nimbus -javax.swing.plaf.synth -javax.swing.table -javax.swing.text -javax.swing.text.html -javax.swing.text.html.parser -javax.swing.text.rtf -javax.swing.tree -javax.swing.undo -javax.tools -javax.transaction -javax.transaction.xa -javax.xml -javax.xml.bind -javax.xml.bind.annotation -javax.xml.bind.annotation.adapters -javax.xml.bind.attachment -javax.xml.bind.helpers -javax.xml.bind.util -javax.xml.crypto -javax.xml.crypto.dom -javax.xml.crypto.dsig -javax.xml.crypto.dsig.dom -javax.xml.crypto.dsig.keyinfo -javax.xml.crypto.dsig.spec -javax.xml.datatype -javax.xml.namespace -javax.xml.parsers -javax.xml.soap -javax.xml.stream -javax.xml.stream.events -javax.xml.stream.util -javax.xml.transform -javax.xml.transform.dom -javax.xml.transform.sax -javax.xml.transform.stax -javax.xml.transform.stream -javax.xml.validation -javax.xml.ws -javax.xml.ws.handler -javax.xml.ws.handler.soap -javax.xml.ws.http -javax.xml.ws.soap -javax.xml.ws.spi -javax.xml.ws.spi.http -javax.xml.ws.wsaddressing -javax.xml.xpath -org.ietf.jgss -org.omg.CORBA -org.omg.CORBA.DynAnyPackage -org.omg.CORBA.ORBPackage -org.omg.CORBA.TypeCodePackage -org.omg.CORBA.portable -org.omg.CORBA_2_3 -org.omg.CORBA_2_3.portable -org.omg.CosNaming -org.omg.CosNaming.NamingContextExtPackage -org.omg.CosNaming.NamingContextPackage -org.omg.Dynamic -org.omg.DynamicAny -org.omg.DynamicAny.DynAnyFactoryPackage -org.omg.DynamicAny.DynAnyPackage -org.omg.IOP -org.omg.IOP.CodecFactoryPackage -org.omg.IOP.CodecPackage -org.omg.Messaging -org.omg.PortableInterceptor -org.omg.PortableInterceptor.ORBInitInfoPackage -org.omg.PortableServer -org.omg.PortableServer.CurrentPackage -org.omg.PortableServer.POAManagerPackage -org.omg.PortableServer.POAPackage -org.omg.PortableServer.ServantLocatorPackage -org.omg.PortableServer.portable -org.omg.SendingContext -org.omg.stub.java.rmi -org.w3c.dom -org.w3c.dom.bootstrap -org.w3c.dom.events -org.w3c.dom.ls -org.w3c.dom.views -org.xml.sax -org.xml.sax.ext -org.xml.sax.helpers diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties deleted file mode 100644 index 77aa80c9..00000000 --- a/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=java-client -groupId=ai.tecton -version=0.9.4-SNAPSHOT diff --git a/target/maven-javadoc-plugin-stale-data.txt b/target/maven-javadoc-plugin-stale-data.txt deleted file mode 100644 index 985d5460..00000000 --- a/target/maven-javadoc-plugin-stale-data.txt +++ /dev/null @@ -1,73 +0,0 @@ -@options -@packages --classpath -'/Users/zack/.m2/repository/com/squareup/okhttp3/okhttp/4.10.0/okhttp-4.10.0.jar:/Users/zack/.m2/repository/com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.6.20/kotlin-stdlib-1.6.20.jar:/Users/zack/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar:/Users/zack/.m2/repository/com/squareup/moshi/moshi/1.13.0/moshi-1.13.0.jar:/Users/zack/.m2/repository/com/squareup/okio/okio/2.10.0/okio-2.10.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.jar:/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.jar:/Users/zack/.m2/repository/com/squareup/moshi/moshi-adapters/1.13.0/moshi-adapters-1.13.0.jar:/Users/zack/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/Users/zack/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar' --encoding -'UTF-8' --protected --source -'8' --sourcepath -'/Users/zack/tecton-http-client-java1/src/main/java:/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates:/Users/zack/tecton-http-client-java1/target/generated-sources/annotations' --author --bottom -'Copyright © 2025. All rights reserved.' --charset -'UTF-8' --d -'/Users/zack/tecton-http-client-java1/target/apidocs' --docencoding -'UTF-8' --Xdoclint:none --doctitle -'Tecton Java Client 0.9.4-SNAPSHOT API' --linkoffline -'https://docs.oracle.com/javase/8/docs/api' '/Users/zack/tecton-http-client-java1/target/javadoc-bundle-options' --use --version --windowtitle -'Tecton Java Client 0.9.4-SNAPSHOT API' -ai.tecton.client.transport -ai.tecton.client.response -ai.tecton.client.exceptions -ai.tecton.client -ai.tecton.client.model -ai.tecton.client.request -ai.tecton.client.version -/Users/zack/.m2/repository/com/squareup/okhttp3/okhttp/4.10.0/okhttp-4.10.0.jar = 1655042638000 -/Users/zack/.m2/repository/com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0.jar = 1635459849000 -/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.jar = 1631980259000 -/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib/1.6.20/kotlin-stdlib-1.6.20.jar = 1648814412000 -/Users/zack/.m2/repository/org/jetbrains/annotations/13.0/annotations-13.0.jar = 1719255261852 -/Users/zack/.m2/repository/com/squareup/moshi/moshi/1.13.0/moshi-1.13.0.jar = 1639018430000 -/Users/zack/.m2/repository/com/squareup/okio/okio/2.10.0/okio-2.10.0.jar = 1610057714000 -/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.jar = 1636793870000 -/Users/zack/.m2/repository/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.jar = 1636793867000 -/Users/zack/.m2/repository/com/squareup/moshi/moshi-adapters/1.13.0/moshi-adapters-1.13.0.jar = 1639018413000 -/Users/zack/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar = 1614372051000 -/Users/zack/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar = 1562350217000 -/Users/zack/tecton-http-client-java1/src/main/java = 1721931688881 -/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates = 1753298321474 -/Users/zack/tecton-http-client-java1/target/generated-sources/annotations = 1753298321570 -/Users/zack/tecton-http-client-java1/target/apidocs/constant-values.html = 1753298325540 -/Users/zack/tecton-http-client-java1/target/apidocs/member-search-index.zip = 1753298325615 -/Users/zack/tecton-http-client-java1/target/apidocs/overview-tree.html = 1753298325598 -/Users/zack/tecton-http-client-java1/target/apidocs/index.html = 1753298325628 -/Users/zack/tecton-http-client-java1/target/apidocs/package-search-index.js = 1753298325612 -/Users/zack/tecton-http-client-java1/target/apidocs/jquery-ui.overrides.css = 1753298325640 -/Users/zack/tecton-http-client-java1/target/apidocs/package-search-index.zip = 1753298325614 -/Users/zack/tecton-http-client-java1/target/apidocs/type-search-index.zip = 1753298325614 -/Users/zack/tecton-http-client-java1/target/apidocs/serialized-form.html = 1753298325544 -/Users/zack/tecton-http-client-java1/target/apidocs/index-all.html = 1753298325619 -/Users/zack/tecton-http-client-java1/target/apidocs/allpackages-index.html = 1753298325623 -/Users/zack/tecton-http-client-java1/target/apidocs/deprecated-list.html = 1753298325624 -/Users/zack/tecton-http-client-java1/target/apidocs/member-search-index.js = 1753298325615 -/Users/zack/tecton-http-client-java1/target/apidocs/allclasses.html = 1753298325625 -/Users/zack/tecton-http-client-java1/target/apidocs/script.js = 1753298325630 -/Users/zack/tecton-http-client-java1/target/apidocs/stylesheet.css = 1753298325630 -/Users/zack/tecton-http-client-java1/target/apidocs/overview-summary.html = 1753298325628 -/Users/zack/tecton-http-client-java1/target/apidocs/help-doc.html = 1753298325629 -/Users/zack/tecton-http-client-java1/target/apidocs/element-list = 1753298325523 -/Users/zack/tecton-http-client-java1/target/apidocs/allclasses-index.html = 1753298325622 -/Users/zack/tecton-http-client-java1/target/apidocs/type-search-index.js = 1753298325614 -/Users/zack/tecton-http-client-java1/target/apidocs/search.js = 1753298325631 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index c6901cb5..00000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,88 +0,0 @@ -ai/tecton/client/transport/package-info.class -ai/tecton/client/request/GetFeaturesRequestData.class -ai/tecton/client/model/NameAndType.class -ai/tecton/client/TectonClient.class -ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson.class -ai/tecton/client/model/ValueType.class -ai/tecton/client/request/RequestConstants.class -ai/tecton/client/version/Version.class -ai/tecton/client/transport/TectonHttpClient$MediaType.class -ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesBatchFields.class -ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$RequestDataField.class -ai/tecton/client/model/SloInformation$Builder.class -ai/tecton/client/exceptions/ForbiddenException.class -ai/tecton/client/exceptions/TectonServiceException.class -ai/tecton/client/model/FeatureValue.class -ai/tecton/client/transport/TectonHttpClient.class -ai/tecton/client/request/RequestOptions.class -ai/tecton/client/model/MetadataOption.class -ai/tecton/client/transport/TectonHttpClient$ParallelCallHandler.class -ai/tecton/client/response/GetFeatureServiceMetadataResponse$GetFeatureServiceMetadataJson.class -ai/tecton/client/response/GetFeaturesBatchResponse.class -ai/tecton/client/exceptions/GatewayTimeoutException.class -ai/tecton/client/response/GetFeatureServiceMetadataResponse.class -ai/tecton/client/model/FeatureValue$1.class -ai/tecton/client/model/SloInformation$SloIneligibilityReason.class -ai/tecton/client/response/package-info.class -ai/tecton/client/request/AbstractGetFeaturesRequest.class -ai/tecton/client/exceptions/ResourceNotFoundException.class -ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls$1.class -ai/tecton/client/model/FeatureStatus.class -ai/tecton/client/response/GetFeaturesResponseUtils$FeatureMetadata.class -ai/tecton/client/response/AbstractTectonResponse$ResponseDataType.class -ai/tecton/client/model/package-info.class -ai/tecton/client/transport/HttpResponse.class -ai/tecton/client/request/GetFeaturesBatchRequest.class -ai/tecton/client/request/GetFeaturesRequestData$Builder.class -ai/tecton/client/transport/TectonHttpClient$3.class -ai/tecton/client/exceptions/TectonErrorMessage.class -ai/tecton/client/exceptions/package-info.class -ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson.class -ai/tecton/client/request/AbstractGetFeaturesRequest$SerializeNulls.class -ai/tecton/client/response/GetFeatureServiceMetadataResponse$NameAndTypeJson.class -ai/tecton/client/model/ListDataType$1.class -ai/tecton/client/request/GetFeaturesRequest$Builder.class -ai/tecton/client/request/GetFeaturesRequest$GetFeaturesFields.class -ai/tecton/client/response/AbstractTectonResponse.class -ai/tecton/client/TectonClientOptions$Builder.class -ai/tecton/client/transport/TectonHttpClient$2.class -ai/tecton/client/transport/HttpRequest.class -ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$ResponseMetadata.class -ai/tecton/client/model/FeatureServiceMetadata.class -ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest.class -ai/tecton/client/exceptions/TectonClientException.class -ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse.class -ai/tecton/client/exceptions/ResourceExhaustedException.class -ai/tecton/client/exceptions/TectonException.class -ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataFields.class -ai/tecton/client/transport/HttpResponse$ErrorResponseJson.class -ai/tecton/client/response/GetFeaturesResponseUtils$FeatureVectorJson.class -ai/tecton/client/request/GetFeaturesRequest$GetFeaturesRequestJson.class -ai/tecton/client/request/GetFeatureServiceMetadataRequest$Builder.class -ai/tecton/client/response/GetFeaturesBatchResponse$GetFeaturesMicroBatchResponse$GetFeaturesBatchResponseJson$ResponseMetadataJson.class -ai/tecton/client/exceptions/HttpStatusExceptionFactory.class -ai/tecton/client/request/RequestOptions$Builder.class -ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$FeatureMetadata.class -ai/tecton/client/model/SloInformation.class -ai/tecton/client/exceptions/InvalidRequestParameterException.class -ai/tecton/client/response/GetFeaturesResponse$GetFeaturesResponseJson$Result.class -ai/tecton/client/exceptions/UnauthorizedException.class -ai/tecton/client/request/GetFeaturesRequest.class -ai/tecton/client/request/GetFeaturesBatchRequest$GetFeaturesMicroBatchRequest$GetFeaturesRequestBatchJson.class -ai/tecton/client/request/GetFeaturesBatchRequest$Builder.class -ai/tecton/client/response/GetFeaturesResponse.class -ai/tecton/client/request/GetFeatureServiceMetadataRequest.class -ai/tecton/client/transport/TectonHttpClient$HttpHeader.class -ai/tecton/client/transport/TectonHttpClient$1.class -ai/tecton/client/exceptions/BadRequestException.class -ai/tecton/client/exceptions/InternalServerErrorException.class -ai/tecton/client/request/GetFeatureServiceMetadataRequest$GetFeatureServiceMetadataJson.class -ai/tecton/client/request/package-info.class -ai/tecton/client/request/AbstractTectonRequest.class -ai/tecton/client/response/GetFeaturesResponseUtils.class -ai/tecton/client/TectonClient$Builder.class -ai/tecton/client/model/FeatureValue$Value.class -ai/tecton/client/TectonClientOptions.class -ai/tecton/client/exceptions/ServiceUnavailableException.class -ai/tecton/client/transport/TectonHttpClient$HttpMethod.class -ai/tecton/client/model/ListDataType.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 7c354da8..00000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,46 +0,0 @@ -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/MetadataOption.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesResponse.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/RequestOptions.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureStatus.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ResourceNotFoundException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/package-info.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/HttpRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/package-info.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/UnauthorizedException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/AbstractTectonResponse.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ForbiddenException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/SloInformation.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/GatewayTimeoutException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ResourceExhaustedException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/TectonClient.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesRequestData.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesBatchResponse.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/InvalidRequestParameterException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesBatchRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/InternalServerErrorException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/ValueType.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/package-info.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonClientException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeaturesResponseUtils.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/NameAndType.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/TectonHttpClient.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonErrorMessage.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonServiceException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/RequestConstants.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/HttpStatusExceptionFactory.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureServiceMetadata.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/AbstractTectonRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/BadRequestException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeatureServiceMetadataRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/transport/HttpResponse.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/ServiceUnavailableException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/TectonClientOptions.java -/Users/zack/tecton-http-client-java1/target/generated-sources/java-templates/ai/tecton/client/version/Version.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/TectonException.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/FeatureValue.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/AbstractGetFeaturesRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/model/ListDataType.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/exceptions/package-info.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/response/GetFeatureServiceMetadataResponse.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java -/Users/zack/tecton-http-client-java1/src/main/java/ai/tecton/client/request/package-info.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst deleted file mode 100644 index 5b930316..00000000 --- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ /dev/null @@ -1,22 +0,0 @@ -ai/tecton/client/transport/TectonHttpClientTest.class -ai/tecton/client/response/GetFeaturesResponseTest$1.class -ai/tecton/client/request/GetFeatureRequestDataTest$1.class -ai/tecton/client/model/FeatureValueTest$1.class -ai/tecton/client/model/FeatureValueTest$3.class -ai/tecton/client/request/RequestOptionsTest.class -ai/tecton/client/utils/TestUtils.class -ai/tecton/client/request/GetFeatureRequestDataTest$3.class -ai/tecton/client/request/GetFeaturesRequestTest.class -ai/tecton/client/transport/TectonHttpClientTest$1.class -ai/tecton/client/model/FeatureValueTest.class -ai/tecton/client/TectonClientTest.class -ai/tecton/client/response/GetFeaturesResponseTest.class -ai/tecton/client/request/GetFeatureRequestDataTest.class -ai/tecton/client/response/GetFeaturesBatchResponseTest.class -ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.class -ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.class -ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class -ai/tecton/client/request/GetFeatureRequestDataTest$2.class -ai/tecton/client/request/GetFeatureRequestDataTest$4.class -ai/tecton/client/model/FeatureValueTest$2.class -ai/tecton/client/request/GetFeaturesBatchRequestTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst deleted file mode 100644 index 5ee30c3e..00000000 --- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ /dev/null @@ -1,13 +0,0 @@ -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeatureRequestDataTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeaturesBatchResponseTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/response/GetFeaturesResponseTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/model/FeatureValueTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/RequestOptionsTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeatureServiceMetadataRequestTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/transport/TectonHttpClientTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesRequestTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesBatchRequestTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/request/GetFeaturesRequestWithOptionsTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/TectonClientTest.java -/Users/zack/tecton-http-client-java1/src/test/java/ai/tecton/client/utils/TestUtils.java diff --git a/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml b/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml deleted file mode 100644 index 11c149ed..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.TectonClientTest.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml b/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml deleted file mode 100644 index a693dd3d..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.model.FeatureValueTest.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml deleted file mode 100644 index ca2bf1af..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureRequestDataTest.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml deleted file mode 100644 index d566c6b7..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml deleted file mode 100644 index d9580f33..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesBatchRequestTest.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml deleted file mode 100644 index 5b6d4464..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestTest.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml deleted file mode 100644 index b108bf42..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml b/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml deleted file mode 100644 index ff0c36f1..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.request.RequestOptionsTest.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml deleted file mode 100644 index 249cae81..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml deleted file mode 100644 index f4217c12..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesBatchResponseTest.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml b/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml deleted file mode 100644 index e70ec06d..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.response.GetFeaturesResponseTest.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml b/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml deleted file mode 100644 index 347b9b9c..00000000 --- a/target/surefire-reports/TEST-ai.tecton.client.transport.TectonHttpClientTest.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/target/surefire-reports/ai.tecton.client.TectonClientTest.txt b/target/surefire-reports/ai.tecton.client.TectonClientTest.txt deleted file mode 100644 index 03904afc..00000000 --- a/target/surefire-reports/ai.tecton.client.TectonClientTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.TectonClientTest -------------------------------------------------------------------------------- -Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.059 s -- in ai.tecton.client.TectonClientTest diff --git a/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt b/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt deleted file mode 100644 index 115cb27e..00000000 --- a/target/surefire-reports/ai.tecton.client.model.FeatureValueTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.model.FeatureValueTest -------------------------------------------------------------------------------- -Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.model.FeatureValueTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt deleted file mode 100644 index 984528e0..00000000 --- a/target/surefire-reports/ai.tecton.client.request.GetFeatureRequestDataTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.GetFeatureRequestDataTest -------------------------------------------------------------------------------- -Tests run: 14, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in ai.tecton.client.request.GetFeatureRequestDataTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt deleted file mode 100644 index a3626164..00000000 --- a/target/surefire-reports/ai.tecton.client.request.GetFeatureServiceMetadataRequestTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.GetFeatureServiceMetadataRequestTest -------------------------------------------------------------------------------- -Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.request.GetFeatureServiceMetadataRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt deleted file mode 100644 index 66dc430d..00000000 --- a/target/surefire-reports/ai.tecton.client.request.GetFeaturesBatchRequestTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.GetFeaturesBatchRequestTest -------------------------------------------------------------------------------- -Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 s -- in ai.tecton.client.request.GetFeaturesBatchRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt deleted file mode 100644 index 67ce5757..00000000 --- a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.GetFeaturesRequestTest -------------------------------------------------------------------------------- -Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 s -- in ai.tecton.client.request.GetFeaturesRequestTest diff --git a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt b/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt deleted file mode 100644 index 4bc4a09b..00000000 --- a/target/surefire-reports/ai.tecton.client.request.GetFeaturesRequestWithOptionsTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.GetFeaturesRequestWithOptionsTest -------------------------------------------------------------------------------- -Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s -- in ai.tecton.client.request.GetFeaturesRequestWithOptionsTest diff --git a/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt b/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt deleted file mode 100644 index d2b1f133..00000000 --- a/target/surefire-reports/ai.tecton.client.request.RequestOptionsTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.request.RequestOptionsTest -------------------------------------------------------------------------------- -Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s -- in ai.tecton.client.request.RequestOptionsTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt deleted file mode 100644 index 13a8dbdc..00000000 --- a/target/surefire-reports/ai.tecton.client.response.GetFeatureServiceMetadataResponseTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.response.GetFeatureServiceMetadataResponseTest -------------------------------------------------------------------------------- -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s -- in ai.tecton.client.response.GetFeatureServiceMetadataResponseTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt deleted file mode 100644 index 5139e8eb..00000000 --- a/target/surefire-reports/ai.tecton.client.response.GetFeaturesBatchResponseTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.response.GetFeaturesBatchResponseTest -------------------------------------------------------------------------------- -Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.205 s -- in ai.tecton.client.response.GetFeaturesBatchResponseTest diff --git a/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt b/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt deleted file mode 100644 index 62dd9e45..00000000 --- a/target/surefire-reports/ai.tecton.client.response.GetFeaturesResponseTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.response.GetFeaturesResponseTest -------------------------------------------------------------------------------- -Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.020 s -- in ai.tecton.client.response.GetFeaturesResponseTest diff --git a/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt b/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt deleted file mode 100644 index 3183bf42..00000000 --- a/target/surefire-reports/ai.tecton.client.transport.TectonHttpClientTest.txt +++ /dev/null @@ -1,4 +0,0 @@ -------------------------------------------------------------------------------- -Test set: ai.tecton.client.transport.TectonHttpClientTest -------------------------------------------------------------------------------- -Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.361 s -- in ai.tecton.client.transport.TectonHttpClientTest diff --git a/target/test-classes/ai/tecton/client/TectonClientTest.class b/target/test-classes/ai/tecton/client/TectonClientTest.class deleted file mode 100644 index 42aa6da71134eca07dc70add3de2d9168ec88a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17852 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 QEaNIJljRXMmoz=U00~yj@Bjb+ diff --git a/target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class b/target/test-classes/ai/tecton/client/model/FeatureValueTest$2.class deleted file mode 100644 index 4ac49009f8951cdaca1de564bc7de0df17487c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcma)4T~8B16g|_HZn`W``4GQBZDqG@SVMd(Au&V}%}O62CE;zl9or$pY_dB`V*Eo! zgv1BX_}~xlM;Y%dXbkb8lkD6(=k7go?w$Md*Y_U)UZ7n=4G&zncsNCXT_0RL!ir1y z>NUiA4jwyr!caA1nKhm>1QC~^5wS^h7%M5X36GPZP~nc?CQn75t6c1h%ycPfQ)+3p z7&`vMSwWwnvQ3N(bCJ|yH$NVTbe|6tA@flZbJgdmwC8KEVx=*7ueBEGw&GbP=-8h0 z#>NIIt?kK?F7z|3MMwOEhq;j|e3_>FeIzrpc?Bx2M`4ucQFn{7+`S}EW3eNxwxyd5 zShqA(#VZ}FB$ImdR+w=zbnw(e15FRp@I1_*>EM}%HTWI^w5Y=qHn_3Du<#$LRKbJ{ zB-+qR*?Me^2hxmpbET+zW#7KTY{CAwW(McPzHaXwUF^RJZnlKd_;5(1{y&l4;E0B$ z8ysSl2Fs-}WA(Z%-Fo!RV3zD0c?M;a$aY%o3$WH#lv;}@f5X%zst4pce_U1o#r}o< zFQHERJydD`NOyd~B2KY_&uHQdZJgs4MQ&elW1gaRbqWnMYgnRFiQ>zJy@R`CE5vsn M3*@<^u11#DZ_Yl# z&2$ky73d{WM^2?Kvr%favMxHwCdx$nO1d&vBWX%?s0ue=(vG&;?Fu~ZE}YdH2{iVI zD6pJps}9POvC0qS*wE8SvQ(Op%ynh|b~Y+%0>K+=Rla9rQ7D?*i{2Qx$j#zb$xD0kMwPHZ@tn zoVUu&vWbVy0Qa#KpovxhA6o+TXV2pR4-is~7)bCuH3-Rat#JC!+@LVS<@R@k0XyXiPIL8LQus>gMm49wrU}729 gXc2vWHwOnDS~aZT`dqFu67;U&CUGiW97;;AU%MZ?(*OVf diff --git a/target/test-classes/ai/tecton/client/model/FeatureValueTest.class b/target/test-classes/ai/tecton/client/model/FeatureValueTest.class deleted file mode 100644 index 88af2ece40c12167e930e796fd96c15fdfb6b20b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6935 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 diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$1.class deleted file mode 100644 index a2a2e862276af75b892c29c35d8c638a15192787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmbVK+iuf95IviO=7MQcbElz{5=s&zOsa^BT2(@UQXr)gslp2{n`D)2W!A-BBlrRY zd<_qP!~-9|M2o;+nvW9qOojTcFXB+Ow)>1LO64t&H_T^(I!4^&Ts`siciV^_6Yu12dXU;C^dQzLj2VweM}oXt*u+*T;}A&A@BhP@BQpG_paSLOY1V zp4!w&{e2NvpzCCKZr=Tt?V%9XHj-=9V-qBIO)K_3MaHw_-UZcGxfeMFnbVo zq#vuggBz&)owWLI5`o6ie`=Y<=BI=ZSUozGK zf3I>#*`4klSMjjc6Qnwwge9(Zo*OTU#YDfvU3P89&nhgav#?k;u6*2j+2_5!ptyxV|{UD221kNbGrB Rpv~YSF7ZB?CD`BS`2%@N`oRDI diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$2.class deleted file mode 100644 index 52ed9f2bed297cd89af56639baaa5a728f763f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmbVL%We}f6g^I&Ofn2@nzlSkTOhzBg$_g!52dO=3FVbiiBw_30w-}3SA(a_cq&-( z1qk>O7Cgj)58$H^*OM%Q3X9g#%)P#kQV_3{#DSP+biybp; zEaSXQsS7z=%%NoAl7-6*Sv{0d={iHL#igf3PY25D`BEtDh2nKABJDj8dP8s>hvL~N z(&UIS+Yf?$Q&Tz{;3P8ETkZA;c!7$yDN<58Ubw#+%yFNvVt)R#K4iBZ7kAoRQ zn8A6Zln5I>k0L?Sn@3o@R3-lTwj8KrZwz-@yL_K}v6jB~kVnH!zPC0C`CJXWwhpBl z)F&ca-CYu_zD_uHJBY)c*pPu=>xEDuJ8E5!nv+W8zag{Lz*OXy$+%4AsL!F)SEH zj{~Wmh`0At|L;vPq+N3j3dw4T(#;@FE`YUf_;2kn%)8C~8*fK|RBRVk+Dkok`6S6I(0#auCO zoX=E~!VLY3)B(Il9v^T5AF+f_6a)DQ4rVb=GeS((quWmz(|Z!95_=kF$YyXB3z#F% KCMGsn8h-%mtr2hl diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$3.class deleted file mode 100644 index 496a85551fb009f4842c90635eeb53265bd3c98c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmbVKU279T6g`uT*<@X9np(fDwMIxIxY`syXemf-wUAmcr9R4JGbB^i*>-o~NXOb1F}rmKy5UwrPXY+v>hB8_eu%j7_2+S#XI*%d4h?ii!8%|zz8qWSy+$(tS4 zU+d|i8TTges(UEE$f&S7iQdV4v@4I+Cr~2IFzVS%o8j6tvO%7pmlj#9wzVsK;lC4m z;xe$;EfXhcPP$!XN9n-FVu%M=3QUB2=r|}JNnKGod2M;C6x%T7l5bd8RwHsce`~#Oho)9kK3cpwB1bk)q2^#oD8@N6R j!whC=kzh>E)1!xro5QuSoTn#<-oQ=NsRc}2q2%)q?x^G? diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest$4.class deleted file mode 100644 index f6cfeb00df2d69f6c96d2a868b1a1abd289cd7c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmbVKT~FIE6g_UErp+=a9UuE-Y%5z@B!Z@DY$`%b6gH$Xq!qDeH}zVh;6P&Yy5F=1 z2HFEZU_WZwP11)-Xb%u6zP{($=i2A^&)?tI09sh7po}LDDtKDPv(na&ErJ0Di+Ju( zY01V58!s73dL)zj8bhngrLRSxBjpF76iWNCI5Q&A{wJY#1=l7PUvs3xH9w?EoAz%= zCG{r5x_1|X#u0H4@bHMoGR?=Jl^&SE-BU`$+aXU9 zLFv0YG_SYl{FR;@s_bqIAG*iVbu7E&&^;F}mPuKD5*ej!yms*h zo{I*WWYg_ks<#+sZrqIF?d_=;<}~@fb7pv$d{l!}rQE%ums(lP+GJ{VB9obDpYza& zgYUG}>og|B%NLMz#Z#jh-g^_Zv9LFhNrLerEYW+e(Bo#+YARnkqu<4Sic>V}!9s!J zLUZK;ta*t-vsRpib%oL|*x!Cqseox3r%b Zz#Oee;{qO1wD1UzQKOkd&C3+&`v(qh_9_4X diff --git a/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class b/target/test-classes/ai/tecton/client/request/GetFeatureRequestDataTest.class deleted file mode 100644 index e76387d971cf7981411f053189843184bd8401ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7235 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 Vbt&9Kl-l_JIhnl$3&m@#{{e)pjd}n8 diff --git a/target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class b/target/test-classes/ai/tecton/client/request/GetFeaturesBatchRequestTest.class deleted file mode 100644 index 2be3eb08db03f33876948429de850ee5d74e783a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14511 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 diff --git a/target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class b/target/test-classes/ai/tecton/client/request/GetFeaturesRequestTest.class deleted file mode 100644 index d42db726f3ad67e65630508b28f16be5619bcd57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10677 zcmd5?3wRt?bv{S0S*=I1yp|=)&&~QJ>yh;{v1P}xEUj$WE6LGrEX#4S9!n!>ozu2lvimAjY4EOZbL>dt+h^PhA6d+wE9{K+$)C8BK{_tH^%LZRREQVBg#NmcYI4}IE0za`&K zO6R1Po}$l4&(jJ`dFY}-(;m9yr3Lhiv|jeoZ_~31eO968JoLPmeDpig^t&GVJrDi9 zhd$?_&&%i+D(MUKMX9|g#UDuVB`IE#z5Y<<{E;m9Woi40w0(5}9if+{<7-m;V-Nj_ z^!=%a{!F2-mqP*hSK^^>c<7rId*5~Qk6)b%J?^DHr@xTtf9aubdFZdC`fVxxIya+K zmi&%~{-%=tmi|tb{QF#&vVi`9URLP43jJdxb

    u_$Mj;S&HvV@h?*Rs}!$z>EGy8 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 diff --git a/target/test-classes/ai/tecton/client/request/RequestOptionsTest.class b/target/test-classes/ai/tecton/client/request/RequestOptionsTest.class deleted file mode 100644 index ccf101517485ace29518122dcccc2d881fe28f47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3346 zcmb7FZBr9h6n-|mB!opFyl5RoP^-b9siJKymWl`x4bVaarBz&#YgoGM;_gO3?R%Z+ zALvZ~hJHX=XZi#BsXwE?qSNQ@Zgv9`rx<2-@1A?_InQ~{a}Iy~`^TREF5yKIr!W%7 zXGz2`A|Kb17{&Dj#*(;!acP;5kDJmwDOWkUx+Pb)Tam|<{G3i;CW+7SMGGIZa&Iny zLIQUZn3tx7CPtILhUy}gz}*Dy#j%(~uZ-M_`||NXUS5jhVH}!*=Bv7?yCVu3(gX7f z8po`XP;fA>n_{}Mwk+&|wrtRn%3DRvnAdDweh0=zcSUy;oXcx^))ht9GP6ZP7p9xF z#p8-_-0ZCXo>_Nw%XA7f4J$a}^1XX!%odtFq9AVhXB7b-xQ_5@2FYYd*-Ac_K9ZbrFqS$h{D#oD6H7lhBLld6kg&A5@K_mWQvl4 zQ~6cxiIz1qvz*NthA3;ss9mnCk>cnt{BFc z#d13ZYf;!%99z=YQx(tfT*Wu|RzVx(RGP4@wK1)@!n_V_*t#of49E4dY1v|Y)3voA z=P`?V*mNg!VU!#d-{Cp$>84k#C7&+^s^i*}$r7y<`pxc>kW*oC;^9ionWnJE49#%_ z<9&}GRQ!maRQ!w$1(|(%mL;OZBbm%BuTnhhBi$KaTX(m-&R*n^s0l_H(dLn)3~jpw zTc*;OUX%l%Bk~mJn6A8RXIROebZ($ll70tKfh~@3{cce(ldd^3=kYaMWAOnFze{(w zQ#HG~l~Sw|q&_s&&(d#*Jr@Hkb+$ad{u10fhx7ECU-hJSVt-$r7=Uu9Cw+i2NAvgWgupFSW}zT1As0R=C1a4>?`i#UUI5JC#w=psYi z7(x#|!68iIa1GpC2zRtD+>0UHXG~d=G8DmWCn+5g>?@=)srGGj5?Xa#12Y14giHWO z3G5g;ah!jBWWOI5aiRv)PzWkh7t~M)>Q%tug9ubt6;vkG-4Ni*qLDJg zu9-rQzwW}}w-9@pG6SP0sFO}As+Xt-n89VLM-n*2ir;6&rM`SUJP31{uba!IFqhwg zT=G#a%^jV;1bQI9)ogrYD2-QO76JKPIPw%PDQ?ot8wSdA|+j;}CF&B_G&d^llUq%PzHOH<*) ZT*Y?HvKX%NP7I&Y14xxZf@1X8@*j#3`qcmc diff --git a/target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class b/target/test-classes/ai/tecton/client/response/GetFeatureServiceMetadataResponseTest.class deleted file mode 100644 index 6e13ceccce726258055d1d25c0cdd4db3ba15b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3687 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 ZaJ8Oe(_7`)`PF%P6?6;obPIXW{{b^ce?I^K diff --git a/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class b/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest$1.class deleted file mode 100644 index 29a27214a556a251095ab3be8e05362429891c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 zcmbVK%Wl&^6g`uam>8pkCJnCwr3A z0DB}BJj4RAW{t#}Ki~&I+;LMi3%UrFJonr)_ciz4Z+||20dNboG%}bsk;SD{H(uu;TJC6r?Urp1WA1>eFpG^x}6hl$~w9 z%k4->*S;GB{DmV!wX{dN+#A}fenfTDm&wm;`%%yrYf{%adq{T{bUb?4J+JTjq4b99 zLT&j217!;pR4tsqw1ph12CiASjs*)g^dKglL$St?`$zQ*wTWXf6cmj%?m(Bjk=P$N zL$ajjm5mdPb%ep#)rPI73^S$GQ6I+)s9{My80g!vcD8!kv~2bA6U@=hW@&+0HmiH0 z5&b#jNzM>@jU*Bzo0aN&u*ydyDtRP7;m8N19uqVUVEOyS$vP9h@YK!d`lu!Wq)2khn}*U7RH?fmxi3<#~z#V&`xX NrwN(#fDB3c{sQ2*{HOo` diff --git a/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class b/target/test-classes/ai/tecton/client/response/GetFeaturesResponseTest.class deleted file mode 100644 index 734966d83506320d8679f6bfa5e32d61929efbcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6989 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 AxBvhE diff --git a/target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class b/target/test-classes/ai/tecton/client/transport/TectonHttpClientTest.class deleted file mode 100644 index b4a0d6cc7f216d227e1cbe5590b5cb065c557c14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9306 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 diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json deleted file mode 100644 index ce8bdd9a..00000000 --- a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse1.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "result": { - "features": [ - true, - 0, - 0.00235626767200754, - 0.00186219739292365, - "693", - 65.3086220472441, - 123.76659574468083, - 63.38480284421458, - 66353.56000000001, - 5817.029999999999, - 196112.57999999993, - "1011", - "29814", - "91286" - ] - }, - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-07-06T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-07-06T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-07-06T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-07-07T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-07-07T18:10:00Z", - "dataType": { - "type": "float64" - }, - "status": "CACHED_PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-07-06T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-07-06T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2023-06-13T03:20:46.563Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - } - ], - "sloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.014861452, - "dynamodbResponseSizeBytes": 32404, - "serverTimeSeconds": 0.016342122 - } - } -} diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json deleted file mode 100644 index 5131ab1e..00000000 --- a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse2.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "result": { - "features": [ - true, - null, - 0, - 0, - "667", - 63.55378640776698, - 31.318333333333335, - 60.582006557377056, - 32730.199999999993, - 563.73, - 92387.56000000001, - null, - "14778", - "45427" - ] - }, - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-16T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-16T17:50:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - } - ], - "sloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.070483594, - "dynamodbResponseSizeBytes": 32359, - "serverTimeSeconds": 0.08214166 - } - } -} diff --git a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json b/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json deleted file mode 100644 index cd6db6aa..00000000 --- a/target/test-classes/mocktest/getfeatures/sampleFeatureResponse3.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "result": { - "features": [ - true, - 0, - 0, - 0, - "693", - 55.244963503649615, - 32.32372093023256, - 56.39924033149169, - 52979.919999999984, - 1389.92, - 163332.19999999992, - "920", - "29946", - "89780" - ] - }, - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-16T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-16T18:00:00Z", - "dataType": { - "type": "float64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": "PRESENT" - } - ], - "sloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.019176106, - "dynamodbResponseSizeBytes": 34378, - "serverTimeSeconds": 0.020629782 - } - } -} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch1.json b/target/test-classes/mocktest/getfeaturesbatch/batch1.json deleted file mode 100644 index 017aef35..00000000 --- a/target/test-classes/mocktest/getfeaturesbatch/batch1.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "result": [ - { - "features": [ - false, - 0, - 0.0010621348911311736, - 0.001418942887548776, - "671", - 74.25209302325585, - 78.37321428571428, - 67.77857283950623, - 47892.60000000003, - 2194.45, - 137251.6100000001, - "650", - "20443", - "61207" - ] - }, - { - "features": [ - true, - 0.017241379310344827, - 0.01357733175914994, - 0.015481089555163629, - "667", - 57.09122699386504, - 31.785000000000004, - 60.60629139072843, - 27917.610000000004, - 635.7, - 91515.49999999993, - "490", - "15268", - "45917" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "693", - 60.329274425287316, - 50.96183333333333, - 59.53020802741064, - 83978.34999999995, - 3057.71, - 243240.42999999988, - "1296", - "40244", - "121683" - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-16T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-16T22:10:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - } - ], - "sloInfo": [ - { - "sloEligible": true, - "sloServerTimeSeconds": 0.033027251, - "dynamodbResponseSizeBytes": 32052, - "serverTimeSeconds": 0.03392528 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.0211333, - "dynamodbResponseSizeBytes": 31944, - "serverTimeSeconds": 0.022184401 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.015265108, - "dynamodbResponseSizeBytes": 33121, - "serverTimeSeconds": 0.016896083 - } - ], - "batchSloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.033027251, - "serverTimeSeconds": 0.034359268 - } - } -} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch2.json b/target/test-classes/mocktest/getfeaturesbatch/batch2.json deleted file mode 100644 index 5565d94c..00000000 --- a/target/test-classes/mocktest/getfeaturesbatch/batch2.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "result": [ - { - "features": [ - false, - 0, - 0.0045045045045045045, - 0.0037703513281919453, - "693", - 58.44993951612902, - 40.66025641025641, - 57.06300919842307, - 57982.33999999999, - 1585.75, - 173699.7999999998, - "1004", - "30131", - "91419" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "693", - 69.66070379746834, - 88.41725, - 70.29879541734859, - 137579.88999999998, - 7073.38, - 429525.6399999999, - "1951", - "60129", - "182182" - ] - }, - { - "features": [ - false, - null, - null, - null, - "693", - 74.45219923371646, - 130.8551724137931, - 74.93892802450223, - 97160.11999999998, - 7589.6, - 293610.71999999974, - "1263", - "38690", - "116287" - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-16T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-16T22:20:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT", "PRESENT", "PRESENT"] - } - ], - "sloInfo": [ - { - "sloEligible": true, - "sloServerTimeSeconds": 0.057939359, - "dynamodbResponseSizeBytes": 33842, - "serverTimeSeconds": 0.058823398 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.042735987, - "dynamodbResponseSizeBytes": 32944, - "serverTimeSeconds": 0.044680642 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.041904906, - "dynamodbResponseSizeBytes": 28264, - "serverTimeSeconds": 0.044238231 - } - ], - "batchSloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.057939359, - "serverTimeSeconds": 0.05922025 - } - } -} diff --git a/target/test-classes/mocktest/getfeaturesbatch/batch3.json b/target/test-classes/mocktest/getfeaturesbatch/batch3.json deleted file mode 100644 index 09f4c7de..00000000 --- a/target/test-classes/mocktest/getfeaturesbatch/batch3.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "result": [ - { - "features": [ - false, - 0, - 0.008849557522123894, - 0.00716974368166338, - "676", - 84.34679758308162, - 59.505714285714284, - 83.73443237907208, - 27918.79000000002, - 416.53999999999996, - 84822.98000000001, - "346", - "10196", - "30552" - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "status": ["PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-16T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-16T22:30:00Z", - "dataType": { - "type": "float64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT"] - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-15T00:00:00Z", - "dataType": { - "type": "int64" - }, - "status": ["PRESENT"] - } - ], - "sloInfo": [ - { - "sloEligible": true, - "sloServerTimeSeconds": 0.023151386, - "dynamodbResponseSizeBytes": 31607, - "serverTimeSeconds": 0.024568279 - } - ], - "batchSloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.023151386, - "serverTimeSeconds": 0.024957837 - } - } -} diff --git a/target/test-classes/mocktest/getfeaturesbatch/input.csv b/target/test-classes/mocktest/getfeaturesbatch/input.csv deleted file mode 100644 index 05accf1d..00000000 --- a/target/test-classes/mocktest/getfeaturesbatch/input.csv +++ /dev/null @@ -1,7 +0,0 @@ -user_656020174537,61.06,fraud_Cummerata-Jones -user_394495759023,,106.43,fraud_Marks Inc -user_656020174537,24.95,fraud_Grimes LLC -user_499975010057,2.12,fraud_Thiel Ltd -user_656020174537,68.31,fraud_Bins-Rice -user_912293302206,167.88,fraud_Lockman, West and Runte -user_568801468984,55.55,fraud_Kihn Inc diff --git a/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json b/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json deleted file mode 100644 index e2476359..00000000 --- a/target/test-classes/mocktest/metadata/sampleMetadataResponse1.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "featureServiceType": "DEFAULT", - "inputJoinKeys": [ - { - "name": "user_id", - "dataType": { - "type": "string" - }, - "type": "string" - }, - { - "name": "merchant", - "dataType": { - "type": "string" - }, - "type": "string" - } - ], - "inputRequestContextKeys": [ - { - "name": "amt", - "dataType": { - "type": "float64" - }, - "type": "float64" - } - ], - "featureValues": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - }, - "type": "boolean" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "dataType": { - "type": "int64" - }, - "type": "int64" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "dataType": { - "type": "int64" - }, - "type": "int64" - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "dataType": { - "type": "int64" - }, - "type": "int64" - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "dataType": { - "type": "int64" - }, - "type": "int64" - } - ] -} diff --git a/target/test-classes/request/input.csv b/target/test-classes/request/input.csv deleted file mode 100644 index 953503a0..00000000 --- a/target/test-classes/request/input.csv +++ /dev/null @@ -1,5 +0,0 @@ -user_656020174537,61.06,fraud_Cummerata-Jones -user_394495759023,,106.43,fraud_Marks Inc -user_656020174537,24.95,fraud_Grimes LLC -user_499975010057,2.12,fraud_Thiel Ltd -user_656020174537,68.31,fraud_Bins-Rice diff --git a/target/test-classes/response/batch/batch1.json b/target/test-classes/response/batch/batch1.json deleted file mode 100644 index d17cf420..00000000 --- a/target/test-classes/response/batch/batch1.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "result": [ - { - "features": [ - false, - 0.01818181818181818, - 0.0015965939329430547, - 0.0016059957173447537, - "672", - 63.27903409090909, - 96.72319999999999, - 62.30119104335397, - 44548.44, - 2418.08, - 130770.19999999998, - "682", - "20522", - "61328" - ] - }, - { - "features": [ - true, - 0, - 0.01410105757931845, - 0.01611963488055933, - "668", - 54.19960377358488, - 48.155, - 58.52166878980895, - 28725.789999999986, - 866.79, - 91879.02000000005, - "512", - "15355", - "45987" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "693", - 68.6643213499633, - 42.13561403508772, - 63.56664792176038, - 93589.46999999997, - 2401.73, - 259987.58999999994, - "1300", - "40626", - "121947" - ] - }, - { - "features": [ - false, - 0, - 0.0030410542321338066, - 0.0036076275554028517, - "693", - 51.22098890942699, - 33.63320754716981, - 56.38687715991207, - 55421.11000000001, - 1782.56, - 179479.4300000001, - "1030", - "30385", - "91675" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "693", - 71.65225285171101, - 43.10842105263158, - 68.77729103404191, - 150756.33999999997, - 3276.24, - 430339.5100000002, - "2028", - "60634", - "182805" - ] - }, - { - "features": [ - false, - 0, - 0, - 0, - "693", - 67.6827083333333, - 53.572978723404255, - 68.38951367781152, - 87716.78999999995, - 2517.93, - 270001.7999999999, - "1245", - "38824", - "116290" - ] - }, - { - "features": [ - false, - 0, - 0.007851934941110488, - 0.0066630650099045565, - "676", - 82.75716713881016, - 60.33, - 89.99427063339739, - 29213.279999999988, - 844.62, - 93774.03000000009, - "339", - "10279", - "30528" - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "dataType": { - "type": "int64" - } - } - ] - } -} diff --git a/target/test-classes/response/batch/batch2.json b/target/test-classes/response/batch/batch2.json deleted file mode 100644 index 3b81ac31..00000000 --- a/target/test-classes/response/batch/batch2.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "result": [ - { - "features": [ - true, - 0, - 0.0019035532994923859, - 0.002349925229651784, - "693", - 63.06654874213837, - 54.28183333333333, - 67.0454102885822, - 80220.65000000001, - 3256.91, - 267175.9600000001, - "1265", - "38530", - "116242" - ] - }, - { - "features": [ - false, - 0, - 0.0005305039787798408, - 0.0012524601896582574, - "671", - 59.77188512518406, - 64.78370370370372, - 60.253060532687684, - 40585.10999999998, - 1749.1600000000003, - 124422.57000000007, - "670", - "20484", - "61290" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "692", - 72.51429347826088, - 51.6095061728395, - 73.02609901628766, - 146768.93000000002, - 4180.37, - 452834.8399999998, - "2033", - "60320", - "182766" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "669", - 74.66231800766285, - 101.82631578947367, - 67.45591731266147, - 38973.73, - 1934.6999999999998, - 104421.75999999995, - "513", - "15057", - "45731" - ] - }, - { - "features": [ - true, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-05T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-05T01:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-04T00:00:00Z", - "dataType": { - "type": "int64" - } - } - ], - "sloInfo": [ - { - "sloEligible": true, - "sloServerTimeSeconds": 0.039829918, - "dynamodbResponseSizeBytes": 32674, - "serverTimeSeconds": 0.040837926 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.048182135, - "dynamodbResponseSizeBytes": 32223, - "serverTimeSeconds": 0.049590672 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.048292505, - "dynamodbResponseSizeBytes": 32944, - "serverTimeSeconds": 0.049936982 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.0378072, - "dynamodbResponseSizeBytes": 31830, - "serverTimeSeconds": 0.040003171 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.037692127, - "dynamodbResponseSizeBytes": 0, - "serverTimeSeconds": 0.03990191 - } - ], - "batchSloInfo": { - "sloEligible": true, - "sloServerTimeSeconds": 0.048292505, - "serverTimeSeconds": 0.099455727 - } - } -} diff --git a/target/test-classes/response/batch/batch3.json b/target/test-classes/response/batch/batch3.json deleted file mode 100644 index 37282f8d..00000000 --- a/target/test-classes/response/batch/batch3.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "result": [ - { - "features": [ - false, - 0.01818181818181818, - 0.0015965939329430547, - 0.0016059957173447537, - "672", - 63.27903409090909, - 96.72319999999999, - 62.30119104335397, - 44548.44, - 2418.08, - 130770.19999999998, - "682", - "20522", - "61328" - ] - }, - { - "features": [ - true, - 0, - 0.01410105757931845, - 0.01611963488055933, - "668", - 54.19960377358488, - 48.155, - 58.52166878980895, - 28725.789999999986, - 866.79, - 91879.02000000005, - "512", - "15355", - "45987" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "697", - 68.6643213499633, - 42.13561403508772, - 63.56664792176038, - 93589.46999999997, - 2401.73, - 259987.58999999994, - "1300", - "40626", - "121947" - ] - }, - { - "features": [ - false, - 0, - 0.0030410542321338066, - 0.0036076275554028517, - "690", - 51.22098890942699, - 33.63320754716981, - 56.38687715991207, - 55421.11000000001, - 1782.56, - 179479.4300000001, - "1030", - "30385", - "91675" - ] - }, - { - "features": [ - true, - 0, - 0, - 0, - "688", - 71.65225285171101, - 43.10842105263158, - 68.77729103404191, - 150756.33999999997, - 3276.24, - 430339.5100000002, - "2028", - "60634", - "182805" - ] - }, - { - "features": [ - false, - 0, - 0, - 0, - "685", - 67.6827083333333, - 53.572978723404255, - 68.38951367781152, - 87716.78999999995, - 2517.93, - 270001.7999999999, - "1245", - "38824", - "116290" - ] - }, - { - "features": [ - false, - 0, - 0.007851934941110488, - 0.0066630650099045565, - "676", - 82.75716713881016, - 60.33, - 89.99427063339739, - 29213.279999999988, - 844.62, - 93774.03000000009, - "339", - "10279", - "30528" - ] - } - ], - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "effectiveTime": "2022-08-11T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "effectiveTime": "2022-08-11T00:10:00Z", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "effectiveTime": "2022-08-10T00:00:00Z", - "dataType": { - "type": "int64" - } - } - ], - "sloInfo": [ - { - "sloEligible": true, - "sloServerTimeSeconds": 0.055513756, - "dynamodbResponseSizeBytes": 32224, - "serverTimeSeconds": 0.056368353 - }, - { - "sloEligible": false, - "sloServerTimeSeconds": 0.040463867, - "dynamodbResponseSizeBytes": 32286, - "serverTimeSeconds": 0.042321568, - "sloIneligibilityReasons": [ - "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" - ] - }, - { - "sloEligible": false, - "sloServerTimeSeconds": 0.050458802, - "dynamodbResponseSizeBytes": 33121, - "serverTimeSeconds": 0.051495564, - "sloIneligibilityReasons": [ - "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" - ] - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.045276051, - "dynamodbResponseSizeBytes": 33785, - "serverTimeSeconds": 0.046910974 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.045263464, - "dynamodbResponseSizeBytes": 32944, - "serverTimeSeconds": 0.047331692 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.053445315, - "dynamodbResponseSizeBytes": 32944, - "serverTimeSeconds": 0.054399951 - }, - { - "sloEligible": true, - "sloServerTimeSeconds": 0.048510255, - "dynamodbResponseSizeBytes": 31379, - "serverTimeSeconds": 0.049608717 - } - ], - "batchSloInfo": { - "sloEligible": false, - "sloServerTimeSeconds": 0.077513756, - "serverTimeSeconds": 0.057755123, - "sloIneligibilityReasons": [ - "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" - ] - } - } -} diff --git a/target/test-classes/response/sample_metadata_response.json b/target/test-classes/response/sample_metadata_response.json deleted file mode 100644 index 8d781ef6..00000000 --- a/target/test-classes/response/sample_metadata_response.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "featureServiceType": "DEFAULT", - "inputJoinKeys": [ - { - "name": "longitude", - "dataType": { - "type": "float64" - }, - "type": "float64" - }, - { - "name": "latitude", - "dataType": { - "type": "float64" - }, - "type": "float64" - } - ], - "featureValues": [ - { - "name": "average_rain.average_temperate_6hrs", - "dataType": { - "type": "array", - "elementType": { - "type": "float64" - } - } - }, - { - "name": "average_rain.precipitation_higher_than_average", - "dataType": { - "type": "boolean" - } - } - ] -} diff --git a/target/test-classes/response/single/sample_null_response.json b/target/test-classes/response/single/sample_null_response.json deleted file mode 100644 index 21427135..00000000 --- a/target/test-classes/response/single/sample_null_response.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "result": { - "features": [ - true, - null, - null, - null, - "669", - 63.37258064516126, - 88.90555555555554, - 61.13868593955321, - 31432.799999999985, - 1600.2999999999997, - 93053.07999999999, - null, - "14826", - "45506" - ] - }, - "metadata": { - "features": [ - { - "name": "transaction_amount_is_higher_than_average.transaction_amount_is_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_1d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_30d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "merchant_fraud_rate.is_fraud_mean_90d_1d", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_distinct_merchant_transaction_count_30d.distinct_merchant_transaction_count_30d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_1h_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_mean_3d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_1h_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_amount_metrics.amt_sum_3d_10m", - "dataType": { - "type": "float64" - } - }, - { - "name": "user_transaction_counts.transaction_count_1d_1d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_30d_1d", - "dataType": { - "type": "int64" - } - }, - { - "name": "user_transaction_counts.transaction_count_90d_1d", - "dataType": { - "type": "int64" - } - } - ] - } -} diff --git a/target/test-classes/response/single/sample_response.json b/target/test-classes/response/single/sample_response.json deleted file mode 100644 index 7dcfea7c..00000000 --- a/target/test-classes/response/single/sample_response.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "result": { - "features": [ - "0", - false, - null, - "nimbostratus", - 55.5 - ] - }, - "metadata": { - "features": [ - { - "name":"average_rain.rain_in_last_24_hrs", - "dataType": { - "type": "int64" - } - }, - { - "name":"average_rain.precipitation_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name":"average_rain.atmospheric_pressure", - "dataType": { - "type": "float64" - } - }, - { - "name":"average_rain.cloud_type", - "dataType": { - "type": "string" - } - }, - { - "name":"average_rain.average_temperate_24hrs", - "dataType": { - "type": "float64" - } - } - ] - } -} diff --git a/target/test-classes/response/single/sample_response_list.json b/target/test-classes/response/single/sample_response_list.json deleted file mode 100644 index b7490af2..00000000 --- a/target/test-classes/response/single/sample_response_list.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "result": { - "features": [ - ["0"], - [null], - [55.5, 57.88, 58.96, 57.66, null, 55.98] - ] - }, - "metadata": { - "features": [ - { - "name":"average_rain.rain_in_last_24_hrs", - "dataType": { - "type": "array", - "elementType": { - "type": "int64" - } - } - }, - { - "name":"average_rain.cloud_type", - "dataType": { - "type": "array", - "elementType": { - "type": "string" - } - } - }, - { - "name":"average_rain.average_temperate_6hrs", - "dataType": { - "type": "array", - "elementType": { - "type": "float64" - } - } - } - ] - } -} diff --git a/target/test-classes/response/single/sample_response_slo.json b/target/test-classes/response/single/sample_response_slo.json deleted file mode 100644 index 1d1c3f05..00000000 --- a/target/test-classes/response/single/sample_response_slo.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "result": { - "features": [ - "0", - false, - null, - "nimbostratus", - 55.5 - ] - }, - "metadata": { - "features": [ - { - "name":"average_rain.rain_in_last_24_hrs", - "dataType": { - "type": "int64" - } - }, - { - "name":"average_rain.precipitation_higher_than_average", - "dataType": { - "type": "boolean" - } - }, - { - "name":"average_rain.atmospheric_pressure", - "dataType": { - "type": "float64" - } - }, - { - "name":"average_rain.cloud_type", - "dataType": { - "type": "string" - } - }, - { - "name":"average_rain.average_temperate_24hrs", - "dataType": { - "type": "float64" - } - } - ], - "sloInfo": { - "storeResponseSizeBytes": 13100000, - "serverTimeSeconds": 0.034437937, - "sloEligible": false, - "sloIneligibilityReasons": [ - "DYNAMODB_RESPONSE_SIZE_LIMIT_EXCEEDED" - ] - } - } -} diff --git a/target/test-classes/response/single/sample_response_with_null_list.json b/target/test-classes/response/single/sample_response_with_null_list.json deleted file mode 100644 index d9611251..00000000 --- a/target/test-classes/response/single/sample_response_with_null_list.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "result": { - "features": [ - null, null, null, null - ] - }, - "metadata": { - "features": [ - { - "name":"average_rain.cloud_type", - "dataType": { - "type": "array", - "elementType": { - "type": "string" - } - } - }, - { - "name":"average_rain.cloud_number", - "dataType": { - "type": "array", - "elementType": { - "type": "int64" - } - } - }, - { - "name":"average_rain.precipitation", - "dataType": { - "type": "array", - "elementType": { - "type": "float32" - } - } - }, - { - "name":"average_rain.rainfall", - "dataType": { - "type": "array", - "elementType": { - "type": "float64" - } - } - } - ] - } -} From 2c91ae5e72c2cc339a7145955bbc720a5d9d680c Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 12/19] RequestOptions From 83cf3a74e6379a8ad173407c295d6238feab181c Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Wed, 23 Jul 2025 21:13:40 -0400 Subject: [PATCH 13/19] Update readme --- README.md | 10 +++++----- buildkite/buildkite.yaml | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 94f7eb58..a3d97781 100644 --- a/README.md +++ b/README.md @@ -118,19 +118,19 @@ The Tecton Java client is open source and we welcome any contributions from our ### Prerequisites * Java 8 or higher -* Gradle +* Maven * [Google Java Format](https://github.com/google/google-java-format) formatter (can also use as a plugin in your IDE) ### Build the Project -The `tecton-http-client-java` project can be built using Gradle as follows: +The `tecton-http-client-java` project can be built using Maven as follows: -`./gradlew clean build` +`./mvnw clean package` ## Basic end to end testing In the demo client [repository](https://github.com/tecton-ai/TectonClientDemo) update the `build.gradle` file with the -jar that you generate from this repo using `./gradlew clean build`. +jar that you generate from this repo using `./mvnw clean package`. 1. Change the dependencies target to this and point the files attribute to your java client jar. 2. Add the okhttp3 dependency from `tecton-http-client-java` to `build.gradle` in the demo client repository. This is @@ -159,7 +159,7 @@ Update `tecton.properties` with your cluster url and run the Demo file to query ## Before Opening a PR * Please run pre-commit on your staged files to ensure that the changes are correctly formatted. -* Please run `./gradlew clean build` to ensure that your changes pass the build +* Please run `./mvnw clean package` to ensure that your changes pass the build * Please add unit tests if possible to test the new code changes ## License diff --git a/buildkite/buildkite.yaml b/buildkite/buildkite.yaml index 850e5f20..bcccd1b1 100644 --- a/buildkite/buildkite.yaml +++ b/buildkite/buildkite.yaml @@ -1,8 +1,8 @@ -- command: ./gradlew clean build +- command: ./mvnw clean package label: 'Build Java Client' key: "build" - wait -- command: ./gradlew publish -i +- command: ./mvnw deploy -i label: ':rocket: Publish Snapshot Jar' key: "deploy" depends_on: "build" From 62e024ebd327474253b26acfedfe37fe774a41c1 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 24 Jul 2025 16:01:32 -0400 Subject: [PATCH 14/19] add comments and remove exception --- .../client/request/GetFeaturesRequest.java | 5 +++- .../tecton/client/request/RequestOptions.java | 28 ++----------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java index 67d81eef..469dc4d2 100644 --- a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java +++ b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java @@ -265,7 +265,8 @@ public Builder requestOptions(RequestOptions requestOptions) { */ public GetFeaturesRequest build() { if (this.requestOptions != null) { - // If requestOptions is set, use the constructor that accepts it + // Handle the case where requestOptions is set and metadataOptions is or is not set (using a + // default if not set). Set options = this.metadataOptions.isEmpty() ? RequestConstants.DEFAULT_METADATA_OPTIONS @@ -273,8 +274,10 @@ public GetFeaturesRequest build() { return new GetFeaturesRequest( workspaceName, featureServiceName, getFeaturesRequestData, options, requestOptions); } else if (this.metadataOptions.isEmpty()) { + // Handle the case where neither requestOptions nor metadataOptions are set. return new GetFeaturesRequest(workspaceName, featureServiceName, getFeaturesRequestData); } else { + // Handle the case where metadataOptions is set and requestOptions is not set. return new GetFeaturesRequest( workspaceName, featureServiceName, getFeaturesRequestData, metadataOptions); } diff --git a/src/main/java/ai/tecton/client/request/RequestOptions.java b/src/main/java/ai/tecton/client/request/RequestOptions.java index de61ba7e..b4417515 100644 --- a/src/main/java/ai/tecton/client/request/RequestOptions.java +++ b/src/main/java/ai/tecton/client/request/RequestOptions.java @@ -27,10 +27,8 @@ public RequestOptions() { * @throws IllegalArgumentException if value is not Integer or Boolean */ public RequestOptions setOption(String key, Object value) { - if (value != null && !(value instanceof Integer) && !(value instanceof Boolean)) { - throw new IllegalArgumentException( - "Option value must be either Integer or Boolean, got: " - + value.getClass().getSimpleName()); + if (value != null) { + throw new IllegalArgumentException("Option value must not be null: " + key); } this.options.put(key, value); return this; @@ -46,28 +44,6 @@ public Object getOption(String key) { return this.options.get(key); } - /** - * Gets a specific option value by key as an Integer. - * - * @param key the option key - * @return the option value as Integer, or null if not set or not an Integer - */ - public Integer getIntegerOption(String key) { - Object value = this.options.get(key); - return value instanceof Integer ? (Integer) value : null; - } - - /** - * Gets a specific option value by key as a Boolean. - * - * @param key the option key - * @return the option value as Boolean, or null if not set or not a Boolean - */ - public Boolean getBooleanOption(String key) { - Object value = this.options.get(key); - return value instanceof Boolean ? (Boolean) value : null; - } - /** * Gets all options as an unmodifiable map. * From 7b9d5076d3251aa2f48093187ce3eeeff329a087 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 24 Jul 2025 16:04:29 -0400 Subject: [PATCH 15/19] fix tests --- .../tecton/client/request/RequestOptions.java | 2 +- .../client/request/RequestOptionsTest.java | 57 +------------------ 2 files changed, 4 insertions(+), 55 deletions(-) diff --git a/src/main/java/ai/tecton/client/request/RequestOptions.java b/src/main/java/ai/tecton/client/request/RequestOptions.java index b4417515..735ff631 100644 --- a/src/main/java/ai/tecton/client/request/RequestOptions.java +++ b/src/main/java/ai/tecton/client/request/RequestOptions.java @@ -27,7 +27,7 @@ public RequestOptions() { * @throws IllegalArgumentException if value is not Integer or Boolean */ public RequestOptions setOption(String key, Object value) { - if (value != null) { + if (value == null) { throw new IllegalArgumentException("Option value must not be null: " + key); } this.options.put(key, value); diff --git a/src/test/java/ai/tecton/client/request/RequestOptionsTest.java b/src/test/java/ai/tecton/client/request/RequestOptionsTest.java index 93add292..03cc3a94 100644 --- a/src/test/java/ai/tecton/client/request/RequestOptionsTest.java +++ b/src/test/java/ai/tecton/client/request/RequestOptionsTest.java @@ -12,57 +12,6 @@ public void testRequestOptionsCreation() { assertTrue(options.isEmpty()); } - @Test - public void testIntegerOptionSetting() { - RequestOptions options = new RequestOptions(); - options.setOption("latency_budget_ms", 1000); - - assertEquals(Integer.valueOf(1000), options.getIntegerOption("latency_budget_ms")); - assertEquals(Integer.valueOf(1000), options.getOption("latency_budget_ms")); - assertFalse(options.isEmpty()); - assertEquals(1, options.getOptions().size()); - } - - @Test - public void testBooleanOptionSetting() { - RequestOptions options = new RequestOptions(); - options.setOption("coerceNullCountsToZero", true); - - assertEquals(Boolean.TRUE, options.getBooleanOption("coerceNullCountsToZero")); - assertEquals(Boolean.TRUE, options.getOption("coerceNullCountsToZero")); - assertFalse(options.isEmpty()); - } - - @Test - public void testMultipleBooleanOptions() { - RequestOptions options = new RequestOptions(); - options.setOption("readFromCache", true); - options.setOption("writeFromCache", false); - options.setOption("ignoreExtraRequestContextFields", true); - - assertEquals(Boolean.TRUE, options.getBooleanOption("readFromCache")); - assertEquals(Boolean.FALSE, options.getBooleanOption("writeFromCache")); - assertEquals(Boolean.TRUE, options.getBooleanOption("ignoreExtraRequestContextFields")); - assertEquals(3, options.getOptions().size()); - } - - @Test - public void testMixedIntegerAndBooleanOptions() { - RequestOptions options = new RequestOptions(); - options.setOption("latency_budget_ms", 5000); - options.setOption("coerceNullCountsToZero", false); - - assertEquals(Integer.valueOf(5000), options.getIntegerOption("latency_budget_ms")); - assertEquals(Boolean.FALSE, options.getBooleanOption("coerceNullCountsToZero")); - assertEquals(2, options.getOptions().size()); - } - - @Test(expected = IllegalArgumentException.class) - public void testInvalidValueTypeThrowsException() { - RequestOptions options = new RequestOptions(); - options.setOption("invalid_option", "string_value"); - } - @Test public void testBuilder() { RequestOptions options = @@ -72,9 +21,9 @@ public void testBuilder() { .option("writeFromCache", false) .build(); - assertEquals(Integer.valueOf(2000), options.getIntegerOption("latency_budget_ms")); - assertEquals(Boolean.TRUE, options.getBooleanOption("readFromCache")); - assertEquals(Boolean.FALSE, options.getBooleanOption("writeFromCache")); + assertEquals(2000, options.getOption("latency_budget_ms")); + assertEquals(true, options.getOption("readFromCache")); + assertEquals(false, options.getOption("writeFromCache")); assertEquals(3, options.getOptions().size()); } From 6e5c299d441153f803b36128230c7701b923ddc2 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 16/19] RequestOptions From 3674824648f793b51a38ae5875f03bba5b75d77b Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 17 Jul 2025 22:53:42 -0400 Subject: [PATCH 17/19] RequestOptions From 40ff8150387c2383e3cdb2e194ec0f917acbf65a Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 24 Jul 2025 16:45:17 -0400 Subject: [PATCH 18/19] Rename workflow so merge works --- .github/workflows/java-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/java-build.yml b/.github/workflows/java-build.yml index 3fa885f9..0f292df4 100644 --- a/.github/workflows/java-build.yml +++ b/.github/workflows/java-build.yml @@ -8,7 +8,7 @@ on: - main - release jobs: - java-maven-build: + java-gradle-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 32ce4b6b9302b18d5d2cc387d5a030307841bd07 Mon Sep 17 00:00:00 2001 From: Zachary Siegel Date: Thu, 24 Jul 2025 16:47:57 -0400 Subject: [PATCH 19/19] Fix build --- src/main/java/ai/tecton/client/request/GetFeaturesRequest.java | 1 + src/main/java/ai/tecton/client/request/RequestOptions.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java index 89246aa7..4a3fa558 100644 --- a/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java +++ b/src/main/java/ai/tecton/client/request/GetFeaturesRequest.java @@ -279,6 +279,7 @@ public GetFeaturesRequest build() { } else { // Handle the case where metadataOptions is set and requestOptions is not set. return new GetFeaturesRequest(workspaceName, featureServiceName, getFeaturesRequestData); + } } } } diff --git a/src/main/java/ai/tecton/client/request/RequestOptions.java b/src/main/java/ai/tecton/client/request/RequestOptions.java index 88b3ae67..735ff631 100644 --- a/src/main/java/ai/tecton/client/request/RequestOptions.java +++ b/src/main/java/ai/tecton/client/request/RequestOptions.java @@ -44,6 +44,7 @@ public Object getOption(String key) { return this.options.get(key); } + /** * Gets all options as an unmodifiable map. * * @return Map containing all request options