From d3a9def082a836bbd3781b7ccfa0f3fde537968a Mon Sep 17 00:00:00 2001 From: Alec Kazakova Date: Fri, 5 Apr 2024 17:11:11 -0400 Subject: [PATCH 001/184] Prepare next development version. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 91503958f55..e2bd8936e3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx16g -XX:MaxMetaspaceSize=4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 GROUP=app.cash.sqldelight -VERSION_NAME=2.0.2 +VERSION_NAME=2.1.0-SNAPSHOT POM_URL=https://github.com/cashapp/sqldelight/ POM_SCM_URL=https://github.com/cashapp/sqldelight/ From 4f426e3ba4120034d6b519b99c6e4f656bad1024 Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Sun, 7 Apr 2024 13:59:53 +0200 Subject: [PATCH 002/184] Fix local Gradle execution without a BuildScan (#5132) --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 8a98426ef7e..7373f516381 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -26,7 +26,7 @@ develocity { termsOfUseUrl = 'https://gradle.com/terms-of-service' termsOfUseAgree = 'yes' publishing { - onlyIf { System.getenv("CI") } + onlyIf { System.getenv("CI") != null } } tag "CI" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 7077281e8a2..079b0073b75 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -26,7 +26,7 @@ develocity { termsOfUseUrl = 'https://gradle.com/terms-of-service' termsOfUseAgree = 'yes' publishing { - onlyIf { System.getenv("CI") } + onlyIf { System.getenv("CI") != null } } tag "CI" } diff --git a/settings.gradle b/settings.gradle index 8824087b2a2..b13aeec238d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,7 +18,7 @@ develocity { termsOfUseUrl = 'https://gradle.com/terms-of-service' termsOfUseAgree = 'yes' publishing { - onlyIf { System.getenv("CI") } + onlyIf { System.getenv("CI") != null } } tag "CI" } From 0a62baa2f3ad6dc7f4b8fcace00e82fcd04be0e7 Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Sun, 7 Apr 2024 14:00:04 +0200 Subject: [PATCH 003/184] CI: Check for changed files (#5133) * CI: Check for changed files * Fix sqldelight-compiler:integration-tests --- .github/workflows/PR.yml | 3 +++ .../src/test/kotlin/com/example/GroupQueries.kt | 2 +- .../src/test/kotlin/com/example/PlayerQueries.kt | 10 +++++----- .../src/test/kotlin/com/example/TeamQueries.kt | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index b65d9bea593..161f076e057 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -97,6 +97,9 @@ jobs: if: matrix.os == 'macOS-14' && matrix.job == 'test' run: ./gradlew iosX64Test --stacktrace --parallel + - name: Check for changed files + run: test -z "$(git status --porcelain)" + verify_intellij: runs-on: ubuntu-latest diff --git a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/GroupQueries.kt b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/GroupQueries.kt index 0e0ba005079..77f985fb6dd 100644 --- a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/GroupQueries.kt +++ b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/GroupQueries.kt @@ -17,7 +17,7 @@ public class GroupQueries( public fun selectFromTable2(mapper: (something: String?, nice: String?) -> T): Query = Query(-620_576_550, arrayOf("myftstable2"), driver, "Group.sq", "selectFromTable2", """ - |SELECT * + |SELECT myftstable2.something, myftstable2.nice |FROM myftstable2 """.trimMargin()) { cursor -> mapper( diff --git a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/PlayerQueries.kt b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/PlayerQueries.kt index 2d214202543..40be2dca8ea 100644 --- a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/PlayerQueries.kt +++ b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/PlayerQueries.kt @@ -60,7 +60,7 @@ public class PlayerQueries( shoots: Shoots, ) -> T): Query = Query(-1_634_440_035, arrayOf("player"), driver, "Player.sq", "allPlayers", """ - |SELECT * + |SELECT player.name, player.number, player.team, player.shoots |FROM player """.trimMargin()) { cursor -> mapper( @@ -248,7 +248,7 @@ public class PlayerQueries( bindString(3, playerAdapter.shootsAdapter.encode(shoots)) } driver.executeQuery(-452_007_404, """ - |SELECT * + |SELECT player.name, player.number, player.team, player.shoots | FROM player | WHERE player.rowid = last_insert_rowid() """.trimMargin(), mapper, 0) @@ -271,7 +271,7 @@ public class PlayerQueries( override fun execute(mapper: (SqlCursor) -> QueryResult): QueryResult = driver.executeQuery(null, """ - |SELECT * + |SELECT player.name, player.number, player.team, player.shoots |FROM player |WHERE team ${ if (team == null) "IS" else "=" } ? """.trimMargin(), mapper, 1) { @@ -296,7 +296,7 @@ public class PlayerQueries( override fun execute(mapper: (SqlCursor) -> QueryResult): QueryResult { val numberIndexes = createArguments(count = number.size) return driver.executeQuery(null, """ - |SELECT * + |SELECT player.name, player.number, player.team, player.shoots |FROM player |WHERE number IN $numberIndexes """.trimMargin(), mapper, number.size) { @@ -324,7 +324,7 @@ public class PlayerQueries( override fun execute(mapper: (SqlCursor) -> QueryResult): QueryResult = driver.executeQuery(-1_258_650_806, """ - |SELECT * + |SELECT player.name, player.number, player.team, player.shoots |FROM player |WHERE (number, name) > (?, ?) """.trimMargin(), mapper, 2) { diff --git a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/TeamQueries.kt b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/TeamQueries.kt index 256d570c997..7da740190ee 100644 --- a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/TeamQueries.kt +++ b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/TeamQueries.kt @@ -109,7 +109,7 @@ public class TeamQueries( override fun execute(mapper: (SqlCursor) -> QueryResult): QueryResult = driver.executeQuery(null, """ - |SELECT * + |SELECT team.name, team.captain, team.inner_type, team.coach |FROM team |WHERE inner_type ${ if (inner_type == null) "IS" else "=" } ? """.trimMargin(), mapper, 1) { From 54442545295fdb9f87c8691d61f9c51345dc63eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:52:15 +0100 Subject: [PATCH 004/184] Fixes 5059 add brin gist (#5124) * Update CREATE INDEX grammar Add operator classes e.g jsonb_ops Add index method e.g GIST Add storage parameters e.g fastupdate * Add CreateIndexMixin For annotation Currently validates the storage parameters * Update CREATE INDEX fixture tests Update Sample.s * Remove braces --- .../postgresql/grammar/PostgreSql.bnf | 11 +- .../grammar/mixins/CreateIndexMixin.kt | 146 ++++++++++++++++++ .../fixtures_postgresql/create-index/Sample.s | 46 +++++- 3 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 653d050d6dd..a2fca6faceb 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -169,17 +169,20 @@ table_constraint ::= [ CONSTRAINT {identifier} ] ( override = true } -gin_operator_class_stmt ::= 'array_ops' | 'jsonb_ops' | 'jsonb_path_ops' | 'tsvector_ops' +operator_class_stmt ::= {identifier} [ LP {identifier} EQ ( {identifier} | {numeric_literal} ) { RP ] +storage_parameter ::= TRUE | FALSE | 'ON' | 'OFF' | {identifier} | {numeric_literal} +storage_parameters ::= 'autosummarize' | 'buffering' | 'deduplicate_items' | 'fastupdate' | 'fillfactor' | 'gin_pending_list_limit' | 'pages_per_range' +with_storage_parameter ::= WITH LP storage_parameters EQ ( storage_parameter ) ( COMMA storage_parameters EQ ( storage_parameter ) ) * RP +index_method ::= 'BRIN' | 'BTREE' | 'GIN' | 'GIST' | 'HASH' create_index_stmt ::= CREATE [ UNIQUE ] INDEX [ 'CONCURRENTLY' ] [ IF NOT EXISTS ] [ {database_name} DOT ] {index_name} ON {table_name} - ( USING 'GIN' LP {indexed_column} [ gin_operator_class_stmt ] ( COMMA {indexed_column} [ gin_operator_class_stmt ] ) * RP | LP {indexed_column} ( COMMA {indexed_column} ) * RP [ WHERE <> ] ) { + ( USING index_method LP {indexed_column} [ operator_class_stmt ] ( COMMA {indexed_column} [ operator_class_stmt ] ) * RP [ with_storage_parameter ] | LP {indexed_column} [ operator_class_stmt ] ( COMMA {indexed_column} [ operator_class_stmt ] ) * RP [ WHERE <> ] ) { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.CreateIndexMixin" extends = "com.alecstrong.sql.psi.core.psi.impl.SqlCreateIndexStmtImpl" - implements = "com.alecstrong.sql.psi.core.psi.SqlGeneratedClause" override = true pin = 6 } - identity_clause ::= 'IDENTITY' [ LP [ 'SEQUENCE' 'NAME' sequence_name ] [ sequence_parameters* ] RP ] generated_clause ::= GENERATED ( (ALWAYS AS LP <> RP 'STORED') | ( (ALWAYS | BY DEFAULT) AS identity_clause ) ) { diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt new file mode 100644 index 00000000000..e7f42e3bc1f --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt @@ -0,0 +1,146 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlCreateIndexStmt +import com.alecstrong.sql.psi.core.SqlAnnotationHolder +import com.alecstrong.sql.psi.core.psi.impl.SqlCreateIndexStmtImpl +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +/** + * Storage parameter list 'autosummarize' | 'buffering' | 'deduplicate_items' | 'fastupdate' | 'fillfactor' | 'gin_pending_list_limit' | 'pages_per_range' + * btree, hash, gist = [fillfactor (10-100) ] + * btree = [deduplicate_items (0|1|on|off|true|false)] + * gist = [buffering (auto|on|off)] + * gin = [fastupdate (on|off|true|false), gin_pending_list_limit (64-2147483647) ] + * brin = [autosummarize (on|off|true|false), pages_per_range (1-2147483647) ] + */ +internal abstract class CreateIndexMixin(node: ASTNode) : + SqlCreateIndexStmtImpl(node), PostgreSqlCreateIndexStmt { + + override fun annotate(annotationHolder: SqlAnnotationHolder) { + withStorageParameter?.let { wsp -> + wsp.storageParametersList.zip(wsp.storageParameterList).forEach { + sp -> + indexMethod?.let { im -> + when (im.text.lowercase()) { + "brin" -> when (sp.first.text) { + "autosummarize" -> autoSummarize(sp.second, annotationHolder) + "pages_per_range" -> pagesPerRange(sp.second, annotationHolder) + else -> unrecongizedParameter(sp.first, annotationHolder) + } + "btree" -> when (sp.first.text) { + "fillfactor" -> fillFactor(sp.second, annotationHolder) + "deduplicate_items" -> deduplicateItems(sp.second, annotationHolder) + else -> unrecongizedParameter(sp.first, annotationHolder) + } + "gin" -> when (sp.first.text) { + "fastupdate" -> fastUpdate(sp.second, annotationHolder) + "gin_pending_list_limit" -> ginPendingListLimit(sp.second, annotationHolder) + else -> unrecongizedParameter(sp.first, annotationHolder) + } + "gist" -> when (sp.first.text) { + "fillfactor" -> fillFactor(sp.second, annotationHolder) + "buffering" -> buffering(sp.second, annotationHolder) + else -> unrecongizedParameter(sp.first, annotationHolder) + } + "hash" -> when (sp.first.text) { + "fillfactor" -> fillFactor(sp.second, annotationHolder) + else -> unrecongizedParameter(sp.first, annotationHolder) + } + } + } + } + } + super.annotate(annotationHolder) + } + + companion object { + + private val pgBooleans = listOf("1", "0", "on", "off", "true", "false") + + fun autoSummarize(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.let { value -> + if (value.lowercase() !in pgBooleans) { + annotationHolder.createErrorAnnotation( + input, + """invalid value for boolean option "autosummarize" $value""", + ) + } + } + } + + fun buffering(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.let { value -> + if (value.lowercase() !in listOf("auto", "on", "off")) { + annotationHolder.createErrorAnnotation( + input, + """invalid value for enum option "buffering" $value""", + ) + } + } + } + + fun deduplicateItems(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.let { value -> + if (value.lowercase() !in pgBooleans) { + annotationHolder.createErrorAnnotation( + input, + """invalid value for boolean option "deduplicate_items" $value""", + ) + } + } + } + + fun fastUpdate(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.let { value -> + if (value.lowercase() !in pgBooleans) { + annotationHolder.createErrorAnnotation( + input, + """invalid value for boolean option "fastupdate" $value""", + ) + } + } + } + + fun fillFactor(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.toInt().let { value -> + if (value !in 10..100) { + annotationHolder.createErrorAnnotation( + input, + """value $value out of bounds for option "fillfactor"""", + ) + } + } + } + + fun ginPendingListLimit(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.toInt().let { value -> + if (value !in 64..Int.MAX_VALUE) { + annotationHolder.createErrorAnnotation( + input, + """value $value out of bounds for option "gin_pending_list_limit"""", + ) + } + } + } + + fun pagesPerRange(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.toInt().let { value -> + if (value !in 1..Int.MAX_VALUE) { + annotationHolder.createErrorAnnotation( + input, + """value $value out of bounds for option "pages_per_range"""", + ) + } + } + } + + fun unrecongizedParameter(input: PsiElement, annotationHolder: SqlAnnotationHolder) { + input.text.let { parameter -> + annotationHolder.createErrorAnnotation( + input, + """unrecognized parameter "$parameter"""", + ) + } + } + } +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/create-index/Sample.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/create-index/Sample.s index 175fc0395cb..c8acbaac397 100644 --- a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/create-index/Sample.s +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/create-index/Sample.s @@ -7,14 +7,56 @@ CREATE TABLE abg ( CREATE INDEX CONCURRENTLY beta_gamma_idx ON abg (beta, gamma); +CREATE INDEX gamma_index_name ON abg (gamma) WHERE beta = 'some_value'; + +CREATE INDEX alpha_index_name ON abg USING BTREE (alpha) WITH (fillfactor = 70, deduplicate_items = on); + +CREATE INDEX beta_gamma_index_name ON abg USING HASH (beta) WITH (fillfactor = 20); +-- error[col 87]: invalid value for boolean option "deduplicate_items" yes +CREATE INDEX alpha_index_name_err ON abg USING BTREE (alpha) WITH (deduplicate_items = yes); +-- error[col 83]: value 1 out of bounds for option "fillfactor" +CREATE INDEX beta_gamma_index_name_err ON abg USING HASH (beta) WITH (fillfactor = 1); +-- error[col 76]: unrecognized parameter "autosummarize" +CREATE INDEX beta_gamma_index_name_err_param ON abg USING HASH (beta) WITH (autosummarize = off); CREATE TABLE json_gin( alpha JSONB, beta JSONB ); +CREATE TABLE json_gist( + alpha JSONB, + beta JSONB +); + +CREATE TABLE text_search( + alpha TSVECTOR, + beta TEXT +); + CREATE INDEX gin_alpha_1 ON json_gin USING GIN (alpha); CREATE INDEX gin_alpha_beta_2 ON json_gin USING GIN (alpha, beta); CREATE INDEX gin_alpha_beta_3 ON json_gin USING GIN (alpha jsonb_ops, beta); -CREATE INDEX gin_alpha_beta_4 ON json_gin USING GIN (alpha, beta jsonb_path_ops); -CREATE INDEX gin_alpha_beta_5 ON json_gin USING GIN (alpha jsonb_path_ops, beta jsonb_ops); +CREATE INDEX gin_alpha_beta_4 ON json_gin USING GIN (alpha, beta jsonb_path_ops) WITH (fastupdate = off); +CREATE INDEX gin_alpha_beta_5 ON json_gin USING GIN (alpha jsonb_path_ops, beta jsonb_ops) WITH (gin_pending_list_limit = 2048); + +CREATE INDEX gist_alpha_1 ON text_search USING GIST (alpha) WITH (fillfactor = 75); +CREATE INDEX gist_alpha_2 ON text_search USING GIST (alpha) WITH (buffering = on); + +CREATE INDEX tsv_gist_alpha_1 ON text_search USING GIST (alpha); +CREATE INDEX tsv_gin_alpha_1 ON text_search USING GIN (alpha); +CREATE INDEX trgm_gist_beta_1 ON text_search USING GIST (beta gist_trgm_ops(siglen=32)); +CREATE INDEX trgm_gist_beta_2 ON text_search USING GIN (beta gin_trgm_ops); + +CREATE INDEX beta_index ON text_search (beta varchar_pattern_ops); + +CREATE INDEX ts_brin_beta_1 ON text_search USING BRIN (beta) WITH (autosummarize = on, pages_per_range = 6); + +-- error[col 128]: value 1 out of bounds for option "gin_pending_list_limit" +CREATE INDEX gin_alpha_beta_error_1 ON json_gin USING GIN (alpha jsonb_path_ops, beta jsonb_ops) WITH (gin_pending_list_limit = 1); +-- error[col 106]: invalid value for boolean option "fastupdate" yes +CREATE INDEX gin_alpha_beta_error_2 ON json_gin USING GIN (alpha, beta jsonb_path_ops) WITH (fastupdate = yes); +-- error[col 91]: value 0 out of bounds for option "pages_per_range" +CREATE INDEX ts_brin_beta_error_1 ON text_search USING BRIN (beta) WITH (pages_per_range = 0); +-- error[col 87]: invalid value for boolean option "autosummarize" no +CREATE INDEX ts_brin_beta_error_2 ON text_search USING BRIN (beta) WITH (autosummarize=no); From cfe7ed7143d8f21c6bf699f787f6df2928395b70 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 07:22:09 -0400 Subject: [PATCH 005/184] Update agp to v8.3.2 (#5144) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dbfbf0d6cc0..78700932587 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.2.1" -agp = "8.3.1" +agp = "8.3.2" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From 5d8ba425c5216300c2b0e814d3d51ba4920a52d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:42:36 +0000 Subject: [PATCH 006/184] Update dependency org.postgresql:r2dbc-postgresql to v1.0.5.RELEASE (#5145) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../src/test/integration-postgresql-async/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql-async/build.gradle b/sqldelight-gradle-plugin/src/test/integration-postgresql-async/build.gradle index 6ac609cda6d..7d38ce10a69 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql-async/build.gradle +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql-async/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation libs.postgresJdbc implementation libs.testContainers.postgres implementation libs.testContainers.r2dbc - implementation "org.postgresql:r2dbc-postgresql:1.0.4.RELEASE" + implementation "org.postgresql:r2dbc-postgresql:1.0.5.RELEASE" implementation "app.cash.sqldelight:r2dbc-driver:${app.cash.sqldelight.VersionKt.VERSION}" implementation "app.cash.sqldelight:async-extensions:${app.cash.sqldelight.VersionKt.VERSION}" implementation libs.truth From 7615d6b8945a5132e33e7535effb2d8144bc2600 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 23:17:08 +0000 Subject: [PATCH 007/184] Update gradle/wrapper-validation-action action to v3 (#5149) * Update gradle/wrapper-validation-action action to v3 * Update gradleWrapper.yml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- .github/workflows/gradleWrapper.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradleWrapper.yml b/.github/workflows/gradleWrapper.yml index 097dc824c54..837348b19b8 100644 --- a/.github/workflows/gradleWrapper.yml +++ b/.github/workflows/gradleWrapper.yml @@ -15,4 +15,4 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: gradle/wrapper-validation-action@v2 + - uses: gradle/actions/wrapper-validation@v3 From 1678afbbb576c7700f8561ef9a8e400d279d2089 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:51:11 -0400 Subject: [PATCH 008/184] Update plugin com.gradle.develocity to v3.17.1 (#5142) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 7373f516381..60bb0956182 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17" + id "com.gradle.develocity" version "3.17.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 079b0073b75..20cd9ab0924 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17" + id "com.gradle.develocity" version "3.17.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index b13aeec238d..2241aa7456c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17" + id "com.gradle.develocity" version "3.17.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 1a2a6fcfc010ce207689d6b7b1fde47cca0c6621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:51:55 +0100 Subject: [PATCH 009/184] Add 5137 PostgreSql Regex operators (#5138) * Add regex_match_operator grammar * Add regexMatchOperatorExpression Setup is similar to json ops * Add regexMatchOperator Tests Fixture tests Integration tests * RegExMatchOperatorExpressionMixin Annotation errors for using regex operator with a non-text data type Change message to better understanding The problem here is that Functions and Column can be used with Regex operators however, there appears to be no way to access the typeresolver to get the function return type. We can only validate Column Types and functions we have to let through. TypeResolvers are in core compiler package no available here --- .../postgresql/PostgreSqlTypeResolver.kt | 2 +- .../postgresql/grammar/PostgreSql.bnf | 9 ++++- .../RegExMatchOperatorExpressionMixin.kt | 39 +++++++++++++++++++ .../postgres/PostgreSqlFixturesTest.kt | 2 +- .../regex-match-ops/Test.s | 21 ++++++++++ .../postgresql/integration/RegExOps.sq | 16 ++++++++ .../postgresql/integration/PostgreSqlTest.kt | 19 +++++++++ 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/RegExMatchOperatorExpressionMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/regex-match-ops/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/RegExOps.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index b1937f9895d..7aeb20c5a88 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -275,7 +275,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes IntermediateType(PostgreSqlType.JSON) } } - matchOperatorExpression != null -> { + matchOperatorExpression != null || regexMatchOperatorExpression != null -> { IntermediateType(BOOLEAN) } else -> parentResolver.resolvedType(this) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index a2fca6faceb..a22cc4abf7c 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -364,7 +364,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_literal | boolean_not_expression | window_function_expr { +extension_expr ::= regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_literal | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true @@ -392,6 +392,13 @@ match_operator_expression ::= ( {function_expr} | {column_expr} ) match_operator pin = 2 } +regex_match_operator ::= '~*' | '~' | '!~*' | '!~' + +regex_match_operator_expression ::= ( {function_expr} | {column_expr} ) regex_match_operator <> { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.RegExMatchOperatorExpressionMixin" + pin = 2 +} + extension_stmt ::= create_sequence_stmt | copy_stdin | truncate_stmt | set_stmt | drop_sequence_stmt | alter_sequence_stmt | create_extension_stmt | drop_extension_stmt | alter_extension_stmt { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionStmt" diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/RegExMatchOperatorExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/RegExMatchOperatorExpressionMixin.kt new file mode 100644 index 00000000000..479fb3e3d9b --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/RegExMatchOperatorExpressionMixin.kt @@ -0,0 +1,39 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlRegexMatchOperatorExpression +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlTypeName +import com.alecstrong.sql.psi.core.SqlAnnotationHolder +import com.alecstrong.sql.psi.core.psi.SqlBinaryExpr +import com.alecstrong.sql.psi.core.psi.SqlColumnDef +import com.alecstrong.sql.psi.core.psi.SqlColumnName +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode +/** + * Regular expression operators provide a more powerful means for pattern matching than the LIKE and SIMILAR TO operators. + */ +internal abstract class RegExMatchOperatorExpressionMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlBinaryExpr, + PostgreSqlRegexMatchOperatorExpression { + + override fun annotate(annotationHolder: SqlAnnotationHolder) { + ((firstChild.firstChild.reference?.resolve() as? SqlColumnName)?.parent as? SqlColumnDef)?.isStringDataType()?.let { isText -> + if (!isText) { + annotationHolder.createErrorAnnotation( + firstChild.firstChild, + """operator ${regexMatchOperator.text} can only be performed on text""", + ) + } + } + super.annotate(annotationHolder) + } + override fun getExprList(): List { + return children.filterIsInstance() + } + + private fun SqlColumnDef.isStringDataType(): Boolean { + val typeName = columnType.typeName as PostgreSqlTypeName + return typeName.stringDataType != null + } +} diff --git a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt index f854343efc0..ca2b67c4feb 100644 --- a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt +++ b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt @@ -18,7 +18,7 @@ class PostgreSqlFixturesTest(name: String, fixtureRoot: File) : FixturesTest(nam "BLOB" to "TEXT", "id TEXT GENERATED ALWAYS AS (2) UNIQUE NOT NULL" to "id TEXT GENERATED ALWAYS AS (2) STORED UNIQUE NOT NULL", "'(', ')', ',', '.', , BETWEEN or IN expected, got ','" - to "'#-', '(', ')', ',', '.', , , , '@@', BETWEEN or IN expected, got ','", + to "'#-', '(', ')', ',', '.', , , , , '@@', BETWEEN or IN expected, got ','", ) override fun setupDialect() { diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/regex-match-ops/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/regex-match-ops/Test.s new file mode 100644 index 00000000000..a008bf0e44a --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/regex-match-ops/Test.s @@ -0,0 +1,21 @@ +CREATE TABLE regexops( + t TEXT NOT NULL, + c VARCHAR(50) NOT NULL, + i INTEGER +); + +SELECT concat(t, 'test') ~ ?, t ~* ?, t !~ ?, t !~* ? +FROM regexops; + +SELECT t +FROM regexops +WHERE t ~ ?; + +SELECT c +FROM regexops +WHERE c ~ ?; + +--error[col 7]: operator ~ can only be performed on text +SELECT i ~ ? +FROM regexops; + diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/RegExOps.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/RegExOps.sq new file mode 100644 index 00000000000..985012bdf16 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/RegExOps.sq @@ -0,0 +1,16 @@ +CREATE TABLE regexops( + t TEXT NOT NULL +); + +insert: +INSERT INTO regexops (t) VALUES (?); + +matchRegExOps: +SELECT concat(t, 'test') ~ ?, t ~* ?, t !~ ?, t !~* ? +FROM regexops; + +matchRegExWhere: +SELECT t +FROM regexops +WHERE t ~ ?; + diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 10880dd2022..afc961fdef4 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -846,4 +846,23 @@ class PostgreSqlTest { assertThat(first()).isEqualTo("0.030396355") } } + + @Test + fun testMatchRegExOps() { + database.regExOpsQueries.insert("thomas") + with(database.regExOpsQueries.matchRegExOps("t.*ma", "T.*ma", "t.*max", "T.*ma").executeAsList()) { + assertThat(first().expr).isTrue() + assertThat(first().expr_).isTrue() + assertThat(first().expr__).isTrue() + assertThat(first().expr___).isFalse() + } + } + + @Test + fun testMatchRegExWhere() { + database.regExOpsQueries.insert("thomas") + with(database.regExOpsQueries.matchRegExWhere("t.*ma").executeAsList()) { + assertThat(first()).isEqualTo("thomas") + } + } } From 14f9b1cdc480854f2a33ef8d23a627de9f0585e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 07:20:20 -0400 Subject: [PATCH 010/184] Update dependency org.xerial:sqlite-jdbc to v3.45.3.0 (#5154) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 78700932587..22ab8139706 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,7 @@ sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref robolectric = { module = "org.robolectric:robolectric", version = "4.12.1" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } -sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.45.2.0" } +sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.45.3.0" } postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } From d3ab5729edf658be945a23f0de426206dc215e78 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 07:42:18 -0400 Subject: [PATCH 011/184] Update plugin com.gradle.develocity to v3.17.2 (#5164) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 60bb0956182..de7a3d16148 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.1" + id "com.gradle.develocity" version "3.17.2" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 20cd9ab0924..9ac786949cb 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.1" + id "com.gradle.develocity" version "3.17.2" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index 2241aa7456c..ae03ef4758d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.1" + id "com.gradle.develocity" version "3.17.2" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From da8c744012f398f925d68469c9cce6c0047fcc6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Fri, 19 Apr 2024 22:02:50 +0100 Subject: [PATCH 012/184] Fix 5172 PostgreSql select distinct (#5174) * Fix grammar For some reason the additional optional [ distinct_on_expr ] causes the SELECT not to match DISTINCT. Removed as it seems to work with distinct_on_expr or optionally distinct/all * Add fixture tests for distinct There appears not to be tests for SELECT DISTINCT - if so it would have found the regression --- .../dialects/postgresql/grammar/PostgreSql.bnf | 2 +- .../fixtures_postgresql/select-distinct/Test.s | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct/Test.s diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index a22cc4abf7c..b6ad1e398d9 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -351,7 +351,7 @@ distinct_on_expr ::= DISTINCT ON LP {result_column} ( COMMA {result_column} ) * implements = "com.alecstrong.sql.psi.core.psi.SqlCompositeElement" } -select_stmt ::= SELECT ( [ distinct_on_expr ] | [ DISTINCT | ALL ] ) {result_column} ( COMMA {result_column} ) * [ FROM {join_clause} ] [ WHERE <> ] [{group_by}] [HAVING <>] | VALUES {values_expression} ( COMMA {values_expression} ) * { +select_stmt ::= SELECT ( distinct_on_expr | [ DISTINCT | ALL ] ) {result_column} ( COMMA {result_column} ) * [ FROM {join_clause} ] [ WHERE <> ] [{group_by}] [HAVING <>] | VALUES {values_expression} ( COMMA {values_expression} ) * { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlSelectStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlSelectStmt" override = true diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct/Test.s new file mode 100644 index 00000000000..26d58297160 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct/Test.s @@ -0,0 +1,13 @@ +CREATE TABLE person ( + id INTEGER PRIMARY KEY, + name TEXT, + created_at TIMESTAMPTZ +); + +SELECT DISTINCT name FROM person; + +SELECT DISTINCT id, name FROM person ORDER BY name; + +SELECT DISTINCT name FROM person WHERE name LIKE 'A%'; + +SELECT DISTINCT SUBSTR(name, 1, 1) FROM person; From 61ccab1a03ff744b973015b38f3eb2ba6fa6d8a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 22 Apr 2024 14:45:54 +0100 Subject: [PATCH 013/184] Fix 5173 PostgreSql isNull isNotNull types (#5179) * Add missing SqlIsExpr type Not all types are in the list SqlBinaryExpr The actual problem is the missing SqlIsExpr Not working since 2.0.0 when changes were added IS NULL IS NOT NULL * InterfaceGeneration queries tests Checks that compiler produces Boolean type --- .../postgresql/PostgreSqlTypeResolver.kt | 6 + .../core/queries/InterfaceGeneration.kt | 141 ++++++++++++++++++ 2 files changed, 147 insertions(+) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 7aeb20c5a88..ca2a32de727 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -32,6 +32,7 @@ import com.alecstrong.sql.psi.core.psi.SqlColumnExpr import com.alecstrong.sql.psi.core.psi.SqlCreateTableStmt import com.alecstrong.sql.psi.core.psi.SqlExpr import com.alecstrong.sql.psi.core.psi.SqlFunctionExpr +import com.alecstrong.sql.psi.core.psi.SqlIsExpr import com.alecstrong.sql.psi.core.psi.SqlLiteralExpr import com.alecstrong.sql.psi.core.psi.SqlStmt import com.alecstrong.sql.psi.core.psi.SqlTypeName @@ -224,6 +225,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes } private fun SqlExpr.postgreSqlType(): IntermediateType = when (this) { + is SqlIsExpr -> IntermediateType(BOOLEAN) is SqlBinaryExpr -> { if (node.findChildByType(binaryExprChildTypesResolvingToBool) != null) { IntermediateType(BOOLEAN) @@ -241,9 +243,13 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes REAL, TEXT, BLOB, + BOOLEAN, + DATE, + PostgreSqlType.UUID, PostgreSqlType.INTERVAL, PostgreSqlType.TIMESTAMP_TIMEZONE, PostgreSqlType.TIMESTAMP, + PostgreSqlType.TIME, PostgreSqlType.JSON, PostgreSqlType.TSVECTOR, ) diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt index 8a71e913ed5..b52bab98f3e 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt @@ -1066,6 +1066,147 @@ class InterfaceGeneration { ) } + @Test + fun `postgres SqlIsExpr returns boolean`() { + val result = FixtureCompiler.compileSql( + """ + |CREATE TABLE test( + |big BIGINT, + |bol BOOLEAN, + |byt BYTEA, + |dte DATE, + |inr INTEGER, + |jsn JSON, + |jsb JSON, + |tim TIME, + |tms TIMESTAMP, + |tmz TIMESTAMPTZ, + |ser SERIAL, + |sml SMALLINT, + |tsv TSVECTOR, + |txt TEXT, + |uui UUID, + |var VARCHAR(100) + |); + | + |selectIsNotNull: + |SELECT + |big IS NOT NULL AS has_bigint, + |bol IS NOT NULL AS has_boolean, + |byt IS NOT NULL AS has_byte, + |dte IS NOT NULL AS has_date, + |inr IS NOT NULL AS has_integer, + |jsn IS NOT NULL AS has_json, + |jsb IS NOT NULL AS has_jsob, + |sml IS NOT NULL AS has_smallint, + |tim IS NOT NULL AS has_time, + |tms IS NOT NULL AS has_timestamp, + |tmz IS NOT NULL AS has_timestamptz, + |tsv IS NOT NULL AS has_tsvector, + |uui IS NOT NULL AS has_uuid, + |var IS NULL AS has_varchar + |FROM test; + """.trimMargin(), + temporaryFolder, + fileName = "SqlIsExpr.sq", + overrideDialect = PostgreSqlDialect(), + ) + assertThat(result.errors).isEmpty() + val generatedInterface = result.compilerOutput.get(File(result.outputDirectory, "com/example/SqlIsExprQueries.kt")) + assertThat(generatedInterface).isNotNull() + assertThat(generatedInterface.toString()).isEqualTo( + """ + |package com.example + | + |import app.cash.sqldelight.Query + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + |import app.cash.sqldelight.driver.jdbc.JdbcCursor + |import kotlin.Any + |import kotlin.Boolean + | + |public class SqlIsExprQueries( + | driver: SqlDriver, + |) : TransacterImpl(driver) { + | public fun selectIsNotNull(mapper: ( + | has_bigint: Boolean, + | has_boolean: Boolean, + | has_byte: Boolean, + | has_date: Boolean, + | has_integer: Boolean, + | has_json: Boolean, + | has_jsob: Boolean, + | has_smallint: Boolean, + | has_time: Boolean, + | has_timestamp: Boolean, + | has_timestamptz: Boolean, + | has_tsvector: Boolean, + | has_uuid: Boolean, + | has_varchar: Boolean, + | ) -> T): Query = Query(-1_574_646_250, arrayOf("test"), driver, "SqlIsExpr.sq", + | "selectIsNotNull", ""${'"'} + | |SELECT + | |big IS NOT NULL AS has_bigint, + | |bol IS NOT NULL AS has_boolean, + | |byt IS NOT NULL AS has_byte, + | |dte IS NOT NULL AS has_date, + | |inr IS NOT NULL AS has_integer, + | |jsn IS NOT NULL AS has_json, + | |jsb IS NOT NULL AS has_jsob, + | |sml IS NOT NULL AS has_smallint, + | |tim IS NOT NULL AS has_time, + | |tms IS NOT NULL AS has_timestamp, + | |tmz IS NOT NULL AS has_timestamptz, + | |tsv IS NOT NULL AS has_tsvector, + | |uui IS NOT NULL AS has_uuid, + | |var IS NULL AS has_varchar + | |FROM test + | ""${'"'}.trimMargin()) { cursor -> + | check(cursor is JdbcCursor) + | mapper( + | cursor.getBoolean(0)!!, + | cursor.getBoolean(1)!!, + | cursor.getBoolean(2)!!, + | cursor.getBoolean(3)!!, + | cursor.getBoolean(4)!!, + | cursor.getBoolean(5)!!, + | cursor.getBoolean(6)!!, + | cursor.getBoolean(7)!!, + | cursor.getBoolean(8)!!, + | cursor.getBoolean(9)!!, + | cursor.getBoolean(10)!!, + | cursor.getBoolean(11)!!, + | cursor.getBoolean(12)!!, + | cursor.getBoolean(13)!! + | ) + | } + | + | public fun selectIsNotNull(): Query = selectIsNotNull { has_bigint, has_boolean, + | has_byte, has_date, has_integer, has_json, has_jsob, has_smallint, has_time, has_timestamp, + | has_timestamptz, has_tsvector, has_uuid, has_varchar -> + | SelectIsNotNull( + | has_bigint, + | has_boolean, + | has_byte, + | has_date, + | has_integer, + | has_json, + | has_jsob, + | has_smallint, + | has_time, + | has_timestamp, + | has_timestamptz, + | has_tsvector, + | has_uuid, + | has_varchar + | ) + | } + |} + | + """.trimMargin(), + ) + } + private fun checkFixtureCompiles(fixtureRoot: String) { val result = FixtureCompiler.compileFixture( fixtureRoot = "src/test/query-interface-fixtures/$fixtureRoot", From 2a1249d7e6794ea97f4aead0ea2843dbcfd81fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20B=C3=ADna?= Date: Tue, 23 Apr 2024 18:14:20 +0200 Subject: [PATCH 014/184] Fix StringBuilder capacity (#5192) --- .../src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt b/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt index b47697c6a84..6e036d5c63a 100644 --- a/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt +++ b/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt @@ -323,12 +323,12 @@ abstract class BaseTransacterImpl(protected val driver: SqlDriver) { } /** - * For internal use, creates a string in the format (?, ?, ?) where there are [count] offset. + * For internal use, creates a string in the format (?, ?, ?) where there are [count] question marks. */ protected fun createArguments(count: Int): String { if (count == 0) return "()" - return buildString(count + 2) { + return buildString(count * 2 + 1) { append("(?") repeat(count - 1) { append(",?") From 031478444aceb424a3452edc5ba532f619b60975 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 07:40:10 -0400 Subject: [PATCH 015/184] Update dependency com.google.testparameterinjector:test-parameter-injector to v1.16 (#5207) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22ab8139706..7b142a9803d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -81,7 +81,7 @@ stately-concurrency = { module = "co.touchlab:stately-concurrency", version = "2 testhelp = { module = "co.touchlab:testhelp", version = "0.6.12" } burst = { module = "com.squareup.burst:burst-junit4", version = "1.2.0" } -testParameterInjector = { module = "com.google.testparameterinjector:test-parameter-injector", version = "1.15" } +testParameterInjector = { module = "com.google.testparameterinjector:test-parameter-injector", version = "1.16" } r2dbc = { module = "io.r2dbc:r2dbc-spi", version = "1.0.0.RELEASE" } testContainers-mysql = { module = "org.testcontainers:mysql", version.ref = "testContainers" } From 7f6f55eefc747b773c7bebbad94c4a1f09d7c864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Moravec?= Date: Mon, 29 Apr 2024 10:46:40 +0200 Subject: [PATCH 016/184] Fix leaking connections after transaction commit / rollback (#5205) * Fix leaking connections after transaction commit / rollback * Remove temp files --------- Co-authored-by: hfhbd <22521688+hfhbd@users.noreply.github.com> --- .../driver/jdbc/sqlite/JdbcSqliteDriver.kt | 5 +++++ .../src/test/multithreaded-sqlite/test.db-shm | Bin 32768 -> 0 bytes .../src/test/multithreaded-sqlite/test.db-wal | 0 3 files changed, 5 insertions(+) delete mode 100644 sqldelight-gradle-plugin/src/test/multithreaded-sqlite/test.db-shm delete mode 100644 sqldelight-gradle-plugin/src/test/multithreaded-sqlite/test.db-wal diff --git a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt index febe1116ca6..026dde712d4 100644 --- a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt +++ b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt @@ -115,7 +115,12 @@ private class ThreadedConnectionManager( override var transaction: Transaction? get() = transactions.get() set(value) { + val currentTransaction = transactions.get() transactions.set(value) + + if (value == null && currentTransaction != null) { + closeConnection(currentTransaction.connection) + } } override fun getConnection() = connections.getOrSet { diff --git a/sqldelight-gradle-plugin/src/test/multithreaded-sqlite/test.db-shm b/sqldelight-gradle-plugin/src/test/multithreaded-sqlite/test.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Tue, 30 Apr 2024 14:59:45 +0100 Subject: [PATCH 017/184] Fix 5155 PostgreSql window functions (#5163) * Change window_function_expr grammar To include `OVER` and `WITHIN` * PostgreSqlTypeResolver Add main window functions Update PostgreSqlTypeResolver.kt * Add Window Function tests fixture tests interface generation integration tests --- .../postgresql/PostgreSqlTypeResolver.kt | 5 +- .../postgresql/grammar/PostgreSql.bnf | 41 ++++++++++- .../grammar/mixins/WindowDefinitionMixin.kt | 14 ++++ .../window_functions/Test.s | 67 ++++++++++++++++++ .../core/queries/InterfaceGeneration.kt | 69 +++++++++++++++++++ .../postgresql/integration/Functions.sq | 1 + .../postgresql/integration/WindowFunctions.sq | 33 +++++++++ .../postgresql/integration/PostgreSqlTest.kt | 30 ++++++++ 8 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/WindowDefinitionMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/window_functions/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/WindowFunctions.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index ca2a32de727..fe4cf0633a9 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -136,7 +136,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes "quote_nullable" -> IntermediateType(TEXT).asNullable() "date_trunc" -> encapsulatingType(exprList, TIMESTAMP_TIMEZONE, TIMESTAMP) "date_part" -> IntermediateType(REAL) - "percentile_disc" -> IntermediateType(REAL).asNullable() + "percentile_disc", "cume_dist", "percent_rank" -> IntermediateType(REAL).asNullable() "now" -> IntermediateType(TIMESTAMP_TIMEZONE) "corr", "covar_pop", "covar_samp", "regr_avgx", "regr_avgy", "regr_intercept", "regr_r2", "regr_slope", "regr_sxx", "regr_sxy", "regr_syy", @@ -184,6 +184,9 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes "to_tsvector" -> IntermediateType(PostgreSqlType.TSVECTOR) "ts_rank" -> encapsulatingType(exprList, REAL, TEXT) "websearch_to_tsquery" -> IntermediateType(TEXT) + "rank", "dense_rank", "row_number" -> IntermediateType(INTEGER) + "ntile" -> IntermediateType(INTEGER).asNullable() + "lag", "lead", "first_value", "last_value", "nth_value" -> encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() else -> null } diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index b6ad1e398d9..103340f394a 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -13,8 +13,10 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.ALL" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ALTER" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ALWAYS" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.AND" "static com.alecstrong.sql.psi.core.psi.SqlTypes.AS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ASC" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.BETWEEN" "static com.alecstrong.sql.psi.core.psi.SqlTypes.BY" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CASCADE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.COLLATE" @@ -55,6 +57,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.LIMIT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.LP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.MINUS" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.MULTIPLY" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NO" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NOT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NOTHING" @@ -63,11 +66,13 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.ON" "static com.alecstrong.sql.psi.core.psi.SqlTypes.OR" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ORDER" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.PARTITION" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PLUS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PRIMARY" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RENAME" "static com.alecstrong.sql.psi.core.psi.SqlTypes.REPLACE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ROLLBACK" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.ROW" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.SELECT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.SET" @@ -96,6 +101,7 @@ overrides ::= type_name | insert_stmt | update_stmt_limited | generated_clause + | result_column | alter_table_rules | compound_select_stmt | extension_expr @@ -370,10 +376,43 @@ extension_expr ::= regex_match_operator_expression | match_operator_expression | override = true } -window_function_expr ::= {function_expr} 'WITHIN' GROUP LP ORDER BY <> ( COMMA <> ) * RP { +window_function_expr ::= {function_expr} + ( ['FILTER' LP WHERE <> RP] 'OVER' ( window_defn | window_name) | 'WITHIN' GROUP LP ORDER BY <> ( COMMA <> ) * RP ) { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.WindowFunctionMixin" } +base_window_name ::= id +window_name ::= id + +window_defn ::= LP [ base_window_name ] + [ PARTITION BY <> ( COMMA <> ) * ] + [ ORDER BY {ordering_term} ( COMMA {ordering_term} ) * ] + [ frame_spec ] +RP { + pin = 1 + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.WindowDefinitionMixin" +} + +frame_spec ::= ( 'RANGE' | 'ROWS' | 'GROUPS' ) + ( + BETWEEN ( + 'UNBOUNDED' 'PRECEDING' | + 'CURRENT' ROW | + <> 'PRECEDING' | + <> 'FOLLOWING' + ) AND ( + 'UNBOUNDED' 'FOLLOWING' | + 'CURRENT' ROW | + <> 'PRECEDING' | + <> 'FOLLOWING' + ) | + 'UNBOUNDED' 'PRECEDING' | + 'CURRENT' ROW | + <> 'PRECEDING' + ) [ 'EXCLUDE' NO 'OTHERS' | 'EXCLUDE' 'CURRENT' ROW | 'EXCLUDE' GROUP | 'EXCLUDE' 'TIES' ] { + pin = 1 +} + boolean_not_expression ::= NOT (boolean_literal | {column_name}) boolean_literal ::= TRUE | FALSE diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/WindowDefinitionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/WindowDefinitionMixin.kt new file mode 100644 index 00000000000..0a464ebe344 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/WindowDefinitionMixin.kt @@ -0,0 +1,14 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import com.alecstrong.sql.psi.core.psi.FromQuery +import com.alecstrong.sql.psi.core.psi.QueryElement +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.util.parentOfType + +abstract class WindowDefinitionMixin(node: ASTNode) : SqlCompositeElementImpl(node) { + override fun queryAvailable(child: PsiElement): Collection { + return parentOfType()!!.fromQuery() + } +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/window_functions/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/window_functions/Test.s new file mode 100644 index 00000000000..c2ca82271cd --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/window_functions/Test.s @@ -0,0 +1,67 @@ +CREATE TABLE scores ( + id INTEGER NOT NULL, + name TEXT NOT NULL, + points INTEGER NOT NULL +); + +SELECT + name, + RANK() OVER (ORDER BY points DESC) rank, + DENSE_RANK() OVER (ORDER BY points DESC) dense_rank, + ROW_NUMBER() OVER (ORDER BY points DESC) row_num, + LAG(points) OVER (ORDER BY points DESC) lag, + LEAD(points) OVER (ORDER BY points DESC) lead, + NTILE(6) OVER (ORDER BY points DESC) ntile, + CUME_DIST() OVER (ORDER BY points DESC) cume_dist, + PERCENT_RANK() OVER (ORDER BY points DESC) percent_rank +FROM scores; + +SELECT + name, + avg(points) OVER ( + PARTITION BY name + ORDER BY points + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) AS moving_avg +FROM scores; + +SELECT + name, + sum(points) OVER ( + PARTITION BY name + ORDER BY points + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) AS running_total +FROM scores; + +SELECT + name, + sum(points) OVER ( + PARTITION BY name + ORDER BY points + RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + EXCLUDE CURRENT ROW + ) AS running_total +FROM scores; + +SELECT + name, + points, + lag(points) OVER ( + PARTITION BY name + ORDER BY points + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + EXCLUDE GROUP + ) AS prev_point +FROM scores; + +SELECT + name, + points, + lag(points) OVER ( + PARTITION BY name + ORDER BY points + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + EXCLUDE NO OTHERS + ) AS prev_point +FROM scores; diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt index b52bab98f3e..f54d00ea7bc 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt @@ -1066,6 +1066,75 @@ class InterfaceGeneration { ) } + @Test fun `postgresql windows function generates correct result columns`() { + val result = FixtureCompiler.compileSql( + """ + |CREATE TABLE scores ( + | name TEXT NOT NULL, + | points INTEGER NOT NULL + |); + | + |selectRank: + |SELECT + | name, + | RANK () OVER ( + | ORDER BY points DESC + | ) rank + |FROM scores; + """.trimMargin(), + temporaryFolder, + fileName = "WindowsFunctions.sq", + overrideDialect = PostgreSqlDialect(), + ) + + assertThat(result.errors).isEmpty() + val generatedInterface = result.compilerOutput.get( + File(result.outputDirectory, "com/example/WindowsFunctionsQueries.kt"), + ) + assertThat(generatedInterface).isNotNull() + assertThat(generatedInterface.toString()).isEqualTo( + """ + |package com.example + | + |import app.cash.sqldelight.Query + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + |import app.cash.sqldelight.driver.jdbc.JdbcCursor + |import kotlin.Any + |import kotlin.Long + |import kotlin.String + | + |public class WindowsFunctionsQueries( + | driver: SqlDriver, + |) : TransacterImpl(driver) { + | public fun selectRank(mapper: (name: String, rank: Long) -> T): Query = + | Query(-1_725_152_245, arrayOf("scores"), driver, "WindowsFunctions.sq", "selectRank", ""${'"'} + | |SELECT + | | name, + | | RANK () OVER ( + | | ORDER BY points DESC + | | ) rank + | |FROM scores + | ""${'"'}.trimMargin()) { cursor -> + | check(cursor is JdbcCursor) + | mapper( + | cursor.getString(0)!!, + | cursor.getLong(1)!! + | ) + | } + | + | public fun selectRank(): Query = selectRank { name, rank -> + | SelectRank( + | name, + | rank + | ) + | } + |} + | + """.trimMargin(), + ) + } + @Test fun `postgres SqlIsExpr returns boolean`() { val result = FixtureCompiler.compileSql( diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Functions.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Functions.sq index 7674724a692..2302defcb57 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Functions.sq +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Functions.sq @@ -23,3 +23,4 @@ SELECT generate_series( CAST(:finish AS TIMESTAMPTZ), CAST('1 hour' AS INTERVAL) ); + diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/WindowFunctions.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/WindowFunctions.sq new file mode 100644 index 00000000000..83f50c5cc6c --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/WindowFunctions.sq @@ -0,0 +1,33 @@ +CREATE TABLE scores ( + name TEXT NOT NULL, + points INTEGER NOT NULL +); + +insert: +INSERT INTO scores (name, points) +VALUES (?, ?); + +selectRank: +SELECT + name, + RANK () OVER ( + ORDER BY points DESC + ) rank +FROM scores; + +selectOver: +SELECT + name, + DENSE_RANK() OVER (ORDER BY points DESC) dense_rank, + ROW_NUMBER() OVER (ORDER BY points DESC) row_num, + LAG(3) OVER (ORDER BY points DESC) lag, + LEAD(points) OVER (ORDER BY points DESC) lead, + NTILE(6) OVER (ORDER BY points DESC) ntile, + CUME_DIST() OVER (ORDER BY points DESC) cume_dist, + PERCENT_RANK() OVER ( + PARTITION BY name + ORDER BY points DESC + ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING + EXCLUDE NO OTHERS + ) percent_rank +FROM scores; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index afc961fdef4..7948c9d3959 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -865,4 +865,34 @@ class PostgreSqlTest { assertThat(first()).isEqualTo("thomas") } } + + @Test + fun testRankOver() { + database.windowFunctionsQueries.insert("t", 2) + database.windowFunctionsQueries.insert("q", 3) + database.windowFunctionsQueries.insert("p", 1) + + with(database.windowFunctionsQueries.selectRank().executeAsList()) { + assertThat(first().name).isEqualTo("q") + assertThat(first().rank).isEqualTo(1) + } + } + + @Test + fun testOver() { + database.windowFunctionsQueries.insert("a", 10) + database.windowFunctionsQueries.insert("b", 11) + database.windowFunctionsQueries.insert("c", 12) + + with(database.windowFunctionsQueries.selectOver().executeAsList()) { + assertThat(first().name).isEqualTo("c") + assertThat(first().dense_rank).isEqualTo(1) + assertThat(first().row_num).isEqualTo(1) + assertThat(first().lag).isNull() + assertThat(first().lead).isEqualTo(11) + assertThat(first().ntile).isEqualTo(1) + assertThat(first().cume_dist).isEqualTo(0.3333333333333333) + assertThat(first().percent_rank).isEqualTo(0) + } + } } From 2df6f74cbc8b1c772f3daccc433fec7863a8ce94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Moravec?= Date: Tue, 30 Apr 2024 16:03:42 +0200 Subject: [PATCH 018/184] Run SQLite migrations inside transaction as mentioned in documentation (#5218) --- .../driver/jdbc/sqlite/JdbcSqliteSchema.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteSchema.kt b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteSchema.kt index bbf4146c9a7..955f9a00d55 100644 --- a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteSchema.kt +++ b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteSchema.kt @@ -1,5 +1,6 @@ package app.cash.sqldelight.driver.jdbc.sqlite +import app.cash.sqldelight.TransacterImpl import app.cash.sqldelight.db.AfterVersion import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlCursor @@ -24,14 +25,18 @@ fun JdbcSqliteDriver( vararg callbacks: AfterVersion, ): JdbcSqliteDriver { val driver = JdbcSqliteDriver(url, properties) - val version = driver.getVersion() + val transacter = object : TransacterImpl(driver) {} - if (version == 0L && !migrateEmptySchema) { - schema.create(driver).value - driver.setVersion(schema.version) - } else if (version < schema.version) { - schema.migrate(driver, version, schema.version, *callbacks).value - driver.setVersion(schema.version) + transacter.transaction { + val version = driver.getVersion() + + if (version == 0L && !migrateEmptySchema) { + schema.create(driver).value + driver.setVersion(schema.version) + } else if (version < schema.version) { + schema.migrate(driver, version, schema.version, *callbacks).value + driver.setVersion(schema.version) + } } return driver From 8d8eabc1daf01d3a31466dcf86b5cd1293ce36f5 Mon Sep 17 00:00:00 2001 From: Oren Kislev <111307003+orenkislev-faire@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:37:59 -0700 Subject: [PATCH 019/184] Support RENAME INDEX for MySql dialect (#5212) * Support RENAME INDEX for MySql dialect * Added DROP INDEX to fixture test --- .../dialects/mysql/MySqlMigrationSquasher.kt | 8 ++++++++ .../sqldelight/dialects/mysql/grammar/MySql.bnf | 4 ++++ .../fixtures_mysql/alter-table-rename-index/1.s | 14 ++++++++++++++ .../test/migration-squash/expected/mysql/_8.sqm | 2 +- .../src/main/sqldelight/mysql/migrations/3.sqm | 4 +++- 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 dialects/mysql/src/testFixtures/resources/fixtures_mysql/alter-table-rename-index/1.s diff --git a/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/MySqlMigrationSquasher.kt b/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/MySqlMigrationSquasher.kt index b69e6db5a59..207c7dff52e 100644 --- a/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/MySqlMigrationSquasher.kt +++ b/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/MySqlMigrationSquasher.kt @@ -36,6 +36,14 @@ internal class MySqlMigrationSquasher( .single { it.indexName.textMatches(indexName.text) } into.text.removeRange(createIndex.textRange.startOffset..createIndex.textRange.endOffset) } + alterTableRules.alterTableRenameIndex != null -> { + val indexNames = PsiTreeUtil.getChildrenOfTypeAsList(alterTableRules.alterTableRenameIndex, SqlIndexName::class.java) + val oldName = indexNames.first() + val createIndex = into.sqlStmtList!!.stmtList.mapNotNull { it.createIndexStmt } + .single { it.indexName.textMatches(oldName.text) } + val newName = indexNames.last() + into.text.replaceRange(createIndex.indexName.textRange.startOffset until createIndex.indexName.textRange.endOffset, newName.text) + } alterTableRules.alterTableAddColumn != null -> { val placement = alterTableRules.alterTableAddColumn!!.placementClause val columnDef = PsiTreeUtil.getChildOfType(alterTableRules.alterTableAddColumn!!, SqlColumnDef::class.java)!! diff --git a/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/grammar/MySql.bnf b/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/grammar/MySql.bnf index 8686587c06a..bf27548ef45 100644 --- a/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/grammar/MySql.bnf +++ b/dialects/mysql/src/main/kotlin/app/cash/sqldelight/dialects/mysql/grammar/MySql.bnf @@ -46,6 +46,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.ON" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ORDER" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PRIMARY" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.RENAME" "static com.alecstrong.sql.psi.core.psi.SqlTypes.REPLACE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.SET" @@ -219,6 +220,7 @@ alter_table_rules ::= ( | alter_table_modify_column | alter_table_add_index | alter_table_drop_index + | alter_table_rename_index | alter_table_drop_column | alter_table_convert_character_set | row_format_clause @@ -256,6 +258,8 @@ alter_table_add_index ::= ADD [ UNIQUE ] [ INDEX | KEY ] [ {index_name} ] LP {in alter_table_drop_index ::= DROP ( INDEX | KEY ) {index_name} +alter_table_rename_index ::= RENAME ( INDEX | KEY ) {index_name} TO {index_name} + placement_clause ::= 'FIRST' | ( AFTER {column_name} ) alter_table_convert_character_set ::= 'CONVERT' TO 'CHARACTER' SET {identifier} [COLLATE {identifier}] diff --git a/dialects/mysql/src/testFixtures/resources/fixtures_mysql/alter-table-rename-index/1.s b/dialects/mysql/src/testFixtures/resources/fixtures_mysql/alter-table-rename-index/1.s new file mode 100644 index 00000000000..9b56676033b --- /dev/null +++ b/dialects/mysql/src/testFixtures/resources/fixtures_mysql/alter-table-rename-index/1.s @@ -0,0 +1,14 @@ +CREATE TABLE animals ( + id BIGINT AUTO_INCREMENT, + name VARCHAR(30) NOT NULL, + species VARCHAR(30) NOT NULL, + UNIQUE KEY unq_name (name), + KEY idx_species (species) +); + +ALTER TABLE animals + RENAME INDEX `unq_name` TO `unq_animals_name`, + RENAME KEY `idx_species` TO `idx_animals_species`; + +ALTER TABLE animals + DROP INDEX `unq_animals_name`; diff --git a/sqldelight-gradle-plugin/src/test/migration-squash/expected/mysql/_8.sqm b/sqldelight-gradle-plugin/src/test/migration-squash/expected/mysql/_8.sqm index f26963cc2e3..ae48c862a2c 100644 --- a/sqldelight-gradle-plugin/src/test/migration-squash/expected/mysql/_8.sqm +++ b/sqldelight-gradle-plugin/src/test/migration-squash/expected/mysql/_8.sqm @@ -4,7 +4,7 @@ CREATE TABLE test3 ( value VARCHAR(8) ); -CREATE INDEX index1 ON test3(value); +CREATE INDEX idx_value ON test3(value); CREATE VIEW view1 AS diff --git a/sqldelight-gradle-plugin/src/test/migration-squash/src/main/sqldelight/mysql/migrations/3.sqm b/sqldelight-gradle-plugin/src/test/migration-squash/src/main/sqldelight/mysql/migrations/3.sqm index 5674af73567..15c04753704 100644 --- a/sqldelight-gradle-plugin/src/test/migration-squash/src/main/sqldelight/mysql/migrations/3.sqm +++ b/sqldelight-gradle-plugin/src/test/migration-squash/src/main/sqldelight/mysql/migrations/3.sqm @@ -1 +1,3 @@ -ALTER TABLE test DROP INDEX index2; \ No newline at end of file +ALTER TABLE test DROP INDEX index2; + +ALTER TABLE test RENAME INDEX index1 TO idx_value; From 70226c2665cc8afea453c2a74812ee8b59da062b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 May 2024 19:18:24 -0400 Subject: [PATCH 020/184] Update agp to v8.4.0 (#5221) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7b142a9803d..4a1b6743723 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.2.1" -agp = "8.3.2" +agp = "8.4.0" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From e9d8414107fc391fcdd49cd0e0aec534cb7c669b Mon Sep 17 00:00:00 2001 From: Drew Dobson Date: Thu, 2 May 2024 10:04:35 -0500 Subject: [PATCH 021/184] Align error underlines properly when tabs are involved (#5224) --- .../sqldelight/core/SqlDelightEnvironment.kt | 12 +++++++----- .../src/test/bad-underlines/build.gradle | 12 ++++++++++++ .../src/test/bad-underlines/settings.gradle | 7 +++++++ .../src/main/sqldelight/Test1.sq | 3 +++ .../app/cash/sqldelight/tests/FailureTest.kt | 19 +++++++++++++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 sqldelight-gradle-plugin/src/test/bad-underlines/build.gradle create mode 100644 sqldelight-gradle-plugin/src/test/bad-underlines/settings.gradle create mode 100644 sqldelight-gradle-plugin/src/test/bad-underlines/src/main/sqldelight/Test1.sq diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/core/SqlDelightEnvironment.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/core/SqlDelightEnvironment.kt index 5759ae874b5..001c2e5c0a3 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/core/SqlDelightEnvironment.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/core/SqlDelightEnvironment.kt @@ -229,13 +229,15 @@ class SqlDelightEnvironment( val maxDigits = (log10(context.lineEnd.toDouble()) + 1).toInt() for (line in context.lineStart..context.lineEnd) { if (!tokenizer.hasMoreTokens()) break - result.append(("%0${maxDigits}d %s\n").format(line, tokenizer.nextToken())) + val lineValue = tokenizer.nextToken() + result.append(("%0${maxDigits}d %s\n").format(line, lineValue)) if (element.lineStart == element.lineEnd && element.lineStart == line) { - // If its an error on a single line highlight where on the line. + // If it's an error on a single line highlight where on the line. result.append(("%${maxDigits}s ").format("")) - if (element.charPositionInLine > 0) { - result.append(("%${element.charPositionInLine}s").format("")) - } + // Print tabs when you see it, spaces for everything else. + lineValue.subSequence(0 until element.charPositionInLine) + .map { char -> if (char != '\t') " " else char } + .forEach(result::append) result.append(("%s\n").format("^".repeat(element.textLength))) } } diff --git a/sqldelight-gradle-plugin/src/test/bad-underlines/build.gradle b/sqldelight-gradle-plugin/src/test/bad-underlines/build.gradle new file mode 100644 index 00000000000..eea2e83e061 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/bad-underlines/build.gradle @@ -0,0 +1,12 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.sqldelight) +} + +sqldelight { + databases { + Database { + packageName = "com.example" + } + } +} diff --git a/sqldelight-gradle-plugin/src/test/bad-underlines/settings.gradle b/sqldelight-gradle-plugin/src/test/bad-underlines/settings.gradle new file mode 100644 index 00000000000..e993e2cffd9 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/bad-underlines/settings.gradle @@ -0,0 +1,7 @@ +pluginManagement { + includeBuild("../build-logic-tests") +} + +plugins { + id("sqldelightTests") +} diff --git a/sqldelight-gradle-plugin/src/test/bad-underlines/src/main/sqldelight/Test1.sq b/sqldelight-gradle-plugin/src/test/bad-underlines/src/main/sqldelight/Test1.sq new file mode 100644 index 00000000000..0a6b64f8873 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/bad-underlines/src/main/sqldelight/Test1.sq @@ -0,0 +1,3 @@ +CREATE TABLE test1( + value BIGINT +); diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/FailureTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/FailureTest.kt index 0fbe6ea8a5e..038cca7f09e 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/FailureTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/FailureTest.kt @@ -26,4 +26,23 @@ class FailureTest { """.trimMargin(), ) } + + @Test fun `errors with tabs in line underline properly`() { + val fixtureRoot = File("src/test/bad-underlines") + + val output = GradleRunner.create() + .withCommonConfiguration(fixtureRoot) + .withArguments("clean", "generateMainDatabaseInterface", "--stacktrace") + .buildAndFail() + + assertThat(output.output).contains( + """ + |Test1.sq: (2, 7): expected, got 'BIGINT' + |1 CREATE TABLE test1( + |2 value BIGINT + | ^^^^^^ + |3 ) + """.trimMargin(), + ) + } } From 50551cc98657d684f64e026b7cfb61311002d150 Mon Sep 17 00:00:00 2001 From: Drew Dobson Date: Fri, 3 May 2024 13:41:57 -0500 Subject: [PATCH 022/184] Add PostgreSQL current date/time function support (#5226) --- .../postgresql/grammar/PostgreSql.bnf | 13 +++++++---- .../localtimestamp-literals/Test.s | 22 +++++++++++++++++++ .../localtimestamp-with-precission/Test.s | 22 +++++++++++++++++++ .../timestamp-with-precission/Test.s | 22 +++++++++++++++++++ 4 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-literals/Test.s create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-with-precission/Test.s create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/timestamp-with-precission/Test.s diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 103340f394a..3ab64db6d99 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -124,7 +124,7 @@ column_constraint ::= [ CONSTRAINT {identifier} ] ( override = true } -current_timestamp_with_optional_interval ::= ( CURRENT_TIMESTAMP | 'NOW()' | interval_expression ) [ [ PLUS | MINUS ] interval_expression ] * +current_timestamp_with_optional_interval ::= ( current_date_time_functions | 'NOW()' | interval_expression ) [ [ PLUS | MINUS ] interval_expression ] * default_constraint ::= [ NOT NULL | NULL ] DEFAULT ( current_timestamp_with_optional_interval | {signed_number} | @@ -244,13 +244,18 @@ string_literal ::= string { override = true } +precision_literal ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' ) +current_date_time_functions ::= CURRENT_DATE + | 'CURRENT_TIME' [ LP precision_literal RP] + | 'CURRENT_TIMESTAMP' [ LP precision_literal RP] + | 'LOCALTIME' [ LP precision_literal RP] + | 'LOCALTIMESTAMP' [ LP precision_literal RP] + literal_value ::= ( {numeric_literal} | string_literal | {blob_literal} | NULL - | CURRENT_TIME - | CURRENT_DATE - | CURRENT_TIMESTAMP + | current_date_time_functions | interval_expression ) { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.LiteralValueMixin" implements = "com.alecstrong.sql.psi.core.psi.SqlLiteralValue" diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-literals/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-literals/Test.s new file mode 100644 index 00000000000..d4145e3d85c --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-literals/Test.s @@ -0,0 +1,22 @@ +CREATE TABLE test ( + _id INTEGER NOT NULL PRIMARY KEY, + date1 TEXT NOT NULL DEFAULT LOCALTIME, + date2 TEXT NOT NULL DEFAULT LOCALTIMESTAMP +); + +-- Throws no errors. +CREATE TRIGGER on_update_trigger +AFTER UPDATE +ON test +BEGIN + UPDATE test SET date1 = LOCALTIME WHERE new._id = old._id; +END; + +UPDATE test +SET date1 = LOCALTIME, + date2 = LOCALTIMESTAMP; + +UPDATE test +SET date1 = LOCALTIME, + date2 = LOCALTIMESTAMP +WHERE date1 > LOCALTIME; diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-with-precission/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-with-precission/Test.s new file mode 100644 index 00000000000..3660352ccfd --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/localtimestamp-with-precission/Test.s @@ -0,0 +1,22 @@ +CREATE TABLE test ( + _id INTEGER NOT NULL PRIMARY KEY, + date1 TEXT NOT NULL DEFAULT LOCALTIME(2), + date2 TEXT NOT NULL DEFAULT LOCALTIMESTAMP(3) +); + +-- Throws no errors. +CREATE TRIGGER on_update_trigger +AFTER UPDATE +ON test +BEGIN + UPDATE test SET date1 = LOCALTIME(1) WHERE new._id = old._id; +END; + +UPDATE test +SET date1 = LOCALTIME(6), + date2 = LOCALTIMESTAMP(2); + +UPDATE test +SET date1 = LOCALTIME(2), + date2 = LOCALTIMESTAMP(3) +WHERE date1 > LOCALTIME(1); diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/timestamp-with-precission/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/timestamp-with-precission/Test.s new file mode 100644 index 00000000000..17617f9c576 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/timestamp-with-precission/Test.s @@ -0,0 +1,22 @@ +CREATE TABLE test ( + _id INTEGER NOT NULL PRIMARY KEY, + date1 TEXT NOT NULL DEFAULT CURRENT_TIME(2), + date2 TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP(3) +); + +-- Throws no errors. +CREATE TRIGGER on_update_trigger +AFTER UPDATE +ON test +BEGIN + UPDATE test SET date1 = CURRENT_TIME(1) WHERE new._id = old._id; +END; + +UPDATE test +SET date1 = CURRENT_TIME(6), + date2 = CURRENT_TIMESTAMP(2); + +UPDATE test +SET date1 = CURRENT_TIME(2), + date2 = CURRENT_TIMESTAMP(3) +WHERE date1 > CURRENT_TIME(1); From 97e84131aab0983e68ef42abf328723f4063921c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 01:40:46 +0000 Subject: [PATCH 023/184] Update kotlin monorepo to v1.9.24 (#5230) * Update kotlin monorepo to v1.9.24 * Update plugin ksp to v1.9.24-1.0.20 (#5236) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4a1b6743723..0a3e322e88a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin = "1.9.23" +kotlin = "1.9.24" dokka = "1.9.20" kotlinCoroutines = "1.8.0" idea = "231.9392.1" # Hedgehog | 2023.1.1 Patch 2 (see https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html) @@ -108,5 +108,5 @@ publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } -ksp = { id = "com.google.devtools.ksp", version = "1.9.23-1.0.20" } +ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.14.0" } From 51e4536c1e9c0d59bc4789531753914acf1119ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 9 May 2024 02:52:32 +0000 Subject: [PATCH 024/184] Update testcontainers-java monorepo to v1.19.8 (#5239) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a3e322e88a..f4eef84bf43 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ agp = "8.4.0" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" -testContainers = "1.19.7" +testContainers = "1.19.8" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } From 3f9618a996570a88541936b1a39db6b439dbff22 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 07:08:25 -0400 Subject: [PATCH 025/184] Update plugin com.gradle.develocity to v3.17.3 (#5245) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index de7a3d16148..a3058dcaf53 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.2" + id "com.gradle.develocity" version "3.17.3" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 9ac786949cb..ec9d429ec5f 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.2" + id "com.gradle.develocity" version "3.17.3" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index ae03ef4758d..9c5e8e0d5c8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.2" + id "com.gradle.develocity" version "3.17.3" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 3d309726013f2506cffad5f48a0dc534f2effae0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 10 May 2024 13:56:13 +0200 Subject: [PATCH 026/184] Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-reactive to v1.8.1 (#5246) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f4eef84bf43..0a12bb1bbff 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "1.9.24" dokka = "1.9.20" -kotlinCoroutines = "1.8.0" +kotlinCoroutines = "1.8.1" idea = "231.9392.1" # Hedgehog | 2023.1.1 Patch 2 (see https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html) androidxSqlite = "2.4.0" schemaCrawler = "16.19.2" From 2e033dceb374e83414026c6bcadd16c3c4351bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Fri, 10 May 2024 12:57:03 +0100 Subject: [PATCH 027/184] Add 5199 support postgresql order by nulls (#5229) * Add PostgreSql Order By Nulls Add grammar * Add fixture tests --- .../postgresql/grammar/PostgreSql.bnf | 7 +++++ .../order-by-nulls/Sample.s | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/order-by-nulls/Sample.s diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 3ab64db6d99..a0fe4aefde0 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -108,6 +108,7 @@ overrides ::= type_name | extension_stmt | create_index_stmt | select_stmt + | ordering_term column_constraint ::= [ CONSTRAINT {identifier} ] ( PRIMARY KEY [ ASC | DESC ] {conflict_clause} | @@ -532,3 +533,9 @@ set_timezone ::= 'TIME' 'ZONE' | 'LOCAL' | set_value ) + +ordering_term ::= <> [ ASC | DESC ] [ 'NULLS' ( 'FIRST' | 'LAST' ) ] { + extends = "com.alecstrong.sql.psi.core.psi.impl.SqlOrderingTermImpl" + implements = "com.alecstrong.sql.psi.core.psi.SqlOrderingTerm" + override = true +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/order-by-nulls/Sample.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/order-by-nulls/Sample.s new file mode 100644 index 00000000000..ea967c2a41a --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/order-by-nulls/Sample.s @@ -0,0 +1,28 @@ +CREATE TABLE table_name( + column1 TEXT, + column2 DATE, + column3 INTEGER +); + +SELECT column1, column2 +FROM table_name +ORDER BY column1 NULLS FIRST, column2 DESC; + +SELECT column1, column2 +FROM table_name +ORDER BY column1 DESC NULLS LAST, column2; + +SELECT column1, column2, column3 +FROM table_name +ORDER BY column1 NULLS FIRST, column2 NULLS LAST, column3; + +SELECT + column1, + column2, + column3 +FROM + table_name +ORDER BY + column1 ASC, + column2 DESC, + column3; From afa89af092089f42a8628698b7ea7a8a18e71681 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 19:37:17 +0000 Subject: [PATCH 028/184] Update plugin com.gradle.develocity to v3.17.4 (#5259) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index a3058dcaf53..af8e50b7299 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.3" + id "com.gradle.develocity" version "3.17.4" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index ec9d429ec5f..066e501bade 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.3" + id "com.gradle.develocity" version "3.17.4" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index 9c5e8e0d5c8..10c6fb8358b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.3" + id "com.gradle.develocity" version "3.17.4" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 617875f31434908b8ac0b65e209170f0096d84b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 18 May 2024 07:01:38 -0400 Subject: [PATCH 029/184] Update dependency org.robolectric:robolectric to v4.12.2 (#5260) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a12bb1bbff..ae5ff554943 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -65,7 +65,7 @@ intellij-util = { module = "com.jetbrains.intellij.platform:util", version.ref = sqlPsi = { module = "com.alecstrong.sql.psi:core", version.ref = "sqlPsi" } sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref = "sqlPsi" } -robolectric = { module = "org.robolectric:robolectric", version = "4.12.1" } +robolectric = { module = "org.robolectric:robolectric", version = "4.12.2" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.45.3.0" } From 08e929a13f40f4e094d4b56d4c6d3a35a8793a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 20 May 2024 15:57:08 +0100 Subject: [PATCH 030/184] Fixes 5262 PostgreSql boolean literals (#5263) --- .../dialects/postgresql/PostgreSqlTypeResolver.kt | 3 ++- .../dialects/postgresql/grammar/PostgreSql.bnf | 4 +++- .../sqldelight/postgresql/integration/Booleans.sq | 10 ++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 13 +++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Booleans.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index fe4cf0633a9..31ba43fb599 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -259,6 +259,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes } } is SqlLiteralExpr -> when { + literalValue.text == "TRUE" || literalValue.text == "FALSE" -> IntermediateType(BOOLEAN) literalValue.text == "CURRENT_DATE" -> IntermediateType(PostgreSqlType.DATE) literalValue.text == "CURRENT_TIME" -> IntermediateType(PostgreSqlType.TIME) literalValue.text == "CURRENT_TIMESTAMP" -> IntermediateType(PostgreSqlType.TIMESTAMP) @@ -284,7 +285,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes IntermediateType(PostgreSqlType.JSON) } } - matchOperatorExpression != null || regexMatchOperatorExpression != null -> { + matchOperatorExpression != null || regexMatchOperatorExpression != null || booleanNotExpression != null -> { IntermediateType(BOOLEAN) } else -> parentResolver.resolvedType(this) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index a0fe4aefde0..f2bcb8bb97d 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -109,6 +109,7 @@ overrides ::= type_name | create_index_stmt | select_stmt | ordering_term + | literal_value column_constraint ::= [ CONSTRAINT {identifier} ] ( PRIMARY KEY [ ASC | DESC ] {conflict_clause} | @@ -256,6 +257,7 @@ literal_value ::= ( {numeric_literal} | string_literal | {blob_literal} | NULL + | boolean_literal | current_date_time_functions | interval_expression ) { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.LiteralValueMixin" @@ -376,7 +378,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_literal | boolean_not_expression | window_function_expr { +extension_expr ::= regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Booleans.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Booleans.sq new file mode 100644 index 00000000000..56f17c13c02 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Booleans.sq @@ -0,0 +1,10 @@ +CREATE TABLE T( + b BOOLEAN NOT NULL +); + +insert: +INSERT INTO T(b) VALUES (?); + +select: +SELECT TRUE, FALSE, NOT TRUE, NOT FALSE, b +FROM T; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 7948c9d3959..4a9b5c7e53c 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -895,4 +895,17 @@ class PostgreSqlTest { assertThat(first().percent_rank).isEqualTo(0) } } + + @Test + fun testBooleans() { + database.booleansQueries.insert(true) + + with(database.booleansQueries.select().executeAsOne()) { + assertThat(expr).isTrue() + assertThat(expr_).isFalse() + assertThat(expr__).isFalse() + assertThat(expr___).isTrue() + assertThat(b).isTrue() + } + } } From 0fe6f6bbcee6b7a7012435e1d1bff25d378a0329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 20 May 2024 17:47:42 +0100 Subject: [PATCH 031/184] Fixes 5243 add PostgreSql AT TIME ZONE (#5253) --- .../postgresql/PostgreSqlTypeResolver.kt | 23 ++++++++++++++++- .../postgresql/grammar/PostgreSql.bnf | 19 +++++++++++--- .../AtTimeZoneOperatorExpressionMixin.kt | 23 +++++++++++++++++ .../grammar/mixins/AtTimeZoneOperatorMixin.kt | 14 +++++++++++ .../postgres/PostgreSqlFixturesTest.kt | 2 +- .../fixtures_postgresql/at-time-zone/Test.s | 25 +++++++++++++++++++ .../postgresql/integration/TimeZone.sq | 22 ++++++++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 20 +++++++++++++++ 8 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorExpressionMixin.kt create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/at-time-zone/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/TimeZone.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 31ba43fb599..35142c9e3a0 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -18,7 +18,9 @@ import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.SMALL_INT import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.TIMESTAMP import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.TIMESTAMP_TIMEZONE import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AggregateExpressionMixin +import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.WindowFunctionMixin +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAtTimeZoneOperator import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDeleteStmtLimited import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlExtensionExpr import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlInsertStmt @@ -37,6 +39,7 @@ import com.alecstrong.sql.psi.core.psi.SqlLiteralExpr import com.alecstrong.sql.psi.core.psi.SqlStmt import com.alecstrong.sql.psi.core.psi.SqlTypeName import com.alecstrong.sql.psi.core.psi.SqlTypes +import com.intellij.psi.PsiElement import com.intellij.psi.tree.TokenSet import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy @@ -227,6 +230,14 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes return expr.postgreSqlType() } + override fun argumentType(parent: PsiElement, argument: SqlExpr): IntermediateType { + return if (argument.parent is PostgreSqlAtTimeZoneOperator) { + IntermediateType(TEXT) + } else { + parentResolver.argumentType(parent, argument) + } + } + private fun SqlExpr.postgreSqlType(): IntermediateType = when (this) { is SqlIsExpr -> IntermediateType(BOOLEAN) is SqlBinaryExpr -> { @@ -262,10 +273,14 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes literalValue.text == "TRUE" || literalValue.text == "FALSE" -> IntermediateType(BOOLEAN) literalValue.text == "CURRENT_DATE" -> IntermediateType(PostgreSqlType.DATE) literalValue.text == "CURRENT_TIME" -> IntermediateType(PostgreSqlType.TIME) - literalValue.text == "CURRENT_TIMESTAMP" -> IntermediateType(PostgreSqlType.TIMESTAMP) + literalValue.text.startsWith("CURRENT_TIMESTAMP") -> IntermediateType(PostgreSqlType.TIMESTAMP_TIMEZONE) + literalValue.text.startsWith("TIMESTAMP WITH TIME ZONE") -> IntermediateType(PostgreSqlType.TIMESTAMP_TIMEZONE) + literalValue.text.startsWith("TIMESTAMP WITHOUT TIME ZONE") -> IntermediateType(TIMESTAMP) + literalValue.text.startsWith("TIMESTAMP") -> IntermediateType(TIMESTAMP) literalValue.text.startsWith("INTERVAL") -> IntermediateType(PostgreSqlType.INTERVAL) else -> parentResolver.resolvedType(this) } + is PostgreSqlAtTimeZoneOperator -> IntermediateType(TEXT) is PostgreSqlExtensionExpr -> when { arrayAggStmt != null -> { val typeForArray = (arrayAggStmt as AggregateExpressionMixin).expr.postgreSqlType() // same as resolvedType(expr) @@ -288,6 +303,12 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes matchOperatorExpression != null || regexMatchOperatorExpression != null || booleanNotExpression != null -> { IntermediateType(BOOLEAN) } + atTimeZoneOperatorExpression != null -> { + val timeStamp = (atTimeZoneOperatorExpression as AtTimeZoneOperatorExpressionMixin).postgreSqlType() + atTimeZoneOperatorExpression?.atTimeZoneOperatorList?.fold(timeStamp) { acc, _ -> + if (acc.dialectType == TIMESTAMP) IntermediateType(TIMESTAMP_TIMEZONE) else IntermediateType(TIMESTAMP) + } ?: if (timeStamp.dialectType == TIMESTAMP) IntermediateType(TIMESTAMP_TIMEZONE) else IntermediateType(TIMESTAMP) + } else -> parentResolver.resolvedType(this) } diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index f2bcb8bb97d..e6591a608cd 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -226,6 +226,8 @@ tsvector_data_type ::= 'TSVECTOR' interval_expression ::= 'INTERVAL' string_literal +timestamp_expression ::= 'TIMESTAMP' [ (WITH | WITHOUT) 'TIME' 'ZONE' ] {string_literal} + with_clause_auxiliary_stmt ::= {compound_select_stmt} | delete_stmt_limited | insert_stmt | update_stmt_limited { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlWithClauseAuxiliaryStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlWithClauseAuxiliaryStmt" @@ -259,7 +261,8 @@ literal_value ::= ( {numeric_literal} | NULL | boolean_literal | current_date_time_functions - | interval_expression ) { + | interval_expression + | timestamp_expression) { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.LiteralValueMixin" implements = "com.alecstrong.sql.psi.core.psi.SqlLiteralValue" override = true @@ -378,7 +381,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { +extension_expr ::= at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true @@ -446,7 +449,17 @@ regex_match_operator_expression ::= ( {function_expr} | {column_expr} ) regex_ma pin = 2 } -extension_stmt ::= create_sequence_stmt | copy_stdin | truncate_stmt | set_stmt | drop_sequence_stmt | alter_sequence_stmt | create_extension_stmt | drop_extension_stmt | alter_extension_stmt { +at_time_zone_operator ::= 'AT' 'TIME' 'ZONE' <> { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorMixin" +} + +at_time_zone_operator_expression ::= ( {literal_expr} | {cast_expr} | {function_expr} | {column_expr} ) at_time_zone_operator [ at_time_zone_operator ] * { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorExpressionMixin" + pin = 2 +} + +extension_stmt ::= create_sequence_stmt | copy_stdin | truncate_stmt | set_stmt | drop_sequence_stmt | + alter_sequence_stmt | create_extension_stmt | drop_extension_stmt | alter_extension_stmt { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionStmt" override = true diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorExpressionMixin.kt new file mode 100644 index 00000000000..5a0c44108d6 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorExpressionMixin.kt @@ -0,0 +1,23 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAtTimeZoneOperatorExpression +import com.alecstrong.sql.psi.core.psi.SqlBinaryExpr +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode + +/** + * The AT TIME ZONE operator converts time stamp without time zone to/from time stamp with time zone, + * and time with time zone values to different time zones (Note: time is not currently supported) + * timestamp without time zone AT TIME ZONE zone → timestamp with time zone + * timestamp with time zone AT TIME ZONE zone → timestamp without time zone + */ +internal abstract class AtTimeZoneOperatorExpressionMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlBinaryExpr, + PostgreSqlAtTimeZoneOperatorExpression { + + override fun getExprList(): List { + return children.filterIsInstance() + } +} diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorMixin.kt new file mode 100644 index 00000000000..06ad1363e82 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AtTimeZoneOperatorMixin.kt @@ -0,0 +1,14 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAtTimeZoneOperator +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode + +/** + * + */ +internal abstract class AtTimeZoneOperatorMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlExpr, + PostgreSqlAtTimeZoneOperator diff --git a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt index ca2b67c4feb..2273c7df799 100644 --- a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt +++ b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt @@ -18,7 +18,7 @@ class PostgreSqlFixturesTest(name: String, fixtureRoot: File) : FixturesTest(nam "BLOB" to "TEXT", "id TEXT GENERATED ALWAYS AS (2) UNIQUE NOT NULL" to "id TEXT GENERATED ALWAYS AS (2) STORED UNIQUE NOT NULL", "'(', ')', ',', '.', , BETWEEN or IN expected, got ','" - to "'#-', '(', ')', ',', '.', , , , , '@@', BETWEEN or IN expected, got ','", + to "'#-', '(', ')', ',', '.', , , , , '@@', AT, BETWEEN or IN expected, got ','", ) override fun setupDialect() { diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/at-time-zone/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/at-time-zone/Test.s new file mode 100644 index 00000000000..2960b89eb3d --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/at-time-zone/Test.s @@ -0,0 +1,25 @@ +CREATE TABLE Tz( + ts TIMESTAMP WITHOUT TIME ZONE, + tstz TIMESTAMPTZ, + z TEXT +); + +SELECT CAST('2024-05-10T00:28:36+03' AS TIMESTAMPTZ) AT TIME ZONE 'America/Denver'; + +SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'America/Chicago'; + +SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Denver'; + +SELECT TIMESTAMP WITHOUT TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Chicago'; + +SELECT CURRENT_TIMESTAMP AT TIME ZONE 'America/Chicago'; + +SELECT CURRENT_TIMESTAMP(3) AT TIME ZONE 'America/Denver'; + +SELECT ts AT TIME ZONE 'America/Chicago' FROM Tz; + +SELECT tstz AT TIME ZONE 'America/Denver' FROM Tz; + +SELECT CAST(? AS TIMESTAMP) AT TIME ZONE 'America/Denver' FROM Tz; + +SELECT CAST(? AS TIMESTAMP) AT TIME ZONE z FROM Tz; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/TimeZone.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/TimeZone.sq new file mode 100644 index 00000000000..127fc7f9ac0 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/TimeZone.sq @@ -0,0 +1,22 @@ +CREATE TABLE Tz( + ts TIMESTAMP WITHOUT TIME ZONE, + tstz TIMESTAMPTZ, + zn TEXT DEFAULT 'America/Chicago' +); + +insert: +INSERT INTO Tz (ts, tstz) VALUES (?, ?); + +select: +SELECT +CAST('2024-05-10T00:28:36+03' AS TIMESTAMPTZ) AT TIME ZONE 'America/Denver', +TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'America/Chicago', +TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Denver', +TIMESTAMP WITHOUT TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'America/Chicago', +ts AT TIME ZONE zn, +tstz AT TIME ZONE 'America/Denver', +CURRENT_TIMESTAMP AT TIME ZONE 'America/Chicago', +CURRENT_TIMESTAMP(3) AT TIME ZONE 'America/Denver', +CAST(? AS TIMESTAMPTZ) AT TIME ZONE 'America/Chicago', +CAST(? AS TIMESTAMP) AT TIME ZONE ? +FROM Tz; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 4a9b5c7e53c..ef1283ab17f 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -908,4 +908,24 @@ class PostgreSqlTest { assertThat(b).isTrue() } } + + @Test + fun testAtTimeZone() { + val ts = LocalDateTime.of(2001, 2, 16, 20, 38, 40) + val tstz = OffsetDateTime.of(2001, 2, 16, 20, 38, 40, 0, ZoneOffset.ofHours(0)) + database.timeZoneQueries.insert(ts, tstz) + + with(database.timeZoneQueries.select(tstz, ts, "America/Chicago").executeAsOne()) { + assertThat(expr).isEqualTo(LocalDateTime.of(2024, 5, 9, 15, 28, 36)) + assertThat(expr_).isEqualTo(OffsetDateTime.of(2001, 2, 17, 2, 38, 40, 0, ZoneOffset.ofHours(0))) + assertThat(expr__).isEqualTo(LocalDateTime.of(2001, 2, 16, 18, 38, 40)) + assertThat(expr___).isEqualTo(OffsetDateTime.of(2001, 2, 17, 2, 38, 40, 0, ZoneOffset.ofHours(0))) + assertThat(expr____).isEqualTo(OffsetDateTime.of(2001, 2, 17, 2, 38, 40, 0, ZoneOffset.ofHours(0))) + assertThat(expr_____).isEqualTo(LocalDateTime.of(2001, 2, 16, 13, 38, 40)) + assertThat(expr______).isGreaterThan(LocalDateTime.MIN) + assertThat(expr_______).isGreaterThan(LocalDateTime.MIN) + assertThat(expr________).isEqualTo(LocalDateTime.of(2001, 2, 16, 14, 38, 40)) + assertThat(expr_________).isEqualTo(OffsetDateTime.of(2001, 2, 17, 2, 38, 40, 0, ZoneOffset.ofHours(0))) + } + } } From 5606c7ea71a0bb8162682a000582daacf2f577bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 20:33:28 -0400 Subject: [PATCH 032/184] Update agp to v8.4.1 (#5264) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ae5ff554943..d0c1bb2c378 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.2.1" -agp = "8.4.0" +agp = "8.4.1" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From a2b5696edf8e378b1372043f6d0c0ef48540b193 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 17:17:09 +0000 Subject: [PATCH 033/184] Update dependency org.xerial:sqlite-jdbc to v3.46.0.0 (#5276) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d0c1bb2c378..8f4d10280ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,7 @@ sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref robolectric = { module = "org.robolectric:robolectric", version = "4.12.2" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } -sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.45.3.0" } +sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.0" } postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } From 06da7d5c8dec2e9155b874cce4c5da02c7910e68 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 14:29:41 -0400 Subject: [PATCH 034/184] Update dependency com.squareup:kotlinpoet to v1.17.0 (#5272) * Update dependency com.squareup:kotlinpoet to v1.17.0 * Formatting * One more --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle/libs.versions.toml | 2 +- .../example/testmodule/TestDatabaseImpl.kt | 3 +- .../cash/sqldelight/core/QueriesTypeTest.kt | 15 ++++++---- .../cash/sqldelight/core/QueryWrapperTest.kt | 30 ++++++++++++------- .../core/async/AsyncQueriesTypeTest.kt | 3 +- .../core/async/AsyncQueryWrapperTest.kt | 3 +- .../cash/sqldelight/tests/MigrationTest.kt | 3 +- 7 files changed, 39 insertions(+), 20 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8f4d10280ce..c51fd78849a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ androidx-paging3-runtime = { module = "androidx.paging:paging-runtime", version. androidx-recyclerView = { module = "androidx.recyclerview:recyclerview", version = "1.3.2" } android-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } -kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.16.0" } +kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.17.0" } junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } truth = { module = "com.google.truth:truth", version = "1.4.2" } diff --git a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/testmodule/TestDatabaseImpl.kt b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/testmodule/TestDatabaseImpl.kt index a535ba98c7e..518e6f68edf 100644 --- a/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/testmodule/TestDatabaseImpl.kt +++ b/sqldelight-compiler/integration-tests/src/test/kotlin/com/example/testmodule/TestDatabaseImpl.kt @@ -28,7 +28,8 @@ private class TestDatabaseImpl( driver: SqlDriver, playerAdapter: Player.Adapter, teamAdapter: Team.Adapter, -) : TransacterImpl(driver), TestDatabase { +) : TransacterImpl(driver), + TestDatabase { override val groupQueries: GroupQueries = GroupQueries(driver) override val playerQueries: PlayerQueries = PlayerQueries(driver, playerAdapter) diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt index 4802248de22..4a6fef64bc6 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt @@ -79,7 +79,8 @@ class QueriesTypeTest { | driver: SqlDriver, | data_Adapter: Data_.Adapter, | otherAdapter: Other.Adapter, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val dataQueries: DataQueries = DataQueries(driver, data_Adapter, otherAdapter) | | public object Schema : SqlSchema> { @@ -264,7 +265,8 @@ class QueriesTypeTest { |private class TestDatabaseImpl( | driver: SqlDriver, | data_Adapter: Data_.Adapter, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val dataQueries: DataQueries = DataQueries(driver, data_Adapter) | | public object Schema : SqlSchema> { @@ -362,7 +364,8 @@ class QueriesTypeTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -442,7 +445,8 @@ class QueriesTypeTest { |private class TestDatabaseImpl( | driver: SqlDriver, | data_Adapter: Data_.Adapter, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val dataQueries: DataQueries = DataQueries(driver, data_Adapter) | | public object Schema : SqlSchema> { @@ -598,7 +602,8 @@ class QueriesTypeTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val searchQueries: SearchQueries = SearchQueries(driver) | | public object Schema : SqlSchema> { diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt index 1a06f3d93d6..2ae409dc316 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt @@ -53,7 +53,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -141,7 +142,8 @@ class QueryWrapperTest { | driver: SqlDriver, | test_table2Adapter: Test_table2.Adapter, | test_tableAdapter: Test_table.Adapter, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val testQueries: TestQueries = TestQueries(driver, test_tableAdapter, test_table2Adapter) | | public object Schema : SqlSchema> { @@ -219,7 +221,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -313,7 +316,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -399,7 +403,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -483,7 +488,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -558,7 +564,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 @@ -654,7 +661,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 3 @@ -770,7 +778,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | override val queryQueries: QueryQueries = QueryQueries(driver) | | public object Schema : SqlSchema> { @@ -883,7 +892,8 @@ class QueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), TestDatabase { + |) : TransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 1 diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueriesTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueriesTypeTest.kt index 705a9d8e2ec..8ac3c14c456 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueriesTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueriesTypeTest.kt @@ -80,7 +80,8 @@ class AsyncQueriesTypeTest { | driver: SqlDriver, | data_Adapter: Data_.Adapter, | otherAdapter: Other.Adapter, - |) : SuspendingTransacterImpl(driver), TestDatabase { + |) : SuspendingTransacterImpl(driver), + | TestDatabase { | override val dataQueries: DataQueries = DataQueries(driver, data_Adapter, otherAdapter) | | public object Schema : SqlSchema> { diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueryWrapperTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueryWrapperTest.kt index eaeb30bc187..c1d0b64214f 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueryWrapperTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/async/AsyncQueryWrapperTest.kt @@ -73,7 +73,8 @@ class AsyncQueryWrapperTest { | |private class TestDatabaseImpl( | driver: SqlDriver, - |) : SuspendingTransacterImpl(driver), TestDatabase { + |) : SuspendingTransacterImpl(driver), + | TestDatabase { | public object Schema : SqlSchema> { | override val version: Long | get() = 3 diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt index 5fce8c39f7e..c54dc7d18c0 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt @@ -259,7 +259,8 @@ class MigrationTest { """ |private class DatabaseImpl( | driver: SqlDriver, - |) : TransacterImpl(driver), Database { + |) : TransacterImpl(driver), + | Database { | override val testQueries: TestQueries = TestQueries(driver) | | public object Schema : SqlSchema> { From a7d11d0fe97c583d9fb4eadee0117d5accdb35c0 Mon Sep 17 00:00:00 2001 From: Kyle Robinson Young Date: Sat, 1 Jun 2024 05:20:38 -0700 Subject: [PATCH 035/184] Fix typo in generateAsync description. (#5281) --- docs/common/gradle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/common/gradle.md b/docs/common/gradle.md index 470002470a5..5c2b668bb8b 100644 --- a/docs/common/gradle.md +++ b/docs/common/gradle.md @@ -214,7 +214,7 @@ Defaults to `false`. Type: `Property` -If set to true, SQLDelight will generate suspending query methods for us with asynchronous drivers. +If set to true, SQLDelight will generate suspending query methods for use with asynchronous drivers. Defaults to `false`. From fb48f4682c4f086d7d2f34e383b901ba4b91fd1a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 09:59:15 -0400 Subject: [PATCH 036/184] Update dependency gradle to v8.8 (#5280) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- sample-web/gradle/wrapper/gradle-wrapper.properties | 2 +- sample/gradle/wrapper/gradle-wrapper.properties | 2 +- sample/gradlew | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f0..a4413138c96 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a42690..b740cf13397 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/sample-web/gradle/wrapper/gradle-wrapper.properties b/sample-web/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f0..a4413138c96 100644 --- a/sample-web/gradle/wrapper/gradle-wrapper.properties +++ b/sample-web/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample/gradle/wrapper/gradle-wrapper.properties b/sample/gradle/wrapper/gradle-wrapper.properties index b82aa23a4f0..a4413138c96 100644 --- a/sample/gradle/wrapper/gradle-wrapper.properties +++ b/sample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample/gradlew b/sample/gradlew index 1aa94a42690..b740cf13397 100755 --- a/sample/gradlew +++ b/sample/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. From f77d50a58413c5c74bc0db919d821275d6ac9438 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:43:17 +0000 Subject: [PATCH 037/184] Update agp to v8.4.2 (#5295) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c51fd78849a..99654db28ad 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.2.1" -agp = "8.4.1" +agp = "8.4.2" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From 6fa1522ca3e87b8e1379891a7d30422489198753 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 16:45:54 -0400 Subject: [PATCH 038/184] Update plugin com.gradle.develocity to v3.17.5 (#5299) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index af8e50b7299..73510e3b9b4 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.4" + id "com.gradle.develocity" version "3.17.5" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 066e501bade..c492a90b09e 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.4" + id "com.gradle.develocity" version "3.17.5" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index 10c6fb8358b..c83b02e7f03 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.4" + id "com.gradle.develocity" version "3.17.5" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 2b8c4374dc6d5669c5047e80e47cb849b8aaa5fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Jun 2024 19:07:51 +0000 Subject: [PATCH 039/184] Update agp to v8.5.0 (#5300) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 99654db28ad..bb501d604d0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.2.1" -agp = "8.4.2" +agp = "8.5.0" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From f8ea13615a5978fdf9125a92b3f16df9918c25b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Jun 2024 10:08:42 -0400 Subject: [PATCH 040/184] Update dependency org.hsqldb:hsqldb to v2.7.3 (#5279) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sqldelight-gradle-plugin/src/test/integration-hsql/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqldelight-gradle-plugin/src/test/integration-hsql/build.gradle b/sqldelight-gradle-plugin/src/test/integration-hsql/build.gradle index 3cf3fb35908..229226f6569 100644 --- a/sqldelight-gradle-plugin/src/test/integration-hsql/build.gradle +++ b/sqldelight-gradle-plugin/src/test/integration-hsql/build.gradle @@ -13,7 +13,7 @@ sqldelight { } dependencies { - implementation "org.hsqldb:hsqldb:2.7.2" + implementation "org.hsqldb:hsqldb:2.7.3" implementation "app.cash.sqldelight:jdbc-driver:${app.cash.sqldelight.VersionKt.VERSION}" implementation libs.truth } From 6aa2924c49dff814e1d4f757e15d723848969724 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Jun 2024 18:45:12 +0000 Subject: [PATCH 041/184] Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.0 (#5285) * Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.0 * Disable expression rule * Reformat * Reformat again * Manual format --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- build.gradle | 2 ++ .../hsql/grammar/mixins/ResultColumnMixin.kt | 4 +++- .../postgresql/grammar/mixins/ColumnDefMixin.kt | 4 +++- .../postgresql/grammar/mixins/CopyMixin.kt | 4 +++- .../postgresql/grammar/mixins/CreateIndexMixin.kt | 6 +++--- .../grammar/mixins/DistinctOnExpressionMixin.kt | 3 ++- .../grammar/mixins/ReturningClauseMixin.kt | 4 +++- .../grammar/mixins/SqlDeleteStmtLimitedMixin.kt | 3 ++- .../grammar/mixins/SqlInsertStmtMixin.kt | 3 ++- .../sqlite_3_24/grammar/mixins/InsertStmtMixin.kt | 6 ++++-- .../grammar/mixins/ResultColumnMixin.kt | 4 +++- .../sqlite_3_35/grammar/mixins/InsertStmtMixin.kt | 6 ++++-- .../dialects/sqlite/json/module/JsonModule.kt | 3 +-- .../module/grammar/mixins/TableOrSubqueryMixin.kt | 9 +++++++-- .../driver/android/AndroidSqliteDriver.kt | 3 ++- .../app/cash/sqldelight/driver/jdbc/JdbcDriver.kt | 4 +++- .../sqldelight/driver/native/NativeSqlDatabase.kt | 3 ++- .../cash/sqldelight/driver/r2dbc/R2dbcDriver.kt | 4 +++- .../driver/jdbc/sqlite/JdbcSqliteDriver.kt | 3 ++- .../widget/BatchingListUpdateCallback.kt | 9 ++++++--- .../app/cash/sqldelight/rx2/RxJavaExtensions.kt | 4 +++- .../app/cash/sqldelight/rx2/RecordingObserver.kt | 3 ++- .../app/cash/sqldelight/rx3/RxJavaExtensions.kt | 4 +++- .../app/cash/sqldelight/rx3/RecordingObserver.kt | 3 ++- gradle/libs.versions.toml | 2 +- .../kotlin/app/cash/sqldelight/Transacter.kt | 14 ++++++++++---- .../cash/sqldelight/db/OptimisticLockException.kt | 3 +-- .../sqldelight/dialect/api/PragmaWithResults.kt | 4 +++- .../dialect/grammar/mixins/BindParameterMixin.kt | 4 +++- .../core/compiler/MutatorQueryGenerator.kt | 9 +++++---- .../sqldelight/core/compiler/model/NamedQuery.kt | 3 ++- .../sqldelight/core/lang/psi/ColumnTypeMixin.kt | 3 ++- .../shared/common/data/SqlDriverFactoryProvider.kt | 2 +- .../app/cash/sqldelight/intellij/ProjectService.kt | 4 +++- .../intellij/SqlDelightReferenceContributor.kt | 3 +-- .../intellij/actions/BaseGenerateAction.kt | 5 +++-- .../intellij/inspections/UnusedColumnInspection.kt | 3 +-- .../suppression/SqlDelightInspectionSuppressor.kt | 9 +++++---- .../SqlDelightSuppressInspectionQuickFix.kt | 3 +-- .../intellij/intentions/AddImportIntention.kt | 4 +++- .../intentions/AddOptimisticLockIntention.kt | 4 +++- .../intellij/lang/SqlDelightFoldingBuilder.kt | 4 +++- .../intellij/lang/SqlDelightHighlightVisitor.kt | 4 +++- .../notifications/FileIndexingNotification.kt | 3 ++- .../intellij/run/ArgumentsInputDialogImpl.kt | 3 ++- .../testData/find-usages/ExampleQueries.kt | 2 +- .../unused-query-inspection/SomeTableQueries.kt | 2 +- 47 files changed, 130 insertions(+), 68 deletions(-) diff --git a/build.gradle b/build.gradle index 9db7c9dfdae..09872f490d8 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,8 @@ spotless { ktlint(libs.versions.ktlint.get()).editorConfigOverride([ "ktlint_standard_discouraged-comment-location": "disabled", "ktlint_standard_package-name": "disabled", + // Making something an expression body should be a choice around readability. + 'ktlint_standard_function-expression-body': 'disabled', ]) } } diff --git a/dialects/hsql/src/main/kotlin/app/cash/sqldelight/dialects/hsql/grammar/mixins/ResultColumnMixin.kt b/dialects/hsql/src/main/kotlin/app/cash/sqldelight/dialects/hsql/grammar/mixins/ResultColumnMixin.kt index b24ad4ea305..fc4b96f7aec 100644 --- a/dialects/hsql/src/main/kotlin/app/cash/sqldelight/dialects/hsql/grammar/mixins/ResultColumnMixin.kt +++ b/dialects/hsql/src/main/kotlin/app/cash/sqldelight/dialects/hsql/grammar/mixins/ResultColumnMixin.kt @@ -7,7 +7,9 @@ import com.alecstrong.sql.psi.core.psi.QueryElement.QueryResult import com.alecstrong.sql.psi.core.psi.impl.SqlResultColumnImpl import com.intellij.lang.ASTNode -internal abstract class ResultColumnMixin(node: ASTNode) : SqlResultColumnImpl(node), HsqlResultColumn { +internal abstract class ResultColumnMixin(node: ASTNode) : + SqlResultColumnImpl(node), + HsqlResultColumn { private val queryExposed = ModifiableFileLazy lazy@{ if (windowFunctionInvocation != null) { var column = QueryElement.QueryColumn(this) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ColumnDefMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ColumnDefMixin.kt index fdc2b40143b..e84667c02da 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ColumnDefMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ColumnDefMixin.kt @@ -5,7 +5,9 @@ import com.alecstrong.sql.psi.core.psi.SqlColumnDef import com.alecstrong.sql.psi.core.psi.impl.SqlColumnDefImpl import com.intellij.lang.ASTNode -internal open class ColumnDefMixin(node: ASTNode) : SqlColumnDefImpl(node), SqlColumnDef { +internal open class ColumnDefMixin(node: ASTNode) : + SqlColumnDefImpl(node), + SqlColumnDef { override fun hasDefaultValue(): Boolean { return isSerial() || super.hasDefaultValue() diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CopyMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CopyMixin.kt index 8c69b7603f3..2725cfb1cb4 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CopyMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CopyMixin.kt @@ -7,7 +7,9 @@ import com.alecstrong.sql.psi.core.psi.SqlTableName import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement -internal abstract class CopyMixin(node: ASTNode) : SqlCompositeElementImpl(node), PostgreSqlCopyStdin { +internal abstract class CopyMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + PostgreSqlCopyStdin { override fun queryAvailable(child: PsiElement): Collection { val tableName = child.parent.children.filterIsInstance().single() return tableAvailable(child, tableName.name) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt index e7f42e3bc1f..9281344d544 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/CreateIndexMixin.kt @@ -14,12 +14,12 @@ import com.intellij.psi.PsiElement * brin = [autosummarize (on|off|true|false), pages_per_range (1-2147483647) ] */ internal abstract class CreateIndexMixin(node: ASTNode) : - SqlCreateIndexStmtImpl(node), PostgreSqlCreateIndexStmt { + SqlCreateIndexStmtImpl(node), + PostgreSqlCreateIndexStmt { override fun annotate(annotationHolder: SqlAnnotationHolder) { withStorageParameter?.let { wsp -> - wsp.storageParametersList.zip(wsp.storageParameterList).forEach { - sp -> + wsp.storageParametersList.zip(wsp.storageParameterList).forEach { sp -> indexMethod?.let { im -> when (im.text.lowercase()) { "brin" -> when (sp.first.text) { diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt index 6ebe4fb1aba..16f69b4938b 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt @@ -13,7 +13,8 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil internal abstract class DistinctOnExpressionMixin(node: ASTNode) : - SqlCompositeElementImpl(node), PostgreSqlDistinctOnExpr { + SqlCompositeElementImpl(node), + PostgreSqlDistinctOnExpr { private val distinctOnColumns get() = children.filterIsInstance() diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ReturningClauseMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ReturningClauseMixin.kt index 892a3dab661..08814215572 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ReturningClauseMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ReturningClauseMixin.kt @@ -16,7 +16,9 @@ import com.intellij.lang.ASTNode import com.intellij.psi.util.PsiTreeUtil internal abstract class ReturningClauseMixin(node: ASTNode) : - SqlCompositeElementImpl(node), PostgreSqlReturningClause, FromQuery { + SqlCompositeElementImpl(node), + PostgreSqlReturningClause, + FromQuery { private val queryExposed = ModifiableFileLazy { listOf( diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlDeleteStmtLimitedMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlDeleteStmtLimitedMixin.kt index f041548bff9..5bd5e92eea0 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlDeleteStmtLimitedMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlDeleteStmtLimitedMixin.kt @@ -10,7 +10,8 @@ import com.intellij.psi.PsiElement internal abstract class SqlDeleteStmtLimitedMixin( node: ASTNode, -) : SqlDeleteStmtLimitedImpl(node), PostgreSqlDeleteStmtLimited { +) : SqlDeleteStmtLimitedImpl(node), + PostgreSqlDeleteStmtLimited { override fun tablesAvailable(child: PsiElement): Collection { val tablesAvailable = super.tablesAvailable(child) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlInsertStmtMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlInsertStmtMixin.kt index c43a4d3f868..e92263556c1 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlInsertStmtMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlInsertStmtMixin.kt @@ -10,7 +10,8 @@ import com.intellij.psi.PsiElement internal abstract class SqlInsertStmtMixin( node: ASTNode, -) : SqlInsertStmtImpl(node), PostgreSqlInsertStmt { +) : SqlInsertStmtImpl(node), + PostgreSqlInsertStmt { override fun tablesAvailable(child: PsiElement): Collection { val tablesAvailable = super.tablesAvailable(child) diff --git a/dialects/sqlite-3-24/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_24/grammar/mixins/InsertStmtMixin.kt b/dialects/sqlite-3-24/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_24/grammar/mixins/InsertStmtMixin.kt index fafdf234922..73ab5a77b17 100644 --- a/dialects/sqlite-3-24/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_24/grammar/mixins/InsertStmtMixin.kt +++ b/dialects/sqlite-3-24/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_24/grammar/mixins/InsertStmtMixin.kt @@ -33,8 +33,10 @@ internal abstract class InsertStmtMixin( insertOr != null && insertOr.elementType == SqlTypes.OR -> { val type = insertOr.treeNext.elementType check( - type == SqlTypes.ROLLBACK || type == SqlTypes.ABORT || - type == SqlTypes.FAIL || type == SqlTypes.IGNORE, + type == SqlTypes.ROLLBACK || + type == SqlTypes.ABORT || + type == SqlTypes.FAIL || + type == SqlTypes.IGNORE, ) type } diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt index 9eeff1bac85..db37d7a7d07 100644 --- a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt +++ b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt @@ -7,7 +7,9 @@ import com.alecstrong.sql.psi.core.psi.QueryElement.QueryResult import com.alecstrong.sql.psi.core.psi.impl.SqlResultColumnImpl import com.intellij.lang.ASTNode -internal abstract class ResultColumnMixin(node: ASTNode) : SqlResultColumnImpl(node), SqliteResultColumn { +internal abstract class ResultColumnMixin(node: ASTNode) : + SqlResultColumnImpl(node), + SqliteResultColumn { private val queryExposed = ModifiableFileLazy lazy@{ if (windowFunctionInvocation != null) { var column = QueryElement.QueryColumn(this) diff --git a/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/grammar/mixins/InsertStmtMixin.kt b/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/grammar/mixins/InsertStmtMixin.kt index f805d2c9ad2..e2a68e65910 100644 --- a/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/grammar/mixins/InsertStmtMixin.kt +++ b/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/grammar/mixins/InsertStmtMixin.kt @@ -37,8 +37,10 @@ internal abstract class InsertStmtMixin( insertOr != null && insertOr.elementType == SqlTypes.OR -> { val type = insertOr.treeNext.elementType check( - type == SqlTypes.ROLLBACK || type == SqlTypes.ABORT || - type == SqlTypes.FAIL || type == SqlTypes.IGNORE, + type == SqlTypes.ROLLBACK || + type == SqlTypes.ABORT || + type == SqlTypes.FAIL || + type == SqlTypes.IGNORE, ) type } diff --git a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/JsonModule.kt b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/JsonModule.kt index 44c1176a6d2..a25516da920 100644 --- a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/JsonModule.kt +++ b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/JsonModule.kt @@ -17,8 +17,7 @@ class JsonModule : SqlDelightModule { } } -private class JsonTypeResolver(private val parentResolver: TypeResolver) : - TypeResolver by parentResolver { +private class JsonTypeResolver(private val parentResolver: TypeResolver) : TypeResolver by parentResolver { override fun functionType(functionExpr: SqlFunctionExpr): IntermediateType? { when (functionExpr.functionName.text) { "json_array", "json", "json_insert", "json_replace", "json_set", "json_object", "json_patch", diff --git a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt index 528d33c6b48..c99acd30f72 100644 --- a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt +++ b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt @@ -17,7 +17,9 @@ import com.intellij.lang.ASTNode import com.intellij.lang.PsiBuilder import com.intellij.psi.PsiElement -internal abstract class TableOrSubqueryMixin(node: ASTNode?) : SqlTableOrSubqueryImpl(node), SqliteJsonTableOrSubquery { +internal abstract class TableOrSubqueryMixin(node: ASTNode?) : + SqlTableOrSubqueryImpl(node), + SqliteJsonTableOrSubquery { private val queryExposed = ModifiableFileLazy lazy@{ if (jsonFunctionName != null) { return@lazy listOf( @@ -44,7 +46,10 @@ internal abstract class TableOrSubqueryMixin(node: ASTNode?) : SqlTableOrSubquer } } -internal abstract class JsonFunctionNameMixin(node: ASTNode) : SqlNamedElementImpl(node), SqlTableName, ExposableType { +internal abstract class JsonFunctionNameMixin(node: ASTNode) : + SqlNamedElementImpl(node), + SqlTableName, + ExposableType { override fun getId(): PsiElement? = null override fun getString(): PsiElement? = null override val parseRule: (PsiBuilder, Int) -> Boolean = JsonParser::json_function_name_real diff --git a/drivers/android-driver/src/main/java/app/cash/sqldelight/driver/android/AndroidSqliteDriver.kt b/drivers/android-driver/src/main/java/app/cash/sqldelight/driver/android/AndroidSqliteDriver.kt index a48a0cc0b44..4a6a957312f 100644 --- a/drivers/android-driver/src/main/java/app/cash/sqldelight/driver/android/AndroidSqliteDriver.kt +++ b/drivers/android-driver/src/main/java/app/cash/sqldelight/driver/android/AndroidSqliteDriver.kt @@ -271,7 +271,8 @@ private class AndroidQuery( private val database: SupportSQLiteDatabase, override val argCount: Int, private val windowSizeBytes: Long?, -) : SupportSQLiteQuery, AndroidStatement { +) : SupportSQLiteQuery, + AndroidStatement { private val binds = MutableList<((SupportSQLiteProgram) -> Unit)?>(argCount) { null } override fun bindBytes(index: Int, bytes: ByteArray?) { diff --git a/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt b/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt index 58f9d6e727f..a7d1ac54b1e 100644 --- a/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt +++ b/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt @@ -74,7 +74,9 @@ interface ConnectionManager { } } -abstract class JdbcDriver : SqlDriver, ConnectionManager { +abstract class JdbcDriver : + SqlDriver, + ConnectionManager { override fun close() { } diff --git a/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/NativeSqlDatabase.kt b/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/NativeSqlDatabase.kt index 9ab1950735c..dd9a6fa0ff8 100644 --- a/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/NativeSqlDatabase.kt +++ b/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/NativeSqlDatabase.kt @@ -100,7 +100,8 @@ sealed class ConnectionWrapper : SqlDriver { class NativeSqliteDriver( private val databaseManager: DatabaseManager, maxReaderConnections: Int = 1, -) : ConnectionWrapper(), SqlDriver { +) : ConnectionWrapper(), + SqlDriver { constructor( configuration: DatabaseConfiguration, maxReaderConnections: Int = 1, diff --git a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt index dcf5ab466ea..42b3219c976 100644 --- a/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt +++ b/drivers/r2dbc-driver/src/main/kotlin/app/cash/sqldelight/driver/r2dbc/R2dbcDriver.kt @@ -299,7 +299,9 @@ internal class AsyncPublisherIterator( } class R2dbcCursor -internal constructor(private val results: AsyncPublisherIterator>) : SqlCursor { +internal constructor( + private val results: AsyncPublisherIterator>, +) : SqlCursor { private lateinit var currentRow: List override fun next(): QueryResult.AsyncValue = QueryResult.AsyncValue { diff --git a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt index 026dde712d4..08dba1e3535 100644 --- a/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt +++ b/drivers/sqlite-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/sqlite/JdbcSqliteDriver.kt @@ -34,7 +34,8 @@ class JdbcSqliteDriver constructor( */ url: String, properties: Properties = Properties(), -) : JdbcDriver(), ConnectionManager by connectionManager(url, properties) { +) : JdbcDriver(), + ConnectionManager by connectionManager(url, properties) { private val listeners = linkedMapOf>() override fun addListener(vararg queryKeys: String, listener: Query.Listener) { diff --git a/extensions/androidx-paging3/src/commonTest/kotlin/androidx/recyclerview/widget/BatchingListUpdateCallback.kt b/extensions/androidx-paging3/src/commonTest/kotlin/androidx/recyclerview/widget/BatchingListUpdateCallback.kt index 6b988362997..9552e8918b9 100755 --- a/extensions/androidx-paging3/src/commonTest/kotlin/androidx/recyclerview/widget/BatchingListUpdateCallback.kt +++ b/extensions/androidx-paging3/src/commonTest/kotlin/androidx/recyclerview/widget/BatchingListUpdateCallback.kt @@ -67,7 +67,8 @@ class BatchingListUpdateCallback(callback: ListUpdateCallback) : ListUpdateCallb } override fun onInserted(position: Int, count: Int) { - if (mLastEventType == TYPE_ADD && position >= mLastEventPosition && + if (mLastEventType == TYPE_ADD && + position >= mLastEventPosition && position <= mLastEventPosition + mLastEventCount ) { mLastEventCount += count @@ -81,7 +82,8 @@ class BatchingListUpdateCallback(callback: ListUpdateCallback) : ListUpdateCallb } override fun onRemoved(position: Int, count: Int) { - if (mLastEventType == TYPE_REMOVE && mLastEventPosition >= position && + if (mLastEventType == TYPE_REMOVE && + mLastEventPosition >= position && mLastEventPosition <= position + count ) { mLastEventCount += count @@ -103,7 +105,8 @@ class BatchingListUpdateCallback(callback: ListUpdateCallback) : ListUpdateCallb if (mLastEventType == TYPE_CHANGE && !( position > mLastEventPosition + mLastEventCount || - position + count < mLastEventPosition || mLastEventPayload != payload + position + count < mLastEventPosition || + mLastEventPayload != payload ) ) { // take potential overlap into account diff --git a/extensions/rxjava2-extensions/src/main/kotlin/app/cash/sqldelight/rx2/RxJavaExtensions.kt b/extensions/rxjava2-extensions/src/main/kotlin/app/cash/sqldelight/rx2/RxJavaExtensions.kt index 85a1a5829b1..b7c715e72ae 100644 --- a/extensions/rxjava2-extensions/src/main/kotlin/app/cash/sqldelight/rx2/RxJavaExtensions.kt +++ b/extensions/rxjava2-extensions/src/main/kotlin/app/cash/sqldelight/rx2/RxJavaExtensions.kt @@ -40,7 +40,9 @@ private class QueryOnSubscribe( private class QueryListenerAndDisposable( private val emitter: ObservableEmitter>, private val query: Query, -) : AtomicBoolean(), Query.Listener, Disposable { +) : AtomicBoolean(), + Query.Listener, + Disposable { override fun queryResultsChanged() { emitter.onNext(query) } diff --git a/extensions/rxjava2-extensions/src/test/kotlin/app/cash/sqldelight/rx2/RecordingObserver.kt b/extensions/rxjava2-extensions/src/test/kotlin/app/cash/sqldelight/rx2/RecordingObserver.kt index 1b2f40a1975..a86df96b0da 100644 --- a/extensions/rxjava2-extensions/src/test/kotlin/app/cash/sqldelight/rx2/RecordingObserver.kt +++ b/extensions/rxjava2-extensions/src/test/kotlin/app/cash/sqldelight/rx2/RecordingObserver.kt @@ -38,8 +38,9 @@ internal class RecordingObserver(val numberOfColumns: Int) : DisposableObserver< override fun onNext(value: Query<*>) { val allRows = value.execute { cursor -> val data = mutableListOf>() - while (cursor.next().value) + while (cursor.next().value) { data.add((0 until numberOfColumns).map(cursor::getString)) + } QueryResult.Value(data) }.value events.add(allRows) diff --git a/extensions/rxjava3-extensions/src/main/kotlin/app/cash/sqldelight/rx3/RxJavaExtensions.kt b/extensions/rxjava3-extensions/src/main/kotlin/app/cash/sqldelight/rx3/RxJavaExtensions.kt index be2c77d839c..b0634580a17 100644 --- a/extensions/rxjava3-extensions/src/main/kotlin/app/cash/sqldelight/rx3/RxJavaExtensions.kt +++ b/extensions/rxjava3-extensions/src/main/kotlin/app/cash/sqldelight/rx3/RxJavaExtensions.kt @@ -40,7 +40,9 @@ private class QueryOnSubscribe( private class QueryListenerAndDisposable( private val emitter: ObservableEmitter>, private val query: Query, -) : AtomicBoolean(), Query.Listener, Disposable { +) : AtomicBoolean(), + Query.Listener, + Disposable { override fun queryResultsChanged() { emitter.onNext(query) } diff --git a/extensions/rxjava3-extensions/src/test/kotlin/app/cash/sqldelight/rx3/RecordingObserver.kt b/extensions/rxjava3-extensions/src/test/kotlin/app/cash/sqldelight/rx3/RecordingObserver.kt index e0fc3ba94b7..8eef5dd05d8 100644 --- a/extensions/rxjava3-extensions/src/test/kotlin/app/cash/sqldelight/rx3/RecordingObserver.kt +++ b/extensions/rxjava3-extensions/src/test/kotlin/app/cash/sqldelight/rx3/RecordingObserver.kt @@ -38,8 +38,9 @@ internal class RecordingObserver(val numberOfColumns: Int) : DisposableObserver< override fun onNext(value: Query<*>) { val allRows = value.execute { cursor -> val data = mutableListOf>() - while (cursor.next().value) + while (cursor.next().value) { data.add((0 until numberOfColumns).map(cursor::getString)) + } QueryResult.Value(data) }.value events.add(allRows) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bb501d604d0..b2824c6a24c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ sqliter = "1.3.1" sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" -ktlint = "1.2.1" +ktlint = "1.3.0" agp = "8.5.0" compileSdk = "34" minSdk = "21" diff --git a/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt b/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt index 6e036d5c63a..1abf6ec5759 100644 --- a/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt +++ b/runtime/src/commonMain/kotlin/app/cash/sqldelight/Transacter.kt @@ -191,7 +191,8 @@ private class RollbackException(val value: Any? = null) : Throwable() private class TransactionWrapper( val transaction: Transaction, -) : TransactionWithoutReturn, TransactionWithReturn { +) : TransactionWithoutReturn, + TransactionWithReturn { override fun rollback(): Nothing { transaction.checkThreadConfinement() throw RollbackException() @@ -226,7 +227,8 @@ private class TransactionWrapper( private class SuspendingTransactionWrapper( val transaction: Transaction, -) : SuspendingTransactionWithoutReturn, SuspendingTransactionWithReturn { +) : SuspendingTransactionWithoutReturn, + SuspendingTransactionWithReturn { override fun rollback(): Nothing { transaction.checkThreadConfinement() throw RollbackException() @@ -341,7 +343,9 @@ abstract class BaseTransacterImpl(protected val driver: SqlDriver) { /** * A transaction-aware [SqlDriver] wrapper which can begin a [Transaction] on the current connection. */ -abstract class TransacterImpl(driver: SqlDriver) : BaseTransacterImpl(driver), Transacter { +abstract class TransacterImpl(driver: SqlDriver) : + BaseTransacterImpl(driver), + Transacter { override fun transaction( noEnclosing: Boolean, body: TransactionWithoutReturn.() -> Unit, @@ -378,7 +382,9 @@ abstract class TransacterImpl(driver: SqlDriver) : BaseTransacterImpl(driver), T } } -abstract class SuspendingTransacterImpl(driver: SqlDriver) : BaseTransacterImpl(driver), SuspendingTransacter { +abstract class SuspendingTransacterImpl(driver: SqlDriver) : + BaseTransacterImpl(driver), + SuspendingTransacter { override suspend fun transactionWithResult( noEnclosing: Boolean, bodyWithReturn: suspend SuspendingTransactionWithReturn.() -> R, diff --git a/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/OptimisticLockException.kt b/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/OptimisticLockException.kt index f0d7f29f56b..1aea5456407 100644 --- a/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/OptimisticLockException.kt +++ b/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/OptimisticLockException.kt @@ -1,4 +1,3 @@ package app.cash.sqldelight.db -class OptimisticLockException(message: String?, cause: Throwable? = null) : - IllegalStateException(message, cause) +class OptimisticLockException(message: String?, cause: Throwable? = null) : IllegalStateException(message, cause) diff --git a/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/api/PragmaWithResults.kt b/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/api/PragmaWithResults.kt index aec00728404..06c5c09e9ae 100644 --- a/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/api/PragmaWithResults.kt +++ b/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/api/PragmaWithResults.kt @@ -14,7 +14,9 @@ class PragmaWithResults(pragmaStmt: SqlPragmaStmt) : QueryWithResults { override val pureTable: NamedElement? = null } -class SqlDelightPragmaName(node: ASTNode?) : SqlPragmaNameImpl(node), QueryElement { +class SqlDelightPragmaName(node: ASTNode?) : + SqlPragmaNameImpl(node), + QueryElement { override fun queryExposed() = listOf( QueryResult( column = this, diff --git a/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/grammar/mixins/BindParameterMixin.kt b/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/grammar/mixins/BindParameterMixin.kt index ec7aa13969d..6f0ecaf2a65 100644 --- a/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/grammar/mixins/BindParameterMixin.kt +++ b/sqldelight-compiler/dialect/src/main/kotlin/app/cash/sqldelight/dialect/grammar/mixins/BindParameterMixin.kt @@ -4,7 +4,9 @@ import com.alecstrong.sql.psi.core.psi.SqlBindParameter import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl import com.intellij.lang.ASTNode -abstract class BindParameterMixin(node: ASTNode) : SqlCompositeElementImpl(node), SqlBindParameter { +abstract class BindParameterMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlBindParameter { /** * Overwrite, if the user provided sql parameter should be overwritten by sqldelight with [replaceWith]. * diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/MutatorQueryGenerator.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/MutatorQueryGenerator.kt index 77d2de40709..73052f6fb24 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/MutatorQueryGenerator.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/MutatorQueryGenerator.kt @@ -43,10 +43,11 @@ class MutatorQueryGenerator( val columns = trigger.columnNameList.map { it.name } val updateColumns = query.update.updateStmtSubsequentSetterList.map { it.columnName?.name } + query.update.columnNameList.map { it.name } - trigger.childOfType(SqlTypes.UPDATE) != null && ( - columns.isEmpty() || - updateColumns.any { it in columns } - ) + trigger.childOfType(SqlTypes.UPDATE) != null && + ( + columns.isEmpty() || + updateColumns.any { it in columns } + ) } } diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/model/NamedQuery.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/model/NamedQuery.kt index 7e868e80020..14c50649b7f 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/model/NamedQuery.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/compiler/model/NamedQuery.kt @@ -192,7 +192,8 @@ data class NamedQuery( if (typeOne.column !== typeTwo.column && typeOne.asNonNullable().cursorGetter(0) != typeTwo.asNonNullable().cursorGetter(0) && - typeOne.column != null && typeTwo.column != null + typeOne.column != null && + typeTwo.column != null ) { // Incompatible adapters. Revert to unadapted java type. return if (typeOne.javaType.copy(nullable = false) == typeTwo.javaType.copy(nullable = false)) { diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/ColumnTypeMixin.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/ColumnTypeMixin.kt index 379f59ae90f..50a50d5663f 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/ColumnTypeMixin.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/ColumnTypeMixin.kt @@ -83,7 +83,8 @@ internal abstract class ColumnTypeMixin( }.singleOrNull() // Foreign Key ?.columnNameList?.singleOrNull() // Foreign Column - (tableForeignKeyClause ?: columnConstraint)?.reference?.resolve()?.let { resolvedKey -> // Resolved Column + (tableForeignKeyClause ?: columnConstraint)?.reference?.resolve()?.let { resolvedKey -> + // Resolved Column val dialectType = resolvedKey.asSafely() // Column Name ?.parent?.asSafely() // Column Definition ?.columnType?.asSafely() // Column type diff --git a/sqldelight-gradle-plugin/src/test/integration-multiplatform-async/src/jvmMain/kotlin/app/sqltest/shared/common/data/SqlDriverFactoryProvider.kt b/sqldelight-gradle-plugin/src/test/integration-multiplatform-async/src/jvmMain/kotlin/app/sqltest/shared/common/data/SqlDriverFactoryProvider.kt index 58d50921279..4cb66e77757 100644 --- a/sqldelight-gradle-plugin/src/test/integration-multiplatform-async/src/jvmMain/kotlin/app/sqltest/shared/common/data/SqlDriverFactoryProvider.kt +++ b/sqldelight-gradle-plugin/src/test/integration-multiplatform-async/src/jvmMain/kotlin/app/sqltest/shared/common/data/SqlDriverFactoryProvider.kt @@ -3,7 +3,7 @@ package app.sqltest.shared.common.data import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver -actual class SqlDriverFactoryProvider() { +actual class SqlDriverFactoryProvider { actual fun getDriverFactory(name: String): DriverFactory { return object : DriverFactory { override suspend fun createDriver(): SqlDriver { diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/ProjectService.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/ProjectService.kt index 5bc1d668c59..c4b2bfddc7a 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/ProjectService.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/ProjectService.kt @@ -58,7 +58,9 @@ import kotlin.reflect.jvm.jvmName import org.jetbrains.kotlin.idea.util.projectStructure.getModule import timber.log.Timber -class ProjectService(val project: Project) : SqlDelightProjectService, Disposable { +class ProjectService(val project: Project) : + SqlDelightProjectService, + Disposable { private var fileIndexes: FileIndexMap? private val loggingTree = LoggerTree(Logger.getInstance("SQLDelight[${project.name}]")) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/SqlDelightReferenceContributor.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/SqlDelightReferenceContributor.kt index a2d38e461e4..ccc5b71ef7b 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/SqlDelightReferenceContributor.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/SqlDelightReferenceContributor.kt @@ -36,8 +36,7 @@ internal class SqlDelightReferenceContributor : PsiReferenceContributor() { ) } - internal class JavaTypeReference(element: JavaTypeMixin) : - PsiReferenceBase(element, element.lastChild.textRangeInParent) { + internal class JavaTypeReference(element: JavaTypeMixin) : PsiReferenceBase(element, element.lastChild.textRangeInParent) { override fun handleElementRename(newElementName: String): PsiElement { return element.setName(newElementName) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/actions/BaseGenerateAction.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/actions/BaseGenerateAction.kt index 9621a7698f5..e07f5312561 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/actions/BaseGenerateAction.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/actions/BaseGenerateAction.kt @@ -13,8 +13,9 @@ internal abstract class BaseGenerateAction(private val handler: CodeInsightActio override fun isValidForFile(project: Project, editor: Editor, file: PsiFile): Boolean { val offset = editor.caretModel.offset - return file is SqlDelightFile && file.findElementAt(offset) - ?.parentOfType(true) != null + return file is SqlDelightFile && + file.findElementAt(offset) + ?.parentOfType(true) != null } override fun getHandler(): CodeInsightActionHandler = handler diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt index 5347d5a4040..25b692e70d7 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt @@ -69,8 +69,7 @@ internal class UnusedColumnInspection : LocalInspectionTool() { } } - class SafeDeleteQuickFix(createTableStmt: SqlCreateTableStmt, columnDef: SqlColumnDef) : - LocalQuickFixOnPsiElement(createTableStmt) { + class SafeDeleteQuickFix(createTableStmt: SqlCreateTableStmt, columnDef: SqlColumnDef) : LocalQuickFixOnPsiElement(createTableStmt) { private val createTableRef = SmartPointerManager.getInstance(createTableStmt.project) .createSmartPsiElementPointer(createTableStmt, createTableStmt.containingFile) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightInspectionSuppressor.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightInspectionSuppressor.kt index 00fefe5fd54..942753f715f 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightInspectionSuppressor.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightInspectionSuppressor.kt @@ -58,10 +58,11 @@ internal class SqlDelightInspectionSuppressor : InspectionSuppressor { } ?: return false val matcher = commentPattern.matcher(comment.text) - return matcher.matches() && SuppressionUtil.isInspectionToolIdMentioned( - matcher.group(1), - toolId, - ) + return matcher.matches() && + SuppressionUtil.isInspectionToolIdMentioned( + matcher.group(1), + toolId, + ) } override fun getSuppressActions(element: PsiElement?, toolId: String): Array { diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightSuppressInspectionQuickFix.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightSuppressInspectionQuickFix.kt index dca311fde31..c8b4dfe3041 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightSuppressInspectionQuickFix.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/suppression/SqlDelightSuppressInspectionQuickFix.kt @@ -18,8 +18,7 @@ import com.intellij.psi.PsiParserFacade import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.parentOfTypes -internal class SqlDelightSuppressInspectionQuickFix(toolId: String) : - SuppressByCommentFix(toolId, PsiElement::class.java) { +internal class SqlDelightSuppressInspectionQuickFix(toolId: String) : SuppressByCommentFix(toolId, PsiElement::class.java) { override fun createSuppression(project: Project, element: PsiElement, container: PsiElement) { val commenter = LanguageCommenters.INSTANCE.forLanguage(SqlDelightLanguage) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddImportIntention.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddImportIntention.kt index 17c70668401..bc2508102be 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddImportIntention.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddImportIntention.kt @@ -33,7 +33,9 @@ internal class AddImportIntention( private val element: PsiElement, private val classes: List, private val isAvailable: Boolean, -) : BaseElementAtCaretIntentionAction(), HintAction, QuestionAction { +) : BaseElementAtCaretIntentionAction(), + HintAction, + QuestionAction { override fun getFamilyName(): String = INTENTIONS_FAMILY_NAME_IMPORTS diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddOptimisticLockIntention.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddOptimisticLockIntention.kt index 10788c797b1..f47feea9733 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddOptimisticLockIntention.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/intentions/AddOptimisticLockIntention.kt @@ -18,7 +18,9 @@ import org.jetbrains.kotlin.idea.inspections.findExistingEditor class AddOptimisticLockIntention( private val updateElement: PsiElement, private val lock: ColumnDefMixin, -) : BaseElementAtCaretIntentionAction(), HintAction, QuestionAction { +) : BaseElementAtCaretIntentionAction(), + HintAction, + QuestionAction { override fun getFamilyName() = INTENTIONS_FAMILY_NAME_LOCK_FIX override fun isAvailable(project: Project, editor: Editor, element: PsiElement): Boolean { diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightFoldingBuilder.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightFoldingBuilder.kt index ccd98c8c9ee..7e0a35aa52c 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightFoldingBuilder.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightFoldingBuilder.kt @@ -33,7 +33,9 @@ import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getChildOfType -class SqlDelightFoldingBuilder : FoldingBuilder, DumbAware { +class SqlDelightFoldingBuilder : + FoldingBuilder, + DumbAware { override fun buildFoldRegions(root: ASTNode, document: Document) = root.createFoldingDescriptors() diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightHighlightVisitor.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightHighlightVisitor.kt index 71a315673b4..20bcccbebaa 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightHighlightVisitor.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightHighlightVisitor.kt @@ -20,7 +20,9 @@ import com.intellij.openapi.editor.colors.TextAttributesKey import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile -class SqlDelightHighlightVisitor : SqlVisitor(), HighlightVisitor { +class SqlDelightHighlightVisitor : + SqlVisitor(), + HighlightVisitor { private var myHolder: HighlightInfoHolder? = null diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/notifications/FileIndexingNotification.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/notifications/FileIndexingNotification.kt index 41ee09c93d7..2a1ca4033bc 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/notifications/FileIndexingNotification.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/notifications/FileIndexingNotification.kt @@ -32,7 +32,8 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance class FileIndexingNotification( private val project: Project, -) : DumbAware, EditorNotificationProvider { +) : DumbAware, + EditorNotificationProvider { internal var unconfiguredReason: UnconfiguredReason = GradleSyncing set(value) { field = value diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/run/ArgumentsInputDialogImpl.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/run/ArgumentsInputDialogImpl.kt index d87a53befd5..1b473237477 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/run/ArgumentsInputDialogImpl.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/run/ArgumentsInputDialogImpl.kt @@ -18,7 +18,8 @@ internal interface ArgumentsInputDialog { internal class ArgumentsInputDialogImpl( project: Project, private val parameters: List, -) : DialogWrapper(project), ArgumentsInputDialog { +) : DialogWrapper(project), + ArgumentsInputDialog { init { init() diff --git a/sqldelight-idea-plugin/testData/find-usages/ExampleQueries.kt b/sqldelight-idea-plugin/testData/find-usages/ExampleQueries.kt index f026955d330..595248c3806 100644 --- a/sqldelight-idea-plugin/testData/find-usages/ExampleQueries.kt +++ b/sqldelight-idea-plugin/testData/find-usages/ExampleQueries.kt @@ -3,7 +3,7 @@ package com.example import Query import kotlin.Long -public class ExampleQueries() { +public class ExampleQueries { public fun selectById(id: Long): Query { return Query(Example(1, "foo")) diff --git a/sqldelight-idea-plugin/testData/unused-query-inspection/SomeTableQueries.kt b/sqldelight-idea-plugin/testData/unused-query-inspection/SomeTableQueries.kt index 1d197ecfff9..bf45e3205fd 100644 --- a/sqldelight-idea-plugin/testData/unused-query-inspection/SomeTableQueries.kt +++ b/sqldelight-idea-plugin/testData/unused-query-inspection/SomeTableQueries.kt @@ -3,7 +3,7 @@ package com.example import Query import kotlin.Long -public class SomeTableQueries() { +public class SomeTableQueries { public fun selectAll(): Query { return Query(Example(1, "foo")) From 6a8142b6fbbdd81874285114de4ffe3fbd43003f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:16:18 +0000 Subject: [PATCH 042/184] Update dependency org.mariadb:r2dbc-mariadb to v1.2.1 (#5314) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../src/test/integration-mysql-async/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqldelight-gradle-plugin/src/test/integration-mysql-async/build.gradle b/sqldelight-gradle-plugin/src/test/integration-mysql-async/build.gradle index 2efdbcfc0e3..459685f861e 100644 --- a/sqldelight-gradle-plugin/src/test/integration-mysql-async/build.gradle +++ b/sqldelight-gradle-plugin/src/test/integration-mysql-async/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation libs.mysqlJdbc implementation libs.testContainers.mysql implementation libs.testContainers.r2dbc - implementation "org.mariadb:r2dbc-mariadb:1.2.0" + implementation "org.mariadb:r2dbc-mariadb:1.2.1" implementation "app.cash.sqldelight:r2dbc-driver:${app.cash.sqldelight.VersionKt.VERSION}" implementation "app.cash.sqldelight:async-extensions:${app.cash.sqldelight.VersionKt.VERSION}" implementation libs.truth From 63ffbab7b24583be686a12406798d1e1bb8c420a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Wed, 26 Jun 2024 02:34:26 +0100 Subject: [PATCH 043/184] Fix 5313 Postgresql async bind parameter (#5319) * Add support for async bind params Async uses index from 1..column size $index sync uses "?" * Add test * Change test name --- .../sqldelight/core/lang/util/TreeUtil.kt | 9 +++- .../async/AsyncMutatorQueryTypeTest.kt | 42 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt index 8fc5b7a6d1e..ae24eaf8373 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt @@ -26,8 +26,10 @@ import app.cash.sqldelight.dialect.api.IntermediateType import app.cash.sqldelight.dialect.api.PrimitiveType import app.cash.sqldelight.dialect.api.PrimitiveType.INTEGER import app.cash.sqldelight.dialect.api.PrimitiveType.TEXT +import app.cash.sqldelight.dialect.grammar.mixins.BindParameterMixin import com.alecstrong.sql.psi.core.psi.AliasElement import com.alecstrong.sql.psi.core.psi.SqlAnnotatedElement +import com.alecstrong.sql.psi.core.psi.SqlBindExpr import com.alecstrong.sql.psi.core.psi.SqlColumnName import com.alecstrong.sql.psi.core.psi.SqlCreateTableStmt import com.alecstrong.sql.psi.core.psi.SqlCreateViewStmt @@ -176,6 +178,9 @@ private fun PsiElement.rangesToReplace(): List> { ), ) } else if (this is InsertStmtValuesMixin && parent?.acceptsTableInterface() == true) { + val generateAsync = this.sqFile().generateAsync + val bindExpr = childOfType(SqlTypes.BIND_EXPR) as SqlBindExpr + val bindParameterMixin = bindExpr.bindParameter as BindParameterMixin buildList { if (parent!!.columnNameList.isEmpty()) { add( @@ -191,8 +196,8 @@ private fun PsiElement.rangesToReplace(): List> { } add( Pair( - first = childOfType(SqlTypes.BIND_EXPR)!!.range, - second = parent!!.columns.joinToString(separator = ", ", prefix = "(", postfix = ")") { "?" }, + first = bindExpr.range, + second = (1..parent!!.columns.size).joinToString(separator = ", ", prefix = "(", postfix = ")") { bindParameterMixin.replaceWith(generateAsync, it) }, ), ) } diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/async/AsyncMutatorQueryTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/async/AsyncMutatorQueryTypeTest.kt index 0b6891e17b8..9866e127a79 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/async/AsyncMutatorQueryTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/async/AsyncMutatorQueryTypeTest.kt @@ -1,6 +1,7 @@ package app.cash.sqldelight.core.queries.async import app.cash.sqldelight.core.compiler.MutatorQueryGenerator +import app.cash.sqldelight.dialects.postgresql.PostgreSqlDialect import app.cash.sqldelight.test.util.FixtureCompiler import app.cash.sqldelight.test.util.withUnderscores import com.google.common.truth.Truth.assertThat @@ -142,4 +143,45 @@ class AsyncMutatorQueryTypeTest { """.trimMargin(), ) } + + @Test fun `Async Postgresql INSERT VALUES use correct bind parameter with the table data class`() { + val file = FixtureCompiler.parseSql( + """ + |CREATE TABLE data ( + | id INTEGER PRIMARY KEY, + | value TEXT + |); + | + |insertData: + |INSERT INTO data + |VALUES ?; + """.trimMargin(), + tempFolder, + dialect = PostgreSqlDialect(), + fileName = "Data.sq", + generateAsync = true, + ) + + val mutator = file.namedMutators.first() + val generator = MutatorQueryGenerator(mutator) + + assertThat(generator.function().toString()).isEqualTo( + """ + |public suspend fun insertData(data_: com.example.Data_) { + | driver.execute(208_179_736, ""${'"'} + | |INSERT INTO data (id, value) + | |VALUES (${'$'}1, ${'$'}2) + | ""${'"'}.trimMargin(), 2) { + | check(this is app.cash.sqldelight.driver.r2dbc.R2dbcPreparedStatement) + | bindInt(0, data_.id) + | bindString(1, data_.value_) + | }.await() + | notifyQueries(208_179_736) { emit -> + | emit("data") + | } + |} + | + """.trimMargin(), + ) + } } From 5c05adb0d61e5a4cd86d57277b8a8a032ea6ba57 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 27 Jun 2024 16:24:04 -0400 Subject: [PATCH 044/184] Fix Spotless (#5323) --- .../app/cash/sqldelight/core/lang/psi/StmtIdentifierMixin.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/StmtIdentifierMixin.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/StmtIdentifierMixin.kt index 9a74736ab5e..59a4653bd7e 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/StmtIdentifierMixin.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/psi/StmtIdentifierMixin.kt @@ -51,7 +51,8 @@ abstract class StmtIdentifierMixin( } override fun annotate(annotationHolder: SqlAnnotationHolder) { - if (name != null && (containingFile as SqlDelightQueriesFile).sqlStatements() + if (name != null && + (containingFile as SqlDelightQueriesFile).sqlStatements() .filterNot { it.identifier == this } .any { it.identifier.name == name } ) { From 752f01dcfc9c3f44fc898db459d4ec98b487656c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 16:24:30 -0400 Subject: [PATCH 045/184] Update dependency androidx.test:core to v1.6.1 (#5315) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b2824c6a24c..049f1a98b9f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,7 +25,7 @@ kotlin-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-te kotlin-coroutines-reactive = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactive", version.ref = "kotlinCoroutines" } kotlin-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } -androidx-test-core = "androidx.test:core:1.5.0" +androidx-test-core = "androidx.test:core:1.6.1" androidx-test-runner = "androidx.test:runner:1.5.2" androidx-sqlite = { module = "androidx.sqlite:sqlite", version.ref = "androidxSqlite" } androidx-sqliteFramework = { module = "androidx.sqlite:sqlite-framework", version.ref = "androidxSqlite" } From deae6d788e8e19baa4e314e36fd7b78a3e16208a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 20:50:35 +0000 Subject: [PATCH 046/184] Update dependency androidx.test:runner to v1.6.1 (#5316) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 049f1a98b9f..88811c755fc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,7 @@ kotlin-coroutines-reactive = { module = "org.jetbrains.kotlinx:kotlinx-coroutine kotlin-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } androidx-test-core = "androidx.test:core:1.6.1" -androidx-test-runner = "androidx.test:runner:1.5.2" +androidx-test-runner = "androidx.test:runner:1.6.1" androidx-sqlite = { module = "androidx.sqlite:sqlite", version.ref = "androidxSqlite" } androidx-sqliteFramework = { module = "androidx.sqlite:sqlite-framework", version.ref = "androidxSqlite" } app-cash-paging-common = { module = "app.cash.paging:paging-common", version.ref = "paging-mpp" } From 048cd53f3dc736cffa698ca794bb1d6d9641af1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 21:34:12 +0000 Subject: [PATCH 047/184] Update dependency com.google.truth:truth to v1.4.3 (#5322) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 88811c755fc..49c595ef89e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ android-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.17.0" } junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } -truth = { module = "com.google.truth:truth", version = "1.4.2" } +truth = { module = "com.google.truth:truth", version = "1.4.3" } turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } bugsnag = { module = "com.bugsnag:bugsnag", version = "3.7.1" } picnic = { module = "com.jakewharton.picnic:picnic", version = "0.7.0" } From 28b600b1c127d4b4ac906a52ab5d2143a34acd71 Mon Sep 17 00:00:00 2001 From: Vitor Hugo Schwaab Date: Mon, 1 Jul 2024 16:50:56 +0200 Subject: [PATCH 048/184] Add MacOS native targets (#5324) --- extensions/androidx-paging3/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extensions/androidx-paging3/build.gradle b/extensions/androidx-paging3/build.gradle index de43548be3f..239a690acfe 100755 --- a/extensions/androidx-paging3/build.gradle +++ b/extensions/androidx-paging3/build.gradle @@ -11,6 +11,8 @@ plugins { archivesBaseName = 'sqldelight-androidx-paging3' kotlin { + macosX64() + macosArm64() iosX64() iosArm64() iosSimulatorArm64() @@ -54,7 +56,7 @@ kotlin { } } - configure([targets.iosX64, targets.iosArm64, targets.iosSimulatorArm64]) { + configure([targets.iosX64, targets.iosArm64, targets.iosSimulatorArm64, targets.macosX64, targets.macosArm64]) { binaries.configureEach { // we only need to link sqlite for the test binaries if (outputKind == NativeOutputKind.TEST) { From 6060eed8d93818b080529c8b196305998cf9920a Mon Sep 17 00:00:00 2001 From: Leon Linhart Date: Tue, 2 Jul 2024 13:55:31 +0200 Subject: [PATCH 049/184] Consider foreign key table constraints when sorting initialization statements (#5325) --- .../sqldelight/core/lang/util/TreeUtil.kt | 2 +- .../cash/sqldelight/core/QueryWrapperTest.kt | 79 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt index ae24eaf8373..770b5c5d1b9 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt @@ -300,7 +300,7 @@ private fun ArrayList.buildGraph(): Graph graph.addVertex(table) table.columnDefList.forEach { column -> - column.columnConstraintList.mapNotNull { it.foreignKeyClause?.foreignTable }.forEach { fk -> + (column.columnConstraintList.mapNotNull { it.foreignKeyClause?.foreignTable } + table.tableConstraintList.mapNotNull { it.foreignKeyClause?.foreignTable }).forEach { fk -> try { val foreignTable = namedStatements[fk.name] graph.apply { diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt index 2ae409dc316..b32039a25bc 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueryWrapperTest.kt @@ -600,6 +600,85 @@ class QueryWrapperTest { ) } + @Test fun `queryWrapper puts foreign key constraint in correct order`() { + val result = FixtureCompiler.compileSql( + """ + CREATE TABLE child( + parent_id INTEGER, + + FOREIGN KEY (parent_id) REFERENCES parent(id) + ); + + CREATE TABLE parent( + id INTEGER PRIMARY KEY + ); + """.trimIndent(), + tempFolder, + overrideDialect = PostgreSqlDialect(), + ) + + assertThat(result.errors).isEmpty() + + val queryWrapperFile = result.compilerOutput[File(result.outputDirectory, "com/example/testmodule/TestDatabaseImpl.kt")] + + assertThat(queryWrapperFile).isNotNull() + assertThat(queryWrapperFile.toString()).isEqualTo( + """ + |package com.example.testmodule + | + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.AfterVersion + |import app.cash.sqldelight.db.QueryResult + |import app.cash.sqldelight.db.SqlDriver + |import app.cash.sqldelight.db.SqlSchema + |import com.example.TestDatabase + |import kotlin.Long + |import kotlin.Unit + |import kotlin.reflect.KClass + | + |internal val KClass.schema: SqlSchema> + | get() = TestDatabaseImpl.Schema + | + |internal fun KClass.newInstance(driver: SqlDriver): TestDatabase = + | TestDatabaseImpl(driver) + | + |private class TestDatabaseImpl( + | driver: SqlDriver, + |) : TransacterImpl(driver), + | TestDatabase { + | public object Schema : SqlSchema> { + | override val version: Long + | get() = 1 + | + | override fun create(driver: SqlDriver): QueryResult.Value { + | driver.execute(null, ""${'"'} + | |CREATE TABLE parent( + | | id INTEGER PRIMARY KEY + | |) + | ""${'"'}.trimMargin(), 0) + | driver.execute(null, ""${'"'} + | |CREATE TABLE child( + | | parent_id INTEGER, + | | + | | FOREIGN KEY (parent_id) REFERENCES parent(id) + | |) + | ""${'"'}.trimMargin(), 0) + | return QueryResult.Unit + | } + | + | override fun migrate( + | driver: SqlDriver, + | oldVersion: Long, + | newVersion: Long, + | vararg callbacks: AfterVersion, + | ): QueryResult.Value = QueryResult.Unit + | } + |} + | + """.trimMargin(), + ) + } + @Test fun `queryWrapper generates with migration statements`() { FixtureCompiler.writeSql( """ From c9a08cfad44aec55aec4699253e503891ca1b374 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 20:11:22 +0000 Subject: [PATCH 050/184] Update dependency com.pinterest.ktlint:ktlint-cli to v1.3.1 (#5327) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 49c595ef89e..fe7ceed7f74 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ sqliter = "1.3.1" sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" -ktlint = "1.3.0" +ktlint = "1.3.1" agp = "8.5.0" compileSdk = "34" minSdk = "21" From 6ae0693a5627bd37f9df5e292117a0337f228888 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:42:38 +0000 Subject: [PATCH 051/184] Update dependency com.squareup:kotlinpoet to v1.18.0 (#5329) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fe7ceed7f74..d94fa95d923 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ androidx-paging3-runtime = { module = "androidx.paging:paging-runtime", version. androidx-recyclerView = { module = "androidx.recyclerview:recyclerview", version = "1.3.2" } android-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } -kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.17.0" } +kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.18.0" } junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } truth = { module = "com.google.truth:truth", version = "1.4.3" } From 38f977aa0f949edbc4731e04d5ba42ae6e6896f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 09:30:43 -0400 Subject: [PATCH 052/184] Update dependency org.robolectric:robolectric to v4.13 (#5335) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d94fa95d923..af69ac319b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -65,7 +65,7 @@ intellij-util = { module = "com.jetbrains.intellij.platform:util", version.ref = sqlPsi = { module = "com.alecstrong.sql.psi:core", version.ref = "sqlPsi" } sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref = "sqlPsi" } -robolectric = { module = "org.robolectric:robolectric", version = "4.12.2" } +robolectric = { module = "org.robolectric:robolectric", version = "4.13" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.0" } From 045f80991b1e7a43188faf3a5bdcdf34e88a3825 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 10:00:03 -0400 Subject: [PATCH 053/184] Update plugin binaryCompatibilityValidator to v0.15.0 (#5336) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index af69ac319b5..e159b414c21 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.14.0" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.15.0" } From 19e393a3fa13b4a1282ab448e355dadaa33cc92d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 8 Jul 2024 15:37:32 +0100 Subject: [PATCH 054/184] Fix 5331 add PostgreSql XML type (#5334) * add XML data type Map to SQLXML type on bind and String for results * Add tests fixture test integration test --- .../sqldelight/dialects/postgresql/PostgreSqlType.kt | 9 ++++++++- .../dialects/postgresql/PostgreSqlTypeResolver.kt | 1 + .../dialects/postgresql/grammar/PostgreSql.bnf | 5 ++++- .../resources/fixtures_postgresql/xml-type/Test.s | 7 +++++++ .../app/cash/sqldelight/postgresql/integration/Xml.sq | 11 +++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 11 +++++++++++ 6 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/xml-type/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Xml.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlType.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlType.kt index eb81fca6bd6..cb66bc336c1 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlType.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlType.kt @@ -23,6 +23,7 @@ internal enum class PostgreSqlType(override val javaType: TypeName) : DialectTyp NUMERIC(ClassName("java.math", "BigDecimal")), JSON(STRING), TSVECTOR(STRING), + XML(STRING), ; override fun prepareStatementBinder(columnIndex: CodeBlock, value: CodeBlock): CodeBlock { @@ -43,6 +44,12 @@ internal enum class PostgreSqlType(override val javaType: TypeName) : DialectTyp value, MemberName(ClassName("java.sql", "Types"), "OTHER"), ) + XML -> CodeBlock.of( + "bindObject(%L, %L, %M)\n", + columnIndex, + value, + MemberName(ClassName("java.sql", "Types"), "SQLXML"), + ) } } @@ -54,7 +61,7 @@ internal enum class PostgreSqlType(override val javaType: TypeName) : DialectTyp BIG_INT -> "$cursorName.getLong($columnIndex)" DATE, TIME, TIMESTAMP, TIMESTAMP_TIMEZONE, INTERVAL, UUID -> "$cursorName.getObject<%T>($columnIndex)" NUMERIC -> "$cursorName.getBigDecimal($columnIndex)" - JSON, TSVECTOR -> "$cursorName.getString($columnIndex)" + JSON, TSVECTOR, XML -> "$cursorName.getString($columnIndex)" }, javaType, ) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 35142c9e3a0..5da25812ee2 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -74,6 +74,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes booleanDataType != null -> BOOLEAN blobDataType != null -> BLOB tsvectorDataType != null -> PostgreSqlType.TSVECTOR + xmlDataType != null -> PostgreSqlType.XML else -> throw IllegalArgumentException("Unknown kotlin type for sql type ${this.text}") }, ) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index e6591a608cd..1590622aa23 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -155,7 +155,8 @@ type_name ::= ( boolean_data_type | json_data_type | blob_data_type | - tsvector_data_type + tsvector_data_type | + xml_data_type ) [ '[]' ] { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlTypeNameImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlTypeName" @@ -224,6 +225,8 @@ blob_data_type ::= 'BYTEA' tsvector_data_type ::= 'TSVECTOR' +xml_data_type ::= 'XML' + interval_expression ::= 'INTERVAL' string_literal timestamp_expression ::= 'TIMESTAMP' [ (WITH | WITHOUT) 'TIME' 'ZONE' ] {string_literal} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/xml-type/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/xml-type/Test.s new file mode 100644 index 00000000000..fb6f5e79749 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/xml-type/Test.s @@ -0,0 +1,7 @@ +CREATE TABLE Test ( + x1 XML NOT NULL, + x2 XML +); + +SELECT x1, x2 +FROM Test; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Xml.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Xml.sq new file mode 100644 index 00000000000..6cca4d6ae42 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Xml.sq @@ -0,0 +1,11 @@ +CREATE TABLE Xml_Test( + x1 XML NOT NULL, + x2 XML +); + +insert: +INSERT INTO Xml_Test (x1, x2) VALUES (?, ?); + +select: +SELECT x1, x2 +FROM Xml_Test; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index ef1283ab17f..e09f4518b4d 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -928,4 +928,15 @@ class PostgreSqlTest { assertThat(expr_________).isEqualTo(OffsetDateTime.of(2001, 2, 17, 2, 38, 40, 0, ZoneOffset.ofHours(0))) } } + + @Test + fun testXml() { + val a = "Codestin Search Apptest" + val b = "Codestin Search Apptest" + database.xmlQueries.insert(a, b) + with(database.xmlQueries.select().executeAsOne()) { + assertThat(x1).isEqualTo(b) // results are returned without + assertThat(x2).isEqualTo(b) + } + } } From a407d5c462824886bac504e9c3fb4526f3f3b21b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Mon, 8 Jul 2024 18:47:24 +0100 Subject: [PATCH 055/184] Fix 5330 add Postgresql ILIKE operator (#5333) * override binary_like_operator Add `ILIKE` to `binary_like_operator` Postgresql doesn't use `GLOB | REGEXP | MATCH` keywords It would require rewriting the mixin just to add `ILIKE` Add like and ilike patterns to regex_match_operator regex_match_operator is ordered by shortest matching characters first as the parser gets confused * Add tests fixture test integration tests --- .../postgresql/grammar/PostgreSql.bnf | 13 ++++++- .../fixtures_postgresql/like-operators/Test.s | 17 +++++++++ .../sqldelight/postgresql/integration/Like.sq | 24 +++++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 36 +++++++++++++++++++ 4 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/like-operators/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Like.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 1590622aa23..b76edb749c6 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -44,6 +44,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.FOREIGN" "static com.alecstrong.sql.psi.core.psi.SqlTypes.FROM" "static com.alecstrong.sql.psi.core.psi.SqlTypes.GENERATED" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.GLOB" "static com.alecstrong.sql.psi.core.psi.SqlTypes.GROUP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.HAVING" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ID" @@ -54,8 +55,10 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.INSERT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.INTO" "static com.alecstrong.sql.psi.core.psi.SqlTypes.KEY" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.LIKE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.LIMIT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.LP" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.MATCH" "static com.alecstrong.sql.psi.core.psi.SqlTypes.MINUS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.MULTIPLY" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NO" @@ -69,6 +72,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.PARTITION" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PLUS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PRIMARY" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.REGEXP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RENAME" "static com.alecstrong.sql.psi.core.psi.SqlTypes.REPLACE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ROLLBACK" @@ -109,6 +113,7 @@ overrides ::= type_name | create_index_stmt | select_stmt | ordering_term + | binary_like_operator | literal_value column_constraint ::= [ CONSTRAINT {identifier} ] ( @@ -192,6 +197,12 @@ create_index_stmt ::= CREATE [ UNIQUE ] INDEX [ 'CONCURRENTLY' ] [ IF NOT EXISTS pin = 6 } +binary_like_operator ::= ( 'ILIKE' | LIKE | GLOB | REGEXP | MATCH ) { + extends = "com.alecstrong.sql.psi.core.psi.impl.SqlBinaryLikeOperatorImpl" + implements = "com.alecstrong.sql.psi.core.psi.SqlBinaryLikeOperator" + override = true +} + identity_clause ::= 'IDENTITY' [ LP [ 'SEQUENCE' 'NAME' sequence_name ] [ sequence_parameters* ] RP ] generated_clause ::= GENERATED ( (ALWAYS AS LP <> RP 'STORED') | ( (ALWAYS | BY DEFAULT) AS identity_clause ) ) { @@ -445,7 +456,7 @@ match_operator_expression ::= ( {function_expr} | {column_expr} ) match_operator pin = 2 } -regex_match_operator ::= '~*' | '~' | '!~*' | '!~' +regex_match_operator ::= '~~*' | '~*' | '!~~*' | '!~*' | '~~' | '~' | '!~~' | '!~' regex_match_operator_expression ::= ( {function_expr} | {column_expr} ) regex_match_operator <> { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.RegExMatchOperatorExpressionMixin" diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/like-operators/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/like-operators/Test.s new file mode 100644 index 00000000000..16e796062f8 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/like-operators/Test.s @@ -0,0 +1,17 @@ +CREATE TABLE Test ( + txt TEXT NOT NULL +); + +SELECT * FROM Test WHERE txt LIKE 'testing%'; + +SELECT * FROM Test WHERE txt ILIKE 'test%'; + +SELECT * FROM Test WHERE txt ~~ 'testin%'; + +SELECT * FROM Test WHERE txt ~~* '%esting%'; + +SELECT txt !~~ 'testing%' FROM Test; + +SELECT txt !~~* 'testing%' FROM Test; + +SELECT txt ILIKE 'test%' FROM Test; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Like.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Like.sq new file mode 100644 index 00000000000..91982c8af74 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Like.sq @@ -0,0 +1,24 @@ +CREATE TABLE Test_Like ( + txt TEXT NOT NULL +); + +insert: +INSERT INTO Test_Like (txt) VALUES(?); + +selectWhereLike: +SELECT * FROM Test_Like WHERE txt LIKE ?; + +selectWhereILike: +SELECT * FROM Test_Like WHERE txt ILIKE ?; + +selectWhereLikeRegex: +SELECT * FROM Test_Like WHERE txt ~~ 'testin%'; + +selectWhereILikeRegex: +SELECT * FROM Test_Like WHERE txt ~~* '%esting%'; + +selectLikeRegex: +SELECT txt ~~ 'testing%', txt !~~ 'testing%' FROM Test_Like; + +selectILikeRegex: +SELECT txt ~~* 'testing%', txt !~~* 'testing%' FROM Test_Like; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index e09f4518b4d..4d8e86618a2 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -866,6 +866,42 @@ class PostgreSqlTest { } } + @Test + fun testLike() { + database.likeQueries.insert("testing") + + with(database.likeQueries.selectWhereLike("test%").executeAsList()) { + assertThat(first()).isEqualTo("testing") + } + + with(database.likeQueries.selectWhereLikeRegex().executeAsList()) { + assertThat(first()).isEqualTo("testing") + } + + with(database.likeQueries.selectLikeRegex().executeAsList()) { + assertThat(first().expr).isTrue() + assertThat(first().expr_).isFalse() + } + } + + @Test + fun testILike() { + database.likeQueries.insert("TESTING") + + with(database.likeQueries.selectWhereILike("test%").executeAsList()) { + assertThat(first()).isEqualTo("TESTING") + } + + with(database.likeQueries.selectWhereILikeRegex().executeAsList()) { + assertThat(first()).isEqualTo("TESTING") + } + + with(database.likeQueries.selectILikeRegex().executeAsList()) { + assertThat(first().expr).isTrue() + assertThat(first().expr_).isFalse() + } + } + @Test fun testRankOver() { database.windowFunctionsQueries.insert("t", 2) From e6ed856589db0fb2e3e828d71bb080bdbe78e431 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:14:23 -0400 Subject: [PATCH 056/184] Update plugin binaryCompatibilityValidator to v0.15.1 (#5338) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e159b414c21..7cb2467b259 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.15.0" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.15.1" } From a9c61fdd91ef2ff5a6e1f4d4bb308959d5adb9d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:46:55 +0100 Subject: [PATCH 057/184] Fix 5288 adds PostgreSql drop constraint (#5289) * Add grammar ensure that DROP CONSTRAINT is higher than DROP COLUMN as would match first * Fixture test consider constraint doesn't exist in table schema --- .../postgresql/grammar/PostgreSql.bnf | 6 +++++ .../alter-table-drop-constraint/1.s | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-drop-constraint/1.s diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index b76edb749c6..da43b53b2ce 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -75,6 +75,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.REGEXP" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RENAME" "static com.alecstrong.sql.psi.core.psi.SqlTypes.REPLACE" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.RESTRICT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ROLLBACK" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ROW" "static com.alecstrong.sql.psi.core.psi.SqlTypes.RP" @@ -327,6 +328,7 @@ alter_table_rules ::= ( {alter_table_add_column} | {alter_table_rename_table} | alter_table_rename_column + | alter_table_drop_constraint | alter_table_drop_column | alter_table_add_constraint | alter_table_alter_column @@ -360,6 +362,10 @@ alter_table_add_constraint ::= ADD table_constraint { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.AlterTableAddConstraintMixin" } +alter_table_drop_constraint ::= DROP CONSTRAINT [ IF EXISTS ] {identifier} [ RESTRICT | CASCADE ] { + pin = 2 +} + type_clause ::= 'TYPE' data_clause ::= 'DATA' diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-drop-constraint/1.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-drop-constraint/1.s new file mode 100644 index 00000000000..1487e063ba2 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-drop-constraint/1.s @@ -0,0 +1,27 @@ +CREATE TABLE test ( + external_event_id TEXT +); + +ALTER TABLE test + ADD CONSTRAINT idx_external_event_id + UNIQUE (external_event_id); + +CREATE TABLE t1 ( + c1 INTEGER, + t1 TEXT, + t2 VARCHAR(255), + t3 CHAR(10) +); + +ALTER TABLE t1 + ADD CONSTRAINT chk_c1 CHECK (c1 > 0), + ADD CONSTRAINT chk_t2 CHECK (CHAR_LENGTH(t2) > 0); + +ALTER TABLE t1 + DROP CONSTRAINT chk_c1; + +ALTER TABLE t1 + DROP CONSTRAINT chk_t2 RESTRICT; + +ALTER TABLE test + DROP CONSTRAINT IF EXISTS idx_external_event_id CASCADE; From 1f402116fbe7e046efc6550b1728c26a6f8300b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:48:56 +0100 Subject: [PATCH 058/184] Fix 5309 alter table add column if not exists (#5311) * Add if not exists Add mixin to handle IF NOT EXISTS clause The new column will not be added if it already exists and IF NOT EXISTS clause is specified * Add fixture test * Add integration test migration file test --- .../postgresql/grammar/PostgreSql.bnf | 9 +++++ .../mixins/AlterTableAddColumnMixin.kt | 39 +++++++++++++++++++ .../alter-table-add-column/1.s | 7 ++++ .../postgresql/integration/v202406218000.sqm | 5 +++ .../postgresql/integration/v202406219000.sqm | 2 + 5 files changed, 62 insertions(+) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AlterTableAddColumnMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-add-column/1.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406218000.sqm create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406219000.sqm diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index da43b53b2ce..3a1f82ad403 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -107,6 +107,7 @@ overrides ::= type_name | update_stmt_limited | generated_clause | result_column + | alter_table_add_column | alter_table_rules | compound_select_stmt | extension_expr @@ -373,6 +374,14 @@ data_clause ::= 'DATA' column_not_null_clause ::= (SET | DROP) NOT NULL column_default_clause ::= SET {default_constraint} | DROP DEFAULT +if_not_exists ::= IF NOT EXISTS +alter_table_add_column ::= ADD [ COLUMN ] [ if_not_exists + ] {column_def} { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.AlterTableAddColumnMixin" + implements = "com.alecstrong.sql.psi.core.psi.SqlAlterTableAddColumn" + override = true +} + alter_table_alter_column ::= ALTER [COLUMN] {column_name} ( [ SET data_clause ] type_clause {column_type} [USING {column_name}'::'{column_type}] | column_not_null_clause diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AlterTableAddColumnMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AlterTableAddColumnMixin.kt new file mode 100644 index 00000000000..cd480b88577 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/AlterTableAddColumnMixin.kt @@ -0,0 +1,39 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAlterTableAddColumn +import com.alecstrong.sql.psi.core.psi.AlterTableApplier +import com.alecstrong.sql.psi.core.psi.LazyQuery +import com.alecstrong.sql.psi.core.psi.NamedElement +import com.alecstrong.sql.psi.core.psi.QueryElement +import com.alecstrong.sql.psi.core.psi.SqlAlterTableAddColumn +import com.alecstrong.sql.psi.core.psi.SqlColumnDef +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.intellij.lang.ASTNode +import com.intellij.psi.util.PsiTreeUtil + +internal abstract class AlterTableAddColumnMixin( + node: ASTNode, +) : SqlCompositeElementImpl(node), + SqlAlterTableAddColumn, + PostgreSqlAlterTableAddColumn, + AlterTableApplier { + override fun applyTo(lazyQuery: LazyQuery): LazyQuery { + return LazyQuery( + tableName = lazyQuery.tableName, + query = { + val columns = lazyQuery.query.columns + val existingColumn = columns.singleOrNull { + (it.element as NamedElement).textMatches(columnDef.columnName) + } + + lazyQuery.query.copy( + columns = if (ifNotExists != null && existingColumn != null) lazyQuery.query.columns else columns + QueryElement.QueryColumn(columnDef.columnName), + ) + }, + ) + } + + override fun getColumnDef(): SqlColumnDef { + return notNullChild(PsiTreeUtil.getChildOfType(this, SqlColumnDef::class.java)) + } +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-add-column/1.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-add-column/1.s new file mode 100644 index 00000000000..0bf5d9a7674 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/alter-table-add-column/1.s @@ -0,0 +1,7 @@ +CREATE TABLE T ( + id INTEGER +); + +ALTER TABLE T ADD COLUMN other_id INTEGER; + +ALTER TABLE T ADD COLUMN IF NOT EXISTS txt VARCHAR[] DEFAULT '{}'; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406218000.sqm b/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406218000.sqm new file mode 100644 index 00000000000..f63ec2147e7 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406218000.sqm @@ -0,0 +1,5 @@ +CREATE TABLE X ( + id INT NOT NULL, + txt TEXT NOT NULL +); + diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406219000.sqm b/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406219000.sqm new file mode 100644 index 00000000000..2e5970641ae --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql-migrations/src/main/sqldelight/migrations/app/cash/sqldelight/postgresql/integration/v202406219000.sqm @@ -0,0 +1,2 @@ +ALTER TABLE X ADD COLUMN test INTEGER NOT NULL; +ALTER TABLE X ADD COLUMN IF NOT EXISTS txt TEXT NOT NULL; From 33f69056f467c8589a1bf4b30804bdd5ee509820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Tue, 9 Jul 2024 15:51:38 +0100 Subject: [PATCH 059/184] Fix 5089 add postgresql type casting (#5261) * Add grammar Add operator Add Type Resolver Needs to handle chained '::' operators e.g '2023-04-25 10:30:00+02'::TIMESTAMP::DATE * Add Tests Fixture test Integration test * Type resolver Add Mixin expr to enable resolving of nullable type * Tests Fixture test Integration test * Add bindexpr Update PostgreSqlTypeResolver.kt support ?::data_type same as CAST(? AS DATA_TYPE) This types the bind parameter * Tests --- .../postgresql/PostgreSqlTypeResolver.kt | 21 ++++++++-- .../postgresql/grammar/PostgreSql.bnf | 9 ++++- .../DoubleColonCastOperatorExpressionMixin.kt | 18 +++++++++ .../postgres/PostgreSqlFixturesTest.kt | 2 +- .../typecast-expressions/Test.s | 39 +++++++++++++++++++ .../postgresql/integration/DataTypeCasts.sq | 16 ++++++++ .../postgresql/integration/PostgreSqlTest.kt | 26 +++++++++++++ 7 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DoubleColonCastOperatorExpressionMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/typecast-expressions/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DataTypeCasts.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 5da25812ee2..173841bdb5c 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -19,9 +19,11 @@ import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.TIMESTAMP import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.TIMESTAMP_TIMEZONE import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AggregateExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorExpressionMixin +import app.cash.sqldelight.dialects.postgresql.grammar.mixins.DoubleColonCastOperatorExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.WindowFunctionMixin import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAtTimeZoneOperator import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDeleteStmtLimited +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDoubleColonCastOperatorExpression import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlExtensionExpr import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlInsertStmt import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlTypeName @@ -232,10 +234,16 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes } override fun argumentType(parent: PsiElement, argument: SqlExpr): IntermediateType { - return if (argument.parent is PostgreSqlAtTimeZoneOperator) { - IntermediateType(TEXT) - } else { - parentResolver.argumentType(parent, argument) + return when (argument.parent) { + is PostgreSqlAtTimeZoneOperator -> { + IntermediateType(TEXT) + } + is PostgreSqlDoubleColonCastOperatorExpression -> { + (argument.parent.parent as SqlExpr).postgreSqlType() + } + else -> { + parentResolver.argumentType(parent, argument) + } } } @@ -310,6 +318,11 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes if (acc.dialectType == TIMESTAMP) IntermediateType(TIMESTAMP_TIMEZONE) else IntermediateType(TIMESTAMP) } ?: if (timeStamp.dialectType == TIMESTAMP) IntermediateType(TIMESTAMP_TIMEZONE) else IntermediateType(TIMESTAMP) } + doubleColonCastOperatorExpression != null -> { + val expType: IntermediateType = (doubleColonCastOperatorExpression as DoubleColonCastOperatorExpressionMixin).expr.postgreSqlType() + val lastTypeCast = doubleColonCastOperatorExpression!!.doubleColonCastOperatorList.last().typeName + definitionType(lastTypeCast).nullableIf(expType.javaType.isNullable) + } else -> parentResolver.resolvedType(this) } diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 3a1f82ad403..b5a5784488d 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -410,7 +410,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { +extension_expr ::= double_colon_cast_operator_expression | at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true @@ -478,6 +478,13 @@ regex_match_operator_expression ::= ( {function_expr} | {column_expr} ) regex_ma pin = 2 } +double_colon_cast_operator ::= '::' type_name + +double_colon_cast_operator_expression ::= ( {bind_expr} | {literal_expr} | {cast_expr} | {function_expr} | {column_expr} ) double_colon_cast_operator [ double_colon_cast_operator ] * { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.DoubleColonCastOperatorExpressionMixin" + pin = 2 +} + at_time_zone_operator ::= 'AT' 'TIME' 'ZONE' <> { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorMixin" } diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DoubleColonCastOperatorExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DoubleColonCastOperatorExpressionMixin.kt new file mode 100644 index 00000000000..b2619fbf9e1 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DoubleColonCastOperatorExpressionMixin.kt @@ -0,0 +1,18 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDoubleColonCastOperatorExpression +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode + +/** + * Support historical double colon casts + * :: + * The expr is used to determine nullable when resolver casts to new type + */ +internal abstract class DoubleColonCastOperatorExpressionMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlExpr, + PostgreSqlDoubleColonCastOperatorExpression { + val expr get() = children.filterIsInstance().first() +} diff --git a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt index 2273c7df799..8727c647a02 100644 --- a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt +++ b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt @@ -18,7 +18,7 @@ class PostgreSqlFixturesTest(name: String, fixtureRoot: File) : FixturesTest(nam "BLOB" to "TEXT", "id TEXT GENERATED ALWAYS AS (2) UNIQUE NOT NULL" to "id TEXT GENERATED ALWAYS AS (2) STORED UNIQUE NOT NULL", "'(', ')', ',', '.', , BETWEEN or IN expected, got ','" - to "'#-', '(', ')', ',', '.', , , , , '@@', AT, BETWEEN or IN expected, got ','", + to "'#-', '(', ')', ',', '.', '::', , , , , '@@', AT, BETWEEN or IN expected, got ','", ) override fun setupDialect() { diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/typecast-expressions/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/typecast-expressions/Test.s new file mode 100644 index 00000000000..3a783ee4e98 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/typecast-expressions/Test.s @@ -0,0 +1,39 @@ +SELECT '1'::text; + +SELECT 3.14::text; + +SELECT '42'::integer; + +SELECT 'true'::boolean; + +SELECT concat('tru','e')::boolean; + +WITH numbers AS ( + SELECT generate_series(-3.5, 3.5, 1) AS x +) +SELECT x, + round(x::numeric) AS num_round, + round(x::double precision) AS dbl_round +FROM numbers; + +SELECT '2023-05-01 12:34:56'::TIMESTAMP::DATE; + +SELECT '6ba7b810-9dad-11d1-80b4-00c04fd430c8'::UUID; + +SELECT '{"a":42}'::JSON; + +SELECT '[1,2,3]'::INT[]; + +SELECT 42::BIGINT; + +SELECT 3.14::DOUBLE PRECISION; + +SELECT 'f'::BOOLEAN; + +SELECT 'hello world'::VARCHAR(5); + +SELECT '2023-04-25 10:30:00+02'::TIMESTAMP WITH TIME ZONE; + +SELECT '2023-04-25 10:30:00+02'::TIMESTAMP::DATE; + +SELECT ?::INT; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DataTypeCasts.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DataTypeCasts.sq new file mode 100644 index 00000000000..44c964f4d97 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DataTypeCasts.sq @@ -0,0 +1,16 @@ +CREATE TABLE TypeCast( + answer TEXT NOT NULL, + ts TEXT +); + +insert: +INSERT INTO TypeCast (answer, ts) VALUES(?, ?); + +select: +SELECT '1'::TEXT, 3.14::TEXT, '42'::INTEGER, 'false'::BOOLEAN, concat('tru','e')::BOOLEAN, +'2023-05-01 12:34:56'::TIMESTAMP, '6ba7b810-9dad-11d1-80b4-00c04fd430c8'::UUID, '{"a":42}'::JSON, +'{1,2,3}'::INT[], 42::BIGINT, 3.14::DOUBLE PRECISION, 'f'::BOOLEAN, 'hello world'::VARCHAR(5), +'2023-04-25 10:30:00+02'::TIMESTAMP WITH TIME ZONE, '2023-04-25 10:30:00+02'::TIMESTAMP::DATE, +answer::INTEGER, ts::TIMESTAMP, +?::INTEGER +FROM TypeCast; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 4d8e86618a2..2a953c85d49 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -965,6 +965,32 @@ class PostgreSqlTest { } } + @Test + fun testDataTypeCasts() { + database.dataTypeCastsQueries.insert("42", null) + + with(database.dataTypeCastsQueries.select(42).executeAsOne()) { + assertThat(expr).isEqualTo("1") + assertThat(expr_).isEqualTo("3.14") + assertThat(expr__).isEqualTo(42) + assertThat(expr___).isFalse() + assertThat(expr____).isTrue() + assertThat(expr_____).isEqualTo(LocalDateTime.of(2023, 5, 1, 12, 34, 56)) + assertThat(expr______).isEqualTo(java.util.UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")) + assertThat(expr_______).isEqualTo("""{"a":42}""") + assertThat(expr________).isEqualTo(arrayOf(1, 2, 3)) + assertThat(expr_________).isEqualTo(42L) + assertThat(expr__________).isEqualTo(3.14) + assertThat(expr___________).isFalse() + assertThat(expr____________).isEqualTo("hello") + assertThat(expr_____________).isEqualTo(OffsetDateTime.of(2023, 4, 25, 8, 30, 0, 0, ZoneOffset.ofHours(0))) + assertThat(expr______________).isEqualTo(LocalDate.of(2023, 4, 25)) + assertThat(expr_______________).isEqualTo(42) + assertThat(expr________________).isNull() + assertThat(expr_________________).isEqualTo(42) + } + } + @Test fun testXml() { val a = "Codestin Search Apptest" From 81d1abd013dc6711818ca83852394870de32e8c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Tue, 9 Jul 2024 16:19:08 +0100 Subject: [PATCH 060/184] Add 4933 PostgreSql array contains operators (#5228) * Add Postgresql contains operators for array <@ and @> are used by json, tsvector and array Move the operators to separate mixin * Add fixture and integration tests For Array Contains text[] and varchar[] arrays are different types in Postgresql for contains operator * Add array overlap operator Add fixture and integration test * fix merge conflict --------- Co-authored-by: Jake Wharton --- .../postgresql/PostgreSqlTypeResolver.kt | 2 +- .../postgresql/grammar/PostgreSql.bnf | 10 ++++- .../mixins/ContainsOperatorExpressionMixin.kt | 36 ++++++++++++++++++ .../postgres/PostgreSqlFixturesTest.kt | 2 +- .../array_operators/Test.s | 19 ++++++++++ .../postgresql/integration/Arrays.sq | 24 +++++++++++- .../postgresql/integration/PostgreSqlTest.kt | 38 ++++++++++++++++++- 7 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ContainsOperatorExpressionMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/array_operators/Test.s diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 173841bdb5c..52281f727f9 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -309,7 +309,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes IntermediateType(PostgreSqlType.JSON) } } - matchOperatorExpression != null || regexMatchOperatorExpression != null || booleanNotExpression != null -> { + matchOperatorExpression != null || regexMatchOperatorExpression != null || containsOperatorExpression != null || booleanNotExpression != null -> { IntermediateType(BOOLEAN) } atTimeZoneOperatorExpression != null -> { diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index b5a5784488d..8e5e2ef7cb8 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -410,7 +410,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= double_colon_cast_operator_expression | at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { +extension_expr ::= double_colon_cast_operator_expression | contains_operator_expression | at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true @@ -463,9 +463,15 @@ json_expression ::= {column_expr} ( jsona_binary_operator | jsonb_binary_operato } jsona_binary_operator ::= '->' | '->>' | '#>' | '#>>' jsonb_binary_operator ::= '#-' -jsonb_boolean_operator ::= '@>' | '<@' | '@?' | '??|' | '??&' | '??' +jsonb_boolean_operator ::= '@?' | '??|' | '??&' | '??' +contains_operator ::= '@>' | '<@' | '&&' match_operator ::= '@@' +contains_operator_expression ::= ( {function_expr} | {column_expr} ) contains_operator <> { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.ContainsOperatorExpressionMixin" + pin = 2 +} + match_operator_expression ::= ( {function_expr} | {column_expr} ) match_operator <> { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.MatchOperatorExpressionMixin" pin = 2 diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ContainsOperatorExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ContainsOperatorExpressionMixin.kt new file mode 100644 index 00000000000..e8c4ca22005 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ContainsOperatorExpressionMixin.kt @@ -0,0 +1,36 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlContainsOperatorExpression +import com.alecstrong.sql.psi.core.SqlAnnotationHolder +import com.alecstrong.sql.psi.core.psi.SqlBinaryExpr +import com.alecstrong.sql.psi.core.psi.SqlColumnDef +import com.alecstrong.sql.psi.core.psi.SqlColumnName +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode + +/** + * The "@>" and "<@" contains operators are used by Array, TsVector and Jsonb + * The type annotation is performed here for these types + * For additional json operators see JsonExpressionMixin + */ +internal abstract class ContainsOperatorExpressionMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlBinaryExpr, + PostgreSqlContainsOperatorExpression { + + override fun annotate(annotationHolder: SqlAnnotationHolder) { + val columnType = ((firstChild.firstChild.reference?.resolve() as? SqlColumnName)?.parent as? SqlColumnDef)?.columnType?.typeName?.text + when { + columnType == null -> super.annotate(annotationHolder) + columnType.endsWith("[]") -> super.annotate(annotationHolder) + columnType == "JSONB" -> super.annotate(annotationHolder) + columnType == "JSON" -> annotationHolder.createErrorAnnotation(firstChild.firstChild, "Left side of jsonb expression must be a jsonb column.") + columnType != "TSVECTOR" -> annotationHolder.createErrorAnnotation(firstChild.firstChild, "Left side of match expression must be a tsvector column.") + } + super.annotate(annotationHolder) + } + override fun getExprList(): List { + return children.filterIsInstance() + } +} diff --git a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt index 8727c647a02..4299e4d626b 100644 --- a/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt +++ b/dialects/postgresql/src/test/kotlin/app/cash/sqldelight/dialects/postgres/PostgreSqlFixturesTest.kt @@ -18,7 +18,7 @@ class PostgreSqlFixturesTest(name: String, fixtureRoot: File) : FixturesTest(nam "BLOB" to "TEXT", "id TEXT GENERATED ALWAYS AS (2) UNIQUE NOT NULL" to "id TEXT GENERATED ALWAYS AS (2) STORED UNIQUE NOT NULL", "'(', ')', ',', '.', , BETWEEN or IN expected, got ','" - to "'#-', '(', ')', ',', '.', '::', , , , , '@@', AT, BETWEEN or IN expected, got ','", + to "'#-', '(', ')', ',', '.', '::', , , , , , '@@', AT, BETWEEN or IN expected, got ','", ) override fun setupDialect() { diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/array_operators/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/array_operators/Test.s new file mode 100644 index 00000000000..14ca43da910 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/array_operators/Test.s @@ -0,0 +1,19 @@ +CREATE TABLE T( + a INT[], + b INT[] +); + +SELECT a @> ?, b <@ ? +FROM T; + +SELECT * +FROM T +WHERE a @> ?; + +SELECT * +FROM T +WHERE b <@ a; + +SELECT * +FROM T +WHERE b && a; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Arrays.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Arrays.sq index e522bafa030..735378c9d84 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Arrays.sq +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Arrays.sq @@ -1,9 +1,29 @@ CREATE TABLE arrays( intArray INTEGER[] AS kotlin.Array, - textArray TEXT[] + textArray VARCHAR[], + vcharArray VARCHAR[] ); insertAndReturn: INSERT INTO arrays -VALUES (?, ?) +VALUES (?, ?, ?) RETURNING *; + +contains: +SELECT intArray @> ?, vcharArray <@ ? +FROM arrays; + +containsFirst: +SELECT * +FROM arrays +WHERE intArray @> ?; + +containsSecond: +SELECT * +FROM arrays +WHERE vcharArray <@ ?; + +overlaps: +SELECT * +FROM arrays +WHERE intArray && ?; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 2a953c85d49..4d5c5947f48 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -375,9 +375,45 @@ class PostgreSqlTest { } @Test fun testArrays() { - with(database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two")).executeAsOne()) { + with(database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two"), arrayOf("a", "b")).executeAsOne()) { assertThat(intArray!!.asList()).containsExactly(1u, 2u).inOrder() assertThat(textArray!!.asList()).containsExactly("one", "two").inOrder() + assertThat(vcharArray!!.asList()).containsExactly("a", "b").inOrder() + } + } + + @Test fun testArrayContains() { + database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two"), arrayOf("a", "b")).executeAsOne() + with(database.arraysQueries.contains(arrayOf(1u, 2u), arrayOf("a", "b")).executeAsList()) { + assertThat(first().expr).isTrue() + assertThat(first().expr_).isTrue() + } + } + + @Test fun testArrayContainsFirst() { + database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two"), arrayOf("a", "b")).executeAsOne() + with(database.arraysQueries.containsFirst(arrayOf(1u, 2u)).executeAsList()) { + assertThat(first().intArray!!.asList()).containsExactly(1u, 2u).inOrder() + assertThat(first().textArray!!.asList()).containsExactly("one", "two").inOrder() + assertThat(first().vcharArray!!.asList()).containsExactly("a", "b").inOrder() + } + } + + @Test fun testArrayContainsSecond() { + database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two"), arrayOf("a", "b")).executeAsOne() + with(database.arraysQueries.containsSecond(arrayOf("a", "b")).executeAsList()) { + assertThat(first().intArray!!.asList()).containsExactly(1u, 2u).inOrder() + assertThat(first().textArray!!.asList()).containsExactly("one", "two").inOrder() + assertThat(first().vcharArray!!.asList()).containsExactly("a", "b").inOrder() + } + } + + @Test fun testArrayOverlaps() { + database.arraysQueries.insertAndReturn(arrayOf(1u, 2u), arrayOf("one", "two"), arrayOf("a", "b")).executeAsOne() + with(database.arraysQueries.overlaps(arrayOf(1u, 2u)).executeAsList()) { + assertThat(first().intArray!!.asList()).containsExactly(1u, 2u).inOrder() + assertThat(first().textArray!!.asList()).containsExactly("one", "two").inOrder() + assertThat(first().vcharArray!!.asList()).containsExactly("a", "b").inOrder() } } From 432565ae8b1e626ab5a37619de4bb84056957c90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:32:36 +0000 Subject: [PATCH 061/184] Update dependency gradle to v8.9 (#5350) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 ++++- gradlew.bat | 2 ++ sample-web/gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- sample-web/gradlew | 7 +++++-- sample-web/gradlew.bat | 2 ++ sample/gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43504 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- sample/gradlew | 5 ++++- sample/gradlew.bat | 2 ++ 12 files changed, 22 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 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 Ojj7^59?Sdh$^Qpp*~F>< delta 8662 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c96..09523c0e549 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/sample-web/gradle/wrapper/gradle-wrapper.jar b/sample-web/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 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 Ojj7^59?Sdh$^Qpp*~F>< delta 8662 zcmYM1RaBhK(uL9BL4pT&ch}$qcL*As0R|^HFD`?-26qkaNwC3nu;A|Q0Yd)oJ7=x) z_f6HatE;=#>YLq{FoYf$!na@pfNwSyI%>|UMk5`vO(z@Ao)eZR(~D#FF?U$)+q)1q z9OVG^Ib0v?R8wYfQ*1H;5Oyixqnyt6cXR#u=LM~V7_GUu}N(b}1+x^JUL#_8Xj zB*(FInWvSPGo;K=k3}p&4`*)~)p`nX#}W&EpfKCcOf^7t zPUS81ov(mXS;$9To6q84I!tlP&+Z?lkctuIZ(SHN#^=JGZe^hr^(3d*40pYsjikBWME6IFf!!+kC*TBc!T)^&aJ#z0#4?OCUbNoa}pwh=_SFfMf|x$`-5~ zP%%u%QdWp#zY6PZUR8Mz1n$f44EpTEvKLTL;yiZrPCV=XEL09@qmQV#*Uu*$#-WMN zZ?rc(7}93z4iC~XHcatJev=ey*hnEzajfb|22BpwJ4jDi;m>Av|B?TqzdRm-YT(EV zCgl${%#nvi?ayAFYV7D_s#07}v&FI43BZz@`dRogK!k7Y!y6r=fvm~=F9QP{QTj>x z#Y)*j%`OZ~;rqP0L5@qYhR`qzh^)4JtE;*faTsB;dNHyGMT+fpyz~LDaMOO?c|6FD z{DYA+kzI4`aD;Ms|~h49UAvOfhMEFip&@&Tz>3O+MpC0s>`fl!T(;ZP*;Ux zr<2S-wo(Kq&wfD_Xn7XXQJ0E4u7GcC6pqe`3$fYZ5Eq4`H67T6lex_QP>Ca##n2zx z!tc=_Ukzf{p1%zUUkEO(0r~B=o5IoP1@#0A=uP{g6WnPnX&!1Z$UWjkc^~o^y^Kkn z%zCrr^*BPjcTA58ZR}?%q7A_<=d&<*mXpFSQU%eiOR`=78@}+8*X##KFb)r^zyfOTxvA@cbo65VbwoK0lAj3x8X)U5*w3(}5 z(Qfv5jl{^hk~j-n&J;kaK;fNhy9ZBYxrKQNCY4oevotO-|7X}r{fvYN+{sCFn2(40 zvCF7f_OdX*L`GrSf0U$C+I@>%+|wQv*}n2yT&ky;-`(%#^vF79p1 z>y`59E$f7!vGT}d)g)n}%T#-Wfm-DlGU6CX`>!y8#tm-Nc}uH50tG)dab*IVrt-TTEM8!)gIILu*PG_-fbnFjRA+LLd|_U3yas12Lro%>NEeG%IwN z{FWomsT{DqMjq{7l6ZECb1Hm@GQ`h=dcyApkoJ6CpK3n83o-YJnXxT9b2%TmBfKZ* zi~%`pvZ*;(I%lJEt9Bphs+j#)ws}IaxQYV6 zWBgVu#Kna>sJe;dBQ1?AO#AHecU~3cMCVD&G})JMkbkF80a?(~1HF_wv6X!p z6uXt_8u)`+*%^c@#)K27b&Aa%m>rXOcGQg8o^OB4t0}@-WWy38&)3vXd_4_t%F1|( z{z(S)>S!9eUCFA$fQ^127DonBeq@5FF|IR7(tZ?Nrx0(^{w#a$-(fbjhN$$(fQA(~|$wMG4 z?UjfpyON`6n#lVwcKQ+#CuAQm^nmQ!sSk>=Mdxk9e@SgE(L2&v`gCXv&8ezHHn*@% zi6qeD|I%Q@gb(?CYus&VD3EE#xfELUvni89Opq-6fQmY-9Di3jxF?i#O)R4t66ekw z)OW*IN7#{_qhrb?qlVwmM@)50jEGbjTiDB;nX{}%IC~pw{ev#!1`i6@xr$mgXX>j} zqgxKRY$fi?B7|GHArqvLWu;`?pvPr!m&N=F1<@i-kzAmZ69Sqp;$)kKg7`76GVBo{ zk+r?sgl{1)i6Hg2Hj!ehsDF3tp(@n2+l%ihOc7D~`vzgx=iVU0{tQ&qaV#PgmalfG zPj_JimuEvo^1X)dGYNrTHBXwTe@2XH-bcnfpDh$i?Il9r%l$Ob2!dqEL-To>;3O>` z@8%M*(1#g3_ITfp`z4~Z7G7ZG>~F0W^byMvwzfEf*59oM*g1H)8@2zL&da+$ms$Dp zrPZ&Uq?X)yKm7{YA;mX|rMEK@;W zA-SADGLvgp+)f01=S-d$Z8XfvEZk$amHe}B(gQX-g>(Y?IA6YJfZM(lWrf);5L zEjq1_5qO6U7oPSb>3|&z>OZ13;mVT zWCZ=CeIEK~6PUv_wqjl)pXMy3_46hB?AtR7_74~bUS=I}2O2CjdFDA*{749vOj2hJ z{kYM4fd`;NHTYQ_1Rk2dc;J&F2ex^}^%0kleFbM!yhwO|J^~w*CygBbkvHnzz@a~D z|60RVTr$AEa-5Z->qEMEfau=__2RanCTKQ{XzbhD{c!e5hz&$ZvhBX0(l84W%eW17 zQ!H)JKxP$wTOyq83^qmx1Qs;VuWuxclIp!BegkNYiwyMVBay@XWlTpPCzNn>&4)f* zm&*aS?T?;6?2>T~+!=Gq4fjP1Z!)+S<xiG>XqzY@WKKMzx?0|GTS4{ z+z&e0Uysciw#Hg%)mQ3C#WQkMcm{1yt(*)y|yao2R_FRX$WPvg-*NPoj%(k*{BA8Xx&0HEqT zI0Swyc#QyEeUc)0CC}x{p+J{WN>Z|+VZWDpzW`bZ2d7^Yc4ev~9u-K&nR zl#B0^5%-V4c~)1_xrH=dGbbYf*7)D&yy-}^V|Np|>V@#GOm($1=El5zV?Z`Z__tD5 zcLUi?-0^jKbZrbEny&VD!zA0Nk3L|~Kt4z;B43v@k~ zFwNisc~D*ZROFH;!f{&~&Pof-x8VG8{gSm9-Yg$G(Q@O5!A!{iQH0j z80Rs>Ket|`cbw>z$P@Gfxp#wwu;I6vi5~7GqtE4t7$Hz zPD=W|mg%;0+r~6)dC>MJ&!T$Dxq3 zU@UK_HHc`_nI5;jh!vi9NPx*#{~{$5Azx`_VtJGT49vB_=WN`*i#{^X`xu$9P@m>Z zL|oZ5CT=Zk?SMj{^NA5E)FqA9q88h{@E96;&tVv^+;R$K`kbB_ zZneKrSN+IeIrMq;4EcH>sT2~3B zrZf-vSJfekcY4A%e2nVzK8C5~rAaP%dV2Hwl~?W87Hdo<*EnDcbZqVUb#8lz$HE@y z2DN2AQh%OcqiuWRzRE>cKd)24PCc)#@o&VCo!Rcs;5u9prhK}!->CC)H1Sn-3C7m9 zyUeD#Udh1t_OYkIMAUrGU>ccTJS0tV9tW;^-6h$HtTbon@GL1&OukJvgz>OdY)x4D zg1m6Y@-|p;nB;bZ_O>_j&{BmuW9km4a728vJV5R0nO7wt*h6sy7QOT0ny-~cWTCZ3 z9EYG^5RaAbLwJ&~d(^PAiicJJs&ECAr&C6jQcy#L{JCK&anL)GVLK?L3a zYnsS$+P>UB?(QU7EI^%#9C;R-jqb;XWX2Bx5C;Uu#n9WGE<5U=zhekru(St>|FH2$ zOG*+Tky6R9l-yVPJk7giGulOO$gS_c!DyCog5PT`Sl@P!pHarmf7Y0HRyg$X@fB7F zaQy&vnM1KZe}sHuLY5u7?_;q!>mza}J?&eLLpx2o4q8$qY+G2&Xz6P8*fnLU+g&i2}$F%6R_Vd;k)U{HBg{+uuKUAo^*FRg!#z}BajS)OnqwXd!{u>Y&aH?)z%bwu_NB9zNw+~661!> zD3%1qX2{743H1G8d~`V=W`w7xk?bWgut-gyAl*6{dW=g_lU*m?fJ>h2#0_+J3EMz_ zR9r+0j4V*k>HU`BJaGd~@*G|3Yp?~Ljpth@!_T_?{an>URYtict~N+wb}%n)^GE8eM(=NqLnn*KJnE*v(7Oo)NmKB*qk;0&FbO zkrIQs&-)ln0-j~MIt__0pLdrcBH{C(62`3GvGjR?`dtTdX#tf-2qkGbeV;Ud6Dp0& z|A6-DPgg=v*%2`L4M&p|&*;;I`=Tn1M^&oER=Gp&KHBRxu_OuFGgX;-U8F?*2>PXjb!wwMMh_*N8$?L4(RdvV#O5cUu0F|_zQ#w1zMA4* zJeRk}$V4?zPVMB=^}N7x?(P7!x6BfI%*)yaUoZS0)|$bw07XN{NygpgroPW>?VcO} z@er3&#@R2pLVwkpg$X8HJM@>FT{4^Wi&6fr#DI$5{ERpM@|+60{o2_*a7k__tIvGJ9D|NPoX@$4?i_dQPFkx0^f$=#_)-hphQ93a0|`uaufR!Nlc^AP+hFWe~(j_DCZmv;7CJ4L7tWk{b;IFDvT zchD1qB=cE)Mywg5Nw>`-k#NQhT`_X^c`s$ODVZZ-)T}vgYM3*syn41}I*rz?)`Q<* zs-^C3!9AsV-nX^0wH;GT)Y$yQC*0x3o!Bl<%>h-o$6UEG?{g1ip>njUYQ}DeIw0@qnqJyo0do(`OyE4kqE2stOFNos%!diRfe=M zeU@=V=3$1dGv5ZbX!llJ!TnRQQe6?t5o|Y&qReNOxhkEa{CE6d^UtmF@OXk<_qkc0 zc+ckH8Knc!FTjk&5FEQ}$sxj!(a4223cII&iai-nY~2`|K89YKcrYFAMo^oIh@W^; zsb{KOy?dv_D5%}zPk_7^I!C2YsrfyNBUw_ude7XDc0-+LjC0!X_moHU3wmveS@GRu zX>)G}L_j1I-_5B|b&|{ExH~;Nm!xytCyc}Ed!&Hqg;=qTK7C93f>!m3n!S5Z!m`N} zjIcDWm8ES~V2^dKuv>8@Eu)Zi{A4;qHvTW7hB6B38h%$K76BYwC3DIQ0a;2fSQvo$ z`Q?BEYF1`@I-Nr6z{@>`ty~mFC|XR`HSg(HN>&-#&eoDw-Q1g;x@Bc$@sW{Q5H&R_ z5Aici44Jq-tbGnDsu0WVM(RZ=s;CIcIq?73**v!Y^jvz7ckw*=?0=B!{I?f{68@V( z4dIgOUYbLOiQccu$X4P87wZC^IbGnB5lLfFkBzLC3hRD?q4_^%@O5G*WbD?Wug6{<|N#Fv_Zf3ST>+v_!q5!fSy#{_XVq$;k*?Ar^R&FuFM7 zKYiLaSe>Cw@`=IUMZ*U#v>o5!iZ7S|rUy2(yG+AGnauj{;z=s8KQ(CdwZ>&?Z^&Bt z+74(G;BD!N^Ke>(-wwZN5~K%P#L)59`a;zSnRa>2dCzMEz`?VaHaTC>?&o|(d6e*Z zbD!=Ua-u6T6O!gQnncZ&699BJyAg9mKXd_WO8O`N@}bx%BSq)|jgrySfnFvzOj!44 z9ci@}2V3!ag8@ZbJO;;Q5ivdTWx+TGR`?75Jcje}*ufx@%5MFUsfsi%FoEx)&uzkN zgaGFOV!s@Hw3M%pq5`)M4Nz$)~Sr9$V2rkP?B7kvI7VAcnp6iZl zOd!(TNw+UH49iHWC4!W&9;ZuB+&*@Z$}>0fx8~6J@d)fR)WG1UndfdVEeKW=HAur| z15zG-6mf`wyn&x@&?@g1ibkIMob_`x7nh7yu9M>@x~pln>!_kzsLAY#2ng0QEcj)qKGj8PdWEuYKdM!jd{ zHP6j^`1g}5=C%)LX&^kpe=)X+KR4VRNli?R2KgYlwKCN9lcw8GpWMV+1Ku)~W^jV2 zyiTv-b*?$AhvU7j9~S5+u`Ysw9&5oo0Djp8e(j25Etbx42Qa=4T~}q+PG&XdkWDNF z7bqo#7KW&%dh~ST6hbu8S=0V`{X&`kAy@8jZWZJuYE}_#b4<-^4dNUc-+%6g($yN% z5ny^;ogGh}H5+Gq3jR21rQgy@5#TCgX+(28NZ4w}dzfx-LP%uYk9LPTKABaQh1ah) z@Y(g!cLd!Mcz+e|XI@@IH9z*2=zxJ0uaJ+S(iIsk7=d>A#L<}={n`~O?UTGX{8Pda z_KhI*4jI?b{A!?~-M$xk)w0QBJb7I=EGy&o3AEB_RloU;v~F8ubD@9BbxV1c36CsTX+wzAZlvUm*;Re06D+Bq~LYg-qF4L z5kZZ80PB&4U?|hL9nIZm%jVj0;P_lXar)NSt3u8xx!K6Y0bclZ%<9fwjZ&!^;!>ug zQ}M`>k@S{BR20cyVXtKK%Qa^7?e<%VSAPGmVtGo6zc6BkO5vW5)m8_k{xT3;ocdpH zudHGT06XU@y6U!&kP8i6ubMQl>cm7=(W6P7^24Uzu4Xpwc->ib?RSHL*?!d{c-aE# zp?TrFr{4iDL3dpljl#HHbEn{~eW2Nqfksa(r-}n)lJLI%e#Bu|+1% zN&!n(nv(3^jGx?onfDcyeCC*p6)DuFn_<*62b92Pn$LH(INE{z^8y?mEvvO zZ~2I;A2qXvuj>1kk@WsECq1WbsSC!0m8n=S^t3kxAx~of0vpv{EqmAmDJ3(o;-cvf zu$33Z)C0)Y4(iBhh@)lsS|a%{;*W(@DbID^$ z|FzcJB-RFzpkBLaFLQ;EWMAW#@K(D#oYoOmcctdTV?fzM2@6U&S#+S$&zA4t<^-!V z+&#*xa)cLnfMTVE&I}o#4kxP~JT3-A)L_5O!yA2ebq?zvb0WO1D6$r9p?!L0#)Fc> z+I&?aog~FPBH}BpWfW^pyc{2i8#Io6e)^6wv}MZn&`01oq@$M@5eJ6J^IrXLI) z4C!#kh)89u5*Q@W5(rYDqBKO6&G*kPGFZfu@J}ug^7!sC(Wcv3Fbe{$Sy|{-VXTct znsP+0v}kduRs=S=x0MA$*(7xZPE-%aIt^^JG9s}8$43E~^t4=MxmMts;q2$^sj=k( z#^suR{0Wl3#9KAI<=SC6hifXuA{o02vdyq>iw%(#tv+@ov{QZBI^*^1K?Q_QQqA5n9YLRwO3a7JR+1x3#d3lZL;R1@8Z!2hnWj^_5 z^M{3wg%f15Db5Pd>tS!6Hj~n^l478ljxe@>!C;L$%rKfm#RBw^_K&i~ZyY_$BC%-L z^NdD{thVHFlnwfy(a?{%!m;U_9ic*!OPxf&5$muWz7&4VbW{PP)oE5u$uXUZU>+8R zCsZ~_*HLVnBm*^{seTAV=iN)mB0{<}C!EgE$_1RMj1kGUU?cjSWu*|zFA(ZrNE(CkY7>Mv1C)E1WjsBKAE%w}{~apwNj z0h`k)C1$TwZ<3de9+>;v6A0eZ@xHm#^7|z9`gQ3<`+lpz(1(RsgHAM@Ja+)c?;#j- zC=&5FD)m@9AX}0g9XQ_Yt4YB}aT`XxM-t>7v@BV}2^0gu0zRH%S9}!P(MBAFGyJ8F zEMdB&{eGOd$RqV77Lx>8pX^<@TdL{6^K7p$0uMTLC^n)g*yXRXMy`tqjYIZ|3b#Iv z4<)jtQU5`b{A;r2QCqIy>@!uuj^TBed3OuO1>My{GQe<^9|$4NOHTKFp{GpdFY-kC zi?uHq>lF$}<(JbQatP0*>$Aw_lygfmUyojkE=PnV)zc)7%^5BxpjkU+>ol2}WpB2hlDP(hVA;uLdu`=M_A!%RaRTd6>Mi_ozLYOEh!dfT_h0dSsnQm1bk)%K45)xLw zql&fx?ZOMBLXtUd$PRlqpo2CxNQTBb=!T|_>p&k1F})Hq&xksq>o#4b+KSs2KyxPQ z#{(qj@)9r6u2O~IqHG76@Fb~BZ4Wz_J$p_NU9-b3V$$kzjN24*sdw5spXetOuU1SR z{v}b92c>^PmvPs>BK2Ylp6&1>tnPsBA0jg0RQ{({-?^SBBm>=W>tS?_h^6%Scc)8L zgsKjSU@@6kSFX%_3%Qe{i7Z9Wg7~fM_)v?ExpM@htI{G6Db5ak(B4~4kRghRp_7zr z#Pco0_(bD$IS6l2j>%Iv^Hc)M`n-vIu;-2T+6nhW0JZxZ|NfDEh;ZnAe d|9e8rKfIInFTYPwOD9TMuEcqhmizAn{|ERF)u#Xe diff --git a/sample-web/gradle/wrapper/gradle-wrapper.properties b/sample-web/gradle/wrapper/gradle-wrapper.properties index a4413138c96..09523c0e549 100644 --- a/sample-web/gradle/wrapper/gradle-wrapper.properties +++ b/sample-web/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample-web/gradlew b/sample-web/gradlew index 1aa94a42690..f5feea6d6b1 100755 --- a/sample-web/gradlew +++ b/sample-web/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/sample-web/gradlew.bat b/sample-web/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/sample-web/gradlew.bat +++ b/sample-web/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/sample/gradle/wrapper/gradle-wrapper.jar b/sample/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 8703 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 Ojj7^59?Sdh$^Qpp*~F>< delta 8662 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 diff --git a/sample/gradle/wrapper/gradle-wrapper.properties b/sample/gradle/wrapper/gradle-wrapper.properties index a4413138c96..09523c0e549 100644 --- a/sample/gradle/wrapper/gradle-wrapper.properties +++ b/sample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample/gradlew b/sample/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/sample/gradlew +++ b/sample/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/sample/gradlew.bat b/sample/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/sample/gradlew.bat +++ b/sample/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## From 713b959ad3c882d2d0bcd145d0d1625caa811b26 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:36:40 -0400 Subject: [PATCH 062/184] Update agp to v8.5.1 (#5351) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7cb2467b259..4871e6421d9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.3.1" -agp = "8.5.0" +agp = "8.5.1" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From 10405b26070590be8dc3f92a5cc626a535e42687 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 08:50:01 -0400 Subject: [PATCH 063/184] Update dependency com.google.truth:truth to v1.4.4 (#5352) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4871e6421d9..23546070071 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -38,7 +38,7 @@ android-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.18.0" } junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } -truth = { module = "com.google.truth:truth", version = "1.4.3" } +truth = { module = "com.google.truth:truth", version = "1.4.4" } turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } bugsnag = { module = "com.bugsnag:bugsnag", version = "3.7.1" } picnic = { module = "com.jakewharton.picnic:picnic", version = "0.7.0" } From 6e4c6854460987100b640bb3589645cf8e4fc59c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 08:38:50 -0400 Subject: [PATCH 064/184] Update dependency com.squareup:kotlinpoet to v1.18.1 (#5355) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 23546070071..a6c670fec6b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ androidx-paging3-runtime = { module = "androidx.paging:paging-runtime", version. androidx-recyclerView = { module = "androidx.recyclerview:recyclerview", version = "1.3.2" } android-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } -kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.18.0" } +kotlinPoet = { module = "com.squareup:kotlinpoet", version = "1.18.1" } junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } truth = { module = "com.google.truth:truth", version = "1.4.4" } From 40590a54efe4cbca7c6ccfc2e9c3e668065cf056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Tue, 16 Jul 2024 17:12:28 +0100 Subject: [PATCH 065/184] Fix 5345 PostgreSql SELECT DISTINCT ON (#5353) * Update DistinctOnExpressionMixin.kt Update DistinctOnExpressionMixin.kt - expose missing tables Query the columns or any tables prefixing columns in the distinctOn clause As there could be one or more columns with the same table prefix, remove any duplicates * Add tests fixture tests - multiple tables and columns in DISTINCT ON integration test - valid sql is generated and helps prevent regressions * Remove unnecessary nullability As the code is was using mapNotNull Remove unnecessary null type parameter and not-null assertion operator --- .../mixins/DistinctOnExpressionMixin.kt | 10 ++++- .../select-distinct-on/Test.s | 40 ++++++++++++------- .../select-distinct-on/failure.txt | 6 +-- .../postgresql/integration/DistinctOn.sq | 29 ++++++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 24 +++++++++++ 5 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DistinctOn.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt index 16f69b4938b..93a032fe269 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/DistinctOnExpressionMixin.kt @@ -2,11 +2,13 @@ package app.cash.sqldelight.dialects.postgresql.grammar.mixins import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDistinctOnExpr import com.alecstrong.sql.psi.core.SqlAnnotationHolder +import com.alecstrong.sql.psi.core.psi.NamedElement import com.alecstrong.sql.psi.core.psi.QueryElement import com.alecstrong.sql.psi.core.psi.SqlColumnName import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl import com.alecstrong.sql.psi.core.psi.SqlResultColumn import com.alecstrong.sql.psi.core.psi.SqlSelectStmt +import com.alecstrong.sql.psi.core.psi.SqlTableName import com.alecstrong.sql.psi.core.psi.impl.SqlCompoundSelectStmtImpl import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement @@ -19,7 +21,13 @@ internal abstract class DistinctOnExpressionMixin(node: ASTNode) : private val distinctOnColumns get() = children.filterIsInstance() override fun queryAvailable(child: PsiElement): Collection { - return (parent as SqlSelectStmt).queryExposed() + val distinctOnColumnsWithTablePrefix: List = + distinctOnColumns.mapNotNull { PsiTreeUtil.findChildOfType(it, SqlTableName::class.java) } + return if (distinctOnColumnsWithTablePrefix.isEmpty()) { + (parent as SqlSelectStmt).queryExposed() + } else { + distinctOnColumnsWithTablePrefix.flatMap { tableAvailable(child, it.name) }.associateBy { it.table }.values + } } // Some idea of the basic validation finds the ORDER BY columns in the DISTINCT ON diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/Test.s index e9743a7efdb..98282819e53 100644 --- a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/Test.s +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/Test.s @@ -4,28 +4,38 @@ CREATE TABLE person ( created_at TIMESTAMPTZ ); -SELECT DISTINCT ON (name) * +SELECT DISTINCT ON (person.name) * FROM person; SELECT DISTINCT ON (name) * -FROM person -ORDER BY name, created_at DESC; +FROM person; -SELECT DISTINCT ON (id, name) id, name -FROM person -ORDER BY name DESC; +CREATE TABLE student( + student_id INTEGER PRIMARY KEY, + name TEXT NOT NULL +); -SELECT DISTINCT ON (name, id) id, name, created_at -FROM person -ORDER BY id DESC; +CREATE TABLE grade( + grade_id INTEGER PRIMARY KEY, + student_id INTEGER REFERENCES student(student_id), + grade INT NOT NULL, + grade_date TIMESTAMP NOT NULL +); -SELECT DISTINCT ON (name, id) id, name -FROM person -ORDER BY id, name ASC; +SELECT DISTINCT ON (grade.student_id) grade.*, student.* +FROM grade +JOIN student USING (student_id) +ORDER BY grade.student_id, grade_date; -SELECT DISTINCT ON (name, id) id, name -FROM person -ORDER BY id, name, created_at ASC; +SELECT DISTINCT ON (grade.student_id, grade.grade_date) grade.*, student.* +FROM grade +JOIN student USING (student_id) +ORDER BY grade.student_id, grade_date; + +SELECT DISTINCT ON (student_id) * +FROM grade +JOIN student USING (student_id) +ORDER BY student_id, grade_date; -- fail SELECT DISTINCT ON (name) * diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/failure.txt b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/failure.txt index 1b525a280a0..29c33267114 100644 --- a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/failure.txt +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/select-distinct-on/failure.txt @@ -1,3 +1,3 @@ -Test.s line 33:9 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions -Test.s line 38:9 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions -Test.s line 43:15 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions +Test.s line 43:9 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions +Test.s line 48:9 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions +Test.s line 53:15 - SELECT DISTINCT ON expressions must match initial ORDER BY expressions diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DistinctOn.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DistinctOn.sq new file mode 100644 index 00000000000..9d9cccae686 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/DistinctOn.sq @@ -0,0 +1,29 @@ +CREATE TABLE student( + student_id INTEGER PRIMARY KEY, + name TEXT NOT NULL +); + +CREATE TABLE grade( + grade_id INTEGER PRIMARY KEY, + student_id INTEGER REFERENCES student(student_id), + grade INT NOT NULL, + grade_date TIMESTAMP NOT NULL +); + +insertStudent: +INSERT INTO student VALUES ?; + +insertGrade: +INSERT INTO grade VALUES ?; + +selectDistinctOnStudent: +SELECT DISTINCT ON (student_id) * +FROM grade +JOIN student USING (student_id) +ORDER BY student_id, grade_date; + +selectDistinctOnStudentGradeDate: +SELECT DISTINCT ON (grade.student_id, grade.grade_date) grade.*, student.* +FROM grade +JOIN student USING (student_id) +ORDER BY grade.student_id, grade_date; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 4d5c5947f48..7a09ff13168 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -1037,4 +1037,28 @@ class PostgreSqlTest { assertThat(x2).isEqualTo(b) } } + + @Test + fun testSelectDistinctOn() { + val studentExpected = Student(1000, "Test Student") + val gradeExpected = Grade(4000, studentExpected.student_id, 5, LocalDateTime.of(1980, 1, 1, 1, 0, 0)) + database.distinctOnQueries.insertStudent(studentExpected) + database.distinctOnQueries.insertGrade(gradeExpected) + + with(database.distinctOnQueries.selectDistinctOnStudent().executeAsOne()) { + assertThat(student_id).isEqualTo(studentExpected.student_id) + assertThat(name).isEqualTo(studentExpected.name) + assertThat(grade_id).isEqualTo(gradeExpected.grade_id) + assertThat(grade).isEqualTo(gradeExpected.grade) + assertThat(grade_date).isEqualTo(gradeExpected.grade_date) + } + + with(database.distinctOnQueries.selectDistinctOnStudentGradeDate().executeAsOne()) { + assertThat(student_id).isEqualTo(studentExpected.student_id) + assertThat(name).isEqualTo(studentExpected.name) + assertThat(grade_id).isEqualTo(gradeExpected.grade_id) + assertThat(grade).isEqualTo(gradeExpected.grade) + assertThat(grade_date).isEqualTo(gradeExpected.grade_date) + } + } } From 6bb8711dd3b5cfc671931081bf850f7d7aa1888a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:10:19 +0100 Subject: [PATCH 066/184] Add 5273 Postrgesql extract from temporal types (#5274) * Add Postgresql EXTRACT function extract temporal fields * Add tests fixture test integration test * Integration Test todo - bind arg test "?" needs cast e.g `?::TIMESTAMP` * Add TIME and DATE literals Add Support for: SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); SELECT EXTRACT(HOUR FROM TIME '10:30:45'); * Update Test.s SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); SELECT EXTRACT(HOUR FROM TIME '10:30:45'); * Add date and time literals To support Extract * Date and Time tests Literal Date and Time tests * Add Date and Time test Integration Test for Extract * Update PostgreSqlTypeResolver.kt Add error to validate temporal types * Add Interval test Integration test for INTERVAL returns double(3) * Update PostgreSql.bnf Add latest temporal fields (22) --- .../postgresql/PostgreSqlTypeResolver.kt | 20 ++++++++++-- .../postgresql/grammar/PostgreSql.bnf | 21 +++++++++++-- .../mixins/ExtractTemporalExpressionMixin.kt | 18 +++++++++++ .../extract-expressions/Test.s | 16 ++++++++++ .../postgresql/integration/Dates.sq | 7 +++++ .../postgresql/integration/Extract.sq | 21 +++++++++++++ .../postgresql/integration/PostgreSqlTest.kt | 31 +++++++++++++++++++ 7 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ExtractTemporalExpressionMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/extract-expressions/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Extract.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 52281f727f9..85eb7207460 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -20,6 +20,7 @@ import app.cash.sqldelight.dialects.postgresql.PostgreSqlType.TIMESTAMP_TIMEZONE import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AggregateExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.AtTimeZoneOperatorExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.DoubleColonCastOperatorExpressionMixin +import app.cash.sqldelight.dialects.postgresql.grammar.mixins.ExtractTemporalExpressionMixin import app.cash.sqldelight.dialects.postgresql.grammar.mixins.WindowFunctionMixin import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlAtTimeZoneOperator import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlDeleteStmtLimited @@ -280,8 +281,8 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes } is SqlLiteralExpr -> when { literalValue.text == "TRUE" || literalValue.text == "FALSE" -> IntermediateType(BOOLEAN) - literalValue.text == "CURRENT_DATE" -> IntermediateType(PostgreSqlType.DATE) - literalValue.text == "CURRENT_TIME" -> IntermediateType(PostgreSqlType.TIME) + literalValue.text == "CURRENT_DATE" || literalValue.text.startsWith("DATE ") -> IntermediateType(PostgreSqlType.DATE) + literalValue.text == "CURRENT_TIME" || literalValue.text.startsWith("TIME ") -> IntermediateType(PostgreSqlType.TIME) literalValue.text.startsWith("CURRENT_TIMESTAMP") -> IntermediateType(PostgreSqlType.TIMESTAMP_TIMEZONE) literalValue.text.startsWith("TIMESTAMP WITH TIME ZONE") -> IntermediateType(PostgreSqlType.TIMESTAMP_TIMEZONE) literalValue.text.startsWith("TIMESTAMP WITHOUT TIME ZONE") -> IntermediateType(TIMESTAMP) @@ -323,6 +324,13 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes val lastTypeCast = doubleColonCastOperatorExpression!!.doubleColonCastOperatorList.last().typeName definitionType(lastTypeCast).nullableIf(expType.javaType.isNullable) } + extractTemporalExpression != null -> { + val temporalExprType = (extractTemporalExpression as ExtractTemporalExpressionMixin).expr.postgreSqlType() + if (temporalExprType.dialectType !in temporalTypes) { + error("EXTRACT FROM requires a temporal type argument. The provided argument ${temporalExprType.dialectType} is not supported.") + } + IntermediateType(REAL).nullableIf(temporalExprType.javaType.isNullable) + } else -> parentResolver.resolvedType(this) } @@ -343,6 +351,14 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes SqlTypes.LTE, ) + private val temporalTypes = listOf( + DATE, + PostgreSqlType.INTERVAL, + PostgreSqlType.TIMESTAMP_TIMEZONE, + PostgreSqlType.TIMESTAMP, + PostgreSqlType.TIME, + ) + private fun arrayIntermediateType(type: IntermediateType): IntermediateType { return IntermediateType( object : DialectType { diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 8e5e2ef7cb8..7f0e9fe3d8d 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -240,10 +240,14 @@ tsvector_data_type ::= 'TSVECTOR' xml_data_type ::= 'XML' -interval_expression ::= 'INTERVAL' string_literal +interval_expression ::= 'INTERVAL' {string_literal} timestamp_expression ::= 'TIMESTAMP' [ (WITH | WITHOUT) 'TIME' 'ZONE' ] {string_literal} +date_expression ::= 'DATE' {string_literal} + +time_expression ::= 'TIME' {string_literal} + with_clause_auxiliary_stmt ::= {compound_select_stmt} | delete_stmt_limited | insert_stmt | update_stmt_limited { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlWithClauseAuxiliaryStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlWithClauseAuxiliaryStmt" @@ -278,7 +282,9 @@ literal_value ::= ( {numeric_literal} | boolean_literal | current_date_time_functions | interval_expression - | timestamp_expression) { + | timestamp_expression + | date_expression + | time_expression ) { mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.LiteralValueMixin" implements = "com.alecstrong.sql.psi.core.psi.SqlLiteralValue" override = true @@ -410,7 +416,7 @@ compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} override = true } -extension_expr ::= double_colon_cast_operator_expression | contains_operator_expression | at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { +extension_expr ::= extract_temporal_expression | double_colon_cast_operator_expression | contains_operator_expression | at_time_zone_operator_expression | regex_match_operator_expression | match_operator_expression | array_agg_stmt| string_agg_stmt | json_expression | boolean_not_expression | window_function_expr { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" override = true @@ -596,3 +602,12 @@ ordering_term ::= <> [ ASC | DESC ] [ 'NULLS' ( 'FIRST' | 'LAST' ) ] implements = "com.alecstrong.sql.psi.core.psi.SqlOrderingTerm" override = true } + +extract_temporal_field ::= 'century' | 'day' | 'decade' | 'dow' | 'doy' | 'epoch' | 'hour' | 'isodow' | 'isoyear' | 'julian' + | 'microseconds' | 'millennium' | 'milliseconds' | 'minute' | 'month' | 'quarter' | 'second' | 'timezone' | 'timezone_hour' + | 'timezone_minute' | 'week' | 'year' + +extract_temporal_expression ::= 'EXTRACT' LP extract_temporal_field FROM <> RP { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.ExtractTemporalExpressionMixin" + pin = 2 +} diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ExtractTemporalExpressionMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ExtractTemporalExpressionMixin.kt new file mode 100644 index 00000000000..ca5318817a6 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/ExtractTemporalExpressionMixin.kt @@ -0,0 +1,18 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlExtractTemporalExpression +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.intellij.lang.ASTNode + +/** + * e.g access expr node for nullable type see `PostgreSqlTypeResolver extractTemporalExpression` + * EXTRACT(HOUR FROM TIME '10:30:45'), + * EXTRACT(DAY FROM created_date) + */ +internal abstract class ExtractTemporalExpressionMixin(node: ASTNode) : + SqlCompositeElementImpl(node), + SqlExpr, + PostgreSqlExtractTemporalExpression { + val expr get() = children.filterIsInstance().first() +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/extract-expressions/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/extract-expressions/Test.s new file mode 100644 index 00000000000..befbc821dca --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/extract-expressions/Test.s @@ -0,0 +1,16 @@ +CREATE TABLE Events( + start_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', start_at) IN (00,30)), + end_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', end_at) IN (00,30)), + duration INT GENERATED ALWAYS AS (EXTRACT(epoch FROM end_at - start_at)/ 60) stored, + created_date DATE +); + +SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:45'); + +SELECT EXTRACT(MONTH FROM DATE '2023-05-15'); + +SELECT EXTRACT(HOUR FROM TIME '10:30:45'); + +SELECT EXTRACT(EPOCH FROM INTERVAL '1 day 2 hours'); + +SELECT EXTRACT(HOUR FROM created_date) FROM Events; diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Dates.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Dates.sq index 16d3ff00d68..46175a476fe 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Dates.sq +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Dates.sq @@ -42,3 +42,10 @@ SELECT max(date) FROM dates; selectMinDate: SELECT min(date) FROM dates; + +selectDateLiteral: +SELECT DATE '2023-05-15'; + +selectTimeLiteral: +SELECT TIME '10:30:45'; + diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Extract.sq b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Extract.sq new file mode 100644 index 00000000000..f1a872d8aa5 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Extract.sq @@ -0,0 +1,21 @@ +CREATE TABLE Events( + start_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', start_at) IN (00,30)), + end_at TIMESTAMPTZ NOT NULL CHECK(date_part('minute', end_at) IN (00,30)), + duration INT GENERATED ALWAYS AS (EXTRACT(epoch FROM end_at - start_at)/ 60) stored, + created_date DATE +); + +select: +SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'), + EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:45'), + EXTRACT(EPOCH FROM INTERVAL '1 day 2 hours'), + EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'), + EXTRACT(MINUTE FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-08'), + EXTRACT(DAY FROM created_date), + EXTRACT(MONTH FROM DATE '2023-05-15'), + EXTRACT(HOUR FROM TIME '10:30:45'), + EXTRACT(MONTH FROM INTERVAL '2 years 3 months') +FROM Events; + +insert: +INSERT INTO Events (start_at, end_at, created_date) VALUES (?, ?, ?); diff --git a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt index 7a09ff13168..f6590ab7bc6 100644 --- a/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt +++ b/sqldelight-gradle-plugin/src/test/integration-postgresql/src/test/kotlin/app/cash/sqldelight/postgresql/integration/PostgreSqlTest.kt @@ -423,6 +423,16 @@ class PostgreSqlTest { assertThat(now).isGreaterThan(OffsetDateTime.MIN) } + @Test fun testDateLiteral() { + val dateLiteral = database.datesQueries.selectDateLiteral().executeAsOne() + assertThat(dateLiteral).isEqualTo(LocalDate.of(2023, 5, 15)) + } + + @Test fun testTimeLiteral() { + val timeLiteral = database.datesQueries.selectTimeLiteral().executeAsOne() + assertThat(timeLiteral).isEqualTo(LocalTime.of(10, 30, 45, 0)) + } + @Test fun nowPlusInterval() { val selectNowInterval = database.datesQueries.selectNowInterval().executeAsOne() assertThat(selectNowInterval.now).isNotNull() @@ -1038,6 +1048,27 @@ class PostgreSqlTest { } } + @Test + fun testExtract() { + val sa = OffsetDateTime.of(2001, 2, 16, 19, 30, 0, 0, ZoneOffset.ofHours(0)) + val ea = OffsetDateTime.of(2001, 2, 16, 20, 30, 0, 0, ZoneOffset.ofHours(0)) + val cd = LocalDate.of(2001, 2, 16) + + database.extractQueries.insert(sa, ea, cd) + + with(database.extractQueries.select().executeAsOne()) { + assertThat(expr).isEqualTo(5) + assertThat(expr_).isEqualTo(2023) + assertThat(expr__).isEqualTo(93600) + assertThat(expr___).isEqualTo(20) + assertThat(expr____).isEqualTo(38) + assertThat(expr_____).isEqualTo(16) + assertThat(expr______).isEqualTo(5) + assertThat(expr_______).isEqualTo(10) + assertThat(expr________).isEqualTo(3) + } + } + @Test fun testSelectDistinctOn() { val studentExpected = Student(1000, "Test Student") From 04ff127e3ee2bf922954e93ab0d61950aadfe624 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:18:41 -0400 Subject: [PATCH 067/184] Update plugin binaryCompatibilityValidator to v0.16.0 (#5357) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a6c670fec6b..607222963e2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.15.1" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.0" } From 2c5197d17b27ef141da5ba20befccc3ddbb100b5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:56:00 +0000 Subject: [PATCH 068/184] Update testcontainers-java monorepo to v1.20.0 (#5358) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 607222963e2..90f7d37d09b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ agp = "8.5.1" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" -testContainers = "1.19.8" +testContainers = "1.20.0" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } From 105c71b7956728fba945dde30cbd49b76700245e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:38:07 +0000 Subject: [PATCH 069/184] Update plugin binaryCompatibilityValidator to v0.16.1 (#5361) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 90f7d37d09b..b26f9a9de84 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.0" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.1" } From 4bbaa08e16bba5cc7c2145544fd2a1613b0d41db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 23:59:40 +0000 Subject: [PATCH 070/184] Update plugin binaryCompatibilityValidator to v0.16.2 (#5362) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b26f9a9de84..2c23c1a4c40 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.1" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.2" } From c04057b69b7aad3900637518ee8bdc6fb3f38674 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:47:25 +0000 Subject: [PATCH 071/184] Update plugin com.gradle.develocity to v3.17.6 (#5365) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 73510e3b9b4..20b2adb4ff0 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.5" + id "com.gradle.develocity" version "3.17.6" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index c492a90b09e..72e52cfca9e 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.5" + id "com.gradle.develocity" version "3.17.6" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index c83b02e7f03..9fa5413732f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.5" + id "com.gradle.develocity" version "3.17.6" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 95571ccd3859670ac48a8e868d5ad7e959184acc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:46:27 +0000 Subject: [PATCH 072/184] Update plugin ksp to v1.9.25-1.0.20 (#5369) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2c23c1a4c40..d8df62e91e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -108,5 +108,5 @@ publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } -ksp = { id = "com.google.devtools.ksp", version = "1.9.24-1.0.20" } +ksp = { id = "com.google.devtools.ksp", version = "1.9.25-1.0.20" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.2" } From 4325311fed9b7a6503c65e0199789a5a27aff870 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Padiou Date: Thu, 25 Jul 2024 19:48:57 +0200 Subject: [PATCH 073/184] Make JVM samples consistent with other platforms (#5374) The JVM code samples do not use the `PRAGMA user_version`-based migration logic, which is a bit misleading because samples for other platforms do. The inconsistency is particularly visible in the Multiplatform case, where the android and native samples will set `user_version=1`, but the JVM sample will produce `user_version=0`. --- docs/jvm_sqlite/index.md | 8 +++----- docs/multiplatform_sqlite/index.md | 19 +++++++++---------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/jvm_sqlite/index.md b/docs/jvm_sqlite/index.md index 4309e9c8468..3508a391fba 100644 --- a/docs/jvm_sqlite/index.md +++ b/docs/jvm_sqlite/index.md @@ -20,19 +20,17 @@ your project. } ``` -An instance of the driver can be constructed as shown below. The constructor accepts a JDBC +An instance of the driver can be constructed as shown below. The constructor accepts a JDBC connection string that specifies the location of the database file. The `IN_MEMORY` constant can also be passed to the constructor to create an in-memory database. === "On-Disk" ```kotlin - val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:test.db") - Database.Schema.create(driver) + val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:test.db", Properties(), Database.Schema) ``` === "In-Memory" ```kotlin - val driver: SqlDriver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) - Database.Schema.create(driver) + val driver: SqlDriver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY, Properties(), Database.Schema) ``` {% include 'common/index_queries.md' %} diff --git a/docs/multiplatform_sqlite/index.md b/docs/multiplatform_sqlite/index.md index 31f895cf756..988c2d965e7 100644 --- a/docs/multiplatform_sqlite/index.md +++ b/docs/multiplatform_sqlite/index.md @@ -9,16 +9,16 @@ Each target platform has its own driver implementation. === "Kotlin" ```kotlin - kotlin { + kotlin { sourceSets.androidMain.dependencies { implementation("app.cash.sqldelight:android-driver:{{ versions.sqldelight }}") } - + // or iosMain, windowsMain, etc. sourceSets.nativeMain.dependencies { implementation("app.cash.sqldelight:native-driver:{{ versions.sqldelight }}") } - + sourceSets.jvmMain.dependencies { implementation("app.cash.sqldelight:sqlite-driver:{{ versions.sqldelight }}") } @@ -26,16 +26,16 @@ Each target platform has its own driver implementation. ``` === "Groovy" ```groovy - kotlin { + kotlin { sourceSets.androidMain.dependencies { implementation "app.cash.sqldelight:android-driver:{{ versions.sqldelight }}" } - + // or iosMain, windowsMain, etc. sourceSets.nativeMain.dependencies { implementation "app.cash.sqldelight:native-driver:{{ versions.sqldelight }}" } - + sourceSets.jvmMain.dependencies { implementation "app.cash.sqldelight:sqlite-driver:{{ versions.sqldelight }}" } @@ -44,7 +44,7 @@ Each target platform has its own driver implementation. ## Constructing Driver Instances -Create a common factory class or method to obtain a `SqlDriver` instance. +Create a common factory class or method to obtain a `SqlDriver` instance. ```kotlin title="src/commonMain/kotlin" import com.example.Database @@ -67,7 +67,7 @@ Then implement this for each target platform: ```kotlin actual class DriverFactory(private val context: Context) { actual fun createDriver(): SqlDriver { - return AndroidSqliteDriver(Database.Schema, context, "test.db") + return AndroidSqliteDriver(Database.Schema, context, "test.db") } } ``` @@ -83,8 +83,7 @@ Then implement this for each target platform: ```kotlin actual class DriverFactory { actual fun createDriver(): SqlDriver { - val driver: SqlDriver = JdbcSqliteDriver(JdbcSqliteDriver.IN_MEMORY) - Database.Schema.create(driver) + val driver: SqlDriver = JdbcSqliteDriver("jdbc:sqlite:test.db", Properties(), Database.Schema) return driver } } From c4084ee46b99740db8df3d02bbab3e0d5d3279b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Fri, 26 Jul 2024 13:54:41 +0100 Subject: [PATCH 074/184] fix 5372 add alias to json table function (#5375) * fix 5372 add alias Add grammar for alias Update mixin to use table alias if available Add fixture test * Update JsonTable.sq Add use of alias for json function --- .../dialects/sqlite/json/module/grammar/json.bnf | 2 +- .../json/module/grammar/mixins/TableOrSubqueryMixin.kt | 2 +- .../fixtures_sqlite_json/json_table_functions/Test.s | 7 ++++++- .../app/cash/sqldelight/integration/JsonTable.sq | 6 +++--- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/json.bnf b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/json.bnf index 83192c6ab9b..d14176da6e8 100644 --- a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/json.bnf +++ b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/json.bnf @@ -20,7 +20,7 @@ } overrides ::= table_or_subquery -table_or_subquery ::= ( json_function_name LP <> ( COMMA <> ) * RP +table_or_subquery ::= ( json_function_name LP <> ( COMMA <> ) * RP [ [ AS ] {table_alias} ] | [ {database_name} DOT ] {table_name} [ [ AS ] {table_alias} ] [ INDEXED BY {index_name} | NOT INDEXED ] | LP ( {table_or_subquery} ( COMMA {table_or_subquery} ) * | {join_clause} ) RP | LP {compound_select_stmt} RP [ [ AS ] {table_alias} ] ) { diff --git a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt index c99acd30f72..3507a3d0a68 100644 --- a/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt +++ b/dialects/sqlite/json-module/src/main/kotlin/app/cash/sqldelight/dialects/sqlite/json/module/grammar/mixins/TableOrSubqueryMixin.kt @@ -24,7 +24,7 @@ internal abstract class TableOrSubqueryMixin(node: ASTNode?) : if (jsonFunctionName != null) { return@lazy listOf( QueryResult( - table = jsonFunctionName!!, + table = tableAlias ?: jsonFunctionName!!, columns = emptyList(), synthesizedColumns = listOf( SynthesizedColumn(jsonFunctionName!!, acceptableValues = listOf("key", "value", "type", "atom", "id", "parent", "fullkey", "path", "json", "root")), diff --git a/dialects/sqlite/json-module/src/testFixtures/resources/fixtures_sqlite_json/json_table_functions/Test.s b/dialects/sqlite/json-module/src/testFixtures/resources/fixtures_sqlite_json/json_table_functions/Test.s index 2c73ba4292f..abba0f51067 100644 --- a/dialects/sqlite/json-module/src/testFixtures/resources/fixtures_sqlite_json/json_table_functions/Test.s +++ b/dialects/sqlite/json-module/src/testFixtures/resources/fixtures_sqlite_json/json_table_functions/Test.s @@ -59,4 +59,9 @@ SELECT DISTINCT json_extract(big.json,'$.id') WHERE json_tree.value = 'uidle_since' ) WHERE (uidle_since >= ? AND uidle_since <= ?) - AND is_deleted = 0; \ No newline at end of file + AND is_deleted = 0; + +SELECT json_extract(child.value, '$.d') FROM user, json_each(user.name, '$.a.b') AS parent, json_each(parent.value, '$.c') AS child; + + + diff --git a/sqldelight-gradle-plugin/src/test/integration-sqlite-json/src/main/sqldelight/app/cash/sqldelight/integration/JsonTable.sq b/sqldelight-gradle-plugin/src/test/integration-sqlite-json/src/main/sqldelight/app/cash/sqldelight/integration/JsonTable.sq index 65e2e975b04..0b64eaab71d 100644 --- a/sqldelight-gradle-plugin/src/test/integration-sqlite-json/src/main/sqldelight/app/cash/sqldelight/integration/JsonTable.sq +++ b/sqldelight-gradle-plugin/src/test/integration-sqlite-json/src/main/sqldelight/app/cash/sqldelight/integration/JsonTable.sq @@ -9,8 +9,8 @@ VALUES (?, ?); byAreaCode: SELECT DISTINCT user.name - FROM user, json_each(user.phone) - WHERE json_each.value LIKE :areaCode || '-%'; + FROM user, json_each(user.phone) AS user_phone + WHERE user_phone.value LIKE :areaCode || '-%'; byAreaCode2: SELECT name FROM user WHERE phone LIKE :areaCode || '-%' @@ -18,4 +18,4 @@ UNION SELECT user.name FROM user, json_each(user.phone) WHERE json_valid(user.phone) - AND json_each.value LIKE :areaCode || '-%'; \ No newline at end of file + AND json_each.value LIKE :areaCode || '-%'; From bd3cd6b2ca4c145a44686e85cfb4ed94e3513995 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:21:28 -0400 Subject: [PATCH 075/184] Update dependency org.xerial:sqlite-jdbc to v3.46.0.1 (#5382) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d8df62e91e6..6f42c71b61c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,7 @@ sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref robolectric = { module = "org.robolectric:robolectric", version = "4.13" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } -sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.0" } +sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.1" } postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } From 5634ce3c5a505dfdaa91441714cf2ee25c4cfba5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 16:13:49 -0400 Subject: [PATCH 076/184] Update testcontainers-java monorepo to v1.20.1 (#5385) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6f42c71b61c..cfa5166bbd9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ agp = "8.5.1" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" -testContainers = "1.20.0" +testContainers = "1.20.1" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } From 0d41d969506b29f59ec6abc5eed9d09e963cbb85 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:20:56 -0400 Subject: [PATCH 077/184] Update gradle/actions action to v4 (#5389) * Update gradle/actions action to v4 * Delete .github/workflows/gradleWrapper.yml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Jake Wharton --- .github/workflows/PR.yml | 6 +++--- .github/workflows/Publish-Website.yml | 2 +- .github/workflows/Release.yml | 6 +++--- .github/workflows/gradleWrapper.yml | 18 ------------------ 4 files changed, 7 insertions(+), 25 deletions(-) delete mode 100644 .github/workflows/gradleWrapper.yml diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 161f076e057..1db3d28e3c6 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -50,7 +50,7 @@ jobs: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - name: Setup gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true @@ -138,7 +138,7 @@ jobs: with: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true - run: ./gradlew -p sample build --stacktrace --parallel @@ -153,7 +153,7 @@ jobs: with: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - - uses: gradle/actions/setup-gradle@v3 + - uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true - run: ./gradlew -p sample-web kotlinUpgradeYarnLock build --stacktrace --parallel diff --git a/.github/workflows/Publish-Website.yml b/.github/workflows/Publish-Website.yml index aa5a9f645f2..3b1eb73094c 100644 --- a/.github/workflows/Publish-Website.yml +++ b/.github/workflows/Publish-Website.yml @@ -33,7 +33,7 @@ jobs: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - name: Setup gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index f2a995f87a6..7825f028945 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -31,7 +31,7 @@ jobs: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - name: Setup gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true @@ -82,7 +82,7 @@ jobs: cd ~/.gradle echo "org.gradle.java.installations.paths=${{ steps.setup-java.outputs.path }}" >> gradle.properties - name: Setup gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true @@ -120,7 +120,7 @@ jobs: cd ~/.gradle echo "org.gradle.java.installations.paths=${{ steps.setup-java.outputs.path }}" >> gradle.properties - name: Setup gradle - uses: gradle/actions/setup-gradle@v3 + uses: gradle/actions/setup-gradle@v4 with: gradle-home-cache-cleanup: true diff --git a/.github/workflows/gradleWrapper.yml b/.github/workflows/gradleWrapper.yml deleted file mode 100644 index 837348b19b8..00000000000 --- a/.github/workflows/gradleWrapper.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Gradle Wrapper Validation - -on: - pull_request: - paths: - - 'gradlew' - - 'gradlew.bat' - - 'gradle/wrapper/' - -jobs: - validateWrapper: - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - - uses: gradle/actions/wrapper-validation@v3 From 37095281be8ee71ef9dfcec7884a877472d56be9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 08:05:17 -0400 Subject: [PATCH 078/184] Update dependency io.reactivex.rxjava3:rxjava to v3.1.9 (#5401) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cfa5166bbd9..10e95585d8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -67,7 +67,7 @@ sqlPsi = { module = "com.alecstrong.sql.psi:core", version.ref = "sqlPsi" } sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref = "sqlPsi" } robolectric = { module = "org.robolectric:robolectric", version = "4.13" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } -rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.8" } +rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.9" } sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.1" } postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } From f412724b01e922a8fbed8c89e277bf96dd79a55c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 22:55:55 -0400 Subject: [PATCH 079/184] Update agp to v8.5.2 (#5394) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 10e95585d8f..33582ddecc3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.3.1" -agp = "8.5.1" +agp = "8.5.2" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From 8c0a1b1ae21717287b175940844223097e938291 Mon Sep 17 00:00:00 2001 From: Non B <122938498+nonbb@users.noreply.github.com> Date: Thu, 22 Aug 2024 09:34:44 -0700 Subject: [PATCH 080/184] fix named executes and add test (#5415) --- .../core/lang/SqlDelightQueriesFile.kt | 16 ++++---- .../cash/sqldelight/core/QueriesTypeTest.kt | 39 +++++++++++++++++++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightQueriesFile.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightQueriesFile.kt index 6211f845e6a..0121126bda0 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightQueriesFile.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightQueriesFile.kt @@ -89,15 +89,15 @@ class SqlDelightQueriesFile( } internal val namedExecutes by lazy { - val statements = sqlStatements() - .filter { - it.identifier.name != null && - it.statement.deleteStmtLimited == null && - it.statement.insertStmt == null && - it.statement.updateStmtLimited == null && - it.statement.compoundSelectStmt == null + val statements = sqlStatements().filter { it.identifier.name != null && typeResolver.queryWithResults(it.statement) == null } + .mapNotNull { + when { + it.statement.deleteStmtLimited != null -> null + it.statement.insertStmt != null -> null + it.statement.updateStmtLimited != null -> null + else -> NamedExecute(it.identifier, it.statement) + } } - .map { NamedExecute(it.identifier, it.statement) } return@lazy transactions().filterIsInstance() + statements } diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt index 4a6fef64bc6..a0db376e636 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt @@ -915,4 +915,43 @@ class QueriesTypeTest { """.trimMargin(), ) } + + @Test fun `pragma statement returns results`() { + val result = FixtureCompiler.compileSql( + """ + |pragmaVersion: + |PRAGMA get_version; + | + """.trimMargin(), + temporaryFolder, + fileName = "Data.sq", + ) + + val query = result.compiledFile.namedQueries.first() + assertThat(result.errors).isEmpty() + + val dataQueries = File(result.outputDirectory, "com/example/DataQueries.kt") + assertThat(result.compilerOutput).containsKey(dataQueries) + assertThat(result.compilerOutput[dataQueries].toString()).isEqualTo( + """ + |package com.example + | + |import app.cash.sqldelight.ExecutableQuery + |import app.cash.sqldelight.Query + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + |import kotlin.String + | + |public class DataQueries( + | driver: SqlDriver, + |) : TransacterImpl(driver) { + | public fun pragmaVersion(): ExecutableQuery = Query(${query.id.withUnderscores}, driver, "Data.sq", + | "pragmaVersion", "PRAGMA get_version") { cursor -> + | cursor.getString(0)!! + | } + |} + | + """.trimMargin(), + ) + } } From fbee24321d2433fb196a7ea5436e6dfe2208b1be Mon Sep 17 00:00:00 2001 From: Non B <122938498+nonbb@users.noreply.github.com> Date: Thu, 22 Aug 2024 10:23:04 -0700 Subject: [PATCH 081/184] Fix memory leak for connectionManager during end of transaction (#5391) --- .../cash/sqldelight/driver/jdbc/JdbcDriver.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt b/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt index a7d1ac54b1e..406f3d9469e 100644 --- a/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt +++ b/drivers/jdbc-driver/src/main/kotlin/app/cash/sqldelight/driver/jdbc/JdbcDriver.kt @@ -61,14 +61,18 @@ interface ConnectionManager { val connection: Connection, ) : Transacter.Transaction() { override fun endTransaction(successful: Boolean): QueryResult { - if (enclosingTransaction == null) { - if (successful) { - connectionManager.apply { connection.endTransaction() } - } else { - connectionManager.apply { connection.rollbackTransaction() } + try { + if (enclosingTransaction == null) { + if (successful) { + connectionManager.apply { connection.endTransaction() } + } else { + connectionManager.apply { connection.rollbackTransaction() } + } } + // properly rotate the transaction even if there are uncaught errors + } finally { + connectionManager.transaction = enclosingTransaction } - connectionManager.transaction = enclosingTransaction return QueryResult.Unit } } From 598638f0adb449ca1f3c4a30fafd20210d59c7d8 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Sat, 24 Aug 2024 06:58:26 -0400 Subject: [PATCH 082/184] Migrate to com.gradleup.shadow (#5396) https://github.com/GradleUp/shadow/releases/tag/8.3.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 33582ddecc3..4d84dae02b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -107,6 +107,6 @@ grammarKitComposer = { id = "com.alecstrong.grammar.kit.composer", version = "0. publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } -shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } +shadow = "com.gradleup.shadow:8.3.0" ksp = { id = "com.google.devtools.ksp", version = "1.9.25-1.0.20" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.2" } From e3334916d14b25d614fa9c544ee2bc99a16bbbbd Mon Sep 17 00:00:00 2001 From: Derek Ellis Date: Wed, 4 Sep 2024 20:54:40 -0400 Subject: [PATCH 083/184] Share gradle test kit directory between test suites (#5430) Reduces the amount of disk space needed to run tests by sharing installs/caches --- .../app/cash/sqldelight/GrammarkitDialectIntegrationTests.kt | 2 +- .../kotlin/app/cash/sqldelight/WithCommonConfiguration.kt | 2 +- .../test/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sqldelight-gradle-plugin/src/grammarkitTest/kotlin/app/cash/sqldelight/GrammarkitDialectIntegrationTests.kt b/sqldelight-gradle-plugin/src/grammarkitTest/kotlin/app/cash/sqldelight/GrammarkitDialectIntegrationTests.kt index 06025028b7b..c323cdc9d31 100644 --- a/sqldelight-gradle-plugin/src/grammarkitTest/kotlin/app/cash/sqldelight/GrammarkitDialectIntegrationTests.kt +++ b/sqldelight-gradle-plugin/src/grammarkitTest/kotlin/app/cash/sqldelight/GrammarkitDialectIntegrationTests.kt @@ -33,6 +33,6 @@ class GrammarkitDialectIntegrationTests { | """.trimMargin(), ) - return withProjectDir(projectRoot) + return withProjectDir(projectRoot).withTestKitDir(File("build/gradle-test-kit").absoluteFile) } } diff --git a/sqldelight-gradle-plugin/src/instrumentationTest/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt b/sqldelight-gradle-plugin/src/instrumentationTest/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt index c4841e493da..fe31220a9a7 100644 --- a/sqldelight-gradle-plugin/src/instrumentationTest/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt +++ b/sqldelight-gradle-plugin/src/instrumentationTest/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt @@ -14,5 +14,5 @@ internal fun GradleRunner.withCommonConfiguration(projectRoot: File): GradleRunn File(projectRoot, "local.properties").apply { if (!exists()) writeText("sdk.dir=${androidHome()}\n") } - return withProjectDir(projectRoot) + return withProjectDir(projectRoot).withTestKitDir(File("build/gradle-test-kit").absoluteFile) } diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt index 79dcfd8bf47..474895c41bd 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/WithCommonConfiguration.kt @@ -11,5 +11,5 @@ internal fun GradleRunner.withCommonConfiguration(projectRoot: File): GradleRunn | """.trimMargin(), ) - return withProjectDir(projectRoot) + return withProjectDir(projectRoot).withTestKitDir(File("build/gradle-test-kit").absoluteFile) } From 703967acbb0bd429c84be2b393d1ca9e9211d303 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 01:24:57 +0000 Subject: [PATCH 084/184] Update dependency org.xerial:sqlite-jdbc to v3.46.1.0 (#5410) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4d84dae02b9..dee6f3525e5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,7 @@ sqlPsiEnvironment = { module = "com.alecstrong.sql.psi:environment", version.ref robolectric = { module = "org.robolectric:robolectric", version = "4.13" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.9" } -sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.0.1" } +sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.1.0" } postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } From b7eec2eef0604368590557becdee39daeb296a4d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 01:52:55 +0000 Subject: [PATCH 085/184] Update dependency com.bugsnag:bugsnag to v3.7.2 (#5431) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dee6f3525e5..4236701c289 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,7 +40,7 @@ junit = { module = "junit:junit", version = "4.13.2" } jgrapht = { module = "org.jgrapht:jgrapht-core", version = "1.5.2" } truth = { module = "com.google.truth:truth", version = "1.4.4" } turbine = { module = "app.cash.turbine:turbine", version = "1.1.0" } -bugsnag = { module = "com.bugsnag:bugsnag", version = "3.7.1" } +bugsnag = { module = "com.bugsnag:bugsnag", version = "3.7.2" } picnic = { module = "com.jakewharton.picnic:picnic", version = "0.7.0" } moshi = { module = "com.squareup.moshi:moshi", version = "1.15.1" } moshiCodegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version = "1.15.1" } From e04cbaca315c2de743a77148b6d9fed4151ae491 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 01:54:07 +0000 Subject: [PATCH 086/184] Update plugin binaryCompatibilityValidator to v0.16.3 (#5388) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4236701c289..064aa9a3c31 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,4 +109,4 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = "com.gradleup.shadow:8.3.0" ksp = { id = "com.google.devtools.ksp", version = "1.9.25-1.0.20" } -binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.2" } +binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.3" } From 7131cdc1d7ebf803a475965f9b53d1182a684d63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 22:10:58 -0400 Subject: [PATCH 087/184] Update plugin intellij to v1.17.4 (#5304) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 064aa9a3c31..5b2615e3a98 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -102,7 +102,7 @@ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -intellij = { id = "org.jetbrains.intellij", version = "1.17.3" } +intellij = { id = "org.jetbrains.intellij", version = "1.17.4" } grammarKitComposer = { id = "com.alecstrong.grammar.kit.composer", version = "0.1.12" } publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } From 8bcdeaad6c1a60eb5650918ca755cf92282b32fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 02:21:04 +0000 Subject: [PATCH 088/184] Update dependency org.postgresql:postgresql to v42.7.4 (#5432) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5b2615e3a98..da832125b55 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -69,7 +69,7 @@ robolectric = { module = "org.robolectric:robolectric", version = "4.13" } rxJava2 = { module = "io.reactivex.rxjava2:rxjava", version = "2.2.21" } rxJava3 = { module = "io.reactivex.rxjava3:rxjava", version = "3.1.9" } sqliteJdbc = { module = "org.xerial:sqlite-jdbc", version = "3.46.1.0" } -postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.3" } +postgresJdbc = { module = "org.postgresql:postgresql", version = "42.7.4" } mysqlJdbc = { module = "mysql:mysql-connector-java", version = "8.0.33" } schemaCrawler-tools = { module = "us.fatehi:schemacrawler-tools", version.ref = "schemaCrawler" } From b49629e725b52712bffac206fdcd85376d25ef69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 02:37:00 +0000 Subject: [PATCH 089/184] Update dependency co.touchlab:stately-concurrency to v2.1.0 (#5434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index da832125b55..18faa4d3388 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -77,7 +77,7 @@ schemaCrawler-sqlite = { module = "us.fatehi:schemacrawler-sqlite", version.ref objectDiff = { module = "de.danielbechler:java-object-diff", version = "0.95" } sqliter = { module = "co.touchlab:sqliter-driver", version.ref = "sqliter" } -stately-concurrency = { module = "co.touchlab:stately-concurrency", version = "2.0.7" } +stately-concurrency = { module = "co.touchlab:stately-concurrency", version = "2.1.0" } testhelp = { module = "co.touchlab:testhelp", version = "0.6.12" } burst = { module = "com.squareup.burst:burst-junit4", version = "1.2.0" } From 28d702f503d57f108d956d3cd98b1c28f3444890 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 03:37:39 +0000 Subject: [PATCH 090/184] Update dependency com.google.testparameterinjector:test-parameter-injector to v1.17 (#5435) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 18faa4d3388..a0dc297c6e3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -81,7 +81,7 @@ stately-concurrency = { module = "co.touchlab:stately-concurrency", version = "2 testhelp = { module = "co.touchlab:testhelp", version = "0.6.12" } burst = { module = "com.squareup.burst:burst-junit4", version = "1.2.0" } -testParameterInjector = { module = "com.google.testparameterinjector:test-parameter-injector", version = "1.16" } +testParameterInjector = { module = "com.google.testparameterinjector:test-parameter-injector", version = "1.17" } r2dbc = { module = "io.r2dbc:r2dbc-spi", version = "1.0.0.RELEASE" } testContainers-mysql = { module = "org.testcontainers:mysql", version.ref = "testContainers" } From 30ddae8a7bbdf8a8b17ca1e51844df64079a49d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:09:34 +0100 Subject: [PATCH 091/184] Fix 2799 sqlite windows function (#5406) * Add Windows Functions as extension Add WindowsFunctions for use as expression Remove ResultColumnMixin as not needed Add resolver to map extension to function type Add basic window functions * Add delegate rule extension is not inherited delegate sqlite_3_25_window_function_expr rule use private rule to prevent new class from being created * Add tests fixture - only checks grammar and not type resolver integration - checks it actually works --- .../dialects/sqlite_3_25/SqliteDialect.kt | 5 ++ .../sqlite_3_25/SqliteTypeResolver.kt | 33 +++++++++++++ .../grammar/mixins/ResultColumnMixin.kt | 27 ----------- .../mixins/SqliteWindowFunctionMixin.kt | 22 +++++++++ .../dialects/sqlite_3_25/grammar/sqlite.bnf | 26 +++++------ .../window_functions/t3.s | 17 +++++++ .../sqlite_3_35/SqliteTypeResolver.kt | 4 +- .../dialects/sqlite_3_38/grammar/sqlite.bnf | 14 ++++-- .../sqldelight/integration/KeysetPaging.sq | 21 +++++++++ .../integration/WindowsFunctions.sq | 46 +++++++++++++++++++ .../integration/IntegrationTests.kt | 43 +++++++++++++++++ 11 files changed, 212 insertions(+), 46 deletions(-) create mode 100644 dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteTypeResolver.kt delete mode 100644 dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt create mode 100644 dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/SqliteWindowFunctionMixin.kt create mode 100644 dialects/sqlite-3-25/src/testFixtures/resources/fixtures_sqlite_3_25/window_functions/t3.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/KeysetPaging.sq create mode 100644 sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/WindowsFunctions.sq diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteDialect.kt b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteDialect.kt index 796feb24e08..aefc97b2581 100644 --- a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteDialect.kt +++ b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteDialect.kt @@ -1,6 +1,7 @@ package app.cash.sqldelight.dialects.sqlite_3_25 import app.cash.sqldelight.dialect.api.MigrationSquasher +import app.cash.sqldelight.dialect.api.TypeResolver import app.cash.sqldelight.dialects.sqlite_3_24.SqliteDialect as Sqlite324Dialect import app.cash.sqldelight.dialects.sqlite_3_25.grammar.SqliteParserUtil @@ -11,6 +12,10 @@ open class SqliteDialect : Sqlite324Dialect() { SqliteParserUtil.overrideSqlParser() } + override fun typeResolver(parentResolver: TypeResolver): TypeResolver { + return SqliteTypeResolver(parentResolver) + } + override fun migrationSquasher(parentSquasher: MigrationSquasher): MigrationSquasher { return SqliteMigrationSquasher(super.migrationSquasher(parentSquasher)) } diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteTypeResolver.kt b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteTypeResolver.kt new file mode 100644 index 00000000000..616e137611e --- /dev/null +++ b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/SqliteTypeResolver.kt @@ -0,0 +1,33 @@ +package app.cash.sqldelight.dialects.sqlite_3_25 + +import app.cash.sqldelight.dialect.api.IntermediateType +import app.cash.sqldelight.dialect.api.PrimitiveType.INTEGER +import app.cash.sqldelight.dialect.api.PrimitiveType.REAL +import app.cash.sqldelight.dialect.api.PrimitiveType.TEXT +import app.cash.sqldelight.dialect.api.TypeResolver +import app.cash.sqldelight.dialect.api.encapsulatingTypePreferringKotlin +import app.cash.sqldelight.dialects.sqlite_3_24.SqliteTypeResolver as Sqlite324TypeResolver +import app.cash.sqldelight.dialects.sqlite_3_25.grammar.psi.SqliteExtensionExpr +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.alecstrong.sql.psi.core.psi.SqlFunctionExpr + +open class SqliteTypeResolver(private val parentResolver: TypeResolver) : Sqlite324TypeResolver(parentResolver) { + + override fun resolvedType(expr: SqlExpr): IntermediateType = when (expr) { + is SqliteExtensionExpr -> { + functionType(expr.windowFunctionExpr)!! // currently this is the only sqlite extension expr in 3_25 + } + else -> super.resolvedType(expr) + } + + override fun functionType(functionExpr: SqlFunctionExpr): IntermediateType? { + return functionExpr.sqliteFunctionType() ?: parentResolver.functionType(functionExpr) + } + + private fun SqlFunctionExpr.sqliteFunctionType() = when (functionName.text.lowercase()) { + "dense_rank", "ntile", "rank", "row_number" -> IntermediateType(INTEGER) + "cume_dist", "percent_rank" -> IntermediateType(REAL) + "lag", "lead", "first_value", "last_value", "nth_value", "group_concat" -> encapsulatingTypePreferringKotlin(exprList, INTEGER, REAL, TEXT).asNullable() + else -> null + } +} diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt deleted file mode 100644 index db37d7a7d07..00000000000 --- a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/ResultColumnMixin.kt +++ /dev/null @@ -1,27 +0,0 @@ -package app.cash.sqldelight.dialects.sqlite_3_25.grammar.mixins - -import app.cash.sqldelight.dialects.sqlite_3_25.grammar.psi.SqliteResultColumn -import com.alecstrong.sql.psi.core.ModifiableFileLazy -import com.alecstrong.sql.psi.core.psi.QueryElement -import com.alecstrong.sql.psi.core.psi.QueryElement.QueryResult -import com.alecstrong.sql.psi.core.psi.impl.SqlResultColumnImpl -import com.intellij.lang.ASTNode - -internal abstract class ResultColumnMixin(node: ASTNode) : - SqlResultColumnImpl(node), - SqliteResultColumn { - private val queryExposed = ModifiableFileLazy lazy@{ - if (windowFunctionInvocation != null) { - var column = QueryElement.QueryColumn(this) - columnAlias?.let { alias -> - column = column.copy(element = alias) - } - - return@lazy listOf(QueryResult(columns = listOf(column))) - } - - return@lazy super.queryExposed() - } - - override fun queryExposed() = queryExposed.forFile(containingFile) -} diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/SqliteWindowFunctionMixin.kt b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/SqliteWindowFunctionMixin.kt new file mode 100644 index 00000000000..0cd89736f6e --- /dev/null +++ b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/mixins/SqliteWindowFunctionMixin.kt @@ -0,0 +1,22 @@ +package app.cash.sqldelight.dialects.sqlite_3_25.grammar.mixins + +import app.cash.sqldelight.dialects.sqlite_3_25.grammar.psi.SqliteWindowFunctionExpr +import com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl +import com.alecstrong.sql.psi.core.psi.SqlExpr +import com.alecstrong.sql.psi.core.psi.SqlFunctionExpr +import com.alecstrong.sql.psi.core.psi.SqlFunctionName +import com.intellij.lang.ASTNode + +internal abstract class SqliteWindowFunctionMixin( + node: ASTNode, +) : SqlCompositeElementImpl(node), + SqliteWindowFunctionExpr, + SqlFunctionExpr { + override fun getExprList(): List { + return children.filterIsInstance() + } + + override fun getFunctionName(): SqlFunctionName { + return exprList.first().children.filterIsInstance().single() + } +} diff --git a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/sqlite.bnf b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/sqlite.bnf index c9fa43a0c88..337bdb8ad56 100644 --- a/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/sqlite.bnf +++ b/dialects/sqlite-3-25/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_25/grammar/sqlite.bnf @@ -36,7 +36,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.WINDOW" ] } -overrides ::= alter_table_rules | result_column | select_stmt +overrides ::= alter_table_rules | extension_expr | select_stmt alter_table_rules ::= ( {alter_table_add_column} @@ -47,18 +47,12 @@ alter_table_rules ::= ( implements = "com.alecstrong.sql.psi.core.psi.SqlAlterTableRules" override = true } -result_column ::= ( MULTIPLY - | {table_name} DOT MULTIPLY - | (window_function_invocation | <>) [ [ AS ] {column_alias} ] ) { - mixin = "app.cash.sqldelight.dialects.sqlite_3_25.grammar.mixins.ResultColumnMixin" - implements = "com.alecstrong.sql.psi.core.psi.SqlResultColumn" - override = true -} + select_stmt ::= SELECT [ DISTINCT | ALL ] {result_column} ( COMMA {result_column} ) * [ FROM {join_clause} ] [ WHERE <> ] [{group_by}] [ HAVING <> ] [ WINDOW window_name AS window_defn ( COMMA window_name AS window_defn ) * ] | VALUES {values_expression} ( COMMA {values_expression} ) * { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlSelectStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlSelectStmt" override = true - pin = 1 + pin = 2 } alter_table_rename_column ::= RENAME [ COLUMN ] {column_name} TO alter_table_column_alias { @@ -76,9 +70,15 @@ alter_table_column_alias ::= id | string { ] } -window_function_invocation ::= - window_func LP [ MULTIPLY | ( <> ( COMMA <> ) * ) ] RP [ 'FILTER' LP WHERE <> RP] 'OVER' ( window_defn | window_name ) { - pin = 6 +extension_expr ::= window_function_expr { + extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" + implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" + override = true +} + +window_function_expr ::= {function_expr} [ 'FILTER' LP WHERE <> RP] 'OVER' ( window_defn | window_name ) { + mixin = "app.cash.sqldelight.dialects.sqlite_3_25.grammar.mixins.SqliteWindowFunctionMixin" + implements = "com.alecstrong.sql.psi.core.psi.SqlFunctionExpr" } window_defn ::= LP [ base_window_name ] @@ -87,6 +87,7 @@ window_defn ::= LP [ base_window_name ] [ frame_spec ] RP { mixin = "app.cash.sqldelight.dialects.sqlite_3_25.grammar.mixins.SqliteWindowDefinitionMixin" + pin = 1 } frame_spec ::= ( 'RANGE' | 'ROWS' | 'GROUPS' ) @@ -109,6 +110,5 @@ frame_spec ::= ( 'RANGE' | 'ROWS' | 'GROUPS' ) pin = 1 } -window_func ::= id window_name ::= id base_window_name ::= id diff --git a/dialects/sqlite-3-25/src/testFixtures/resources/fixtures_sqlite_3_25/window_functions/t3.s b/dialects/sqlite-3-25/src/testFixtures/resources/fixtures_sqlite_3_25/window_functions/t3.s new file mode 100644 index 00000000000..f0330d2a51b --- /dev/null +++ b/dialects/sqlite-3-25/src/testFixtures/resources/fixtures_sqlite_3_25/window_functions/t3.s @@ -0,0 +1,17 @@ +CREATE TABLE numbers( + value INTEGER NOT NULL +); + +SELECT value +FROM ( + SELECT + value, + CASE + WHEN ((row_number() OVER(ORDER BY value ASC) - 1) % :limit) = 0 THEN 1 + WHEN value = :anchor THEN 1 + ELSE 0 + END page_boundary + FROM numbers + ORDER BY value ASC +) +WHERE page_boundary = 1; diff --git a/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/SqliteTypeResolver.kt b/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/SqliteTypeResolver.kt index 05471253ecd..befc504a158 100644 --- a/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/SqliteTypeResolver.kt +++ b/dialects/sqlite-3-35/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_35/SqliteTypeResolver.kt @@ -3,13 +3,13 @@ package app.cash.sqldelight.dialects.sqlite_3_35 import app.cash.sqldelight.dialect.api.QueryWithResults import app.cash.sqldelight.dialect.api.ReturningQueryable import app.cash.sqldelight.dialect.api.TypeResolver -import app.cash.sqldelight.dialects.sqlite_3_24.SqliteTypeResolver as Sqlite324TypeResolver +import app.cash.sqldelight.dialects.sqlite_3_25.SqliteTypeResolver as Sqlite325TypeResolver import app.cash.sqldelight.dialects.sqlite_3_35.grammar.psi.SqliteDeleteStmtLimited import app.cash.sqldelight.dialects.sqlite_3_35.grammar.psi.SqliteInsertStmt import app.cash.sqldelight.dialects.sqlite_3_35.grammar.psi.SqliteUpdateStmtLimited import com.alecstrong.sql.psi.core.psi.SqlStmt -class SqliteTypeResolver(private val parentResolver: TypeResolver) : Sqlite324TypeResolver(parentResolver) { +class SqliteTypeResolver(private val parentResolver: TypeResolver) : Sqlite325TypeResolver(parentResolver) { override fun queryWithResults(sqlStmt: SqlStmt): QueryWithResults? { sqlStmt.insertStmt?.let { insert -> check(insert is SqliteInsertStmt) diff --git a/dialects/sqlite-3-38/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_38/grammar/sqlite.bnf b/dialects/sqlite-3-38/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_38/grammar/sqlite.bnf index 9e8aee59918..9d453afdc9c 100644 --- a/dialects/sqlite-3-38/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_38/grammar/sqlite.bnf +++ b/dialects/sqlite-3-38/src/main/kotlin/app/cash/sqldelight/dialects/sqlite_3_38/grammar/sqlite.bnf @@ -7,13 +7,17 @@ extends="com.alecstrong.sql.psi.core.psi.SqlCompositeElementImpl" psiClassPrefix = "Sqlite" - parserImports=[] + parserImports=[ + "static app.cash.sqldelight.dialects.sqlite_3_25.grammar.SqliteParser.window_function_expr_real" + "static app.cash.sqldelight.dialects.sqlite_3_25.grammar.SqliteParserUtil.windowFunctionExprExt" + ] } + overrides ::= extension_expr -extension_expr ::= json_expression { - extends = "com.alecstrong.sql.psi.core.psi.impl.SqlExtensionExprImpl" - implements = "com.alecstrong.sql.psi.core.psi.SqlExtensionExpr" +extension_expr ::= sqlite_3_25_window_function_expr | json_expression { + extends = "app.cash.sqldelight.dialects.sqlite_3_25.grammar.psi.impl.SqliteExtensionExprImpl" + implements = "app.cash.sqldelight.dialects.sqlite_3_25.grammar.psi.SqliteExtensionExpr" override = true } @@ -22,3 +26,5 @@ json_expression ::= {column_expr} json_binary_operator <> { pin = 2 } json_binary_operator ::= '->' | '->>' + +private sqlite_3_25_window_function_expr ::= <>>> diff --git a/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/KeysetPaging.sq b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/KeysetPaging.sq new file mode 100644 index 00000000000..69144369562 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/KeysetPaging.sq @@ -0,0 +1,21 @@ +CREATE TABLE numbers( + value INTEGER NOT NULL +); + +insert: +INSERT INTO numbers(value) VALUES (1),(2),(3),(4),(5),(6); + +page: +SELECT value +FROM ( + SELECT + value, + CASE + WHEN ((row_number() OVER(ORDER BY value ASC) - 1) % :limit) = 0 THEN 1 + WHEN value = :anchor THEN 1 + ELSE 0 + END page_boundary + FROM numbers + ORDER BY value ASC +) +WHERE page_boundary = 1; diff --git a/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/WindowsFunctions.sq b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/WindowsFunctions.sq new file mode 100644 index 00000000000..add7c28b8b6 --- /dev/null +++ b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/main/sqldelight/app/cash/sqldelight/integration/WindowsFunctions.sq @@ -0,0 +1,46 @@ +CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT); + +CREATE TABLE t2(a TEXT, b TEXT); + +insert: +INSERT INTO t2 VALUES('a', 'one'), + ('a', 'two'), + ('a', 'three'), + ('b', 'four'), + ('c', 'five'), + ('c', 'six'); + +insertGroup: +INSERT INTO t1 VALUES (1, 'A', 'one' ), + (2, 'B', 'two' ), + (3, 'C', 'three'), + (4, 'D', 'one' ), + (5, 'E', 'two' ), + (6, 'F', 'three'), + (7, 'G', 'one' ); + +select: +SELECT a AS a, + row_number() OVER win AS row_number, + rank() OVER win AS rank, + dense_rank() OVER win AS dense_rank, + percent_rank() OVER win AS percent_rank, + cume_dist() OVER win AS cume_dist, + ntile(2) OVER win AS ntile +FROM t2 +WINDOW win AS (ORDER BY a); + +selectExpr: +SELECT b AS b, + lead(b, 2, 'n/a') OVER win AS lead, + lag(b) OVER win AS lag, + first_value(b) OVER win AS first_value, + last_value(b) OVER win AS last_value, + nth_value(b, 3) OVER win AS nth_value +FROM t2 +WINDOW win AS (ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW); + +selectGroup: +SELECT a, b, group_concat(b, '.') OVER ( + ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING +) AS group_concat FROM t1; diff --git a/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/test/java/app/cash/sqldelight/integration/IntegrationTests.kt b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/test/java/app/cash/sqldelight/integration/IntegrationTests.kt index 14dfc38108f..cc3ae3dce56 100644 --- a/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/test/java/app/cash/sqldelight/integration/IntegrationTests.kt +++ b/sqldelight-gradle-plugin/src/test/integration-sqlite-3-35/src/test/java/app/cash/sqldelight/integration/IntegrationTests.kt @@ -8,6 +8,8 @@ import org.junit.Test class IntegrationTests { private lateinit var personQueries: PersonQueries + private lateinit var keysetPagingQueries: KeysetPagingQueries + private lateinit var windowsFunctionsQueries: WindowsFunctionsQueries @Before fun before() { val database = JdbcSqliteDriver(IN_MEMORY) @@ -15,6 +17,8 @@ class IntegrationTests { val queryWrapper = QueryWrapper(database) personQueries = queryWrapper.personQueries + keysetPagingQueries = queryWrapper.keysetPagingQueries + windowsFunctionsQueries = queryWrapper.windowsFunctionsQueries } @Test fun insertReturning1() { @@ -76,4 +80,43 @@ class IntegrationTests { assertThat(personQueries.deleteAndReturnAll("Omega").executeAsOne()) .isEqualTo(Person(1, "Alpha", "Omega")) } + + @Test fun keysetPagingWindowFunction() { + keysetPagingQueries.insert() + assertThat(keysetPagingQueries.page(limit = 5, anchor = 3).executeAsList().last()).isEqualTo(6) + } + + @Test fun basicWindowFunctions() { + windowsFunctionsQueries.insert() + with(windowsFunctionsQueries.select().executeAsList()) { + assertThat(last().a).isEqualTo("c") + assertThat(last().row_number).isEqualTo(6) + assertThat(last().rank).isEqualTo(5) + assertThat(last().dense_rank).isEqualTo(3) + assertThat(last().percent_rank).isEqualTo(0.8) + assertThat(last().cume_dist).isEqualTo(1.0) + assertThat(last().ntile).isEqualTo(2) + } + } + + @Test fun exprWindowFunctions() { + windowsFunctionsQueries.insert() + with(windowsFunctionsQueries.selectExpr().executeAsList()) { + assertThat(last().b).isEqualTo("two") + assertThat(last().lead).isEqualTo("n/a") + assertThat(last().lag).isEqualTo("three") + assertThat(last().first_value).isEqualTo("five") + assertThat(last().last_value).isEqualTo("two") + assertThat(last().nth_value).isEqualTo("one") + } + } + + @Test fun groupWindowFunctions() { + windowsFunctionsQueries.insertGroup() + with(windowsFunctionsQueries.selectGroup().executeAsList()) { + assertThat(last().a).isEqualTo(7) + assertThat(last().b).isEqualTo("G") + assertThat(last().group_concat).isEqualTo("F.G") + } + } } From 10f15cb49153e8fc450762d1b5c9fac047e5032a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:11:00 +0100 Subject: [PATCH 092/184] Fix 5399 PostgreSql numeric resolver (#5402) * add NUMERIC to functions/binary exp Add type to aggregate functions that can take NUMERIC NUMERIC types to be resolved to BigDecimal * Add tests Interface generation tests for changes * Update InterfaceGeneration.kt --- .../postgresql/PostgreSqlTypeResolver.kt | 23 ++-- .../core/queries/InterfaceGeneration.kt | 124 +++++++++++++++++- 2 files changed, 134 insertions(+), 13 deletions(-) diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt index 85eb7207460..bf2162296e6 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/PostgreSqlTypeResolver.kt @@ -99,6 +99,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes INTEGER, BIG_INT, REAL, + PostgreSqlType.NUMERIC, TEXT, BLOB, TIMESTAMP_TIMEZONE, @@ -113,6 +114,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes PostgreSqlType.INTEGER, BIG_INT, REAL, + PostgreSqlType.NUMERIC, TIMESTAMP_TIMEZONE, TIMESTAMP, ) @@ -124,19 +126,19 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes if (isArrayType(exprType)) { exprType } else { - encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, BLOB, nullability = { exprListNullability -> + encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TEXT, BLOB, nullability = { exprListNullability -> exprListNullability.all { it } }) } } - "max" -> encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, BLOB, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() - "min" -> encapsulatingTypePreferringKotlin(exprList, BLOB, TEXT, SMALL_INT, INTEGER, PostgreSqlType.INTEGER, BIG_INT, REAL, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() + "max" -> encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TEXT, BLOB, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() + "min" -> encapsulatingTypePreferringKotlin(exprList, BLOB, TEXT, SMALL_INT, INTEGER, PostgreSqlType.INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() "sum" -> { val type = resolvedType(exprList.single()) - if (type.dialectType == REAL) { - IntermediateType(REAL).asNullable() - } else { - IntermediateType(INTEGER).asNullable() + when (type.dialectType) { + REAL -> IntermediateType(REAL).asNullable() + PostgreSqlType.NUMERIC -> IntermediateType(PostgreSqlType.NUMERIC).asNullable() + else -> IntermediateType(INTEGER).asNullable() } } "to_hex", "quote_literal", "quote_ident", "md5" -> IntermediateType(TEXT) @@ -176,14 +178,14 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes "json_build_object", "jsonb_build_object", -> IntermediateType(TEXT) "array_agg" -> { - val typeForAgg = encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() + val typeForAgg = encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TEXT, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() arrayIntermediateType(typeForAgg) } "string_agg" -> IntermediateType(TEXT) "json_array_length", "jsonb_array_length" -> IntermediateType(INTEGER) "jsonb_path_exists", "jsonb_path_match", "jsonb_path_exists_tz", "jsonb_path_match_tz" -> IntermediateType(BOOLEAN) "currval", "lastval", "nextval", "setval" -> IntermediateType(BIG_INT) - "generate_series" -> encapsulatingType(exprList, INTEGER, BIG_INT, REAL, TIMESTAMP_TIMEZONE, TIMESTAMP) + "generate_series" -> encapsulatingType(exprList, INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TIMESTAMP_TIMEZONE, TIMESTAMP) "regexp_count", "regexp_instr" -> IntermediateType(INTEGER) "regexp_like" -> IntermediateType(BOOLEAN) "regexp_replace", "regexp_substr" -> IntermediateType(TEXT) @@ -193,7 +195,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes "websearch_to_tsquery" -> IntermediateType(TEXT) "rank", "dense_rank", "row_number" -> IntermediateType(INTEGER) "ntile" -> IntermediateType(INTEGER).asNullable() - "lag", "lead", "first_value", "last_value", "nth_value" -> encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() + "lag", "lead", "first_value", "last_value", "nth_value" -> encapsulatingTypePreferringKotlin(exprList, SMALL_INT, PostgreSqlType.INTEGER, INTEGER, BIG_INT, REAL, PostgreSqlType.NUMERIC, TEXT, TIMESTAMP_TIMEZONE, TIMESTAMP, DATE).asNullable() else -> null } @@ -265,6 +267,7 @@ class PostgreSqlTypeResolver(private val parentResolver: TypeResolver) : TypeRes INTEGER, BIG_INT, REAL, + PostgreSqlType.NUMERIC, TEXT, BLOB, BOOLEAN, diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt index f54d00ea7bc..ab7a309ed10 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt @@ -1147,6 +1147,7 @@ class InterfaceGeneration { |inr INTEGER, |jsn JSON, |jsb JSON, + |num NUMERIC, |tim TIME, |tms TIMESTAMP, |tmz TIMESTAMPTZ, @@ -1167,6 +1168,7 @@ class InterfaceGeneration { |inr IS NOT NULL AS has_integer, |jsn IS NOT NULL AS has_json, |jsb IS NOT NULL AS has_jsob, + |num IS NOT NULL AS has_num, |sml IS NOT NULL AS has_smallint, |tim IS NOT NULL AS has_time, |tms IS NOT NULL AS has_timestamp, @@ -1205,6 +1207,7 @@ class InterfaceGeneration { | has_integer: Boolean, | has_json: Boolean, | has_jsob: Boolean, + | has_num: Boolean, | has_smallint: Boolean, | has_time: Boolean, | has_timestamp: Boolean, @@ -1222,6 +1225,7 @@ class InterfaceGeneration { | |inr IS NOT NULL AS has_integer, | |jsn IS NOT NULL AS has_json, | |jsb IS NOT NULL AS has_jsob, + | |num IS NOT NULL AS has_num, | |sml IS NOT NULL AS has_smallint, | |tim IS NOT NULL AS has_time, | |tms IS NOT NULL AS has_timestamp, @@ -1246,13 +1250,14 @@ class InterfaceGeneration { | cursor.getBoolean(10)!!, | cursor.getBoolean(11)!!, | cursor.getBoolean(12)!!, - | cursor.getBoolean(13)!! + | cursor.getBoolean(13)!!, + | cursor.getBoolean(14)!! | ) | } | | public fun selectIsNotNull(): Query = selectIsNotNull { has_bigint, has_boolean, - | has_byte, has_date, has_integer, has_json, has_jsob, has_smallint, has_time, has_timestamp, - | has_timestamptz, has_tsvector, has_uuid, has_varchar -> + | has_byte, has_date, has_integer, has_json, has_jsob, has_num, has_smallint, has_time, + | has_timestamp, has_timestamptz, has_tsvector, has_uuid, has_varchar -> | SelectIsNotNull( | has_bigint, | has_boolean, @@ -1261,6 +1266,7 @@ class InterfaceGeneration { | has_integer, | has_json, | has_jsob, + | has_num, | has_smallint, | has_time, | has_timestamp, @@ -1276,6 +1282,118 @@ class InterfaceGeneration { ) } + @Test + fun `postgres using numeric returns BigDecimal`() { + val file = FixtureCompiler.parseSql( + """ + |CREATE TABLE sales ( + | product_id INTEGER, + | sale_date DATE, + | sale_amount NUMERIC + |); + | + |select: + |SELECT + | sum(sale_amount) AS sum_amount, + | sale_amount * sale_amount AS product_amount, + | array_agg(sale_amount) AS agg_amount, + | generate_series(sale_amount, 2) AS generate_amount + |FROM sales + |GROUP BY sale_amount; + """.trimMargin(), + temporaryFolder, + fileName = "NumericFunctions.sq", + dialect = PostgreSqlDialect(), + ) + + val table = file.tables(false).single() + val tableGenerator = TableInterfaceGenerator(table) + + assertThat(tableGenerator.kotlinImplementationSpec().toString()).isEqualTo( + """ + |public data class Sales( + | public val product_id: kotlin.Int?, + | public val sale_date: java.time.LocalDate?, + | public val sale_amount: java.math.BigDecimal?, + |) + | + """.trimMargin(), + ) + + val query = file.namedQueries.first() + val queryGenerator = QueryInterfaceGenerator(query) + assertThat(queryGenerator.kotlinImplementationSpec().toString()).isEqualTo( + """ + |public data class Select( + | public val sum_amount: java.math.BigDecimal?, + | public val product_amount: java.math.BigDecimal?, + | public val agg_amount: kotlin.Array, + | public val generate_amount: java.math.BigDecimal, + |) + | + """.trimMargin(), + ) + } + + @Test + fun `postgres using numeric window function returns BigDecimal`() { + val file = FixtureCompiler.parseSql( + """ + |CREATE TABLE sales ( + | product_id INTEGER, + | sale_date DATE, + | sale_amount NUMERIC + |); + | + |select: + |SELECT + | product_id, + | sale_date, + | lag(sale_amount, 1) OVER (PARTITION BY product_id ORDER BY sale_date) AS prev_sale_amount, + | lead(sale_amount, 1) OVER (PARTITION BY product_id ORDER BY sale_date) AS next_sale_amount, + | first_value(sale_amount) OVER (PARTITION BY product_id ORDER BY sale_date) AS first_sale_amount, + | last_value(sale_amount) OVER (PARTITION BY product_id ORDER BY sale_date RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_sale_amount, + | nth_value(sale_amount, 2) OVER (PARTITION BY product_id ORDER BY sale_date) AS second_sale_amount + |FROM sales + |ORDER BY product_id, sale_date; + """.trimMargin(), + temporaryFolder, + fileName = "NumericWindowsFunctions.sq", + dialect = PostgreSqlDialect(), + ) + + val table = file.tables(false).single() + val tableGenerator = TableInterfaceGenerator(table) + + assertThat(tableGenerator.kotlinImplementationSpec().toString()).isEqualTo( + """ + |public data class Sales( + | public val product_id: kotlin.Int?, + | public val sale_date: java.time.LocalDate?, + | public val sale_amount: java.math.BigDecimal?, + |) + | + """.trimMargin(), + ) + + val query = file.namedQueries.first() + val queryGenerator = QueryInterfaceGenerator(query) + assertThat(queryGenerator.kotlinImplementationSpec().toString()).isEqualTo( + """ + |public data class Select( + | public val product_id: kotlin.Int?, + | public val sale_date: java.time.LocalDate?, + | public val prev_sale_amount: java.math.BigDecimal?, + | public val next_sale_amount: java.math.BigDecimal?, + | public val first_sale_amount: java.math.BigDecimal?, + | public val last_sale_amount: java.math.BigDecimal?, + | public val second_sale_amount: java.math.BigDecimal?, + |) + | + """.trimMargin(), + ) + } + private fun checkFixtureCompiles(fixtureRoot: String) { val result = FixtureCompiler.compileFixture( fixtureRoot = "src/test/query-interface-fixtures/$fixtureRoot", From fcdacdad97082442a962b53ca9787acb2f04f813 Mon Sep 17 00:00:00 2001 From: Eliezer Graber Date: Thu, 5 Sep 2024 06:16:57 -0400 Subject: [PATCH 093/184] Update migrations docs (#5318) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update migrations docs * Update docs/common/migrations.md Co-authored-by: Benoît Quenaudon --------- Co-authored-by: Benoît Quenaudon --- docs/common/migrations.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/common/migrations.md b/docs/common/migrations.md index fd34189ff39..d45ad9be9b2 100644 --- a/docs/common/migrations.md +++ b/docs/common/migrations.md @@ -29,9 +29,11 @@ These SQL statements are run by the `Database.Schema.migrate()` method. Migratio ## Verifying Migrations -You can also place a `.db` file in the `src/main/sqldelight` folder of the same `.db` format. If there is a `.db` file present, a new `verifySqlDelightMigration` task will be added to the gradle project, and it will run as part of the `check` task, meaning your migrations will be verified against that `.db` file. It confirms that the migrations yield a database with the latest schema. +A `verifySqlDelightMigration` task will be added to the gradle project, and it will run as part of the `check` task. For any `.db` file named `.db` in your SqlDelight source set (e.g. `src/main/sqldelight`) it will apply all migrations starting from `.sqm`, and confirms that the migrations yield a database with the latest schema. -To generate a `.db` file from your latest schema, run the `generateSqlDelightSchema` task, which is available once you specify a `schemaOutputDirectory`, as described in the [gradle.md](gradle.md). You should probably do this before you create your first migration. +To generate a `.db` file from your latest schema, run the `generateSchema` task, which is available once you specify a `schemaOutputDirectory`, as described in the [gradle.md](gradle.md). You should probably do this before you create your first migration. + +Most use cases would benefit from only having a `1.db` file representing the schema of the initial version of their database. Having multiple `.db` files is allowed, but that would result in each `.db` file having each of its migrations applied to it, which causes a lot of unnecessary work. ## Code Migrations From 7dfd252ec3e0a815aa07e7135c7ef9bfbd4b5b1f Mon Sep 17 00:00:00 2001 From: Hielke de Vries Date: Thu, 5 Sep 2024 14:07:47 +0200 Subject: [PATCH 094/184] Fix issue 5298: allow keywords to be used as table names (#5303) * Fix issue 5298: allow keywords to be used as table names * Refactor test Cleanup * Fix formatting * Fix formatting --------- Co-authored-by: Alec Kazakova <1675456+AlecKazakova@users.noreply.github.com> --- .../sqldelight/core/lang/util/TreeUtil.kt | 2 +- .../cash/sqldelight/core/QueriesTypeTest.kt | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt index 770b5c5d1b9..cb5c0fd1c02 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/util/TreeUtil.kt @@ -188,7 +188,7 @@ private fun PsiElement.rangesToReplace(): List> { first = parent!!.tableName.range, second = parent!!.columns.joinToString( separator = ", ", - prefix = "${parent!!.tableName.text} (", + prefix = "${parent!!.tableName.node.text} (", postfix = ")", ) { it.name }, ), diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt index a0db376e636..ffcc073c873 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/QueriesTypeTest.kt @@ -916,6 +916,44 @@ class QueriesTypeTest { ) } + @Test fun `SQL keywords can be used as table names when escaped`() { + val result = FixtureCompiler.compileSql( + """ + |CREATE TABLE "order" ( + | data_id INTEGER NOT NULL + |); + |selectForId: + |INSERT INTO "order" VALUES ?; + """.trimMargin(), + temporaryFolder, + ) + + val dataQueries = File(result.outputDirectory, "com/example/TestQueries.kt") + assertThat(result.compilerOutput).containsKey(dataQueries) + assertThat(result.compilerOutput[dataQueries].toString()).isEqualTo( + """ + package com.example + + import app.cash.sqldelight.TransacterImpl + import app.cash.sqldelight.db.SqlDriver + + public class TestQueries( + driver: SqlDriver, + ) : TransacterImpl(driver) { + public fun selectForId(order: Order) { + driver.execute(-304_025_397, ""${'"'}INSERT INTO "order" (data_id) VALUES (?)""${'"'}, 1) { + bindLong(0, order.data_id) + } + notifyQueries(-304_025_397) { emit -> + emit("order") + } + } + } + + """.trimIndent(), + ) + } + @Test fun `pragma statement returns results`() { val result = FixtureCompiler.compileSql( """ From c6923e01f64672f3cdd26437eff4a17085d41fd7 Mon Sep 17 00:00:00 2001 From: Derek Ellis Date: Thu, 5 Sep 2024 14:49:00 -0400 Subject: [PATCH 095/184] Skip dokkaHtml task in PR tests (#5437) --- .github/workflows/PR.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 1db3d28e3c6..6893c79ddc7 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -58,14 +58,14 @@ jobs: - name: Run gradle tests if: matrix.os == 'ubuntu-latest' && matrix.job == 'test' run: | - ./gradlew build -x :sqldelight-idea-plugin:build -x :sqldelight-gradle-plugin:test --stacktrace -x linuxX64Test + ./gradlew build -x :sqldelight-idea-plugin:build -x :sqldelight-gradle-plugin:test --stacktrace -x linuxX64Test -x dokkaHtml - name: Run gradle plugin tests if: matrix.os == 'macOS-14' && matrix.job == 'gradle-plugin-tests' - run: ./gradlew :sqldelight-gradle-plugin:test :sqldelight-gradle-plugin:grammarkitTest --parallel + run: ./gradlew :sqldelight-gradle-plugin:test :sqldelight-gradle-plugin:grammarkitTest --parallel -x dokkaHtml - name: Run the IntelliJ plugin if: matrix.os == 'ubuntu-latest' && matrix.job == 'instrumentation' - run: ./gradlew :sqldelight-idea-plugin:build --stacktrace + run: ./gradlew :sqldelight-idea-plugin:build --stacktrace -x dokkaHtml # Windows tests - name: Run windows tests @@ -75,7 +75,7 @@ jobs: - name: Run linux tests if: matrix.os == 'ubuntu-latest' # not parallel otherwise NativeTransacterTest fails. - run: ./gradlew linuxX64Test --no-parallel + run: ./gradlew linuxX64Test --no-parallel -x dokkaHtml # android tests - name: Enable KVM group perms @@ -90,7 +90,7 @@ jobs: with: api-level: 29 arch: x86_64 - script: ./gradlew connectedCheck :sqldelight-gradle-plugin:instrumentationTest --stacktrace --parallel + script: ./gradlew connectedCheck :sqldelight-gradle-plugin:instrumentationTest --stacktrace --parallel -x dokkaHtml # ios tests - name: Run ios tests From 1567f235a435f9d32e3533f603da63fbee610b6e Mon Sep 17 00:00:00 2001 From: Derek Ellis Date: Thu, 5 Sep 2024 15:05:22 -0400 Subject: [PATCH 096/184] Reduce the number of gradle versions we check (#5436) Test against the minimum and current versions of gradle (that SQLDelight was built against) --- .../app/cash/sqldelight/integrations/GradleVersionsTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt index aac278b9db4..39a7583c428 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt @@ -20,6 +20,7 @@ import com.google.common.truth.Truth.assertThat import java.io.File import java.nio.file.Files import org.gradle.testkit.runner.GradleRunner +import org.gradle.util.GradleVersion import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -35,8 +36,7 @@ class GradleVersionsTest(private val gradleVersion: String) { // We use version catalogs in tests too but this feature is only stable since 7.4. // Test MIN_GRADLE_VERSION too if MIN_GRADLE_VERSION is higher than 7.4. "7.4.2", - "7.6.1", - "8.0.2", + GradleVersion.current().version, ) } From 7d304159701a69f8db6a3223456e603b4251ecc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:13:36 +0000 Subject: [PATCH 097/184] Update dependency gradle to v8.10 (#5404) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- sample/gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0e549..9355b415575 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample-web/gradle/wrapper/gradle-wrapper.properties b/sample-web/gradle/wrapper/gradle-wrapper.properties index 09523c0e549..9355b415575 100644 --- a/sample-web/gradle/wrapper/gradle-wrapper.properties +++ b/sample-web/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/sample/gradle/wrapper/gradle-wrapper.jar b/sample/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 3990 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 diff --git a/sample/gradle/wrapper/gradle-wrapper.properties b/sample/gradle/wrapper/gradle-wrapper.properties index 09523c0e549..9355b415575 100644 --- a/sample/gradle/wrapper/gradle-wrapper.properties +++ b/sample/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 5c23ba27867f05f61b09116279702fde7bc325d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:45:59 +0000 Subject: [PATCH 098/184] Update agp to v8.6.0 (#5433) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a0dc297c6e3..32c9f00b067 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ sqljs = "1.8.0" paging-mpp = "3.1.1-0.3.1" paging3 = "3.1.1" ktlint = "1.3.1" -agp = "8.5.2" +agp = "8.6.0" compileSdk = "34" minSdk = "21" sqlPsi = "0.4.9" From d7cc00eabc133b43f38a1e75f70af7e786dd00d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 23:58:54 +0000 Subject: [PATCH 099/184] Update plugin com.gradle.develocity to v3.18 (#5411) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 20b2adb4ff0..55e35417b8b 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.6" + id "com.gradle.develocity" version "3.18" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 72e52cfca9e..e1ff3afb92c 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.6" + id "com.gradle.develocity" version "3.18" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index 9fa5413732f..e18fd0d1189 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.17.6" + id "com.gradle.develocity" version "3.18" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 84669332253560047a5a4415d856b0130c83e9b5 Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Mon, 9 Sep 2024 20:24:52 +0200 Subject: [PATCH 100/184] Remove unused Xcode installations to free some space (#5445) --- .github/workflows/PR.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 6893c79ddc7..228649e7bba 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -42,6 +42,15 @@ jobs: contents: read steps: + # https://github.com/actions/runner-images/issues/10511 + # We only use Xcode 15.4, the default version + - name: Remove unused Xcode installations + run: | + df -hI /dev/disk3s1s1 + find /Applications -type d -name "Xcode_*.app" | grep -v "Xcode_15.4.app" | xargs sudo rm -rf + df -hI /dev/disk3s1s1 + if: matrix.os == 'macOS-14' + - name: Checkout the repo uses: actions/checkout@v4 - name: Set up Java From f487b5c745f0543959cdb85b0db5f488e6ea245b Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:43:22 +0200 Subject: [PATCH 101/184] Bump Kotlin to 2.0.0 (#5217) * Kotlin 2.0.0-RC1 * Migrate to atomicfu in tests * Bump Kotlin to 2.0.0-RC3 * Bump ksp to 2.0.0-RC2 * Fix spotless * Update yarn lock file * Use default hierarchy template in sample * Fix default hierarchy groups with actual targets (https://youtrack.jetbrains.com/issue/KT-64483) * Fix js test dependency * Fix atomic fields * Fix atomic fields * Fix atomic fields * Fix sample * Bump ksp Fix sample * Fix sample * Remove unused suppression * Increase minimum Gradle version to 8.0 * Fix inline property warning * Add foo toolchain resolver plugin to test different jdks * Remove unused isInitialized in test code * Add missing override functions in expect class * spotless * Remove unused CInterop property * Bump Kotlin and KSP to 2.0.0 * Update libs.versions.toml * Revert "Fix inline property warning" This reverts commit bc10d5ed1aa5f95694acfe0d3f54c2bd35821fdc. * Revert api change * Fix spotless --------- Co-authored-by: Alec Kazakova <1675456+AlecKazakova@users.noreply.github.com> --- .gitignore | 1 + build.gradle | 1 + .../multiplatform/MultiplatformConventions.kt | 7 +- drivers/driver-test/build.gradle | 29 +- drivers/native-driver/build.gradle | 16 +- .../sqldelight/driver/native/util/PoolLock.kt | 1 - extensions/async-extensions/build.gradle | 2 +- extensions/coroutines-extensions/build.gradle | 20 +- .../cash/sqldelight/coroutines/TestDriver.kt | 0 .../app/cash/sqldelight/coroutines/DbTest.kt | 0 .../cash/sqldelight/coroutines/MappingTest.kt | 0 .../sqldelight/coroutines/QueryAsFlowTest.kt | 0 .../cash/sqldelight/coroutines/QueryAssert.kt | 0 .../app/cash/sqldelight/coroutines/RunTest.kt | 7 +- .../app/cash/sqldelight/coroutines/TestDb.kt | 35 +- gradle/libs.versions.toml | 4 +- kotlin-js-store/yarn.lock | 454 +-- .../app/cash/sqldelight/db/QueryResult.kt | 2 +- sample-web/kotlin-js-store/yarn.lock | 845 +++-- sample/build.gradle | 5 - sample/common/build.gradle | 19 +- sample/common/common.podspec | 15 + sample/common/karma.config.d/wasm.js | 21 - .../example/sqldelight/hockey/data/Date.kt | 5 +- .../com/example/sqldelight/hockey/BaseTest.kt | 2 - .../hockey/data/{Date.kt => Date.ios.kt} | 4 +- .../hockey/platform/DateFormatHelper.kt | 3 +- .../hockey/data/{Date.kt => Date.jvm.kt} | 4 +- sample/common/webpack.config.d/fs.js | 9 - sample/gradle.properties | 1 - sample/kotlin-js-store/yarn.lock | 2976 ----------------- .../sqldelight/gradle/SqlDelightPlugin.kt | 2 +- .../test/build-logic-tests/build.gradle.kts | 4 + .../build-logic-tests/settings.gradle.kts | 1 + .../sqldelightTests.settings.gradle.kts | 5 + .../integrations/GradleVersionsTest.kt | 3 +- 36 files changed, 877 insertions(+), 3626 deletions(-) rename extensions/coroutines-extensions/src/{nativeTest => testableNativeTest}/kotlin/app/cash/sqldelight/coroutines/TestDriver.kt (100%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/DbTest.kt (100%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/MappingTest.kt (100%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/QueryAsFlowTest.kt (100%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/QueryAssert.kt (100%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/RunTest.kt (93%) rename extensions/coroutines-extensions/src/{commonTest => testableTest}/kotlin/app/cash/sqldelight/coroutines/TestDb.kt (85%) delete mode 100644 sample/common/karma.config.d/wasm.js rename sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/{Date.kt => Date.ios.kt} (90%) rename sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/{Date.kt => Date.jvm.kt} (66%) delete mode 100644 sample/common/webpack.config.d/fs.js delete mode 100644 sample/kotlin-js-store/yarn.lock diff --git a/.gitignore b/.gitignore index 30758e20575..417a272571c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .gradle +.kotlin **/.idea sqldelight-gradle-plugin/**/gradle sqldelight-gradle-plugin/**/gradlew diff --git a/build.gradle b/build.gradle index 09872f490d8..bfba12f63ed 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ buildscript { strictly '4.4.1' } } + classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:0.24.0") } } diff --git a/buildLogic/multiplatform-convention/src/main/kotlin/app/cash/sqldelight/multiplatform/MultiplatformConventions.kt b/buildLogic/multiplatform-convention/src/main/kotlin/app/cash/sqldelight/multiplatform/MultiplatformConventions.kt index a55bcc3aa5c..45e2fdd6635 100644 --- a/buildLogic/multiplatform-convention/src/main/kotlin/app/cash/sqldelight/multiplatform/MultiplatformConventions.kt +++ b/buildLogic/multiplatform-convention/src/main/kotlin/app/cash/sqldelight/multiplatform/MultiplatformConventions.kt @@ -2,6 +2,7 @@ package app.cash.sqldelight.multiplatform import org.gradle.api.Plugin import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.dsl.JsModuleKind import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.konan.target.HostManager @@ -21,10 +22,8 @@ class MultiplatformConventions : Plugin { } } } - compilations.configureEach { - it.kotlinOptions { - moduleKind = "umd" - } + compilerOptions { + moduleKind.set(JsModuleKind.MODULE_UMD) } } diff --git a/drivers/driver-test/build.gradle b/drivers/driver-test/build.gradle index aea2b2e9421..bfb2af0864b 100644 --- a/drivers/driver-test/build.gradle +++ b/drivers/driver-test/build.gradle @@ -1,36 +1,9 @@ plugins { - alias(libs.plugins.kotlin.multiplatform) + id("app.cash.sqldelight.multiplatform") id("app.cash.sqldelight.toolchain.runtime") } -// https://youtrack.jetbrains.com/issue/KTIJ-14471 -sourceSets { - main -} - kotlin { - jvm() - - js { - browser() - } - - // same targets as in `native-driver` - iosX64() - iosArm64() - tvosX64() - tvosArm64() - watchosX64() - watchosArm32() - watchosArm64() - macosX64() - mingwX64() - linuxX64() - macosArm64() - iosSimulatorArm64() - watchosSimulatorArm64() - tvosSimulatorArm64() - sourceSets { commonMain { dependencies { diff --git a/drivers/native-driver/build.gradle b/drivers/native-driver/build.gradle index e4cd10d494e..1581b698725 100644 --- a/drivers/native-driver/build.gradle +++ b/drivers/native-driver/build.gradle @@ -35,13 +35,15 @@ kotlin { mingwX64() watchosDeviceArm64() - targetHierarchy.default { target -> - target.group("native") { - it.group("nativeLinuxLike") { - it.withLinux() - it.withApple() - // https://github.com/touchlab/SQLiter/issues/117 - // it.withAndroidNative() + applyDefaultHierarchyTemplate { + it.common { target -> + target.group("native") { + it.group("nativeLinuxLike") { + it.group("linux") { } + it.group("apple") { } + // https://github.com/touchlab/SQLiter/issues/117 + // it.group("androidNative") + } } } } diff --git a/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/util/PoolLock.kt b/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/util/PoolLock.kt index 8106c89119b..422e3408422 100644 --- a/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/util/PoolLock.kt +++ b/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/util/PoolLock.kt @@ -1,6 +1,5 @@ package app.cash.sqldelight.driver.native.util -@Suppress("NO_ACTUAL_FOR_EXPECT") internal expect class PoolLock(reentrant: Boolean = false) { fun withLock( action: CriticalSection.() -> R, diff --git a/extensions/async-extensions/build.gradle b/extensions/async-extensions/build.gradle index c674081f580..1b0b0e8bf0e 100644 --- a/extensions/async-extensions/build.gradle +++ b/extensions/async-extensions/build.gradle @@ -13,7 +13,7 @@ kotlin { it.common { it.group("concurrent") { it.withJvm() - it.withNative() + it.group("native") { } } } } diff --git a/extensions/coroutines-extensions/build.gradle b/extensions/coroutines-extensions/build.gradle index c498f5f70a3..431e8f51a39 100644 --- a/extensions/coroutines-extensions/build.gradle +++ b/extensions/coroutines-extensions/build.gradle @@ -6,18 +6,25 @@ plugins { id("app.cash.sqldelight.multiplatform") id("app.cash.sqldelight.toolchain.runtime") alias(libs.plugins.binaryCompatibilityValidator) + id("kotlinx-atomicfu") } archivesBaseName = 'sqldelight-coroutines-extensions' kotlin { applyDefaultHierarchyTemplate { - it.group("testableNative") { - it.withApple() - it.withLinux() - it.withMingw() - // https://github.com/touchlab/SQLiter/issues/117 - // it.withAndroidNative() + it.common { + // not using commonTest due https://github.com/touchlab/SQLiter/issues/117 + it.group("testable") { + it.withJvm() + it.withJs() + it.group("testableNative") { + it.group("apple") {} + it.group("linux") {} + it.group("mingw") {} + // it.group("androidNative") + } + } } } @@ -57,7 +64,6 @@ kotlin { testableNativeTest { dependencies { implementation projects.drivers.nativeDriver - implementation libs.stately.concurrency } } } diff --git a/extensions/coroutines-extensions/src/nativeTest/kotlin/app/cash/sqldelight/coroutines/TestDriver.kt b/extensions/coroutines-extensions/src/testableNativeTest/kotlin/app/cash/sqldelight/coroutines/TestDriver.kt similarity index 100% rename from extensions/coroutines-extensions/src/nativeTest/kotlin/app/cash/sqldelight/coroutines/TestDriver.kt rename to extensions/coroutines-extensions/src/testableNativeTest/kotlin/app/cash/sqldelight/coroutines/TestDriver.kt diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/DbTest.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/DbTest.kt similarity index 100% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/DbTest.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/DbTest.kt diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/MappingTest.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/MappingTest.kt similarity index 100% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/MappingTest.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/MappingTest.kt diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/QueryAsFlowTest.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/QueryAsFlowTest.kt similarity index 100% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/QueryAsFlowTest.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/QueryAsFlowTest.kt diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/QueryAssert.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/QueryAssert.kt similarity index 100% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/QueryAssert.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/QueryAssert.kt diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt similarity index 93% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt index e0fb017f50d..072d2af8f79 100644 --- a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt +++ b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/RunTest.kt @@ -19,7 +19,8 @@ package app.cash.sqldelight.coroutines import kotlinx.coroutines.CoroutineScope fun DbTest.runTest(body: suspend CoroutineScope.(TestDb) -> Unit) = kotlinx.coroutines.test.runTest { - val db = setupDb() - db.use { body(it) } - db.close() + setupDb().use { db -> + db.init() + body(db) + } } diff --git a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt similarity index 85% rename from extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt rename to extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt index fa1762988b8..50a6ab380a0 100644 --- a/extensions/coroutines-extensions/src/commonTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt +++ b/extensions/coroutines-extensions/src/testableTest/kotlin/app/cash/sqldelight/coroutines/TestDb.kt @@ -8,39 +8,28 @@ import app.cash.sqldelight.coroutines.TestDb.Companion.TABLE_MANAGER import app.cash.sqldelight.db.QueryResult import app.cash.sqldelight.db.SqlCursor import app.cash.sqldelight.db.SqlDriver -import co.touchlab.stately.concurrency.AtomicBoolean -import co.touchlab.stately.concurrency.AtomicLong -import co.touchlab.stately.concurrency.value +import kotlinx.atomicfu.atomic expect suspend fun testDriver(): SqlDriver class TestDb( val db: SqlDriver, -) : SuspendingTransacterImpl(db) { - var aliceId = AtomicLong(0) - var bobId = AtomicLong(0) - var eveId = AtomicLong(0) +) : SuspendingTransacterImpl(db), + AutoCloseable { + var aliceId by atomic(0L) + var bobId by atomic(0L) + var eveId by atomic(0L) - var isInitialized = AtomicBoolean(false) - - private suspend fun init() { + suspend fun init() { db.execute(null, "PRAGMA foreign_keys=ON", 0).await() db.execute(null, CREATE_EMPLOYEE, 0).await() - aliceId.value = employee(Employee("alice", "Alice Allison")) - bobId.value = employee(Employee("bob", "Bob Bobberson")) - eveId.value = employee(Employee("eve", "Eve Evenson")) + aliceId = employee(Employee("alice", "Alice Allison")) + bobId = employee(Employee("bob", "Bob Bobberson")) + eveId = employee(Employee("eve", "Eve Evenson")) db.execute(null, CREATE_MANAGER, 0).await() - manager(eveId.value, aliceId.value) - } - - suspend fun use(block: suspend (TestDb) -> Unit) { - if (!isInitialized.value) { - init() - } - - block(this) + manager(eveId, aliceId) } fun createQuery(key: String, query: String, mapper: (SqlCursor) -> T): Query { @@ -63,7 +52,7 @@ class TestDb( db.notifyListeners(key) } - fun close() { + override fun close() { db.close() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 32c9f00b067..d179408f953 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin = "1.9.24" +kotlin = "2.0.0" dokka = "1.9.20" kotlinCoroutines = "1.8.1" idea = "231.9392.1" # Hedgehog | 2023.1.1 Patch 2 (see https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html) @@ -108,5 +108,5 @@ publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = "com.gradleup.shadow:8.3.0" -ksp = { id = "com.google.devtools.ksp", version = "1.9.25-1.0.20" } +ksp = { id = "com.google.devtools.ksp", version = "2.0.0-1.0.21" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.3" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index a9b082f84f6..52462732bbb 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -29,6 +29,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" @@ -47,13 +52,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" @@ -84,10 +94,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@types/component-emitter@^1.2.10": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" - integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== "@types/cookie@^0.4.1": version "0.4.1" @@ -120,10 +130,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/json-schema@*", "@types/json-schema@^7.0.8": version "7.0.9" @@ -135,10 +145,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.18.tgz#3b4fed5cfb58010e3a2be4b6e74615e4847f1074" integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -153,10 +163,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -172,15 +182,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -201,72 +211,72 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.1.0": +"@webpack-cli/configtest@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^2.0.1": +"@webpack-cli/info@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^2.0.3": +"@webpack-cli/serve@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== @@ -281,11 +291,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -294,10 +299,10 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn@^8.7.1: version "8.8.1" @@ -417,16 +422,15 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== +browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffer-from@^1.0.0: version "1.1.2" @@ -443,10 +447,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001286: - version "1.0.30001312" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" - integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== +caniuse-lite@^1.0.30001587: + version "1.0.30001617" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== chalk@^4.1.0: version "4.1.2" @@ -521,11 +525,6 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -597,7 +596,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.4, debug@~4.3.2: +debug@4.3.4, debug@^4.3.4, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -653,10 +652,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.4.17: - version "1.4.71" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" - integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== +electron-to-chromium@^1.4.668: + version "1.4.762" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.762.tgz#c29c9d47cf7cc128a9c364baa28adbadde95a47c" + integrity sha512-rrFvGweLxPwwSwJOjIopy3Vr+J3cIPtZzuc74bmlvmBIgQO3VYJDvVrlj94iKZ3ukXUH64Ex31hSfRTLqvjYJQ== emoji-regex@^8.0.0: version "8.0.0" @@ -668,15 +667,15 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== +engine.io-parser@~5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" + integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== -engine.io@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" - integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== +engine.io@~6.5.2: + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -686,13 +685,13 @@ engine.io@~6.2.0: cookie "~0.4.1" cors "~2.8.5" debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" + engine.io-parser "~5.2.1" + ws "~8.11.0" -enhanced-resolve@^5.13.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.16.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -717,6 +716,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -904,7 +908,18 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.2.0, glob@^7.1.3, glob@^7.1.7: +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^7.1.3, glob@^7.1.7: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -933,16 +948,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -graceful-fs@^4.2.10: +graceful-fs@^4.2.10, graceful-fs@^4.2.11: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -1149,19 +1159,19 @@ karma-sourcemap-loader@0.4.0: dependencies: graceful-fs "^4.2.10" -karma-webpack@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== +karma-webpack@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" + integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== dependencies: glob "^7.1.3" - minimatch "^3.0.4" + minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" - integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1182,7 +1192,7 @@ karma@6.4.2: qjobs "^1.2.0" range-parser "^1.2.1" rimraf "^3.0.2" - socket.io "^4.4.1" + socket.io "^4.7.2" source-map "^0.6.1" tmp "^0.2.1" ua-parser-js "^0.7.30" @@ -1290,6 +1300,20 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -1307,10 +1331,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -1319,13 +1343,12 @@ mocha@10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -1349,11 +1372,6 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -1364,10 +1382,10 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -node-releases@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1603,7 +1621,7 @@ schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.1.2: +schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -1655,43 +1673,45 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== +socket.io-adapter@~2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" + integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== + dependencies: + debug "~4.3.4" + ws "~8.11.0" -socket.io-parser@~4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" + "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.4.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.1.tgz#aa7e73f8a6ce20ee3c54b2446d321bbb6b1a9029" - integrity sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ== +socket.io@^4.7.2: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" + integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== dependencies: accepts "~1.3.4" base64id "~2.0.0" + cors "~2.8.5" debug "~4.3.2" - engine.io "~6.2.0" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.0.4" + engine.io "~6.5.2" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - abab "^2.0.6" iconv-lite "^0.6.3" source-map-js "^1.0.2" @@ -1772,21 +1792,21 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.16.8: - version "5.18.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== +terser@^5.26.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -1820,10 +1840,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +typescript@5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== ua-parser-js@^0.7.30: version "0.7.31" @@ -1840,6 +1860,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +update-browserslist-db@^1.0.13: + version "1.0.15" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz#60ed9f8cba4a728b7ecf7356f641a31e3a691d97" + integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -1862,23 +1890,23 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" - integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== +webpack-cli@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.0" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.3" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" @@ -1909,34 +1937,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.82.0: - version "5.82.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" - integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== +webpack@5.91.0: + version "5.91.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" + integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" + enhanced-resolve "^5.16.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.2" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" which@^1.2.1: @@ -1977,10 +2005,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== y18n@^5.0.5: version "5.0.8" diff --git a/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/QueryResult.kt b/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/QueryResult.kt index f4daac02de8..0a38f222fb9 100644 --- a/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/QueryResult.kt +++ b/runtime/src/commonMain/kotlin/app/cash/sqldelight/db/QueryResult.kt @@ -32,7 +32,7 @@ sealed interface QueryResult { } @JvmInline - value class AsyncValue(private inline val getter: suspend () -> T) : QueryResult { + value class AsyncValue(private val getter: suspend () -> T) : QueryResult { override suspend fun await() = getter() } diff --git a/sample-web/kotlin-js-store/yarn.lock b/sample-web/kotlin-js-store/yarn.lock index 51bb9a8511e..57fb3b3c7db 100644 --- a/sample-web/kotlin-js-store/yarn.lock +++ b/sample-web/kotlin-js-store/yarn.lock @@ -15,6 +15,18 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/gen-mapping@^0.3.0": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -47,7 +59,15 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.20": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.9": version "0.3.19" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== @@ -55,6 +75,26 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/json-pack@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" + integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.1.2" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" + integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -81,6 +121,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" @@ -94,17 +139,17 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": - version "3.5.11" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.11.tgz#fbaa46a1529ea5c5e46cde36e4be6a880db55b84" - integrity sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg== +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20" - integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw== +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -144,11 +189,16 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@*": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.2.tgz#ff02bc3dc8317cd668dfec247b750ba1f1d62453" integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.37" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" @@ -159,7 +209,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13": +"@types/express@*": version "4.17.18" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== @@ -169,6 +219,16 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/http-errors@*": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" @@ -196,6 +256,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + "@types/node@*", "@types/node@>=10.0.0": version "20.7.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" @@ -211,10 +278,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/send@*": version "0.17.2" @@ -224,14 +291,14 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.1": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.2.tgz#cb26e775678a8526b73a5d980a147518740aaecd" - integrity sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig== +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.15.3" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.3.tgz#2cfacfd1fd4520bbc3e292cca432d5e8e2e3ee61" integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== @@ -240,24 +307,33 @@ "@types/mime" "*" "@types/node" "*" -"@types/sockjs@^0.3.33": - version "0.3.34" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.34.tgz#43e10e549b36d2ba2589278f00f81b5d7ccda167" - integrity sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g== +"@types/serve-static@^1.15.5": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: + "@types/http-errors" "*" "@types/node" "*" + "@types/send" "*" -"@types/ws@^8.5.1": - version "8.5.6" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.6.tgz#e9ad51f0ab79b9110c50916c9fcbddc36d373065" - integrity sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg== +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@types/ws@^8.5.10": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" @@ -272,10 +348,10 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" @@ -291,15 +367,15 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/ieee754@1.11.6": version "1.11.6" @@ -320,72 +396,72 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@webassemblyjs/helper-api-error" "1.11.6" "@webassemblyjs/helper-wasm-bytecode" "1.11.6" "@webassemblyjs/ieee754" "1.11.6" "@webassemblyjs/leb128" "1.11.6" "@webassemblyjs/utf8" "1.11.6" -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== dependencies: - "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.1.0": +"@webpack-cli/configtest@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^2.0.1": +"@webpack-cli/info@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^2.0.3": +"@webpack-cli/serve@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== @@ -400,11 +476,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -413,7 +484,7 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: +acorn-import-assertions@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== @@ -477,6 +548,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -484,6 +560,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -502,11 +583,6 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -568,13 +644,11 @@ body-parser@^1.19.0: type-is "~1.6.18" unpipe "1.0.0" -bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== +bonjour-service@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -605,14 +679,14 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== +browserslist@^4.21.10: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" buffer-from@^1.0.0: @@ -620,6 +694,13 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -643,10 +724,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001539: - version "1.0.30001539" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz#325a387ab1ed236df2c12dc6cd43a4fff9903a44" - integrity sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA== +caniuse-lite@^1.0.30001587: + version "1.0.30001617" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== chalk@^4.1.0: version "4.1.2" @@ -656,7 +737,7 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3, chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -671,6 +752,21 @@ chokidar@3.5.3, chokidar@^3.5.1, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -813,7 +909,7 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -856,6 +952,19 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -863,10 +972,10 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== depd@2.0.0: version "2.0.0" @@ -905,11 +1014,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-packet@^5.2.2: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" @@ -927,21 +1031,31 @@ dom-serialize@^2.2.1: extend "^3.0.0" void-elements "^2.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.531" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.531.tgz#22966d894c4680726c17cf2908ee82ff5d26ac25" - integrity sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ== +electron-to-chromium@^1.4.668: + version "1.4.762" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.762.tgz#c29c9d47cf7cc128a9c364baa28adbadde95a47c" + integrity sha512-rrFvGweLxPwwSwJOjIopy3Vr+J3cIPtZzuc74bmlvmBIgQO3VYJDvVrlj94iKZ3ukXUH64Ex31hSfRTLqvjYJQ== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -968,10 +1082,10 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.13.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.16.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -1207,6 +1321,14 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + format-util@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" @@ -1231,11 +1353,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1290,17 +1407,27 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" + +glob@^10.3.7: + version "10.3.14" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.14.tgz#36501f871d373fe197fc5794588d0aa71e69ff68" + integrity sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.11.0" glob@^7.1.3, glob@^7.1.7: version "7.2.3" @@ -1326,7 +1453,7 @@ globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1373,10 +1500,10 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== +html-entities@^2.4.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== http-deceiver@^1.2.7: version "1.2.7" @@ -1434,6 +1561,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -1489,10 +1621,10 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-binary-path@~2.1.0: version "2.1.0" @@ -1508,10 +1640,10 @@ is-core-module@^2.13.0: dependencies: has "^1.0.3" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-extglob@^2.1.1: version "2.1.1" @@ -1530,6 +1662,18 @@ is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-network-error@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997" + integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1562,12 +1706,12 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: - is-docker "^2.0.0" + is-inside-container "^1.0.0" isarray@~1.0.0: version "1.0.0" @@ -1589,6 +1733,15 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -1648,19 +1801,19 @@ karma-sourcemap-loader@0.4.0: dependencies: graceful-fs "^4.2.10" -karma-webpack@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== +karma-webpack@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" + integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== dependencies: glob "^7.1.3" - minimatch "^3.0.4" + minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" - integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1681,7 +1834,7 @@ karma@6.4.2: qjobs "^1.2.0" range-parser "^1.2.1" rimraf "^3.0.2" - socket.io "^4.4.1" + socket.io "^4.7.2" source-map "^0.6.1" tmp "^0.2.1" ua-parser-js "^0.7.30" @@ -1692,13 +1845,13 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== +launch-editor@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== dependencies: picocolors "^1.0.0" - shell-quote "^1.7.3" + shell-quote "^1.8.1" loader-runner@^4.2.0: version "4.3.0" @@ -1743,17 +1896,25 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.5" +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== +memfs@^4.6.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" + integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ== dependencies: - fs-monkey "^1.0.4" + "@jsonjoy.com/json-pack" "^1.0.3" + "@jsonjoy.com/util" "^1.1.2" + sonic-forest "^1.0.0" + tslib "^2.0.0" merge-descriptors@1.0.1: version "1.0.1" @@ -1829,11 +1990,30 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.1.tgz#f7f85aff59aa22f110b20e27692465cf3bf89481" + integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== + mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -1841,10 +2021,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -1853,13 +2033,12 @@ mocha@10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -1891,11 +2070,6 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -1911,10 +2085,10 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1943,7 +2117,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -1976,14 +2150,15 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== +open@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" p-limit@^2.2.0: version "2.3.0" @@ -2013,12 +2188,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== +p-retry@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" + integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== dependencies: - "@types/retry" "0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" retry "^0.13.1" p-try@^2.0.0: @@ -2051,6 +2227,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.0.tgz#332d64e9726bf667fb348e5a1c71005c09ad741a" + integrity sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -2239,6 +2423,18 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2261,7 +2457,7 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -schema-utils@^3.1.1, schema-utils@^3.1.2: +schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -2270,7 +2466,7 @@ schema-utils@^3.1.1, schema-utils@^3.1.2: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: +schema-utils@^4.0.0, schema-utils@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== @@ -2285,11 +2481,12 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" send@0.18.0: @@ -2377,7 +2574,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.7.3: +shell-quote@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== @@ -2396,6 +2593,11 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -2416,10 +2618,10 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.4.1: - version "4.7.2" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.2.tgz#22557d76c3f3ca48f82e73d68b7add36a22df002" - integrity sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw== +socket.io@^4.7.2: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" + integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== dependencies: accepts "~1.3.4" base64id "~2.0.0" @@ -2438,17 +2640,23 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +sonic-forest@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb" + integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ== + dependencies: + tree-dump "^1.0.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - abab "^2.0.6" iconv-lite "^0.6.3" source-map-js "^1.0.2" @@ -2512,7 +2720,7 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" -string-width@^4.1.0, string-width@^4.2.0: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2521,6 +2729,15 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2535,13 +2752,20 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -2576,27 +2800,32 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.16.8: - version "5.20.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.20.0.tgz#ea42aea62578703e33def47d5c5b93c49772423e" - integrity sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ== +terser@^5.26.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -2621,6 +2850,16 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tree-dump@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" + integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== + +tslib@^2.0.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2629,10 +2868,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +typescript@5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== ua-parser-js@^0.7.30: version "0.7.36" @@ -2689,10 +2928,10 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -2704,15 +2943,15 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webpack-cli@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" - integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== +webpack-cli@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.0" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.3" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" @@ -2723,52 +2962,53 @@ webpack-cli@5.1.0: rechoir "^0.8.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== +webpack-dev-middleware@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" + integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" + memfs "^4.6.0" mime-types "^2.1.31" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@4.15.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" - integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" +webpack-dev-server@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" + integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" - html-entities "^2.3.2" + html-entities "^2.4.0" http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + rimraf "^5.0.5" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" + webpack-dev-middleware "^7.1.0" + ws "^8.16.0" webpack-merge@^4.1.5: version "4.2.2" @@ -2790,34 +3030,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.82.0: - version "5.82.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" - integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== +webpack@5.91.0: + version "5.91.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" + integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" + enhanced-resolve "^5.16.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.2" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: @@ -2858,7 +3098,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -2867,15 +3107,24 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@^8.16.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== ws@~8.11.0: version "8.11.0" diff --git a/sample/build.gradle b/sample/build.gradle index 0f4ed301f13..3621bb79bf1 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -5,8 +5,3 @@ plugins { alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.native.cocoapods) apply false } - -// Workaround yarn concurrency issue - https://youtrack.jetbrains.com/issue/KT-43320 -tasks.withType(org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask).configureEach { - args.addAll(["--mutex", "file:${file("../build/.yarn-mutex")}".toString()]) -} diff --git a/sample/common/build.gradle b/sample/common/build.gradle index cbdbc385623..153b5b7432d 100644 --- a/sample/common/build.gradle +++ b/sample/common/build.gradle @@ -18,8 +18,9 @@ sqldelight { version = 1.0 kotlin { + applyDefaultHierarchyTemplate() jvmToolchain(8) - + // Configure common. sourceSets.commonMain.dependencies { implementation 'app.cash.sqldelight:primitive-adapters' @@ -37,12 +38,8 @@ kotlin { } // Configure iOS. - def sdkName = System.getenv("SDK_NAME") - if (sdkName != null && sdkName.startsWith("iphoneos")) { - iosArm64("ios") - } else { - iosX64("ios") - } + iosArm64() + iosX64() sourceSets.iosMain.dependencies { implementation "app.cash.sqldelight:native-driver" } @@ -52,11 +49,3 @@ kotlin { homepage = "https://github.com/cashapp/sqldelight/tree/master/sample/common" } } - -// https://youtrack.jetbrains.com/issue/KT-55751 -configurations { - def myAttribute = Attribute.of("dummy.attribute", String) - - podDebugFrameworkIos { attributes.attribute(myAttribute, "dummy-value") } - podReleaseFrameworkIos { attributes.attribute(myAttribute, "dummy-value") } -} diff --git a/sample/common/common.podspec b/sample/common/common.podspec index ab5a9a9d4d8..fd533533c45 100644 --- a/sample/common/common.podspec +++ b/sample/common/common.podspec @@ -11,6 +11,21 @@ Pod::Spec.new do |spec| + if !Dir.exist?('build/cocoapods/framework/common.framework') || Dir.empty?('build/cocoapods/framework/common.framework') + raise " + + Kotlin framework 'common' doesn't exist yet, so a proper Xcode project can't be generated. + 'pod install' should be executed after running ':generateDummyFramework' Gradle task: + + ./gradlew :common:generateDummyFramework + + Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" + end + + spec.xcconfig = { + 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', + } + spec.pod_target_xcconfig = { 'KOTLIN_PROJECT_PATH' => ':common', 'PRODUCT_MODULE_NAME' => 'common', diff --git a/sample/common/karma.config.d/wasm.js b/sample/common/karma.config.d/wasm.js deleted file mode 100644 index 81dc7db32b6..00000000000 --- a/sample/common/karma.config.d/wasm.js +++ /dev/null @@ -1,21 +0,0 @@ -const path = require("path"); -const dist = path.resolve("../../node_modules/sql.js/dist/") -const wasm = path.join(dist, "sql-wasm.wasm") -const worker = path.join(dist, "worker.sql-wasm.js") - -config.files.push({ - pattern: wasm, - served: true, - watched: false, - included: false, - nocache: false, -}, { - pattern: worker, - served: true, - watched: false, - included: false, - nocache: false, -}); - -config.proxies["/sql-wasm.wasm"] = `/absolute${wasm}` -config.proxies["/worker.sql-wasm.js"] = `/absolute${worker}` diff --git a/sample/common/src/commonMain/kotlin/com/example/sqldelight/hockey/data/Date.kt b/sample/common/src/commonMain/kotlin/com/example/sqldelight/hockey/data/Date.kt index 082ec4a2993..fd3b6aebb49 100644 --- a/sample/common/src/commonMain/kotlin/com/example/sqldelight/hockey/data/Date.kt +++ b/sample/common/src/commonMain/kotlin/com/example/sqldelight/hockey/data/Date.kt @@ -4,4 +4,7 @@ import app.cash.sqldelight.ColumnAdapter expect class Date(year: Int, month: Int, day: Int) -expect class DateAdapter() : ColumnAdapter +expect class DateAdapter() : ColumnAdapter { + override fun encode(value: Date): Long + override fun decode(databaseValue: Long): Date +} diff --git a/sample/common/src/commonTest/kotlin/com/example/sqldelight/hockey/BaseTest.kt b/sample/common/src/commonTest/kotlin/com/example/sqldelight/hockey/BaseTest.kt index 4e088f1ab84..2061a255597 100644 --- a/sample/common/src/commonTest/kotlin/com/example/sqldelight/hockey/BaseTest.kt +++ b/sample/common/src/commonTest/kotlin/com/example/sqldelight/hockey/BaseTest.kt @@ -1,7 +1,6 @@ package com.example.sqldelight.hockey import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest /** @@ -19,7 +18,6 @@ expect suspend fun closeDriver() */ expect fun getDb(): HockeyDb -@OptIn(ExperimentalCoroutinesApi::class) fun testing(block: suspend CoroutineScope.(HockeyDb) -> Unit) = runTest { createDriver() block(getDb()) diff --git a/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.kt b/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.ios.kt similarity index 90% rename from sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.kt rename to sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.ios.kt index 89147a05c1b..98a885e3edb 100644 --- a/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.kt +++ b/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/data/Date.ios.kt @@ -22,9 +22,9 @@ internal fun partsToDate(year: Int, month: Int, day: Int): NSDate { } actual class DateAdapter actual constructor() : ColumnAdapter { - override fun decode(databaseValue: Long): Date = + actual override fun decode(databaseValue: Long): Date = Date(NSDate.dateWithTimeIntervalSince1970(databaseValue.toDouble() / 1000)) - override fun encode(value: Date): Long = + actual override fun encode(value: Date): Long = floor(value.nsDate.timeIntervalSince1970 * 1000L).toLong() } diff --git a/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/platform/DateFormatHelper.kt b/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/platform/DateFormatHelper.kt index de5e4809fe3..04a9dfbe1b4 100644 --- a/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/platform/DateFormatHelper.kt +++ b/sample/common/src/iosMain/kotlin/com/example/sqldelight/hockey/platform/DateFormatHelper.kt @@ -4,10 +4,9 @@ import com.example.sqldelight.hockey.data.Date import platform.Foundation.NSDateFormatter actual class DateFormatHelper actual constructor(format: String) { - private val formatter: NSDateFormatter + private val formatter: NSDateFormatter = NSDateFormatter() init { - formatter = NSDateFormatter() formatter.dateFormat = format } diff --git a/sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.kt b/sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.jvm.kt similarity index 66% rename from sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.kt rename to sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.jvm.kt index 5d59944e8f3..839ecb0a369 100644 --- a/sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.kt +++ b/sample/common/src/jvmMain/kotlin/com/example/sqldelight/hockey/data/Date.jvm.kt @@ -6,8 +6,8 @@ import java.util.GregorianCalendar actual typealias Date = GregorianCalendar actual class DateAdapter actual constructor() : ColumnAdapter { - override fun encode(value: Date) = value.timeInMillis - override fun decode(databaseValue: Long) = Date.getInstance().apply { + actual override fun encode(value: Date) = value.timeInMillis + actual override fun decode(databaseValue: Long) = Date.getInstance().apply { timeInMillis = databaseValue } as Date } diff --git a/sample/common/webpack.config.d/fs.js b/sample/common/webpack.config.d/fs.js deleted file mode 100644 index 4ce95011bc1..00000000000 --- a/sample/common/webpack.config.d/fs.js +++ /dev/null @@ -1,9 +0,0 @@ -// Remove fs in the webpack config in order to build for front end -// https://github.com/webpack-contrib/css-loader/issues/447 -config.resolve = { - fallback: { - fs: false, - path: false, - crypto: false, - } -}; diff --git a/sample/gradle.properties b/sample/gradle.properties index e5d4c1f36d9..4ea65139f02 100644 --- a/sample/gradle.properties +++ b/sample/gradle.properties @@ -1,3 +1,2 @@ android.useAndroidX=true -kotlin.js.compiler=ir org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 diff --git a/sample/kotlin-js-store/yarn.lock b/sample/kotlin-js-store/yarn.lock deleted file mode 100644 index fdfc545b7a9..00000000000 --- a/sample/kotlin-js-store/yarn.lock +++ /dev/null @@ -1,2976 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" - integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - -"@types/component-emitter@^1.2.10": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.11.tgz#50d47d42b347253817a39709fef03ce66a108506" - integrity sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ== - -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/cors@^2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - -"@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.31": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.15" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" - integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.31" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== - dependencies: - "@types/node" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.8": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - -"@types/node@*", "@types/node@>=10.0.0": - version "17.0.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.18.tgz#3b4fed5cfb58010e3a2be4b6e74615e4847f1074" - integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA== - -"@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== - dependencies: - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" - integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== - -"@webpack-cli/info@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" - integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== - -"@webpack-cli/serve@^2.0.3": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn@^8.7.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -acorn@^8.8.2: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" - integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.19.0: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - -bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserslist@^4.14.5: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== - dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001286: - version "1.0.30001312" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" - integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@3.5.3, chokidar@^3.5.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -colorette@^2.0.14: - version "2.0.16" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" - integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== - -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -copy-webpack-plugin@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b" - integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^11.0.3" - normalize-path "^3.0.0" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -date-format@^4.0.10: - version "4.0.11" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.11.tgz#ae0d1e069d7f0687938fd06f98c12f3a6276e526" - integrity sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw== - -dateformat@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4.3.4, debug@^4.1.0, debug@^4.3.4, debug@~4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@~4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dom-serialize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.4.17: - version "1.4.71" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" - integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== - -engine.io@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.0.tgz#003bec48f6815926f2b1b17873e576acd54f41d0" - integrity sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.0.3" - ws "~8.2.3" - -enhanced-resolve@^5.13.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.0.0: - version "1.14.8" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" - integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== - -format-util@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" - integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.2.0, glob@^7.1.3, glob@^7.1.7: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -graceful-fs@^4.2.10: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isbinaryfile@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" - integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -karma-chrome-launcher@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" - integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== - dependencies: - which "^1.2.1" - -karma-mocha@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" - integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== - dependencies: - minimist "^1.2.3" - -karma-sourcemap-loader@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz#b01d73f8f688f533bcc8f5d273d43458e13b5488" - integrity sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA== - dependencies: - graceful-fs "^4.2.10" - -karma-webpack@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - webpack-merge "^4.1.5" - -karma@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" - integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== - dependencies: - "@colors/colors" "1.5.0" - body-parser "^1.19.0" - braces "^3.0.2" - chokidar "^3.5.1" - connect "^3.7.0" - di "^0.0.1" - dom-serialize "^2.2.1" - glob "^7.1.7" - graceful-fs "^4.2.6" - http-proxy "^1.18.1" - isbinaryfile "^4.0.8" - lodash "^4.17.21" - log4js "^6.4.1" - mime "^2.5.2" - minimatch "^3.0.4" - mkdirp "^0.5.5" - qjobs "^1.2.0" - range-parser "^1.2.1" - rimraf "^3.0.2" - socket.io "^4.4.1" - source-map "^0.6.1" - tmp "^0.2.1" - ua-parser-js "^0.7.30" - yargs "^16.1.1" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.7.3" - -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log4js@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.5.2.tgz#9ae371e5b3cb3a3a209c24686e5547f8670834e5" - integrity sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A== - dependencies: - date-format "^4.0.10" - debug "^4.3.4" - flatted "^3.2.5" - rfdc "^1.3.0" - streamroller "^3.1.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memfs@^3.4.3: - version "3.4.12" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.12.tgz#d00f8ad8dab132dc277c659dc85bfd14b07d03bd" - integrity sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw== - dependencies: - fs-monkey "^1.0.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -mime-types@^2.1.31, mime-types@~2.1.17: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-assign@^4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.9: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qjobs@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@6.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.20.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@6.0.0, serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== - -socket.io-parser@~4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== - dependencies: - "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" - debug "~4.3.1" - -socket.io@^4.4.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.1.tgz#aa7e73f8a6ce20ee3c54b2446d321bbb6b1a9029" - integrity sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - debug "~4.3.2" - engine.io "~6.2.0" - socket.io-adapter "~2.4.0" - socket.io-parser "~4.0.4" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== - dependencies: - abab "^2.0.6" - iconv-lite "^0.6.3" - source-map-js "^1.0.2" - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sql.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/sql.js/-/sql.js-1.8.0.tgz#cb45d957e17a2239662fe2f614c9b678990867a6" - integrity sha512-3HD8pSkZL+5YvYUI8nlvNILs61ALqq34xgmF+BHpqxe68yZIJ1H+sIVIODvni25+CcxHUxDyrTJUL0lE/m7afw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -streamroller@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.1.tgz#679aae10a4703acdf2740755307df0a05ad752e6" - integrity sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ== - dependencies: - date-format "^4.0.10" - debug "^4.3.4" - fs-extra "^10.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.16.8: - version "5.19.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" - integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== - -ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -webpack-cli@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" - integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.0" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.3" - colorette "^2.0.14" - commander "^10.0.1" - cross-spawn "^7.0.3" - envinfo "^7.7.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@4.15.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" - integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-merge@^4.1.5: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@5.82.0: - version "5.82.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" - integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^8.13.0: - version "8.14.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" - integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== - -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0, yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt index 26d97605c8e..5b92e063011 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt @@ -31,7 +31,7 @@ import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer -internal const val MIN_GRADLE_VERSION = "7.0" +internal const val MIN_GRADLE_VERSION = "8.0" abstract class SqlDelightPlugin : Plugin { private val android = AtomicBoolean(false) diff --git a/sqldelight-gradle-plugin/src/test/build-logic-tests/build.gradle.kts b/sqldelight-gradle-plugin/src/test/build-logic-tests/build.gradle.kts index bc0172f0f07..64c72e9e3ef 100644 --- a/sqldelight-gradle-plugin/src/test/build-logic-tests/build.gradle.kts +++ b/sqldelight-gradle-plugin/src/test/build-logic-tests/build.gradle.kts @@ -1,3 +1,7 @@ plugins { `kotlin-dsl` } + +dependencies { + implementation("org.gradle.toolchains:foojay-resolver:0.8.0") +} diff --git a/sqldelight-gradle-plugin/src/test/build-logic-tests/settings.gradle.kts b/sqldelight-gradle-plugin/src/test/build-logic-tests/settings.gradle.kts index 008aadfd0ce..ccbf6e9c0c5 100644 --- a/sqldelight-gradle-plugin/src/test/build-logic-tests/settings.gradle.kts +++ b/sqldelight-gradle-plugin/src/test/build-logic-tests/settings.gradle.kts @@ -1,6 +1,7 @@ dependencyResolutionManagement { repositories { mavenCentral() + gradlePluginPortal() } } diff --git a/sqldelight-gradle-plugin/src/test/build-logic-tests/src/main/kotlin/sqldelightTests.settings.gradle.kts b/sqldelight-gradle-plugin/src/test/build-logic-tests/src/main/kotlin/sqldelightTests.settings.gradle.kts index 88439bffcf9..63847be604d 100644 --- a/sqldelight-gradle-plugin/src/test/build-logic-tests/src/main/kotlin/sqldelightTests.settings.gradle.kts +++ b/sqldelight-gradle-plugin/src/test/build-logic-tests/src/main/kotlin/sqldelightTests.settings.gradle.kts @@ -3,9 +3,14 @@ pluginManagement { maven(url = "file://${settingsDir.absolutePath}/../../../../build/localMaven") mavenCentral() google() + gradlePluginPortal() } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") +} + dependencyResolutionManagement { versionCatalogs.register("libs") { from(files("../../../../gradle/libs.versions.toml")) diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt index 39a7583c428..32695d760ba 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/GradleVersionsTest.kt @@ -15,6 +15,7 @@ */ package app.cash.sqldelight.integrations +import app.cash.sqldelight.gradle.MIN_GRADLE_VERSION import app.cash.sqldelight.withCommonConfiguration import com.google.common.truth.Truth.assertThat import java.io.File @@ -35,7 +36,7 @@ class GradleVersionsTest(private val gradleVersion: String) { // MIN_GRADLE_VERSION, // We use version catalogs in tests too but this feature is only stable since 7.4. // Test MIN_GRADLE_VERSION too if MIN_GRADLE_VERSION is higher than 7.4. - "7.4.2", + MIN_GRADLE_VERSION, GradleVersion.current().version, ) } From a9f042b951bb3f4144166f38e8c20e77bc02216f Mon Sep 17 00:00:00 2001 From: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Date: Mon, 9 Sep 2024 23:37:05 +0200 Subject: [PATCH 102/184] Migrate to new Gradle IntelliJ plugin (#5446) * Migrate to new Gradle IntelliJ plugin * Fix syntax * Use renamed verify task name * Enable K2 mode * Unset untilBuild parameter --- .github/workflows/PR.yml | 7 +- .gitignore | 3 +- gradle.properties | 3 + gradle/libs.versions.toml | 2 +- sqldelight-idea-plugin/build.gradle | 96 +++++++++++-------- sqldelight-idea-plugin/gradle.properties | 1 - .../src/main/resources/META-INF/plugin.xml | 5 +- 7 files changed, 69 insertions(+), 48 deletions(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index 228649e7bba..f5dba838c18 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -119,15 +119,16 @@ jobs: matrix: # https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html idea: - - 'IC-2023.2.5' # IC / Iguana - - 'IC-2024.1' # IC + - '2023.2.5' # IC / Iguana + - '2024.1' # IC + - '2024.2' # IC steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: 'zulu' java-version-file: .github/workflows/.ci-java-version - - run: ./gradlew -DideaVersion=${{matrix.idea}} :sqldelight-idea-plugin:runPluginVerifier + - run: ./gradlew -DideaVersion=${{matrix.idea}} :sqldelight-idea-plugin:verifyPlugin verify_intellij_check: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 417a272571c..ea5759aa3d9 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ docs/upgrading.md docs/contributing.md # Jenv local setting -.java-version \ No newline at end of file +.java-version +.intellijPlatform diff --git a/gradle.properties b/gradle.properties index e2bd8936e3a..61970df5533 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,3 +27,6 @@ kotlin.native.ignoreDisabledTargets=true # caches break the linkage of the sqlite amalgamation kotlin.native.cacheKind.linuxX64=none + +org.jetbrains.intellij.platform.useCacheRedirector=false +org.jetbrains.intellij.platform.selfUpdateCheck=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d179408f953..39d05626bc3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -102,7 +102,7 @@ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -intellij = { id = "org.jetbrains.intellij", version = "1.17.4" } +intellij = { id = "org.jetbrains.intellij.platform", version = "2.0.1" } grammarKitComposer = { id = "com.alecstrong.grammar.kit.composer", version = "0.1.12" } publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } diff --git a/sqldelight-idea-plugin/build.gradle b/sqldelight-idea-plugin/build.gradle index 830cc402de8..c7e8dbfe13d 100644 --- a/sqldelight-idea-plugin/build.gradle +++ b/sqldelight-idea-plugin/build.gradle @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.RunPluginVerifierTask.FailureLevel +import org.jetbrains.intellij.platform.gradle.tasks.VerifyPluginTask.FailureLevel import app.cash.sqldelight.toolchain.BugsnagKey plugins { @@ -9,50 +9,63 @@ plugins { id("app.cash.sqldelight.toolchain.compiler") } -intellij { - updateSinceUntilBuild = false - - // Comment version and uncomment localPath to test a local IDE build. - version = "IC-${libs.versions.idea.get()}" -// localPath = "/Applications/Android Studio.app" - - pluginName = 'SQLDelight' - plugins = [ - "org.jetbrains.kotlin", - "com.intellij.gradle", - "com.intellij.java", - "org.jetbrains.android" - ] - if (!project.version.endsWith("SNAPSHOT")) { - tasks.named('patchPluginXml') { - changeNotes = (provider { changelog.get(project.version).toHTML() }) +intellijPlatform { + buildSearchableOptions = false + + pluginConfiguration { + name = 'SQLDelight' + dependencies { + intellijPlatform { + intellijIdeaCommunity(libs.versions.idea, false) + bundledPlugin("org.jetbrains.kotlin") + bundledPlugin("com.intellij.gradle") + bundledPlugin("com.intellij.java") + bundledPlugin("org.jetbrains.android") + + pluginVerifier() + zipSigner() + instrumentationTools() + + testFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Platform.INSTANCE, libs.versions.idea.get()) + testFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Plugin.Java.INSTANCE, libs.versions.idea.get()) + } } - } else { - tasks.named('patchPluginXml') { - version = "$VERSION_NAME-${System.currentTimeMillis()}" + if (!project.version.endsWith("SNAPSHOT")) { + tasks.named('patchPluginXml') { + changeNotes = provider { changelog.get(project.version).toHTML() } + } + } else { + tasks.named('patchPluginXml') { + version = "$VERSION_NAME-${System.currentTimeMillis()}" + } + } + ideaVersion { + sinceBuild.set("231.9392.1") + untilBuild.set(null) } } -} + pluginVerification { + // See: the verify_intellij job in .github/workflows/PR.yml + def version = providers.systemProperty("ideaVersion").getOrElse(null) + if (version != null) { + ides { + ide(org.jetbrains.intellij.platform.gradle.IntelliJPlatformType.IntellijIdeaCommunity, version) + } + } -tasks.named('runIde') { - maxHeapSize = "4g" -} + def customFailureLevel = FailureLevel.ALL + customFailureLevel.remove(FailureLevel.DEPRECATED_API_USAGES) + customFailureLevel.remove(FailureLevel.EXPERIMENTAL_API_USAGES) + customFailureLevel.remove(FailureLevel.INTERNAL_API_USAGES) + customFailureLevel.remove(FailureLevel.NOT_DYNAMIC) + customFailureLevel.remove(FailureLevel.SCHEDULED_FOR_REMOVAL_API_USAGES) -tasks.named('runPluginVerifier') { - // See: the verify_intellij job in .github/workflows/PR.yml - def version = providers.systemProperty("ideaVersion").getOrElse(null) - if (version != null) { - ideVersions = [version] + failureLevel = customFailureLevel } +} - def customFailureLevel = FailureLevel.ALL - customFailureLevel.remove(FailureLevel.DEPRECATED_API_USAGES) - customFailureLevel.remove(FailureLevel.EXPERIMENTAL_API_USAGES) - customFailureLevel.remove(FailureLevel.INTERNAL_API_USAGES) - customFailureLevel.remove(FailureLevel.NOT_DYNAMIC) - customFailureLevel.remove(FailureLevel.SCHEDULED_FOR_REMOVAL_API_USAGES) - - failureLevel = customFailureLevel +tasks.named('runIde') { + maxHeapSize = "4g" } changelog { @@ -73,7 +86,9 @@ tasks.named('publishPlugin') { } repositories { - maven { url = uri("https://repo.gradle.org/gradle/libs-releases") } + intellijPlatform { + defaultRepositories() + } } dependencies { @@ -94,11 +109,10 @@ dependencies { configurations.named("runtimeClasspath") { exclude group: "org.slf4j" exclude group: "org.jetbrains.kotlin" + exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines" } def bugsnagKey = tasks.register('bugsnagKey', BugsnagKey) sourceSets.main { kotlin.srcDir(bugsnagKey) } - -tasks.named('buildSearchableOptions') { enabled = false } diff --git a/sqldelight-idea-plugin/gradle.properties b/sqldelight-idea-plugin/gradle.properties index b3a104dfca5..4910976cc40 100644 --- a/sqldelight-idea-plugin/gradle.properties +++ b/sqldelight-idea-plugin/gradle.properties @@ -3,4 +3,3 @@ POM_NAME=SQLDelight IDEA Plugin POM_DESCRIPTION=IDEA plugin for generating java interfaces for sqlite files POM_PACKAGING=jar kotlin.stdlib.default.dependency=false -org.jetbrains.intellij.buildFeature.selfUpdateCheck=false diff --git a/sqldelight-idea-plugin/src/main/resources/META-INF/plugin.xml b/sqldelight-idea-plugin/src/main/resources/META-INF/plugin.xml index a7b8cc4c7e7..4e291284c63 100644 --- a/sqldelight-idea-plugin/src/main/resources/META-INF/plugin.xml +++ b/sqldelight-idea-plugin/src/main/resources/META-INF/plugin.xml @@ -3,7 +3,6 @@ SQLDelight Custom Languages Square, Inc. - com.intellij.modules.lang com.intellij.java org.jetbrains.kotlin @@ -229,6 +228,10 @@ + + + + From 59b19c56a8d70902e034d24d900040b4c4904d5f Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 12 Sep 2024 00:58:29 -0400 Subject: [PATCH 103/184] Revert "Update dependency gradle to v8.10 (#5404)" (#5457) This reverts commit 7d304159701a69f8db6a3223456e603b4251ecc6. --- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 43504 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- sample/gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 43504 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..2c3521197d7c4586c843d1d3e9090525f1898cde 100644 GIT binary patch delta 3889 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 delta 3990 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 delta 3990 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 wpAeHLsTu Date: Thu, 12 Sep 2024 18:32:05 +0200 Subject: [PATCH 104/184] Fix until build attribute (#5454) --- sqldelight-idea-plugin/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqldelight-idea-plugin/build.gradle b/sqldelight-idea-plugin/build.gradle index c7e8dbfe13d..644c632d9bd 100644 --- a/sqldelight-idea-plugin/build.gradle +++ b/sqldelight-idea-plugin/build.gradle @@ -41,7 +41,7 @@ intellijPlatform { } ideaVersion { sinceBuild.set("231.9392.1") - untilBuild.set(null) + untilBuild.set(provider { null }) } } pluginVerification { From f8459160839ffcbe5aa46bd1e486e610190c5375 Mon Sep 17 00:00:00 2001 From: Christopher Jenkins Date: Thu, 12 Sep 2024 10:45:43 -0600 Subject: [PATCH 105/184] Use ATD Image Instead (#5456) * update to use atd image instead * disable linux tests on instrumentation tests too, no point running twice * fix avd disk size * fix name of cache-cleanup (https://github.com/gradle/actions/releases/tag/v4.0.0) * Revert "Update dependency gradle to v8.10 (#5404)" This reverts commit 7d304159701a69f8db6a3223456e603b4251ecc6. * just disable caching for the matrix until clean-cache as we would always cleanup anyway --------- Co-authored-by: Jake Wharton Co-authored-by: Alec Kazakova <1675456+AlecKazakova@users.noreply.github.com> --- .github/workflows/PR.yml | 15 +++++++++------ .github/workflows/Publish-Website.yml | 2 +- .github/workflows/Release.yml | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index f5dba838c18..7d6969e1ea2 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -61,7 +61,7 @@ jobs: - name: Setup gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-disabled: true # Linux tests - name: Run gradle tests @@ -82,7 +82,7 @@ jobs: run: ./gradlew mingwX64Test sqldelight-idea-plugin:check --stacktrace - name: Run linux tests - if: matrix.os == 'ubuntu-latest' + if: matrix.os == 'ubuntu-latest' && matrix.job == 'test' # not parallel otherwise NativeTransacterTest fails. run: ./gradlew linuxX64Test --no-parallel -x dokkaHtml @@ -97,8 +97,11 @@ jobs: if: matrix.os == 'ubuntu-latest' && matrix.job == 'instrumentation' uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 29 - arch: x86_64 + api-level: 30 + arch: x86 + target: aosp_atd + profile: Nexus One + disk-size: 2048M script: ./gradlew connectedCheck :sqldelight-gradle-plugin:instrumentationTest --stacktrace --parallel -x dokkaHtml # ios tests @@ -150,7 +153,7 @@ jobs: java-version-file: .github/workflows/.ci-java-version - uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - run: ./gradlew -p sample build --stacktrace --parallel buildWebSample: @@ -165,7 +168,7 @@ jobs: java-version-file: .github/workflows/.ci-java-version - uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - run: ./gradlew -p sample-web kotlinUpgradeYarnLock build --stacktrace --parallel env: diff --git a/.github/workflows/Publish-Website.yml b/.github/workflows/Publish-Website.yml index 3b1eb73094c..60e1795f89c 100644 --- a/.github/workflows/Publish-Website.yml +++ b/.github/workflows/Publish-Website.yml @@ -35,7 +35,7 @@ jobs: - name: Setup gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - name: Set up Python uses: actions/setup-python@v5 diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index 7825f028945..e5cad94fdf4 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -33,7 +33,7 @@ jobs: - name: Setup gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - name: Publish the macOS artifacts if: matrix.os == 'macOS-14' @@ -84,7 +84,7 @@ jobs: - name: Setup gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - name: Publish the plugin artifacts env: @@ -122,7 +122,7 @@ jobs: - name: Setup gradle uses: gradle/actions/setup-gradle@v4 with: - gradle-home-cache-cleanup: true + cache-cleanup: always - name: Setup .npmrc run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc From 6cd2427f42b4606a5a1ea9eea7ff505cb75e2b3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:18:49 +0000 Subject: [PATCH 106/184] Update plugin shadow to v8.3.1 (#5453) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 39d05626bc3..e10033075de 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -107,6 +107,6 @@ grammarKitComposer = { id = "com.alecstrong.grammar.kit.composer", version = "0. publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } -shadow = "com.gradleup.shadow:8.3.0" +shadow = "com.gradleup.shadow:8.3.1" ksp = { id = "com.google.devtools.ksp", version = "2.0.0-1.0.21" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.3" } From b977c89756409418568eaf0ebb751e16ca90e605 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:54:10 +0000 Subject: [PATCH 107/184] Update plugin ksp to v2.0.20-1.0.25 (#5269) * Update plugin ksp to v2.0.20-1.0.25 * Update libs.versions.toml * Update yarn lock file, remove outdated property and add changed podspec --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Philip Wedemann <22521688+hfhbd@users.noreply.github.com> Co-authored-by: Jake Wharton --- gradle.properties | 2 - gradle/libs.versions.toml | 4 +- kotlin-js-store/yarn.lock | 231 +++++++++++++++++++---------------- sample/common/common.podspec | 13 +- 4 files changed, 138 insertions(+), 112 deletions(-) diff --git a/gradle.properties b/gradle.properties index 61970df5533..28d831d33ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,8 +20,6 @@ SONATYPE_AUTOMATIC_RELEASE=true android.useAndroidX=true -kotlin.js.compiler=ir - kotlin.mpp.stability.nowarn=true kotlin.native.ignoreDisabledTargets=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e10033075de..145a85aa7a6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin = "2.0.0" +kotlin = "2.0.20" dokka = "1.9.20" kotlinCoroutines = "1.8.1" idea = "231.9392.1" # Hedgehog | 2023.1.1 Patch 2 (see https://plugins.jetbrains.com/docs/intellij/android-studio-releases-list.html) @@ -108,5 +108,5 @@ publish = { id = "com.vanniktech.maven.publish", version = "0.20.0" } spotless = { id = "com.diffplug.spotless", version = "6.25.0" } changelog = { id = "org.jetbrains.changelog", version = "2.0.0" } shadow = "com.gradleup.shadow:8.3.1" -ksp = { id = "com.google.devtools.ksp", version = "2.0.0-1.0.21" } +ksp = { id = "com.google.devtools.ksp", version = "2.0.20-1.0.25" } binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.16.3" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 52462732bbb..0b3e93d857f 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -299,10 +299,10 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn@^8.7.1: version "8.8.1" @@ -329,10 +329,10 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^5.0.1: version "5.0.1" @@ -417,7 +417,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -460,7 +460,7 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3, chokidar@^3.5.1: +chokidar@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -475,6 +475,21 @@ chokidar@3.5.3, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chrome-trace-event@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" @@ -596,13 +611,20 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.4, debug@~4.3.2, debug@~4.3.4: +debug@^4.3.4, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + debug@~4.3.1: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" @@ -625,10 +647,10 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dir-glob@^3.0.1: version "3.0.1" @@ -688,10 +710,10 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.16.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" - integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== +enhanced-resolve@^5.17.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -726,7 +748,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@4.0.0: +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -824,14 +846,6 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -840,6 +854,14 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -908,17 +930,6 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@^7.1.3, glob@^7.1.7: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -931,6 +942,17 @@ glob@^7.1.3, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globby@^11.0.3: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -965,7 +987,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@1.2.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -1112,7 +1134,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-yaml@4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -1227,7 +1249,7 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -1286,13 +1308,6 @@ mime@^2.5.2: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1300,7 +1315,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: +minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -1331,31 +1346,31 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" +mocha@10.7.0: + version "10.7.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a" + integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" ms@2.0.0: version "2.0.0" @@ -1367,7 +1382,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -1630,7 +1645,7 @@ schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -serialize-javascript@6.0.0, serialize-javascript@^6.0.0: +serialize-javascript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== @@ -1644,6 +1659,13 @@ serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -1763,18 +1785,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -1782,6 +1797,13 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -1840,10 +1862,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== ua-parser-js@^0.7.30: version "0.7.31" @@ -1937,10 +1959,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== +webpack@5.93.0: + version "5.93.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.93.0.tgz#2e89ec7035579bdfba9760d26c63ac5c3462a5e5" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.5" @@ -1948,10 +1970,10 @@ webpack@5.91.0: "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.9.0" + acorn-import-attributes "^1.9.5" browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" @@ -1986,10 +2008,10 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" @@ -2015,17 +2037,12 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -2035,7 +2052,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.1.1: +yargs@^16.1.1, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== diff --git a/sample/common/common.podspec b/sample/common/common.podspec index fd533533c45..3922f36a3be 100644 --- a/sample/common/common.podspec +++ b/sample/common/common.podspec @@ -26,6 +26,17 @@ Pod::Spec.new do |spec| 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', } + if !Dir.exist?('build/cocoapods/framework/common.framework') || Dir.empty?('build/cocoapods/framework/common.framework') + raise " + + Kotlin framework 'common' doesn't exist yet, so a proper Xcode project can't be generated. + 'pod install' should be executed after running ':generateDummyFramework' Gradle task: + + ./gradlew :common:generateDummyFramework + + Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" + end + spec.pod_target_xcconfig = { 'KOTLIN_PROJECT_PATH' => ':common', 'PRODUCT_MODULE_NAME' => 'common', @@ -51,4 +62,4 @@ Pod::Spec.new do |spec| } ] -end \ No newline at end of file +end From cda491511419e8ac14fabcfc47786b802ff8b655 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:36:22 -0400 Subject: [PATCH 108/184] Update plugin com.gradle.develocity to v3.18.1 (#5452) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- sample-web/settings.gradle | 2 +- sample/settings.gradle | 2 +- settings.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sample-web/settings.gradle b/sample-web/settings.gradle index 55e35417b8b..db0daf13d48 100644 --- a/sample-web/settings.gradle +++ b/sample-web/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.18" + id "com.gradle.develocity" version "3.18.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index e1ff3afb92c..c74fff3d7de 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.18" + id "com.gradle.develocity" version "3.18.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } diff --git a/settings.gradle b/settings.gradle index e18fd0d1189..d1619c308d6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id "com.gradle.develocity" version "3.18" + id "com.gradle.develocity" version "3.18.1" id "org.gradle.toolchains.foojay-resolver-convention" version "0.8.0" } From 0adf9a2260a1c1b817cabdea718ec4433e06bb17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?griff=20=D1=96=E2=8A=99?= <346896+griffio@users.noreply.github.com> Date: Thu, 12 Sep 2024 19:37:16 +0100 Subject: [PATCH 109/184] Fix 5122 add PostgreSql lateral join operator for subquery (#5337) * Fix 5122 Add LATERAL to grammar LATERAL is used in two positions in the join_operator - for table subqueries and for table joins Add Mixin to expose table/columns in a subquery - avoid recursion stackoverflow if child is same as subquery * Lateral Tests Lateral Tests Fixture test Integration test InterfaceGeneration test --- .../postgresql/grammar/PostgreSql.bnf | 22 ++++ .../grammar/mixins/SqlJoinClauseMixin.kt | 22 ++++ .../fixtures_postgresql/lateral/Test.s | 98 +++++++++++++++++ .../core/queries/InterfaceGeneration.kt | 102 ++++++++++++++++++ .../postgresql/integration/Lateral.sq | 48 +++++++++ .../postgresql/integration/PostgreSqlTest.kt | 13 +++ 6 files changed, 305 insertions(+) create mode 100644 dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlJoinClauseMixin.kt create mode 100644 dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/lateral/Test.s create mode 100644 sqldelight-gradle-plugin/src/test/integration-postgresql/src/main/sqldelight/app/cash/sqldelight/postgresql/integration/Lateral.sq diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf index 7f0e9fe3d8d..73f9b22c6e8 100644 --- a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/PostgreSql.bnf @@ -25,6 +25,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.CONFLICT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CONSTRAINT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CREATE" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.CROSS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CURRENT_DATE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CURRENT_TIME" "static com.alecstrong.sql.psi.core.psi.SqlTypes.CURRENT_TIMESTAMP" @@ -52,8 +53,11 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.IS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.IGNORE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.INDEX" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.INDEXED" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.INNER" "static com.alecstrong.sql.psi.core.psi.SqlTypes.INSERT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.INTO" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.JOIN" "static com.alecstrong.sql.psi.core.psi.SqlTypes.KEY" "static com.alecstrong.sql.psi.core.psi.SqlTypes.LIKE" "static com.alecstrong.sql.psi.core.psi.SqlTypes.LIMIT" @@ -61,6 +65,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.MATCH" "static com.alecstrong.sql.psi.core.psi.SqlTypes.MINUS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.MULTIPLY" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.NATURAL" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NO" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NOT" "static com.alecstrong.sql.psi.core.psi.SqlTypes.NOTHING" @@ -69,6 +74,7 @@ "static com.alecstrong.sql.psi.core.psi.SqlTypes.ON" "static com.alecstrong.sql.psi.core.psi.SqlTypes.OR" "static com.alecstrong.sql.psi.core.psi.SqlTypes.ORDER" + "static com.alecstrong.sql.psi.core.psi.SqlTypes.OUTER" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PARTITION" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PLUS" "static com.alecstrong.sql.psi.core.psi.SqlTypes.PRIMARY" @@ -106,9 +112,12 @@ overrides ::= type_name | insert_stmt | update_stmt_limited | generated_clause + | join_operator + | join_clause | result_column | alter_table_add_column | alter_table_rules + | table_or_subquery | compound_select_stmt | extension_expr | extension_stmt @@ -410,6 +419,19 @@ select_stmt ::= SELECT ( distinct_on_expr | [ DISTINCT | ALL ] ) {result_column} pin = 1 } +lateral ::= 'LATERAL' +join_operator ::= ( COMMA [ lateral ] + | [ NATURAL ] [ ( {left_join_operator} | {right_join_operator} | {full_join_operator} ) [ OUTER ] | INNER | CROSS ] JOIN [ lateral ] ) { + extends = "com.alecstrong.sql.psi.core.psi.impl.SqlJoinOperatorImpl" + implements = "com.alecstrong.sql.psi.core.psi.SqlJoinOperator" + override = true +} + +join_clause ::= {table_or_subquery} ( {join_operator} {table_or_subquery} [ {join_constraint} ] ) * { + mixin = "app.cash.sqldelight.dialects.postgresql.grammar.mixins.SqlJoinClauseMixin" + override = true +} + compound_select_stmt ::= [ {with_clause} ] {select_stmt} ( {compound_operator} {select_stmt} ) * [ ORDER BY {ordering_term} ( COMMA {ordering_term} ) * ] [ LIMIT {limiting_term} ] [ ( OFFSET | COMMA ) {limiting_term} ] [ FOR UPDATE [ 'SKIP' 'LOCKED' ] ] { extends = "com.alecstrong.sql.psi.core.psi.impl.SqlCompoundSelectStmtImpl" implements = "com.alecstrong.sql.psi.core.psi.SqlCompoundSelectStmt" diff --git a/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlJoinClauseMixin.kt b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlJoinClauseMixin.kt new file mode 100644 index 00000000000..ef942ec5c86 --- /dev/null +++ b/dialects/postgresql/src/main/kotlin/app/cash/sqldelight/dialects/postgresql/grammar/mixins/SqlJoinClauseMixin.kt @@ -0,0 +1,22 @@ +package app.cash.sqldelight.dialects.postgresql.grammar.mixins + +import app.cash.sqldelight.dialects.postgresql.grammar.psi.PostgreSqlTypes +import com.alecstrong.sql.psi.core.psi.QueryElement +import com.alecstrong.sql.psi.core.psi.impl.SqlJoinClauseImpl +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.util.elementType + +internal open class SqlJoinClauseMixin(node: ASTNode) : SqlJoinClauseImpl(node) { + + override fun queryAvailable(child: PsiElement): Collection { + return if (joinOperatorList + .flatMap { it.children.toList() } + .find { it.elementType == PostgreSqlTypes.LATERAL } != null + ) { + tableOrSubqueryList.takeWhile { it != child }.flatMap { it.queryExposed() } + } else { + super.queryAvailable(child) + } + } +} diff --git a/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/lateral/Test.s b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/lateral/Test.s new file mode 100644 index 00000000000..6d1dfe53ff4 --- /dev/null +++ b/dialects/postgresql/src/testFixtures/resources/fixtures_postgresql/lateral/Test.s @@ -0,0 +1,98 @@ +CREATE TABLE A ( + b_id INTEGER +); + +CREATE TABLE B ( + id INTEGER +); + +SELECT * FROM A, LATERAL (SELECT * FROM B WHERE B.id = A.b_id) AB; + +CREATE TABLE Author ( + id INTEGER PRIMARY KEY, + name TEXT +); + +CREATE TABLE Genre ( + id INTEGER PRIMARY KEY, + name TEXT +); + +CREATE TABLE Book ( + id INTEGER PRIMARY KEY, + title TEXT, + author_id INTEGER REFERENCES Author(id), + genre_id INTEGER REFERENCES Genre(id) +); + +SELECT + Author.name AS author_name, + Genre.name AS genre_name, + book_count +FROM + Author, + Genre, + LATERAL ( + SELECT + COUNT(*) AS book_count + FROM + Book + WHERE + Book.author_id = Author.id + AND Book.genre_id = Genre.id + ) AS book_counts; + +CREATE TABLE Kickstarter_Data ( + pledged INTEGER, + fx_rate NUMERIC, + backers_count INTEGER, + launched_at NUMERIC, + deadline NUMERIC, + goal INTEGER +); + +SELECT + pledged_usd, + avg_pledge_usd, + duration, + (usd_from_goal / duration) AS usd_needed_daily +FROM Kickstarter_Data, + LATERAL (SELECT pledged / fx_rate AS pledged_usd) pu, + LATERAL (SELECT pledged_usd / backers_count AS avg_pledge_usd) apu, + LATERAL (SELECT goal / fx_rate AS goal_usd) gu, + LATERAL (SELECT goal_usd - pledged_usd AS usd_from_goal) ufg, + LATERAL (SELECT (deadline - launched_at) / 86400.00 AS duration) dr; + +CREATE TABLE Regions ( + id INTEGER, + name VARCHAR(255) +); + +CREATE TABLE SalesPeople ( + id INTEGER, + full_name VARCHAR(255), + home_region_id INTEGER +); + +CREATE TABLE Sales ( + id INTEGER, + amount NUMERIC, + product_id INTEGER, + salesperson_id INTEGER, + region_id INTEGER +); + +SELECT + sp.id salesperson_id, + sp.full_name, + sp.home_region_id, + rg.name AS home_region_name, + home_region_sales.total_sales +FROM SalesPeople sp + JOIN Regions rg ON sp.home_region_id = rg.id + JOIN LATERAL ( + SELECT SUM(amount) AS total_sales + FROM Sales s + WHERE s.salesperson_id = sp.id + AND s.region_id = sp.home_region_id + ) home_region_sales ON TRUE; diff --git a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt index ab7a309ed10..e2be5ec40bd 100644 --- a/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt +++ b/sqldelight-compiler/src/test/kotlin/app/cash/sqldelight/core/queries/InterfaceGeneration.kt @@ -1394,6 +1394,108 @@ class InterfaceGeneration { ) } + @Test + fun `postgres lateral sub select has correct result columns`() { + val result = FixtureCompiler.compileSql( + """ + |CREATE TABLE Test ( + | p INTEGER, + | f NUMERIC, + | b INTEGER, + | l NUMERIC, + | d NUMERIC, + | g INTEGER + |); + | + |select: + |SELECT * + |FROM Test, + |LATERAL (SELECT p / f AS pf) _pf, + |LATERAL (SELECT pf / b AS pfb) _pfb, + |LATERAL (SELECT g / f AS gf) _gf, + |LATERAL (SELECT gf - pf AS gfpf) _gfpf, + |LATERAL (SELECT (d - l) / 60000.00 AS dl) _dl; + """.trimMargin(), + temporaryFolder, + fileName = "Lateral.sq", + overrideDialect = PostgreSqlDialect(), + ) + assertThat(result.errors).isEmpty() + val generatedInterface = result.compilerOutput.get(File(result.outputDirectory, "com/example/LateralQueries.kt")) + assertThat(generatedInterface).isNotNull() + assertThat(generatedInterface.toString()).isEqualTo( + """ + |package com.example + | + |import app.cash.sqldelight.Query + |import app.cash.sqldelight.TransacterImpl + |import app.cash.sqldelight.db.SqlDriver + |import app.cash.sqldelight.driver.jdbc.JdbcCursor + |import java.math.BigDecimal + |import kotlin.Any + |import kotlin.Int + | + |public class LateralQueries( + | driver: SqlDriver, + |) : TransacterImpl(driver) { + | public fun select(mapper: ( + | p: Int?, + | f: BigDecimal?, + | b: Int?, + | l: BigDecimal?, + | d: BigDecimal?, + | g: Int?, + | pf: BigDecimal?, + | pfb: BigDecimal?, + | gf: BigDecimal?, + | gfpf: BigDecimal?, + | dl: BigDecimal?, + | ) -> T): Query = Query(89_549_764, arrayOf("Test"), driver, "Lateral.sq", "select", ""${'"'} + | |SELECT Test.p, Test.f, Test.b, Test.l, Test.d, Test.g, pf, pfb, gf, gfpf, dl + | |FROM Test, + | |LATERAL (SELECT p / f AS pf) _pf, + | |LATERAL (SELECT pf / b AS pfb) _pfb, + | |LATERAL (SELECT g / f AS gf) _gf, + | |LATERAL (SELECT gf - pf AS gfpf) _gfpf, + | |LATERAL (SELECT (d - l) / 60000.00 AS dl) _dl + | ""${'"'}.trimMargin()) { cursor -> + | check(cursor is JdbcCursor) + | mapper( + | cursor.getInt(0), + | cursor.getBigDecimal(1), + | cursor.getInt(2), + | cursor.getBigDecimal(3), + | cursor.getBigDecimal(4), + | cursor.getInt(5), + | cursor.getBigDecimal(6), + | cursor.getBigDecimal(7), + | cursor.getBigDecimal(8), + | cursor.getBigDecimal(9), + | cursor.getBigDecimal(10) + | ) + | } + | + | public fun select(): Query