From b9e95d4de81ccde007b343e2fe64bac68b4f7a5b Mon Sep 17 00:00:00 2001 From: Henry Whitaker Date: Sat, 5 Sep 2020 01:17:18 +0100 Subject: [PATCH] Composer & npm --- conf/site/node_modules/klona/dist/index.js | 14 +- .../site/node_modules/klona/dist/index.min.js | 2 +- conf/site/node_modules/klona/dist/index.mjs | 12 +- conf/site/node_modules/klona/full/index.d.ts | 1 + conf/site/node_modules/klona/full/index.js | 55 + .../site/node_modules/klona/full/index.min.js | 1 + conf/site/node_modules/klona/full/index.mjs | 53 + conf/site/node_modules/klona/index.d.ts | 5 +- conf/site/node_modules/klona/json/index.d.ts | 1 + conf/site/node_modules/klona/json/index.js | 30 + .../site/node_modules/klona/json/index.min.js | 1 + conf/site/node_modules/klona/json/index.mjs | 28 + conf/site/node_modules/klona/lite/index.d.ts | 1 + conf/site/node_modules/klona/lite/index.js | 53 + .../site/node_modules/klona/lite/index.min.js | 1 + conf/site/node_modules/klona/lite/index.mjs | 51 + conf/site/node_modules/klona/package.json | 57 +- conf/site/node_modules/klona/readme.md | 140 +- .../node_modules/sass-loader/CHANGELOG.md | 19 + .../node_modules/sass-loader/dist/index.js | 16 +- .../node_modules/sass-loader/dist/utils.js | 173 +- .../node_modules/ajv/.tonic_example.js | 20 - .../sass-loader/node_modules/ajv/LICENSE | 22 - .../sass-loader/node_modules/ajv/README.md | 1478 --- .../node_modules/ajv/dist/ajv.bundle.js | 7143 ------------- .../node_modules/ajv/dist/ajv.min.js | 3 - .../node_modules/ajv/dist/ajv.min.js.map | 1 - .../sass-loader/node_modules/ajv/lib/ajv.d.ts | 396 - .../sass-loader/node_modules/ajv/lib/ajv.js | 506 - .../sass-loader/node_modules/ajv/lib/cache.js | 26 - .../node_modules/ajv/lib/compile/async.js | 90 - .../node_modules/ajv/lib/compile/equal.js | 5 - .../ajv/lib/compile/error_classes.js | 34 - .../node_modules/ajv/lib/compile/formats.js | 142 - .../node_modules/ajv/lib/compile/index.js | 387 - .../node_modules/ajv/lib/compile/resolve.js | 270 - .../node_modules/ajv/lib/compile/rules.js | 66 - .../ajv/lib/compile/schema_obj.js | 9 - .../ajv/lib/compile/ucs2length.js | 20 - .../node_modules/ajv/lib/compile/util.js | 239 - .../sass-loader/node_modules/ajv/lib/data.js | 49 - .../node_modules/ajv/lib/definition_schema.js | 37 - .../node_modules/ajv/lib/dot/_limit.jst | 113 - .../node_modules/ajv/lib/dot/_limitItems.jst | 12 - .../node_modules/ajv/lib/dot/_limitLength.jst | 12 - .../ajv/lib/dot/_limitProperties.jst | 12 - .../node_modules/ajv/lib/dot/allOf.jst | 32 - .../node_modules/ajv/lib/dot/anyOf.jst | 46 - .../node_modules/ajv/lib/dot/coerce.def | 61 - .../node_modules/ajv/lib/dot/comment.jst | 9 - .../node_modules/ajv/lib/dot/const.jst | 11 - .../node_modules/ajv/lib/dot/contains.jst | 55 - .../node_modules/ajv/lib/dot/custom.jst | 191 - .../node_modules/ajv/lib/dot/defaults.def | 47 - .../node_modules/ajv/lib/dot/definitions.def | 202 - .../node_modules/ajv/lib/dot/dependencies.jst | 79 - .../node_modules/ajv/lib/dot/enum.jst | 30 - .../node_modules/ajv/lib/dot/errors.def | 194 - .../node_modules/ajv/lib/dot/format.jst | 106 - .../node_modules/ajv/lib/dot/if.jst | 73 - .../node_modules/ajv/lib/dot/items.jst | 98 - .../node_modules/ajv/lib/dot/missing.def | 39 - .../node_modules/ajv/lib/dot/multipleOf.jst | 22 - .../node_modules/ajv/lib/dot/not.jst | 43 - .../node_modules/ajv/lib/dot/oneOf.jst | 54 - .../node_modules/ajv/lib/dot/pattern.jst | 14 - .../node_modules/ajv/lib/dot/properties.jst | 245 - .../ajv/lib/dot/propertyNames.jst | 52 - .../node_modules/ajv/lib/dot/ref.jst | 85 - .../node_modules/ajv/lib/dot/required.jst | 108 - .../node_modules/ajv/lib/dot/uniqueItems.jst | 62 - .../node_modules/ajv/lib/dot/validate.jst | 276 - .../node_modules/ajv/lib/dotjs/README.md | 3 - .../node_modules/ajv/lib/dotjs/_limit.js | 163 - .../node_modules/ajv/lib/dotjs/_limitItems.js | 80 - .../ajv/lib/dotjs/_limitLength.js | 85 - .../ajv/lib/dotjs/_limitProperties.js | 80 - .../node_modules/ajv/lib/dotjs/allOf.js | 42 - .../node_modules/ajv/lib/dotjs/anyOf.js | 73 - .../node_modules/ajv/lib/dotjs/comment.js | 14 - .../node_modules/ajv/lib/dotjs/const.js | 56 - .../node_modules/ajv/lib/dotjs/contains.js | 81 - .../node_modules/ajv/lib/dotjs/custom.js | 228 - .../ajv/lib/dotjs/dependencies.js | 168 - .../node_modules/ajv/lib/dotjs/enum.js | 66 - .../node_modules/ajv/lib/dotjs/format.js | 150 - .../node_modules/ajv/lib/dotjs/if.js | 103 - .../node_modules/ajv/lib/dotjs/index.js | 33 - .../node_modules/ajv/lib/dotjs/items.js | 140 - .../node_modules/ajv/lib/dotjs/multipleOf.js | 80 - .../node_modules/ajv/lib/dotjs/not.js | 84 - .../node_modules/ajv/lib/dotjs/oneOf.js | 73 - .../node_modules/ajv/lib/dotjs/pattern.js | 75 - .../node_modules/ajv/lib/dotjs/properties.js | 335 - .../ajv/lib/dotjs/propertyNames.js | 81 - .../node_modules/ajv/lib/dotjs/ref.js | 124 - .../node_modules/ajv/lib/dotjs/required.js | 270 - .../node_modules/ajv/lib/dotjs/uniqueItems.js | 86 - .../node_modules/ajv/lib/dotjs/validate.js | 490 - .../node_modules/ajv/lib/keyword.js | 146 - .../node_modules/ajv/lib/refs/data.json | 17 - .../ajv/lib/refs/json-schema-draft-04.json | 149 - .../ajv/lib/refs/json-schema-draft-06.json | 154 - .../ajv/lib/refs/json-schema-draft-07.json | 168 - .../ajv/lib/refs/json-schema-secure.json | 94 - .../sass-loader/node_modules/ajv/package.json | 137 - .../node_modules/ajv/scripts/.eslintrc.yml | 3 - .../node_modules/ajv/scripts/bundle.js | 61 - .../node_modules/ajv/scripts/compile-dots.js | 73 - .../sass-loader/node_modules/ajv/scripts/info | 10 - .../node_modules/ajv/scripts/prepare-tests | 12 - .../ajv/scripts/publish-built-version | 32 - .../node_modules/ajv/scripts/travis-gh-pages | 23 - .../node_modules/neo-async/LICENSE | 22 - .../node_modules/neo-async/README.md | 273 - .../sass-loader/node_modules/neo-async/all.js | 3 - .../node_modules/neo-async/allLimit.js | 3 - .../node_modules/neo-async/allSeries.js | 3 - .../node_modules/neo-async/angelFall.js | 3 - .../sass-loader/node_modules/neo-async/any.js | 3 - .../node_modules/neo-async/anyLimit.js | 3 - .../node_modules/neo-async/anySeries.js | 3 - .../node_modules/neo-async/apply.js | 3 - .../node_modules/neo-async/applyEach.js | 3 - .../node_modules/neo-async/applyEachSeries.js | 3 - .../node_modules/neo-async/async.js | 9184 ----------------- .../node_modules/neo-async/async.min.js | 80 - .../node_modules/neo-async/asyncify.js | 3 - .../node_modules/neo-async/auto.js | 3 - .../node_modules/neo-async/autoInject.js | 3 - .../node_modules/neo-async/cargo.js | 3 - .../node_modules/neo-async/compose.js | 3 - .../node_modules/neo-async/concat.js | 3 - .../node_modules/neo-async/concatLimit.js | 3 - .../node_modules/neo-async/concatSeries.js | 3 - .../node_modules/neo-async/constant.js | 3 - .../node_modules/neo-async/createLogger.js | 3 - .../node_modules/neo-async/detect.js | 3 - .../node_modules/neo-async/detectLimit.js | 3 - .../node_modules/neo-async/detectSeries.js | 3 - .../sass-loader/node_modules/neo-async/dir.js | 3 - .../node_modules/neo-async/doDuring.js | 3 - .../node_modules/neo-async/doUntil.js | 3 - .../node_modules/neo-async/doWhilst.js | 3 - .../node_modules/neo-async/during.js | 3 - .../node_modules/neo-async/each.js | 3 - .../node_modules/neo-async/eachLimit.js | 3 - .../node_modules/neo-async/eachOf.js | 3 - .../node_modules/neo-async/eachOfLimit.js | 3 - .../node_modules/neo-async/eachOfSeries.js | 3 - .../node_modules/neo-async/eachSeries.js | 3 - .../node_modules/neo-async/ensureAsync.js | 3 - .../node_modules/neo-async/every.js | 3 - .../node_modules/neo-async/everyLimit.js | 3 - .../node_modules/neo-async/everySeries.js | 3 - .../node_modules/neo-async/fast.js | 3 - .../node_modules/neo-async/filter.js | 3 - .../node_modules/neo-async/filterLimit.js | 3 - .../node_modules/neo-async/filterSeries.js | 3 - .../node_modules/neo-async/find.js | 3 - .../node_modules/neo-async/findLimit.js | 3 - .../node_modules/neo-async/findSeries.js | 3 - .../node_modules/neo-async/foldl.js | 3 - .../node_modules/neo-async/foldr.js | 3 - .../node_modules/neo-async/forEach.js | 3 - .../node_modules/neo-async/forEachLimit.js | 3 - .../node_modules/neo-async/forEachOf.js | 3 - .../node_modules/neo-async/forEachOfLimit.js | 3 - .../node_modules/neo-async/forEachOfSeries.js | 3 - .../node_modules/neo-async/forEachSeries.js | 3 - .../node_modules/neo-async/forever.js | 3 - .../node_modules/neo-async/groupBy.js | 3 - .../node_modules/neo-async/groupByLimit.js | 3 - .../node_modules/neo-async/groupBySeries.js | 3 - .../node_modules/neo-async/inject.js | 3 - .../node_modules/neo-async/iterator.js | 3 - .../sass-loader/node_modules/neo-async/log.js | 3 - .../sass-loader/node_modules/neo-async/map.js | 3 - .../node_modules/neo-async/mapLimit.js | 3 - .../node_modules/neo-async/mapSeries.js | 3 - .../node_modules/neo-async/mapValues.js | 3 - .../node_modules/neo-async/mapValuesLimit.js | 3 - .../node_modules/neo-async/mapValuesSeries.js | 3 - .../node_modules/neo-async/memoize.js | 3 - .../node_modules/neo-async/nextTick.js | 3 - .../node_modules/neo-async/omit.js | 3 - .../node_modules/neo-async/omitLimit.js | 3 - .../node_modules/neo-async/omitSeries.js | 3 - .../node_modules/neo-async/package.json | 89 - .../node_modules/neo-async/parallel.js | 3 - .../node_modules/neo-async/parallelLimit.js | 3 - .../node_modules/neo-async/pick.js | 3 - .../node_modules/neo-async/pickLimit.js | 3 - .../node_modules/neo-async/pickSeries.js | 3 - .../node_modules/neo-async/priorityQueue.js | 3 - .../node_modules/neo-async/queue.js | 3 - .../node_modules/neo-async/race.js | 3 - .../node_modules/neo-async/reduce.js | 3 - .../node_modules/neo-async/reduceRight.js | 3 - .../node_modules/neo-async/reflect.js | 3 - .../node_modules/neo-async/reflectAll.js | 3 - .../node_modules/neo-async/reject.js | 3 - .../node_modules/neo-async/rejectLimit.js | 3 - .../node_modules/neo-async/rejectSeries.js | 3 - .../node_modules/neo-async/retry.js | 3 - .../node_modules/neo-async/retryable.js | 3 - .../node_modules/neo-async/safe.js | 3 - .../node_modules/neo-async/select.js | 3 - .../node_modules/neo-async/selectLimit.js | 3 - .../node_modules/neo-async/selectSeries.js | 3 - .../sass-loader/node_modules/neo-async/seq.js | 3 - .../node_modules/neo-async/series.js | 3 - .../node_modules/neo-async/setImmediate.js | 3 - .../node_modules/neo-async/some.js | 3 - .../node_modules/neo-async/someLimit.js | 3 - .../node_modules/neo-async/someSeries.js | 3 - .../node_modules/neo-async/sortBy.js | 3 - .../node_modules/neo-async/sortByLimit.js | 3 - .../node_modules/neo-async/sortBySeries.js | 3 - .../node_modules/neo-async/timeout.js | 3 - .../node_modules/neo-async/times.js | 3 - .../node_modules/neo-async/timesLimit.js | 3 - .../node_modules/neo-async/timesSeries.js | 3 - .../node_modules/neo-async/transform.js | 3 - .../node_modules/neo-async/transformLimit.js | 3 - .../node_modules/neo-async/transformSeries.js | 3 - .../node_modules/neo-async/tryEach.js | 3 - .../node_modules/neo-async/unmemoize.js | 3 - .../node_modules/neo-async/until.js | 3 - .../node_modules/neo-async/waterfall.js | 3 - .../node_modules/neo-async/whilst.js | 3 - .../node_modules/neo-async/wrapSync.js | 3 - .../node_modules/schema-utils/CHANGELOG.md | 279 - .../node_modules/schema-utils/LICENSE | 20 - .../node_modules/schema-utils/README.md | 276 - .../declarations/ValidationError.d.ts | 88 - .../schema-utils/declarations/index.d.ts | 2 - .../declarations/keywords/absolutePath.d.ts | 12 - .../schema-utils/declarations/util/Range.d.ts | 82 - .../schema-utils/declarations/util/hints.d.ts | 6 - .../schema-utils/declarations/validate.d.ts | 44 - .../schema-utils/dist/ValidationError.js | 1261 --- .../node_modules/schema-utils/dist/index.js | 5 - .../dist/keywords/absolutePath.js | 93 - .../schema-utils/dist/util/Range.js | 163 - .../schema-utils/dist/util/hints.js | 105 - .../schema-utils/dist/validate.js | 160 - .../node_modules/schema-utils/package.json | 113 - .../node_modules/sass-loader/package.json | 53 +- .../vendor/composer/autoload_classmap.php | 6 + conf/site/vendor/composer/autoload_files.php | 2 +- conf/site/vendor/composer/autoload_static.php | 8 +- .../vendor/composer/ca-bundle/res/cacert.pem | 209 +- conf/site/vendor/composer/installed.json | 291 +- .../composer/xdebug-handler/CHANGELOG.md | 6 +- .../vendor/composer/xdebug-handler/README.md | 4 + .../xdebug-handler/src/XdebugHandler.php | 41 +- conf/site/vendor/doctrine/cache/README.md | 3 +- .../lib/Doctrine/Common/Cache/ChainCache.php | 12 +- conf/site/vendor/doctrine/dbal/README.md | 22 +- .../doctrine/dbal/ci/github/phpunit.oci8.xml | 42 + .../dbal/ci/github/phpunit.pdo-oci.xml | 42 + conf/site/vendor/doctrine/dbal/composer.json | 9 +- .../Doctrine/DBAL/Cache/ArrayStatement.php | 1 + .../Doctrine/DBAL/Cache/CacheException.php | 4 +- .../Doctrine/DBAL/Cache/QueryCacheProfile.php | 13 +- .../DBAL/Cache/ResultCacheStatement.php | 2 + .../dbal/lib/Doctrine/DBAL/ColumnCase.php | 2 + .../dbal/lib/Doctrine/DBAL/Configuration.php | 10 +- .../dbal/lib/Doctrine/DBAL/Connection.php | 182 +- .../lib/Doctrine/DBAL/ConnectionException.php | 8 +- .../Connections/MasterSlaveConnection.php | 37 +- .../dbal/lib/Doctrine/DBAL/DBALException.php | 43 +- .../DBAL/Driver/AbstractDB2Driver.php | 2 +- .../DBAL/Driver/AbstractMySQLDriver.php | 50 +- .../DBAL/Driver/AbstractOracleDriver.php | 2 +- .../EasyConnectString.php | 10 +- .../DBAL/Driver/AbstractPostgreSQLDriver.php | 16 +- .../DBAL/Driver/AbstractSQLAnywhereDriver.php | 39 +- .../DBAL/Driver/AbstractSQLServerDriver.php | 26 +- .../PortWithoutHost.php | 20 + .../DBAL/Driver/AbstractSQLiteDriver.php | 13 +- .../lib/Doctrine/DBAL/Driver/Connection.php | 12 +- .../Doctrine/DBAL/Driver/DriverException.php | 7 - .../DBAL/Driver/DrizzlePDOMySql/Driver.php | 4 + .../DBAL/Driver/ExceptionConverterDriver.php | 2 +- .../DBAL/Driver/IBMDB2/DB2Connection.php | 20 +- .../Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php | 29 +- .../DBAL/Driver/IBMDB2/DB2Statement.php | 44 +- .../DBAL/Driver/IBMDB2/DataSourceName.php | 77 + .../DBAL/Driver/Mysqli/MysqliConnection.php | 43 +- .../DBAL/Driver/Mysqli/MysqliStatement.php | 22 +- .../lib/Doctrine/DBAL/Driver/OCI8/Driver.php | 5 +- .../DBAL/Driver/OCI8/OCI8Connection.php | 27 +- .../DBAL/Driver/OCI8/OCI8Exception.php | 2 +- .../DBAL/Driver/OCI8/OCI8Statement.php | 40 +- .../Doctrine/DBAL/Driver/PDOConnection.php | 30 +- .../Doctrine/DBAL/Driver/PDOIbm/Driver.php | 2 + .../Doctrine/DBAL/Driver/PDOMySql/Driver.php | 4 + .../Doctrine/DBAL/Driver/PDOPgSql/Driver.php | 4 +- .../Doctrine/DBAL/Driver/PDOSqlite/Driver.php | 1 + .../DBAL/Driver/PDOSqlsrv/Connection.php | 18 - .../Doctrine/DBAL/Driver/PDOSqlsrv/Driver.php | 12 +- .../DBAL/Driver/PDOSqlsrv/Statement.php | 7 +- .../lib/Doctrine/DBAL/Driver/PDOStatement.php | 14 +- .../Doctrine/DBAL/Driver/ResultStatement.php | 24 +- .../DBAL/Driver/SQLAnywhere/Driver.php | 12 +- .../SQLAnywhere/SQLAnywhereConnection.php | 17 +- .../SQLAnywhere/SQLAnywhereException.php | 1 + .../SQLAnywhere/SQLAnywhereStatement.php | 17 +- .../Doctrine/DBAL/Driver/SQLSrv/Driver.php | 16 +- .../DBAL/Driver/SQLSrv/SQLSrvConnection.php | 10 +- .../DBAL/Driver/SQLSrv/SQLSrvException.php | 6 +- .../DBAL/Driver/SQLSrv/SQLSrvStatement.php | 28 +- .../lib/Doctrine/DBAL/Driver/Statement.php | 32 +- .../dbal/lib/Doctrine/DBAL/DriverManager.php | 42 +- .../DBAL/Event/ConnectionEventArgs.php | 2 +- .../Event/Listeners/OracleSessionInit.php | 5 +- .../SchemaAlterTableAddColumnEventArgs.php | 5 +- .../SchemaAlterTableChangeColumnEventArgs.php | 5 +- .../DBAL/Event/SchemaAlterTableEventArgs.php | 5 +- .../SchemaAlterTableRemoveColumnEventArgs.php | 5 +- .../SchemaAlterTableRenameColumnEventArgs.php | 5 +- .../Event/SchemaColumnDefinitionEventArgs.php | 4 +- .../SchemaCreateTableColumnEventArgs.php | 5 +- .../DBAL/Event/SchemaCreateTableEventArgs.php | 5 +- .../DBAL/Event/SchemaDropTableEventArgs.php | 4 +- .../Doctrine/DBAL/Event/SchemaEventArgs.php | 2 +- .../Event/SchemaIndexDefinitionEventArgs.php | 2 +- .../dbal/lib/Doctrine/DBAL/Events.php | 2 + .../DBAL/Exception/RetryableException.php | 6 +- .../dbal/lib/Doctrine/DBAL/FetchMode.php | 2 + .../lib/Doctrine/DBAL/Id/TableGenerator.php | 37 +- .../Internal/DependencyOrderCalculator.php | 131 + .../DBAL/Internal/DependencyOrderEdge.php | 12 + .../DBAL/Internal/DependencyOrderNode.php | 18 + .../dbal/lib/Doctrine/DBAL/LockMode.php | 2 + .../lib/Doctrine/DBAL/Logging/DebugStack.php | 10 +- .../Doctrine/DBAL/Logging/EchoSQLLogger.php | 3 +- .../lib/Doctrine/DBAL/Logging/SQLLogger.php | 6 +- .../dbal/lib/Doctrine/DBAL/ParameterType.php | 2 + .../DBAL/Platforms/AbstractPlatform.php | 408 +- .../Doctrine/DBAL/Platforms/DB2Platform.php | 125 +- .../DBAL/Platforms/DateIntervalUnit.php | 3 + .../DBAL/Platforms/DrizzlePlatform.php | 85 +- .../Platforms/Keywords/MariaDb102Keywords.php | 7 +- .../Keywords/PostgreSQL100Keywords.php | 5 +- .../Keywords/ReservedKeywordsValidator.php | 1 + .../DBAL/Platforms/MariaDb1027Platform.php | 12 +- .../DBAL/Platforms/MySQL57Platform.php | 2 +- .../Doctrine/DBAL/Platforms/MySqlPlatform.php | 159 +- .../DBAL/Platforms/OraclePlatform.php | 123 +- .../DBAL/Platforms/PostgreSQL100Platform.php | 10 +- .../DBAL/Platforms/PostgreSQL91Platform.php | 4 +- .../DBAL/Platforms/PostgreSQL92Platform.php | 9 +- .../DBAL/Platforms/PostgreSQL94Platform.php | 4 +- .../DBAL/Platforms/PostgreSqlPlatform.php | 106 +- .../DBAL/Platforms/SQLAnywhere12Platform.php | 6 +- .../DBAL/Platforms/SQLAnywherePlatform.php | 94 +- .../DBAL/Platforms/SQLServer2005Platform.php | 2 +- .../DBAL/Platforms/SQLServer2008Platform.php | 13 +- .../DBAL/Platforms/SQLServer2012Platform.php | 13 +- .../DBAL/Platforms/SQLServerPlatform.php | 134 +- .../DBAL/Platforms/SqlitePlatform.php | 270 +- .../lib/Doctrine/DBAL/Platforms/TrimMode.php | 3 + .../Doctrine/DBAL/Portability/Connection.php | 15 +- .../Doctrine/DBAL/Portability/Statement.php | 15 +- .../Query/Expression/CompositeExpression.php | 5 +- .../Query/Expression/ExpressionBuilder.php | 7 +- .../lib/Doctrine/DBAL/Query/QueryBuilder.php | 29 +- .../Doctrine/DBAL/Query/QueryException.php | 5 +- .../dbal/lib/Doctrine/DBAL/SQLParserUtils.php | 44 +- .../Doctrine/DBAL/SQLParserUtilsException.php | 12 +- .../Doctrine/DBAL/Schema/AbstractAsset.php | 3 + .../DBAL/Schema/AbstractSchemaManager.php | 55 +- .../dbal/lib/Doctrine/DBAL/Schema/Column.php | 11 +- .../lib/Doctrine/DBAL/Schema/ColumnDiff.php | 8 +- .../lib/Doctrine/DBAL/Schema/Comparator.php | 55 +- .../Doctrine/DBAL/Schema/DB2SchemaManager.php | 27 +- .../DBAL/Schema/DrizzleSchemaManager.php | 1 + .../DBAL/Schema/ForeignKeyConstraint.php | 12 +- .../dbal/lib/Doctrine/DBAL/Schema/Index.php | 43 +- .../DBAL/Schema/MySqlSchemaManager.php | 35 +- .../DBAL/Schema/OracleSchemaManager.php | 18 +- .../DBAL/Schema/PostgreSqlSchemaManager.php | 41 +- .../DBAL/Schema/SQLAnywhereSchemaManager.php | 9 +- .../DBAL/Schema/SQLServerSchemaManager.php | 43 +- .../dbal/lib/Doctrine/DBAL/Schema/Schema.php | 129 +- .../lib/Doctrine/DBAL/Schema/SchemaDiff.php | 51 +- .../Doctrine/DBAL/Schema/SchemaException.php | 43 +- .../lib/Doctrine/DBAL/Schema/Sequence.php | 7 +- .../DBAL/Schema/SqliteSchemaManager.php | 71 +- .../SingleDatabaseSynchronizer.php | 1 + .../dbal/lib/Doctrine/DBAL/Schema/Table.php | 235 +- .../lib/Doctrine/DBAL/Schema/TableDiff.php | 6 +- .../Visitor/CreateSchemaSqlCollector.php | 3 +- .../Schema/Visitor/DropSchemaSqlCollector.php | 12 +- .../Doctrine/DBAL/Schema/Visitor/Graphviz.php | 20 +- .../DBAL/Sharding/PoolingShardConnection.php | 21 +- .../SQLAzureFederationsSynchronizer.php | 21 +- .../SQLAzure/SQLAzureShardManager.php | 1 + .../SQLAzure/Schema/MultiTenantVisitor.php | 2 + .../Doctrine/DBAL/Sharding/ShardManager.php | 2 +- .../DBAL/Sharding/ShardingException.php | 12 +- .../dbal/lib/Doctrine/DBAL/Statement.php | 35 +- .../Tools/Console/Command/ImportCommand.php | 4 +- .../Console/Command/ReservedWordsCommand.php | 17 +- .../Tools/Console/Command/RunSqlCommand.php | 1 + .../dbal/lib/Doctrine/DBAL/Tools/Dumper.php | 8 +- .../DBAL/TransactionIsolationLevel.php | 3 + .../lib/Doctrine/DBAL/Types/ArrayType.php | 7 +- .../lib/Doctrine/DBAL/Types/BigIntType.php | 4 +- .../lib/Doctrine/DBAL/Types/BinaryType.php | 5 +- .../dbal/lib/Doctrine/DBAL/Types/BlobType.php | 5 +- .../lib/Doctrine/DBAL/Types/BooleanType.php | 4 +- .../DBAL/Types/ConversionException.php | 9 +- .../Doctrine/DBAL/Types/DateIntervalType.php | 7 +- .../DBAL/Types/DateTimeImmutableType.php | 1 + .../lib/Doctrine/DBAL/Types/DateTimeType.php | 11 +- .../Doctrine/DBAL/Types/DateTimeTzType.php | 10 +- .../dbal/lib/Doctrine/DBAL/Types/DateType.php | 10 +- .../lib/Doctrine/DBAL/Types/DecimalType.php | 4 +- .../lib/Doctrine/DBAL/Types/FloatType.php | 4 +- .../dbal/lib/Doctrine/DBAL/Types/GuidType.php | 4 +- .../lib/Doctrine/DBAL/Types/IntegerType.php | 4 +- .../lib/Doctrine/DBAL/Types/JsonArrayType.php | 1 + .../dbal/lib/Doctrine/DBAL/Types/JsonType.php | 8 +- .../lib/Doctrine/DBAL/Types/ObjectType.php | 7 +- .../Doctrine/DBAL/Types/SimpleArrayType.php | 5 +- .../lib/Doctrine/DBAL/Types/SmallIntType.php | 4 +- .../lib/Doctrine/DBAL/Types/StringType.php | 4 +- .../dbal/lib/Doctrine/DBAL/Types/TextType.php | 5 +- .../dbal/lib/Doctrine/DBAL/Types/TimeType.php | 10 +- .../dbal/lib/Doctrine/DBAL/Types/Type.php | 19 +- .../lib/Doctrine/DBAL/Types/TypeRegistry.php | 15 +- .../dbal/lib/Doctrine/DBAL/Types/Types.php | 3 + .../DBAL/Types/VarDateTimeImmutableType.php | 1 + .../Doctrine/DBAL/Types/VarDateTimeType.php | 1 + .../dbal/lib/Doctrine/DBAL/Version.php | 2 +- conf/site/vendor/doctrine/dbal/psalm.xml | 49 +- .../doctrine/event-manager/composer.json | 2 +- .../Illuminate/Console/GeneratorCommand.php | 13 + .../Contracts/Pagination/Paginator.php | 2 +- .../Illuminate/Database/Eloquent/Builder.php | 4 +- .../Concerns/QueriesRelationships.php | 6 +- .../src/Illuminate/Foundation/Application.php | 2 +- .../Console/ComponentMakeCommand.php | 6 +- .../Foundation/Console/MailMakeCommand.php | 4 +- .../Console/NotificationMakeCommand.php | 4 +- .../Foundation/Testing/RefreshDatabase.php | 30 +- .../Redis/Connectors/PhpRedisConnector.php | 3 +- .../src/Illuminate/Routing/UrlGenerator.php | 8 +- .../Middleware/AuthenticateSession.php | 4 +- .../framework/src/Illuminate/Support/Str.php | 39 + .../src/Illuminate/Support/Stringable.php | 36 + .../src/Illuminate/View/Component.php | 3 + .../vendor/nunomaduro/larastan/composer.json | 2 +- .../vendor/nunomaduro/larastan/extension.neon | 7 +- .../larastan/src/ApplicationResolver.php | 12 +- .../larastan/src/Methods/BuilderHelper.php | 6 +- .../src/Properties/SchemaAggregator.php | 2 +- .../Helpers/ValidatorExtension.php | 40 + ...ationsDynamicMethodReturnTypeExtension.php | 10 + .../nunomaduro/larastan/stubs/BelongsTo.stub | 9 +- .../larastan/stubs/EloquentBuilder.stub | 11 + conf/site/vendor/phpstan/phpstan/phpstan | Bin 15695091 -> 15860474 bytes conf/site/vendor/phpstan/phpstan/phpstan.phar | Bin 15695091 -> 15860474 bytes .../vendor/phpstan/phpstan/phpstan.phar.asc | 26 +- .../seld/jsonlint/.github/workflows/lint.yml | 32 + .../jsonlint/.github/workflows/phpstan.yml | 50 + conf/site/vendor/seld/jsonlint/CHANGELOG.md | 4 + .../vendor/seld/jsonlint/phpstan-config.neon | 6 + .../Seld/JsonLint/DuplicateKeyException.php | 13 + .../jsonlint/src/Seld/JsonLint/JsonParser.php | 11 +- .../seld/jsonlint/src/Seld/JsonLint/Lexer.php | 4 +- .../src/Seld/JsonLint/ParsingException.php | 7 + .../vendor/symfony/console/Application.php | 5 + .../console/Descriptor/TextDescriptor.php | 2 +- .../vendor/symfony/console/Helper/Table.php | 8 +- .../error-handler/DebugClassLoader.php | 18 +- .../vendor/symfony/filesystem/Filesystem.php | 2 +- conf/site/vendor/symfony/finder/Gitignore.php | 88 +- .../DataCollector/ConfigDataCollector.php | 2 +- .../DataCollector/DumpDataCollector.php | 8 +- .../symfony/http-kernel/HttpClientKernel.php | 4 + .../vendor/symfony/http-kernel/Kernel.php | 6 +- .../vendor/symfony/mime/Part/DataPart.php | 2 +- .../routing/Loader/AnnotationFileLoader.php | 9 +- .../vendor/symfony/string/AbstractString.php | 12 +- .../site/vendor/symfony/string/ByteString.php | 6 +- .../vendor/symfony/string/CodePointString.php | 4 +- .../vendor/symfony/string/UnicodeString.php | 8 +- .../translation/Dumper/PoFileDumper.php | 2 +- .../symfony/translation/Util/XliffUtils.php | 12 +- .../symfony/var-dumper/Cloner/VarCloner.php | 1 - .../symfony/var-dumper/Dumper/CliDumper.php | 7 +- .../vendor/symfony/var-dumper/VarDumper.php | 6 + 497 files changed, 4331 insertions(+), 32545 deletions(-) create mode 100644 conf/site/node_modules/klona/full/index.d.ts create mode 100644 conf/site/node_modules/klona/full/index.js create mode 100644 conf/site/node_modules/klona/full/index.min.js create mode 100644 conf/site/node_modules/klona/full/index.mjs create mode 100644 conf/site/node_modules/klona/json/index.d.ts create mode 100644 conf/site/node_modules/klona/json/index.js create mode 100644 conf/site/node_modules/klona/json/index.min.js create mode 100644 conf/site/node_modules/klona/json/index.mjs create mode 100644 conf/site/node_modules/klona/lite/index.d.ts create mode 100644 conf/site/node_modules/klona/lite/index.js create mode 100644 conf/site/node_modules/klona/lite/index.min.js create mode 100644 conf/site/node_modules/klona/lite/index.mjs delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/.tonic_example.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/LICENSE delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/README.md delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.bundle.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.min.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.min.js.map delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/ajv.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/ajv.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/cache.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/async.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/equal.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/error_classes.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/formats.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/index.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/resolve.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/rules.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/schema_obj.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/ucs2length.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/util.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/data.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/definition_schema.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limit.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitItems.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitLength.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitProperties.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/allOf.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/anyOf.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/coerce.def delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/comment.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/const.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/contains.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/custom.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/defaults.def delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/definitions.def delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/dependencies.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/enum.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/errors.def delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/format.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/if.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/items.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/missing.def delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/multipleOf.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/not.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/oneOf.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/pattern.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/properties.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/propertyNames.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/ref.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/required.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/uniqueItems.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/validate.jst delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/README.md delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitItems.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitLength.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitProperties.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/allOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/anyOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/comment.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/const.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/contains.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/custom.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/dependencies.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/enum.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/format.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/if.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/index.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/items.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/multipleOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/not.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/oneOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/pattern.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/properties.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/propertyNames.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/ref.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/required.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/uniqueItems.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/validate.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/keyword.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/refs/data.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/refs/json-schema-draft-04.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/refs/json-schema-draft-06.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/refs/json-schema-draft-07.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/lib/refs/json-schema-secure.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/package.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/.eslintrc.yml delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/bundle.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/compile-dots.js delete mode 100755 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/info delete mode 100755 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/prepare-tests delete mode 100755 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/publish-built-version delete mode 100755 conf/site/node_modules/sass-loader/node_modules/ajv/scripts/travis-gh-pages delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/LICENSE delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/README.md delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/all.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/allLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/allSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/angelFall.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/any.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/anyLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/anySeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/apply.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/applyEach.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/applyEachSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/async.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/async.min.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/asyncify.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/auto.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/autoInject.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/cargo.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/compose.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/concat.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/concatLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/concatSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/constant.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/createLogger.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/detect.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/detectLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/detectSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/dir.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/doDuring.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/doUntil.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/doWhilst.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/during.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/each.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/eachLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/eachOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/eachOfLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/eachOfSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/eachSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/ensureAsync.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/every.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/everyLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/everySeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/fast.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/filter.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/filterLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/filterSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/find.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/findLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/findSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/foldl.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/foldr.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEach.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEachLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEachOf.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEachOfLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEachOfSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forEachSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/forever.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/groupBy.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/groupByLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/groupBySeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/inject.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/iterator.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/log.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/map.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/mapLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/mapSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/mapValues.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/mapValuesLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/mapValuesSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/memoize.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/nextTick.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/omit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/omitLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/omitSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/package.json delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/parallel.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/parallelLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/pick.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/pickLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/pickSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/priorityQueue.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/queue.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/race.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/reduce.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/reduceRight.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/reflect.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/reflectAll.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/reject.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/rejectLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/rejectSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/retry.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/retryable.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/safe.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/select.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/selectLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/selectSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/seq.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/series.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/setImmediate.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/some.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/someLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/someSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/sortBy.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/sortByLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/sortBySeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/timeout.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/times.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/timesLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/timesSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/transform.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/transformLimit.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/transformSeries.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/tryEach.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/unmemoize.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/until.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/waterfall.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/whilst.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/neo-async/wrapSync.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/CHANGELOG.md delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/LICENSE delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/README.md delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/ValidationError.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/index.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/keywords/absolutePath.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/Range.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/hints.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/validate.d.ts delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/ValidationError.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/index.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/keywords/absolutePath.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/Range.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/hints.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/validate.js delete mode 100644 conf/site/node_modules/sass-loader/node_modules/schema-utils/package.json create mode 100644 conf/site/vendor/doctrine/dbal/ci/github/phpunit.oci8.xml create mode 100644 conf/site/vendor/doctrine/dbal/ci/github/phpunit.pdo-oci.xml create mode 100644 conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php create mode 100644 conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php create mode 100644 conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php create mode 100644 conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php create mode 100644 conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderNode.php create mode 100644 conf/site/vendor/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php create mode 100644 conf/site/vendor/seld/jsonlint/.github/workflows/lint.yml create mode 100644 conf/site/vendor/seld/jsonlint/.github/workflows/phpstan.yml create mode 100644 conf/site/vendor/seld/jsonlint/phpstan-config.neon diff --git a/conf/site/node_modules/klona/dist/index.js b/conf/site/node_modules/klona/dist/index.js index 4adb113b..c3f53a8e 100644 --- a/conf/site/node_modules/klona/dist/index.js +++ b/conf/site/node_modules/klona/dist/index.js @@ -1,4 +1,4 @@ -module.exports = function klona(x) { +function klona(x) { if (typeof x !== 'object') return x; var k, tmp, str=Object.prototype.toString.call(x); @@ -63,9 +63,21 @@ module.exports = function klona(x) { return tmp; } + if (str === '[object DataView]') { + return new x.constructor( klona(x.buffer) ); + } + + if (str === '[object ArrayBuffer]') { + return x.slice(0); + } + + // ArrayBuffer.isView(x) + // ~> `new` bcuz `Buffer.slice` => ref if (str.slice(-6) === 'Array]') { return new x.constructor(x); } return x; } + +exports.klona = klona; \ No newline at end of file diff --git a/conf/site/node_modules/klona/dist/index.min.js b/conf/site/node_modules/klona/dist/index.min.js index c4af208c..c86c5741 100644 --- a/conf/site/node_modules/klona/dist/index.min.js +++ b/conf/site/node_modules/klona/dist/index.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.klona=t()}(this,(function(){return function e(t){if("object"!=typeof t)return t;var o,n,r=Object.prototype.toString.call(t);if("[object Object]"===r){if(t.constructor!==Object&&"function"==typeof t.constructor)for(o in n=new t.constructor,t)n.hasOwnProperty(o)&&n[o]!==t[o]&&(n[o]=e(t[o]));else for(o in n={},t)"__proto__"===o?Object.defineProperty(n,o,{value:e(t[o]),configurable:!0,enumerable:!0,writable:!0}):n[o]=e(t[o]);return n}if("[object Array]"===r){for(o=t.length,n=Array(o);o--;)n[o]=e(t[o]);return n}return"[object Set]"===r?(n=new Set,t.forEach((function(t){n.add(e(t))})),n):"[object Map]"===r?(n=new Map,t.forEach((function(t,o){n.set(e(o),e(t))})),n):"[object Date]"===r?new Date(+t):"[object RegExp]"===r?((n=new RegExp(t.source,t.flags)).lastIndex=t.lastIndex,n):"Array]"===r.slice(-6)?new t.constructor(t):t}})); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.klona={})}(this,(function(e){e.klona=function e(t){if("object"!=typeof t)return t;var o,r,n=Object.prototype.toString.call(t);if("[object Object]"===n){if(t.constructor!==Object&&"function"==typeof t.constructor)for(o in r=new t.constructor,t)r.hasOwnProperty(o)&&r[o]!==t[o]&&(r[o]=e(t[o]));else for(o in r={},t)"__proto__"===o?Object.defineProperty(r,o,{value:e(t[o]),configurable:!0,enumerable:!0,writable:!0}):r[o]=e(t[o]);return r}if("[object Array]"===n){for(o=t.length,r=Array(o);o--;)r[o]=e(t[o]);return r}return"[object Set]"===n?(r=new Set,t.forEach((function(t){r.add(e(t))})),r):"[object Map]"===n?(r=new Map,t.forEach((function(t,o){r.set(e(o),e(t))})),r):"[object Date]"===n?new Date(+t):"[object RegExp]"===n?((r=new RegExp(t.source,t.flags)).lastIndex=t.lastIndex,r):"[object DataView]"===n?new t.constructor(e(t.buffer)):"[object ArrayBuffer]"===n?t.slice(0):"Array]"===n.slice(-6)?new t.constructor(t):t}})); \ No newline at end of file diff --git a/conf/site/node_modules/klona/dist/index.mjs b/conf/site/node_modules/klona/dist/index.mjs index 396c5648..dd7f003f 100644 --- a/conf/site/node_modules/klona/dist/index.mjs +++ b/conf/site/node_modules/klona/dist/index.mjs @@ -1,4 +1,4 @@ -export default function klona(x) { +export function klona(x) { if (typeof x !== 'object') return x; var k, tmp, str=Object.prototype.toString.call(x); @@ -63,6 +63,16 @@ export default function klona(x) { return tmp; } + if (str === '[object DataView]') { + return new x.constructor( klona(x.buffer) ); + } + + if (str === '[object ArrayBuffer]') { + return x.slice(0); + } + + // ArrayBuffer.isView(x) + // ~> `new` bcuz `Buffer.slice` => ref if (str.slice(-6) === 'Array]') { return new x.constructor(x); } diff --git a/conf/site/node_modules/klona/full/index.d.ts b/conf/site/node_modules/klona/full/index.d.ts new file mode 100644 index 00000000..e577809e --- /dev/null +++ b/conf/site/node_modules/klona/full/index.d.ts @@ -0,0 +1 @@ +export function klona(input: T): T; \ No newline at end of file diff --git a/conf/site/node_modules/klona/full/index.js b/conf/site/node_modules/klona/full/index.js new file mode 100644 index 00000000..b08dc03c --- /dev/null +++ b/conf/site/node_modules/klona/full/index.js @@ -0,0 +1,55 @@ +function set(obj, key, val) { + if (typeof val.value === 'object') val.value = klona(val.value); + if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') { + Object.defineProperty(obj, key, val); + } else obj[key] = val.value; +} + +function klona(x) { + if (typeof x !== 'object') return x; + + var i=0, k, list, tmp, str=Object.prototype.toString.call(x); + + if (str === '[object Object]') { + tmp = typeof x.constructor === 'function' ? new x.constructor() : Object.create(null); + } else if (str === '[object Array]') { + tmp = Array(x.length); + } else if (str === '[object Set]') { + tmp = new Set; + x.forEach(function (val) { + tmp.add(klona(val)); + }); + } else if (str === '[object Map]') { + tmp = new Map; + x.forEach(function (val, key) { + tmp.set(klona(key), klona(val)); + }); + } else if (str === '[object Date]') { + tmp = new Date(+x); + } else if (str === '[object RegExp]') { + tmp = new RegExp(x.source, x.flags); + } else if (str === '[object DataView]') { + tmp = new x.constructor( klona(x.buffer) ); + } else if (str === '[object ArrayBuffer]') { + tmp = x.slice(0); + } else if (str.slice(-6) === 'Array]') { + // ArrayBuffer.isView(x) + // ~> `new` bcuz `Buffer.slice` => ref + tmp = new x.constructor(x); + } + + if (tmp) { + for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) { + set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i])); + } + + for (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) { + if (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue; + set(tmp, k, Object.getOwnPropertyDescriptor(x, k)); + } + } + + return tmp || x; +} + +exports.klona = klona; \ No newline at end of file diff --git a/conf/site/node_modules/klona/full/index.min.js b/conf/site/node_modules/klona/full/index.min.js new file mode 100644 index 00000000..78f6ca34 --- /dev/null +++ b/conf/site/node_modules/klona/full/index.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.klona={})}(this,(function(e){function t(e,t,r){"object"==typeof r.value&&(r.value=o(r.value)),r.enumerable&&!r.get&&!r.set&&r.configurable&&r.writable&&"__proto__"!==t?e[t]=r.value:Object.defineProperty(e,t,r)}function o(e){if("object"!=typeof e)return e;var r,n,c,f=0,a=Object.prototype.toString.call(e);if("[object Object]"===a?c="function"==typeof e.constructor?new e.constructor:Object.create(null):"[object Array]"===a?c=Array(e.length):"[object Set]"===a?(c=new Set,e.forEach((function(e){c.add(o(e))}))):"[object Map]"===a?(c=new Map,e.forEach((function(e,t){c.set(o(t),o(e))}))):"[object Date]"===a?c=new Date(+e):"[object RegExp]"===a?c=new RegExp(e.source,e.flags):"[object DataView]"===a?c=new e.constructor(o(e.buffer)):"[object ArrayBuffer]"===a?c=e.slice(0):"Array]"===a.slice(-6)&&(c=new e.constructor(e)),c){for(n=Object.getOwnPropertySymbols(e);f `new` bcuz `Buffer.slice` => ref + tmp = new x.constructor(x); + } + + if (tmp) { + for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) { + set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i])); + } + + for (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) { + if (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue; + set(tmp, k, Object.getOwnPropertyDescriptor(x, k)); + } + } + + return tmp || x; +} diff --git a/conf/site/node_modules/klona/index.d.ts b/conf/site/node_modules/klona/index.d.ts index c1557c57..e577809e 100644 --- a/conf/site/node_modules/klona/index.d.ts +++ b/conf/site/node_modules/klona/index.d.ts @@ -1,4 +1 @@ -declare module 'klona' { - function klona(val: T): T; - export = klona; -} +export function klona(input: T): T; \ No newline at end of file diff --git a/conf/site/node_modules/klona/json/index.d.ts b/conf/site/node_modules/klona/json/index.d.ts new file mode 100644 index 00000000..e577809e --- /dev/null +++ b/conf/site/node_modules/klona/json/index.d.ts @@ -0,0 +1 @@ +export function klona(input: T): T; \ No newline at end of file diff --git a/conf/site/node_modules/klona/json/index.js b/conf/site/node_modules/klona/json/index.js new file mode 100644 index 00000000..19990903 --- /dev/null +++ b/conf/site/node_modules/klona/json/index.js @@ -0,0 +1,30 @@ +function klona(val) { + var k, out, tmp; + + if (Array.isArray(val)) { + out = Array(k=val.length); + while (k--) out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; + return out; + } + + if (Object.prototype.toString.call(val) === '[object Object]') { + out = {}; // null + for (k in val) { + if (k === '__proto__') { + Object.defineProperty(out, k, { + value: klona(val[k]), + configurable: true, + enumerable: true, + writable: true, + }); + } else { + out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; + } + } + return out; + } + + return val; +} + +exports.klona = klona; \ No newline at end of file diff --git a/conf/site/node_modules/klona/json/index.min.js b/conf/site/node_modules/klona/json/index.min.js new file mode 100644 index 00000000..a372900e --- /dev/null +++ b/conf/site/node_modules/klona/json/index.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.klona={})}(this,(function(e){e.klona=function e(t){var o,r,n;if(Array.isArray(t)){for(r=Array(o=t.length);o--;)r[o]=(n=t[o])&&"object"==typeof n?e(n):n;return r}if("[object Object]"===Object.prototype.toString.call(t)){for(o in r={},t)"__proto__"===o?Object.defineProperty(r,o,{value:e(t[o]),configurable:!0,enumerable:!0,writable:!0}):r[o]=(n=t[o])&&"object"==typeof n?e(n):n;return r}return t}})); \ No newline at end of file diff --git a/conf/site/node_modules/klona/json/index.mjs b/conf/site/node_modules/klona/json/index.mjs new file mode 100644 index 00000000..eae543d5 --- /dev/null +++ b/conf/site/node_modules/klona/json/index.mjs @@ -0,0 +1,28 @@ +export function klona(val) { + var k, out, tmp; + + if (Array.isArray(val)) { + out = Array(k=val.length); + while (k--) out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; + return out; + } + + if (Object.prototype.toString.call(val) === '[object Object]') { + out = {}; // null + for (k in val) { + if (k === '__proto__') { + Object.defineProperty(out, k, { + value: klona(val[k]), + configurable: true, + enumerable: true, + writable: true, + }); + } else { + out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; + } + } + return out; + } + + return val; +} diff --git a/conf/site/node_modules/klona/lite/index.d.ts b/conf/site/node_modules/klona/lite/index.d.ts new file mode 100644 index 00000000..e577809e --- /dev/null +++ b/conf/site/node_modules/klona/lite/index.d.ts @@ -0,0 +1 @@ +export function klona(input: T): T; \ No newline at end of file diff --git a/conf/site/node_modules/klona/lite/index.js b/conf/site/node_modules/klona/lite/index.js new file mode 100644 index 00000000..2137cfd7 --- /dev/null +++ b/conf/site/node_modules/klona/lite/index.js @@ -0,0 +1,53 @@ +function klona(x) { + if (typeof x !== 'object') return x; + + var k, tmp, str=Object.prototype.toString.call(x); + + if (str === '[object Object]') { + if (x.constructor !== Object && typeof x.constructor === 'function') { + tmp = new x.constructor(); + for (k in x) { + if (tmp.hasOwnProperty(k) && tmp[k] !== x[k]) { + tmp[k] = klona(x[k]); + } + } + } else { + tmp = {}; // null + for (k in x) { + if (k === '__proto__') { + Object.defineProperty(tmp, k, { + value: klona(x[k]), + configurable: true, + enumerable: true, + writable: true, + }); + } else { + tmp[k] = klona(x[k]); + } + } + } + return tmp; + } + + if (str === '[object Array]') { + k = x.length; + for (tmp=Array(k); k--;) { + tmp[k] = klona(x[k]); + } + return tmp; + } + + if (str === '[object Date]') { + return new Date(+x); + } + + if (str === '[object RegExp]') { + tmp = new RegExp(x.source, x.flags); + tmp.lastIndex = x.lastIndex; + return tmp; + } + + return x; +} + +exports.klona = klona; \ No newline at end of file diff --git a/conf/site/node_modules/klona/lite/index.min.js b/conf/site/node_modules/klona/lite/index.min.js new file mode 100644 index 00000000..a6bb72c8 --- /dev/null +++ b/conf/site/node_modules/klona/lite/index.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.klona={})}(this,(function(e){e.klona=function e(t){if("object"!=typeof t)return t;var o,n,r=Object.prototype.toString.call(t);if("[object Object]"===r){if(t.constructor!==Object&&"function"==typeof t.constructor)for(o in n=new t.constructor,t)n.hasOwnProperty(o)&&n[o]!==t[o]&&(n[o]=e(t[o]));else for(o in n={},t)"__proto__"===o?Object.defineProperty(n,o,{value:e(t[o]),configurable:!0,enumerable:!0,writable:!0}):n[o]=e(t[o]);return n}if("[object Array]"===r){for(o=t.length,n=Array(o);o--;)n[o]=e(t[o]);return n}return"[object Date]"===r?new Date(+t):"[object RegExp]"===r?((n=new RegExp(t.source,t.flags)).lastIndex=t.lastIndex,n):t}})); \ No newline at end of file diff --git a/conf/site/node_modules/klona/lite/index.mjs b/conf/site/node_modules/klona/lite/index.mjs new file mode 100644 index 00000000..d0ee09de --- /dev/null +++ b/conf/site/node_modules/klona/lite/index.mjs @@ -0,0 +1,51 @@ +export function klona(x) { + if (typeof x !== 'object') return x; + + var k, tmp, str=Object.prototype.toString.call(x); + + if (str === '[object Object]') { + if (x.constructor !== Object && typeof x.constructor === 'function') { + tmp = new x.constructor(); + for (k in x) { + if (tmp.hasOwnProperty(k) && tmp[k] !== x[k]) { + tmp[k] = klona(x[k]); + } + } + } else { + tmp = {}; // null + for (k in x) { + if (k === '__proto__') { + Object.defineProperty(tmp, k, { + value: klona(x[k]), + configurable: true, + enumerable: true, + writable: true, + }); + } else { + tmp[k] = klona(x[k]); + } + } + } + return tmp; + } + + if (str === '[object Array]') { + k = x.length; + for (tmp=Array(k); k--;) { + tmp[k] = klona(x[k]); + } + return tmp; + } + + if (str === '[object Date]') { + return new Date(+x); + } + + if (str === '[object RegExp]') { + tmp = new RegExp(x.source, x.flags); + tmp.lastIndex = x.lastIndex; + return tmp; + } + + return x; +} diff --git a/conf/site/node_modules/klona/package.json b/conf/site/node_modules/klona/package.json index fd0802fb..8591350f 100644 --- a/conf/site/node_modules/klona/package.json +++ b/conf/site/node_modules/klona/package.json @@ -1,32 +1,32 @@ { "_args": [ [ - "klona@1.1.2", + "klona@2.0.3", "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site" ] ], "_development": true, - "_from": "klona@1.1.2", - "_id": "klona@1.1.2", + "_from": "klona@2.0.3", + "_id": "klona@2.0.3", "_inBundle": false, - "_integrity": "sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==", + "_integrity": "sha512-CgPOT3ZadDpXxKcfV56lEQ9OQSZ42Mk26gnozI+uN/k39vzD8toUhRQoqsX0m9Q3eMPEfsLWmtyUpK/yqST4yg==", "_location": "/klona", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "klona@1.1.2", + "raw": "klona@2.0.3", "name": "klona", "escapedName": "klona", - "rawSpec": "1.1.2", + "rawSpec": "2.0.3", "saveSpec": null, - "fetchSpec": "1.1.2" + "fetchSpec": "2.0.3" }, "_requiredBy": [ "/sass-loader" ], - "_resolved": "https://registry.npmjs.org/klona/-/klona-1.1.2.tgz", - "_spec": "1.1.2", + "_resolved": "https://registry.npmjs.org/klona/-/klona-2.0.3.tgz", + "_spec": "2.0.3", "_where": "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site", "author": { "name": "Luke Edwards", @@ -36,18 +36,40 @@ "bugs": { "url": "https://github.com/lukeed/klona/issues" }, - "description": "A tiny (423B) and fast utility to \"deep clone\" Objects, Arrays, Dates, RegExps, and more!", + "description": "A tiny (240B to 507B) and fast utility to \"deep clone\" Objects, Arrays, Dates, RegExps, and more!", "devDependencies": { "bundt": "1.0.2", "esm": "3.2.25", - "uvu": "0.0.17" + "uvu": "0.3.3" }, "engines": { "node": ">= 8" }, + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./json": { + "import": "./json/index.mjs", + "require": "./json/index.js" + }, + "./lite": { + "import": "./lite/index.mjs", + "require": "./lite/index.js" + }, + "./full": { + "import": "./full/index.mjs", + "require": "./full/index.js" + }, + "./package.json": "./package.json" + }, "files": [ "*.d.ts", - "dist" + "dist", + "full", + "json", + "lite" ], "homepage": "https://github.com/lukeed/klona#readme", "keywords": [ @@ -60,6 +82,12 @@ ], "license": "MIT", "main": "dist/index.js", + "modes": { + "json": "src/json.js", + "lite": "src/lite.js", + "default": "src/index.js", + "full": "src/full.js" + }, "module": "dist/index.mjs", "name": "klona", "repository": { @@ -68,10 +96,11 @@ }, "scripts": { "build": "bundt", + "postbuild": "echo \"lite full json\" | xargs -n1 cp -v index.d.ts", "pretest": "npm run build", - "test": "uvu -r esm test" + "test": "uvu -r esm test -i suites" }, "types": "index.d.ts", "unpkg": "dist/index.min.js", - "version": "1.1.2" + "version": "2.0.3" } diff --git a/conf/site/node_modules/klona/readme.md b/conf/site/node_modules/klona/readme.md index 8d6028d3..a3595d42 100644 --- a/conf/site/node_modules/klona/readme.md +++ b/conf/site/node_modules/klona/readme.md @@ -17,7 +17,7 @@ -
A tiny (423B) and fast utility to "deep clone" Objects, Arrays, Dates, RegExps, and more!
+
A tiny (240B to 507B) and fast utility to "deep clone" Objects, Arrays, Dates, RegExps, and more!
## Features @@ -25,16 +25,10 @@ * Super tiny and [performant](#benchmarks) * Deep clone / recursive copies * Safely handles complex data types
- _Array, Date, Map, Object, RegExp, Set, TypedArray_ + _Array, Date, Map, Object, RegExp, Set, TypedArray, and more_ Unlike a "shallow copy" (eg, `Object.assign`), a "deep clone" recursively traverses a source input and copies its _values_ — instead of _references_ to its values — into a new instance of that input. The result is a structurally equivalent clone that operates independently of the original source and controls its own values. -Additionally, this module is delivered as: - -* **ES Module**: [`dist/index.mjs`](https://unpkg.com/klona/dist/index.mjs) -* **CommonJS**: [`dist/index.js`](https://unpkg.com/klona/dist/index.js) -* **UMD**: [`dist/klona.min.js`](https://unpkg.com/klona) - > **Why "klona"?** It's "clone" in Swedish.
> **What's with the sheep?** [Dolly](https://en.wikipedia.org/wiki/Dolly_(sheep)). @@ -46,10 +40,51 @@ $ npm install --save klona ``` +## Modes + +There are multiple "versions" of `klona` available, which allows you to bring only the functionality you need! + +#### `klona/json` +> **Size (gzip):** 240 bytes
+> **Availability:** [CommonJS](https://unpkg.com/klona/json/index.js), [ES Module](https://unpkg.com/klona/json/index.mjs), [UMD](https://unpkg.com/klona/json/index.min.js)
+> **Ability:** JSON data types + +```js +import { klona } from 'klona/json'; +``` + +#### `klona/lite` +> **Size (gzip):** 354 bytes
+> **Availability:** [CommonJS](https://unpkg.com/klona/lite/index.js), [ES Module](https://unpkg.com/klona/lite/index.mjs), [UMD](https://unpkg.com/klona/lite/index.min.js)
+> **Ability:** extends `klona/json` with support for custom class, Date, and RegExp + +```js +import { klona } from 'klona/lite'; +``` + +#### `klona` +> **Size (gzip):** 451 bytes
+> **Availability:** [CommonJS](https://unpkg.com/klona/dist/index.js), [ES Module](https://unpkg.com/klona/dist/index.mjs), [UMD](https://unpkg.com/klona/dist/index.min.js)
+> **Ability:** extends `klona/lite` with support for Map, Set, DataView, ArrayBuffer, TypedArray + +```js +import { klona } from 'klona'; +``` + +#### `klona/full` +> **Size (gzip):** 507 bytes
+> **Availability:** [CommonJS](https://unpkg.com/klona/full/index.js), [ES Module](https://unpkg.com/klona/full/index.mjs), [UMD](https://unpkg.com/klona/full/index.min.js)
+> **Ability:** extends `klona` with support for Symbol properties and and non-enumerable properties + +```js +import { klona } from 'klona/full'; +``` + + ## Usage ```js -import klona from 'klona'; +import { klona } from 'klona'; const input = { foo: 1, @@ -96,34 +131,73 @@ Returns a deep copy/clone of the input. ## Benchmarks -> via Node.js v10.13.0 +> Running Node v12.18.3 + +The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into multiple categories: + +* `JSON` – compares an array of objects comprised of JSON data types (`String`, `Number`, `null`, `Array`, `Object`) +* `LITE` – like `JSON`, but adds `RegExp`, `Date` and `undefined` values +* `DEFAULT` – object with `RegExp`, `Date`, `Array`, `Map`, `Set`, custom class, `Int8Array`, `DataView`, `Buffer` values +* `FULL` – like `DEFAULT`, but adds `Symbol` and non-enumerable properties + +> **Important:** Only candidates that pass validation step(s) are listed.
However, `lodash` and `clone` are kept to highlight important differences. + +> **Note:** The `clone/include` candidate refers to its [`includeNonEnumerable` option](https://www.npmjs.com/package/clone#api) enabled. ``` Load times: - fast-clone 0.884ms - lodash/clonedeep 27.716ms - rfdc 0.782ms - clone-deep 4.023ms - deep-copy 0.513ms - klona 0.333ms + lodash/clonedeep 29.257ms + rfdc 0.511ms + clone 0.576ms + clone-deep 2.494ms + deep-copy 0.451ms + klona/full 0.408ms + klona 0.265ms + klona/lite 0.308ms + klona/json 0.263ms -Validation: - ✘ JSON.stringify (FAILED @ "initial copy") - ✘ fast-clone (FAILED @ "initial copy") - ✔ lodash - ✘ rfdc (FAILED @ "initial copy") - ✔ clone-deep - ✘ deep-copy (FAILED @ "initial copy") - ✔ klona +Benchmark :: JSON + JSON.stringify x 50,156 ops/sec ±0.32% (93 runs sampled) + lodash x 44,269 ops/sec ±0.48% (94 runs sampled) + rfdc x 202,428 ops/sec ±0.91% (94 runs sampled) + clone x 38,947 ops/sec ±0.34% (97 runs sampled) + clone/include x 25,021 ops/sec ±0.22% (93 runs sampled) + clone-deep x 98,676 ops/sec ±0.20% (93 runs sampled) + deep-copy x 129,432 ops/sec ±0.25% (98 runs sampled) + klona/full x 52,482 ops/sec ±0.26% (98 runs sampled) + klona x 257,905 ops/sec ±0.54% (97 runs sampled) + klona/lite x 301,324 ops/sec ±0.31% (97 runs sampled) + klona/json x 336,300 ops/sec ±0.17% (96 runs sampled) -Benchmark: - JSON.stringify x 36,628 ops/sec ±1.34% (89 runs sampled) - fast-clone x 23,518 ops/sec ±1.18% (91 runs sampled) - lodash x 33,810 ops/sec ±1.34% (94 runs sampled) - rfdc x 181,634 ops/sec ±0.71% (95 runs sampled) - clone-deep x 84,558 ops/sec ±0.19% (96 runs sampled) - deep-copy x 112,866 ops/sec ±1.26% (94 runs sampled) - klona x 220,356 ops/sec ±0.34% (97 runs sampled) +Benchmark :: LITE + lodash x 35,046 ops/sec ±0.20% (96 runs sampled) + clone x 35,425 ops/sec ±0.46% (93 runs sampled) + clone/include x 22,296 ops/sec ±0.31% (95 runs sampled) + clone-deep x 85,550 ops/sec ±0.25% (97 runs sampled) + klona/full x 46,303 ops/sec ±0.30% (96 runs sampled) + klona x 211,161 ops/sec ±0.19% (99 runs sampled) + klona/lite x 241,172 ops/sec ±0.17% (97 runs sampled) + +Benchmark :: DEFAULT + lodash x 48,006 ops/sec ±0.34% (95 runs sampled) + ✘ Buffer + ✘ Map keys + clone x 91,191 ops/sec ±0.24% (94 runs sampled) + ✘ DataView + clone/include x 59,209 ops/sec ±0.28% (96 runs sampled) + ✘ DataView + klona/full x 84,333 ops/sec ±0.27% (95 runs sampled) + klona x 208,685 ops/sec ±0.23% (95 runs sampled) + +Benchmark :: FULL + lodash x 51,634 ops/sec ±0.44% (94 runs sampled) + ✘ Buffer + ✘ Map keys + ✘ Missing non-enumerable Properties + clone/include x 44,020 ops/sec ±0.31% (93 runs sampled) + ✘ DataView + ✘ Incorrect non-enumerable Properties + klona/full x 78,217 ops/sec ±0.61% (97 runs sampled) ``` @@ -131,7 +205,7 @@ Benchmark: * [dlv](https://github.com/developit/dlv) – safely **read** from deep properties in 120 bytes * [dset](https://github.com/lukeed/dset) – safely **write** into deep properties in 160 bytes -* [dequal](https://github.com/lukeed/dequal) – safely check for deep equality in 247 bytes +* [dequal](https://github.com/lukeed/dequal) – safely check for deep equality in 304 to 489 bytes ## License diff --git a/conf/site/node_modules/sass-loader/CHANGELOG.md b/conf/site/node_modules/sass-loader/CHANGELOG.md index b592c9c4..3e54f9f3 100644 --- a/conf/site/node_modules/sass-loader/CHANGELOG.md +++ b/conf/site/node_modules/sass-loader/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [10.0.1](https://github.com/webpack-contrib/sass-loader/compare/v10.0.0...v10.0.1) (2020-08-25) + +### Chore + +* update deps + +## [10.0.0](https://github.com/webpack-contrib/sass-loader/compare/v10.0.0-rc.0...v10.0.0) (2020-08-24) + +### Bug Fixes + +* handle absolute windows path in source maps + +## [10.0.0-rc.0](https://github.com/webpack-contrib/sass-loader/compare/v9.0.3...v10.0.0-rc.0) (2020-08-24) + + +### ⚠ BREAKING CHANGES + +* loader generates absolute `sources` in source maps, also avoids modifying `sass` source maps if the `sourceMap` option is `false` + ### [9.0.3](https://github.com/webpack-contrib/sass-loader/compare/v9.0.2...v9.0.3) (2020-08-05) diff --git a/conf/site/node_modules/sass-loader/dist/index.js b/conf/site/node_modules/sass-loader/dist/index.js index f2867a57..b6330f5e 100644 --- a/conf/site/node_modules/sass-loader/dist/index.js +++ b/conf/site/node_modules/sass-loader/dist/index.js @@ -32,7 +32,8 @@ function loader(content) { baseDataPath: 'options' }); const implementation = (0, _utils.getSassImplementation)(options.implementation); - const sassOptions = (0, _utils.getSassOptions)(this, options, content, implementation); + const useSourceMap = typeof options.sourceMap === 'boolean' ? options.sourceMap : this.sourceMap; + const sassOptions = (0, _utils.getSassOptions)(this, options, content, implementation, useSourceMap); const shouldUseWebpackImporter = typeof options.webpackImporter === 'boolean' ? options.webpackImporter : true; if (shouldUseWebpackImporter) { @@ -54,22 +55,23 @@ function loader(content) { callback(new _SassError.default(error)); return; - } + } // Modify source paths only for webpack, otherwise we do nothing - if (result.map) { + + if (result.map && useSourceMap) { // eslint-disable-next-line no-param-reassign result.map = JSON.parse(result.map); // result.map.file is an optional property that provides the output filename. // Since we don't know the final filename in the webpack build chain yet, it makes no sense to have it. // eslint-disable-next-line no-param-reassign - delete result.map.file; // node-sass returns POSIX paths, that's why we need to transform them back to native paths. + delete result.map.file; // eslint-disable-next-line no-param-reassign + + result.sourceRoot = ''; // node-sass returns POSIX paths, that's why we need to transform them back to native paths. // This fixes an error on windows where the source-map module cannot resolve the source maps. // @see https://github.com/webpack-contrib/sass-loader/issues/366#issuecomment-279460722 // eslint-disable-next-line no-param-reassign - result.map.sourceRoot = _path.default.normalize(result.map.sourceRoot); // eslint-disable-next-line no-param-reassign - - result.map.sources = result.map.sources.map(_path.default.normalize); + result.map.sources = result.map.sources.map(source => (0, _utils.absolutifySourceMapSource)(this.rootContext, source)); } result.stats.includedFiles.forEach(includedFile => { diff --git a/conf/site/node_modules/sass-loader/dist/utils.js b/conf/site/node_modules/sass-loader/dist/utils.js index 7ccd774f..f99eb2da 100644 --- a/conf/site/node_modules/sass-loader/dist/utils.js +++ b/conf/site/node_modules/sass-loader/dist/utils.js @@ -3,11 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = getPossibleRequests; exports.getSassImplementation = getSassImplementation; exports.getSassOptions = getSassOptions; +exports.getWebpackResolver = getWebpackResolver; exports.getWebpackImporter = getWebpackImporter; exports.getRenderFunctionFromSassImplementation = getRenderFunctionFromSassImplementation; +exports.absolutifySourceMapSource = absolutifySourceMapSource; var _url = _interopRequireDefault(require("url")); @@ -15,7 +16,7 @@ var _path = _interopRequireDefault(require("path")); var _semver = _interopRequireDefault(require("semver")); -var _klona = _interopRequireDefault(require("klona")); +var _full = require("klona/full"); var _loaderUtils = require("loader-utils"); @@ -41,6 +42,12 @@ function getDefaultSassImplementation() { return require(sassImplPkg); } +/** + * @public + * This function is not Webpack-specific and can be used by tools wishing to + * mimic `sass-loader`'s behaviour, so its signature should not be changed. + */ + function getSassImplementation(implementation) { let resolvedImplementation = implementation; @@ -102,12 +109,13 @@ function proxyCustomImporters(importers, loaderContext) { * @param {object} loaderOptions * @param {string} content * @param {object} implementation + * @param {boolean} useSourceMap * @returns {Object} */ -function getSassOptions(loaderContext, loaderOptions, content, implementation) { - const options = (0, _klona.default)(loaderOptions.sassOptions ? typeof loaderOptions.sassOptions === 'function' ? loaderOptions.sassOptions(loaderContext) || {} : loaderOptions.sassOptions : {}); +function getSassOptions(loaderContext, loaderOptions, content, implementation, useSourceMap) { + const options = (0, _full.klona)(loaderOptions.sassOptions ? typeof loaderOptions.sassOptions === 'function' ? loaderOptions.sassOptions(loaderContext) || {} : loaderOptions.sassOptions : {}); const isDartSass = implementation.info.includes('dart-sass'); if (isDartSass) { @@ -141,8 +149,6 @@ function getSassOptions(loaderContext, loaderOptions, content, implementation) { options.outputStyle = 'compressed'; } - const useSourceMap = typeof loaderOptions.sourceMap === 'boolean' ? loaderOptions.sourceMap : loaderContext.sourceMap; - if (useSourceMap) { // Deliberately overriding the sourceMap option here. // node-sass won't produce source maps if the data option is used and options.sourceMap is not a string. @@ -150,8 +156,9 @@ function getSassOptions(loaderContext, loaderOptions, content, implementation) { // But since we're using the data option, the source map will not actually be written, but // all paths in sourceMap.sources will be relative to that path. // Pretty complicated... :( - options.sourceMap = _path.default.join(process.cwd(), '/sass.css.map'); - options.sourceMapRoot = process.cwd(); + options.sourceMap = true; + options.outFile = _path.default.join(loaderContext.rootContext, 'style.css.map'); // options.sourceMapRoot = process.cwd(); + options.sourceMapContents = true; options.omitSourceMapUrl = true; options.sourceMapEmbed = false; @@ -195,15 +202,14 @@ const isModuleImport = /^~([^/]+|[^/]+\/|@[^/]+[/][^/]+|@[^/]+\/?|@[^/]+[/][^/]+ * * @param {string} url * @param {boolean} forWebpackResolver - * @param {Object} loaderContext + * @param {string} rootContext * @returns {Array} */ -function getPossibleRequests(loaderContext, // eslint-disable-next-line no-shadow -url, forWebpackResolver = false) { +function getPossibleRequests( // eslint-disable-next-line no-shadow +url, forWebpackResolver = false, rootContext = false) { const request = (0, _loaderUtils.urlToRequest)(url, // Maybe it is server-relative URLs - forWebpackResolver && url.charAt(0) === '/' ? loaderContext.rootContext : // eslint-disable-next-line no-undefined - undefined); // In case there is module request, send this to webpack resolver + forWebpackResolver && rootContext); // In case there is module request, send this to webpack resolver if (forWebpackResolver && isModuleImport.test(url)) { return [...new Set([request, url])]; @@ -232,12 +238,41 @@ url, forWebpackResolver = false) { return [...new Set([`${dirname}/_${basename}`, request].concat(forWebpackResolver ? [`${_path.default.dirname(url)}/_${basename}`, url] : []))]; } -const matchCss = /\.css$/i; -const isSpecialModuleImport = /^~[^/]+$/; // `[drive_letter]:\` + `\\[server]\[sharename]\` +function promiseResolve(callbackResolve) { + return (context, request) => new Promise((resolve, reject) => { + callbackResolve(context, request, (error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } + }); + }); +} -const isNativeWin32Path = /^[a-zA-Z]:[/\\]|^\\\\/i; +const IS_SPECIAL_MODULE_IMPORT = /^~[^/]+$/; // `[drive_letter]:\` + `\\[server]\[sharename]\` -function getWebpackImporter(loaderContext, implementation, includePaths) { +const IS_NATIVE_WIN32_PATH = /^[a-z]:[/\\]|^\\\\/i; +/** + * @public + * Create the resolve function used in the custom Sass importer. + * + * Can be used by external tools to mimic how `sass-loader` works, for example + * in a Jest transform. Such usages will want to wrap `resolve.create` from + * [`enhanced-resolve`]{@link https://github.com/webpack/enhanced-resolve} to + * pass as the `resolverFactory` argument. + * + * @param {Function} resolverFactory - A factory function for creating a Webpack + * resolver. + * @param {Object} implementation - The imported Sass implementation, both + * `sass` (Dart Sass) and `node-sass` are supported. + * @param {string[]} [includePaths] - The list of include paths passed to Sass. + * @param {boolean} [rootContext] - The configured Webpack root context. + * + * @throws If a compatible Sass implementation cannot be found. + */ + +function getWebpackResolver(resolverFactory, implementation, includePaths = [], rootContext = false) { async function startResolving(resolutionMap) { if (resolutionMap.length === 0) { return Promise.reject(); @@ -248,10 +283,9 @@ function getWebpackImporter(loaderContext, implementation, includePaths) { context, possibleRequests }] = resolutionMap; - let result; try { - result = await resolve(context, possibleRequests[0]); + return await resolve(context, possibleRequests[0]); } catch (_ignoreError) { const [, ...tailResult] = possibleRequests; @@ -263,19 +297,11 @@ function getWebpackImporter(loaderContext, implementation, includePaths) { resolutionMap[0].possibleRequests = tailResult; return startResolving(resolutionMap); - } // Add the result as dependency. - // Although we're also using stats.includedFiles, this might come in handy when an error occurs. - // In this case, we don't get stats.includedFiles from node-sass/sass. - - - loaderContext.addDependency(_path.default.normalize(result)); // By removing the CSS file extension, we trigger node-sass to include the CSS file instead of just linking it. - - return { - file: result.replace(matchCss, '') - }; + } } - const sassResolve = loaderContext.getResolve({ + const isDartSass = implementation.info.includes('dart-sass'); + const sassResolve = promiseResolve(resolverFactory({ alias: [], aliasFields: [], conditionNames: [], @@ -286,34 +312,35 @@ function getWebpackImporter(loaderContext, implementation, includePaths) { mainFiles: ['_index', 'index'], modules: [], restrictions: [/\.((sa|sc|c)ss)$/i] - }); - const webpackResolve = loaderContext.getResolve({ + })); + const webpackResolve = promiseResolve(resolverFactory({ conditionNames: ['sass', 'style'], mainFields: ['sass', 'style', 'main', '...'], mainFiles: ['_index', 'index', '...'], extensions: ['.sass', '.scss', '.css'], restrictions: [/\.((sa|sc|c)ss)$/i] - }); - return (originalUrl, prev, done) => { - let request = originalUrl; - const isFileScheme = originalUrl.slice(0, 5).toLowerCase() === 'file:'; + })); + return (context, request) => { + const originalRequest = request; + const isFileScheme = originalRequest.slice(0, 5).toLowerCase() === 'file:'; if (isFileScheme) { try { // eslint-disable-next-line no-param-reassign - request = _url.default.fileURLToPath(originalUrl); + request = _url.default.fileURLToPath(originalRequest); } catch (ignoreError) { + // eslint-disable-next-line no-param-reassign request = request.slice(7); } } let resolutionMap = []; const needEmulateSassResolver = // `sass` doesn't support module import - !isSpecialModuleImport.test(request) && // We need improve absolute paths handling. + !IS_SPECIAL_MODULE_IMPORT.test(request) && // We need improve absolute paths handling. // Absolute paths should be resolved: // - Server-relative URLs - `/path/to/file.ext` (where `` is root context) // - Absolute path - `/full/path/to/file.ext` or `C:\\full\path\to\file.ext` - !isFileScheme && !originalUrl.startsWith('/') && !isNativeWin32Path.test(originalUrl); + !isFileScheme && !originalRequest.startsWith('/') && !IS_NATIVE_WIN32_PATH.test(originalRequest); if (includePaths.length > 0 && needEmulateSassResolver) { // The order of import precedence is as follows: @@ -325,34 +352,54 @@ function getWebpackImporter(loaderContext, implementation, includePaths) { // 5. Filesystem imports relative to a `SASS_PATH` path. // // Because `sass`/`node-sass` run custom importers before `3`, `4` and `5` points, we need to emulate this behavior to avoid wrong resolution. - const sassPossibleRequests = getPossibleRequests(loaderContext, request); - const isDartSass = implementation.info.includes('dart-sass'); // `node-sass` calls our importer before `1. Filesystem imports relative to the base file.`, so we need emulate this too + const sassPossibleRequests = getPossibleRequests(request); // `node-sass` calls our importer before `1. Filesystem imports relative to the base file.`, so we need emulate this too if (!isDartSass) { resolutionMap = resolutionMap.concat({ resolve: sassResolve, - context: _path.default.dirname(prev), + context: _path.default.dirname(context), possibleRequests: sassPossibleRequests }); } - resolutionMap = resolutionMap.concat(includePaths.map(context => ({ + resolutionMap = resolutionMap.concat( // eslint-disable-next-line no-shadow + includePaths.map(context => ({ resolve: sassResolve, context, possibleRequests: sassPossibleRequests }))); } - const webpackPossibleRequests = getPossibleRequests(loaderContext, request, true); + const webpackPossibleRequests = getPossibleRequests(request, true, rootContext); resolutionMap = resolutionMap.concat({ resolve: webpackResolve, - context: _path.default.dirname(prev), + context: _path.default.dirname(context), possibleRequests: webpackPossibleRequests }); - startResolving(resolutionMap) // Catch all resolving errors, return the original file and pass responsibility back to other custom importers - .catch(() => ({ - file: originalUrl - })).then(result => done(result)); + return startResolving(resolutionMap); + }; +} + +const matchCss = /\.css$/i; + +function getWebpackImporter(loaderContext, implementation, includePaths) { + const resolve = getWebpackResolver(loaderContext.getResolve, implementation, includePaths, loaderContext.rootContext); + return (originalUrl, prev, done) => { + resolve(prev, originalUrl).then(result => { + // Add the result as dependency. + // Although we're also using stats.includedFiles, this might come in handy when an error occurs. + // In this case, we don't get stats.includedFiles from node-sass/sass. + loaderContext.addDependency(_path.default.normalize(result)); // By removing the CSS file extension, we trigger node-sass to include the CSS file instead of just linking it. + + done({ + file: result.replace(matchCss, '') + }); + }) // Catch all resolving errors, return the original file and pass responsibility back to other custom importers + .catch(() => { + done({ + file: originalUrl + }); + }); }; } @@ -380,4 +427,32 @@ function getRenderFunctionFromSassImplementation(implementation) { } return nodeSassJobQueue.push.bind(nodeSassJobQueue); +} + +const ABSOLUTE_SCHEME = /^[A-Za-z0-9+\-.]+:/; + +function getURLType(source) { + if (source[0] === '/') { + if (source[1] === '/') { + return 'scheme-relative'; + } + + return 'path-absolute'; + } + + if (IS_NATIVE_WIN32_PATH.test(source)) { + return 'path-absolute'; + } + + return ABSOLUTE_SCHEME.test(source) ? 'absolute' : 'path-relative'; +} + +function absolutifySourceMapSource(sourceRoot, source) { + const sourceType = getURLType(source); // Do no touch `scheme-relative`, `path-absolute` and `absolute` types + + if (sourceType === 'path-relative') { + return _path.default.resolve(sourceRoot, _path.default.normalize(source)); + } + + return source; } \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/.tonic_example.js b/conf/site/node_modules/sass-loader/node_modules/ajv/.tonic_example.js deleted file mode 100644 index aa11812d..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/.tonic_example.js +++ /dev/null @@ -1,20 +0,0 @@ -var Ajv = require('ajv'); -var ajv = new Ajv({allErrors: true}); - -var schema = { - "properties": { - "foo": { "type": "string" }, - "bar": { "type": "number", "maximum": 3 } - } -}; - -var validate = ajv.compile(schema); - -test({"foo": "abc", "bar": 2}); -test({"foo": 2, "bar": 4}); - -function test(data) { - var valid = validate(data); - if (valid) console.log('Valid!'); - else console.log('Invalid: ' + ajv.errorsText(validate.errors)); -} \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/LICENSE b/conf/site/node_modules/sass-loader/node_modules/ajv/LICENSE deleted file mode 100644 index 96ee7199..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/README.md b/conf/site/node_modules/sass-loader/node_modules/ajv/README.md deleted file mode 100644 index 5e502db9..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/README.md +++ /dev/null @@ -1,1478 +0,0 @@ -Ajv logo - -# Ajv: Another JSON Schema Validator - -The fastest JSON Schema validator for Node.js and browser. Supports draft-04/06/07. - -[![Build Status](https://travis-ci.org/ajv-validator/ajv.svg?branch=master)](https://travis-ci.org/ajv-validator/ajv) -[![npm](https://img.shields.io/npm/v/ajv.svg)](https://www.npmjs.com/package/ajv) -[![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv) -[![Coverage Status](https://coveralls.io/repos/github/ajv-validator/ajv/badge.svg?branch=master)](https://coveralls.io/github/ajv-validator/ajv?branch=master) -[![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv) -[![GitHub Sponsors](https://img.shields.io/badge/$-sponsors-brightgreen)](https://github.com/sponsors/epoberezkin) - - -## Please [sponsor Ajv development](https://github.com/sponsors/epoberezkin) - -I will get straight to the point - I need your support to ensure that the development of Ajv continues. - -I have developed Ajv for 5 years in my free time, but it is not sustainable. I'd appreciate if you consider supporting its further development with donations: -- [GitHub sponsors page](https://github.com/sponsors/epoberezkin) (GitHub will match it) -- [Ajv Open Collective️](https://opencollective.com/ajv) - -There are many small and large improvements that are long due, including the support of the next versions of JSON Schema specification, improving website and documentation, and making Ajv more modular and maintainable to address its limitations - what Ajv needs to evolve is much more than what I can contribute in my free time. - -I would also really appreciate any advice you could give on how to raise funds for Ajv development - whether some suitable open-source fund I could apply to or some sponsor I should approach. - -Since 2015 Ajv has become widely used, thanks to your help and contributions: - -- **90** contributors 🏗 -- **5,000** dependent npm packages ⚙️ -- **7,000** github stars, from GitHub users [all over the world](https://www.google.com/maps/d/u/0/viewer?mid=1MGRV8ciFUGIbO1l0EKFWNJGYE7iSkDxP&ll=-3.81666561775622e-14%2C4.821737100000007&z=2) ⭐️ -- **5,000,000** dependent repositories on GitHub 🚀 -- **120,000,000** npm downloads per month! 💯 - -I believe it would benefit all Ajv users to help put together the fund that will be used for its further development - it would allow to bring some additional maintainers to the project. - -Thank you - - -#### Open Collective sponsors - - - - - - - - - - - - - - - -## Using version 6 - -[JSON Schema draft-07](http://json-schema.org/latest/json-schema-validation.html) is published. - -[Ajv version 6.0.0](https://github.com/ajv-validator/ajv/releases/tag/v6.0.0) that supports draft-07 is released. It may require either migrating your schemas or updating your code (to continue using draft-04 and v5 schemas, draft-06 schemas will be supported without changes). - -__Please note__: To use Ajv with draft-06 schemas you need to explicitly add the meta-schema to the validator instance: - -```javascript -ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')); -``` - -To use Ajv with draft-04 schemas in addition to explicitly adding meta-schema you also need to use option schemaId: - -```javascript -var ajv = new Ajv({schemaId: 'id'}); -// If you want to use both draft-04 and draft-06/07 schemas: -// var ajv = new Ajv({schemaId: 'auto'}); -ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json')); -``` - - -## Contents - -- [Performance](#performance) -- [Features](#features) -- [Getting started](#getting-started) -- [Frequently Asked Questions](https://github.com/ajv-validator/ajv/blob/master/FAQ.md) -- [Using in browser](#using-in-browser) - - [Ajv and Content Security Policies (CSP)](#ajv-and-content-security-policies-csp) -- [Command line interface](#command-line-interface) -- Validation - - [Keywords](#validation-keywords) - - [Annotation keywords](#annotation-keywords) - - [Formats](#formats) - - [Combining schemas with $ref](#ref) - - [$data reference](#data-reference) - - NEW: [$merge and $patch keywords](#merge-and-patch-keywords) - - [Defining custom keywords](#defining-custom-keywords) - - [Asynchronous schema compilation](#asynchronous-schema-compilation) - - [Asynchronous validation](#asynchronous-validation) -- [Security considerations](#security-considerations) - - [Security contact](#security-contact) - - [Untrusted schemas](#untrusted-schemas) - - [Circular references in objects](#circular-references-in-javascript-objects) - - [Trusted schemas](#security-risks-of-trusted-schemas) - - [ReDoS attack](#redos-attack) -- Modifying data during validation - - [Filtering data](#filtering-data) - - [Assigning defaults](#assigning-defaults) - - [Coercing data types](#coercing-data-types) -- API - - [Methods](#api) - - [Options](#options) - - [Validation errors](#validation-errors) -- [Plugins](#plugins) -- [Related packages](#related-packages) -- [Some packages using Ajv](#some-packages-using-ajv) -- [Tests, Contributing, Changes history](#tests) -- [Support, Code of conduct, License](#open-source-software-support) - - -## Performance - -Ajv generates code using [doT templates](https://github.com/olado/doT) to turn JSON Schemas into super-fast validation functions that are efficient for v8 optimization. - -Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks: - -- [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place -- [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster -- [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html) -- [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html) - - -Performance of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark): - -[![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=32,4,1&chs=600x416&chxl=-1:|djv|ajv|json-schema-validator-generator|jsen|is-my-json-valid|themis|z-schema|jsck|skeemas|json-schema-library|tv4&chd=t:100,98,72.1,66.8,50.1,15.1,6.1,3.8,1.2,0.7,0.2)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance) - - -## Features - -- Ajv implements full JSON Schema [draft-06/07](http://json-schema.org/) and draft-04 standards: - - all validation keywords (see [JSON Schema validation keywords](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md)) - - full support of remote refs (remote schemas have to be added with `addSchema` or compiled to be available) - - support of circular references between schemas - - correct string lengths for strings with unicode pairs (can be turned off) - - [formats](#formats) defined by JSON Schema draft-07 standard and custom formats (can be turned off) - - [validates schemas against meta-schema](#api-validateschema) -- supports [browsers](#using-in-browser) and Node.js 0.10-14.x -- [asynchronous loading](#asynchronous-schema-compilation) of referenced schemas during compilation -- "All errors" validation mode with [option allErrors](#options) -- [error messages with parameters](#validation-errors) describing error reasons to allow creating custom error messages -- i18n error messages support with [ajv-i18n](https://github.com/ajv-validator/ajv-i18n) package -- [filtering data](#filtering-data) from additional properties -- [assigning defaults](#assigning-defaults) to missing properties and items -- [coercing data](#coercing-data-types) to the types specified in `type` keywords -- [custom keywords](#defining-custom-keywords) -- draft-06/07 keywords `const`, `contains`, `propertyNames` and `if/then/else` -- draft-06 boolean schemas (`true`/`false` as a schema to always pass/fail). -- keywords `switch`, `patternRequired`, `formatMaximum` / `formatMinimum` and `formatExclusiveMaximum` / `formatExclusiveMinimum` from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) with [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package -- [$data reference](#data-reference) to use values from the validated data as values for the schema keywords -- [asynchronous validation](#asynchronous-validation) of custom formats and keywords - -Currently Ajv is the only validator that passes all the tests from [JSON Schema Test Suite](https://github.com/json-schema/JSON-Schema-Test-Suite) (according to [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark), apart from the test that requires that `1.0` is not an integer that is impossible to satisfy in JavaScript). - - -## Install - -``` -npm install ajv -``` - - -## Getting started - -Try it in the Node.js REPL: https://tonicdev.com/npm/ajv - - -The fastest validation call: - -```javascript -// Node.js require: -var Ajv = require('ajv'); -// or ESM/TypeScript import -import Ajv from 'ajv'; - -var ajv = new Ajv(); // options can be passed, e.g. {allErrors: true} -var validate = ajv.compile(schema); -var valid = validate(data); -if (!valid) console.log(validate.errors); -``` - -or with less code - -```javascript -// ... -var valid = ajv.validate(schema, data); -if (!valid) console.log(ajv.errors); -// ... -``` - -or - -```javascript -// ... -var valid = ajv.addSchema(schema, 'mySchema') - .validate('mySchema', data); -if (!valid) console.log(ajv.errorsText()); -// ... -``` - -See [API](#api) and [Options](#options) for more details. - -Ajv compiles schemas to functions and caches them in all cases (using schema serialized with [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) or a custom function as a key), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again. - -The best performance is achieved when using compiled functions returned by `compile` or `getSchema` methods (there is no additional function call). - -__Please note__: every time a validation function or `ajv.validate` are called `errors` property is overwritten. You need to copy `errors` array reference to another variable if you want to use it later (e.g., in the callback). See [Validation errors](#validation-errors) - -__Note for TypeScript users__: `ajv` provides its own TypeScript declarations -out of the box, so you don't need to install the deprecated `@types/ajv` -module. - - -## Using in browser - -You can require Ajv directly from the code you browserify - in this case Ajv will be a part of your bundle. - -If you need to use Ajv in several bundles you can create a separate UMD bundle using `npm run bundle` script (thanks to [siddo420](https://github.com/siddo420)). - -Then you need to load Ajv in the browser: -```html - -``` - -This bundle can be used with different module systems; it creates global `Ajv` if no module system is found. - -The browser bundle is available on [cdnjs](https://cdnjs.com/libraries/ajv). - -Ajv is tested with these browsers: - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/epoberezkin.svg)](https://saucelabs.com/u/epoberezkin) - -__Please note__: some frameworks, e.g. Dojo, may redefine global require in such way that is not compatible with CommonJS module format. In such case Ajv bundle has to be loaded before the framework and then you can use global Ajv (see issue [#234](https://github.com/ajv-validator/ajv/issues/234)). - - -### Ajv and Content Security Policies (CSP) - -If you're using Ajv to compile a schema (the typical use) in a browser document that is loaded with a Content Security Policy (CSP), that policy will require a `script-src` directive that includes the value `'unsafe-eval'`. -:warning: NOTE, however, that `unsafe-eval` is NOT recommended in a secure CSP[[1]](https://developer.chrome.com/extensions/contentSecurityPolicy#relaxing-eval), as it has the potential to open the document to cross-site scripting (XSS) attacks. - -In order to make use of Ajv without easing your CSP, you can [pre-compile a schema using the CLI](https://github.com/ajv-validator/ajv-cli#compile-schemas). This will transpile the schema JSON into a JavaScript file that exports a `validate` function that works simlarly to a schema compiled at runtime. - -Note that pre-compilation of schemas is performed using [ajv-pack](https://github.com/ajv-validator/ajv-pack) and there are [some limitations to the schema features it can compile](https://github.com/ajv-validator/ajv-pack#limitations). A successfully pre-compiled schema is equivalent to the same schema compiled at runtime. - - -## Command line interface - -CLI is available as a separate npm package [ajv-cli](https://github.com/ajv-validator/ajv-cli). It supports: - -- compiling JSON Schemas to test their validity -- BETA: generating standalone module exporting a validation function to be used without Ajv (using [ajv-pack](https://github.com/ajv-validator/ajv-pack)) -- migrate schemas to draft-07 (using [json-schema-migrate](https://github.com/epoberezkin/json-schema-migrate)) -- validating data file(s) against JSON Schema -- testing expected validity of data against JSON Schema -- referenced schemas -- custom meta-schemas -- files in JSON, JSON5, YAML, and JavaScript format -- all Ajv options -- reporting changes in data after validation in [JSON-patch](https://tools.ietf.org/html/rfc6902) format - - -## Validation keywords - -Ajv supports all validation keywords from draft-07 of JSON Schema standard: - -- [type](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#type) -- [for numbers](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#keywords-for-numbers) - maximum, minimum, exclusiveMaximum, exclusiveMinimum, multipleOf -- [for strings](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#keywords-for-strings) - maxLength, minLength, pattern, format -- [for arrays](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#keywords-for-arrays) - maxItems, minItems, uniqueItems, items, additionalItems, [contains](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#contains) -- [for objects](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#keywords-for-objects) - maxProperties, minProperties, required, properties, patternProperties, additionalProperties, dependencies, [propertyNames](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#propertynames) -- [for all types](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#keywords-for-all-types) - enum, [const](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#const) -- [compound keywords](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#compound-keywords) - not, oneOf, anyOf, allOf, [if/then/else](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#ifthenelse) - -With [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package Ajv also supports validation keywords from [JSON Schema extension proposals](https://github.com/json-schema/json-schema/wiki/v5-Proposals) for JSON Schema standard: - -- [patternRequired](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#patternrequired-proposed) - like `required` but with patterns that some property should match. -- [formatMaximum, formatMinimum, formatExclusiveMaximum, formatExclusiveMinimum](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md#formatmaximum--formatminimum-and-exclusiveformatmaximum--exclusiveformatminimum-proposed) - setting limits for date, time, etc. - -See [JSON Schema validation keywords](https://github.com/ajv-validator/ajv/blob/master/KEYWORDS.md) for more details. - - -## Annotation keywords - -JSON Schema specification defines several annotation keywords that describe schema itself but do not perform any validation. - -- `title` and `description`: information about the data represented by that schema -- `$comment` (NEW in draft-07): information for developers. With option `$comment` Ajv logs or passes the comment string to the user-supplied function. See [Options](#options). -- `default`: a default value of the data instance, see [Assigning defaults](#assigning-defaults). -- `examples` (NEW in draft-06): an array of data instances. Ajv does not check the validity of these instances against the schema. -- `readOnly` and `writeOnly` (NEW in draft-07): marks data-instance as read-only or write-only in relation to the source of the data (database, api, etc.). -- `contentEncoding`: [RFC 2045](https://tools.ietf.org/html/rfc2045#section-6.1 ), e.g., "base64". -- `contentMediaType`: [RFC 2046](https://tools.ietf.org/html/rfc2046), e.g., "image/png". - -__Please note__: Ajv does not implement validation of the keywords `examples`, `contentEncoding` and `contentMediaType` but it reserves them. If you want to create a plugin that implements some of them, it should remove these keywords from the instance. - - -## Formats - -Ajv implements formats defined by JSON Schema specification and several other formats. It is recommended NOT to use "format" keyword implementations with untrusted data, as they use potentially unsafe regular expressions - see [ReDoS attack](#redos-attack). - -__Please note__: if you need to use "format" keyword to validate untrusted data, you MUST assess their suitability and safety for your validation scenarios. - -The following formats are implemented for string validation with "format" keyword: - -- _date_: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6). -- _time_: time with optional time-zone. -- _date-time_: date-time from the same source (time-zone is mandatory). `date`, `time` and `date-time` validate ranges in `full` mode and only regexp in `fast` mode (see [options](#options)). -- _uri_: full URI. -- _uri-reference_: URI reference, including full and relative URIs. -- _uri-template_: URI template according to [RFC6570](https://tools.ietf.org/html/rfc6570) -- _url_ (deprecated): [URL record](https://url.spec.whatwg.org/#concept-url). -- _email_: email address. -- _hostname_: host name according to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5). -- _ipv4_: IP address v4. -- _ipv6_: IP address v6. -- _regex_: tests whether a string is a valid regular expression by passing it to RegExp constructor. -- _uuid_: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122). -- _json-pointer_: JSON-pointer according to [RFC6901](https://tools.ietf.org/html/rfc6901). -- _relative-json-pointer_: relative JSON-pointer according to [this draft](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00). - -__Please note__: JSON Schema draft-07 also defines formats `iri`, `iri-reference`, `idn-hostname` and `idn-email` for URLs, hostnames and emails with international characters. Ajv does not implement these formats. If you create Ajv plugin that implements them please make a PR to mention this plugin here. - -There are two modes of format validation: `fast` and `full`. This mode affects formats `date`, `time`, `date-time`, `uri`, `uri-reference`, and `email`. See [Options](#options) for details. - -You can add additional formats and replace any of the formats above using [addFormat](#api-addformat) method. - -The option `unknownFormats` allows changing the default behaviour when an unknown format is encountered. In this case Ajv can either fail schema compilation (default) or ignore it (default in versions before 5.0.0). You also can whitelist specific format(s) to be ignored. See [Options](#options) for details. - -You can find regular expressions used for format validation and the sources that were used in [formats.js](https://github.com/ajv-validator/ajv/blob/master/lib/compile/formats.js). - - -## Combining schemas with $ref - -You can structure your validation logic across multiple schema files and have schemas reference each other using `$ref` keyword. - -Example: - -```javascript -var schema = { - "$id": "http://example.com/schemas/schema.json", - "type": "object", - "properties": { - "foo": { "$ref": "defs.json#/definitions/int" }, - "bar": { "$ref": "defs.json#/definitions/str" } - } -}; - -var defsSchema = { - "$id": "http://example.com/schemas/defs.json", - "definitions": { - "int": { "type": "integer" }, - "str": { "type": "string" } - } -}; -``` - -Now to compile your schema you can either pass all schemas to Ajv instance: - -```javascript -var ajv = new Ajv({schemas: [schema, defsSchema]}); -var validate = ajv.getSchema('http://example.com/schemas/schema.json'); -``` - -or use `addSchema` method: - -```javascript -var ajv = new Ajv; -var validate = ajv.addSchema(defsSchema) - .compile(schema); -``` - -See [Options](#options) and [addSchema](#api) method. - -__Please note__: -- `$ref` is resolved as the uri-reference using schema $id as the base URI (see the example). -- References can be recursive (and mutually recursive) to implement the schemas for different data structures (such as linked lists, trees, graphs, etc.). -- You don't have to host your schema files at the URIs that you use as schema $id. These URIs are only used to identify the schemas, and according to JSON Schema specification validators should not expect to be able to download the schemas from these URIs. -- The actual location of the schema file in the file system is not used. -- You can pass the identifier of the schema as the second parameter of `addSchema` method or as a property name in `schemas` option. This identifier can be used instead of (or in addition to) schema $id. -- You cannot have the same $id (or the schema identifier) used for more than one schema - the exception will be thrown. -- You can implement dynamic resolution of the referenced schemas using `compileAsync` method. In this way you can store schemas in any system (files, web, database, etc.) and reference them without explicitly adding to Ajv instance. See [Asynchronous schema compilation](#asynchronous-schema-compilation). - - -## $data reference - -With `$data` option you can use values from the validated data as the values for the schema keywords. See [proposal](https://github.com/json-schema-org/json-schema-spec/issues/51) for more information about how it works. - -`$data` reference is supported in the keywords: const, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties, formatMaximum / formatMinimum, formatExclusiveMaximum / formatExclusiveMinimum, multipleOf, pattern, required, uniqueItems. - -The value of "$data" should be a [JSON-pointer](https://tools.ietf.org/html/rfc6901) to the data (the root is always the top level data object, even if the $data reference is inside a referenced subschema) or a [relative JSON-pointer](http://tools.ietf.org/html/draft-luff-relative-json-pointer-00) (it is relative to the current point in data; if the $data reference is inside a referenced subschema it cannot point to the data outside of the root level for this subschema). - -Examples. - -This schema requires that the value in property `smaller` is less or equal than the value in the property larger: - -```javascript -var ajv = new Ajv({$data: true}); - -var schema = { - "properties": { - "smaller": { - "type": "number", - "maximum": { "$data": "1/larger" } - }, - "larger": { "type": "number" } - } -}; - -var validData = { - smaller: 5, - larger: 7 -}; - -ajv.validate(schema, validData); // true -``` - -This schema requires that the properties have the same format as their field names: - -```javascript -var schema = { - "additionalProperties": { - "type": "string", - "format": { "$data": "0#" } - } -}; - -var validData = { - 'date-time': '1963-06-19T08:30:06.283185Z', - email: 'joe.bloggs@example.com' -} -``` - -`$data` reference is resolved safely - it won't throw even if some property is undefined. If `$data` resolves to `undefined` the validation succeeds (with the exclusion of `const` keyword). If `$data` resolves to incorrect type (e.g. not "number" for maximum keyword) the validation fails. - - -## $merge and $patch keywords - -With the package [ajv-merge-patch](https://github.com/ajv-validator/ajv-merge-patch) you can use the keywords `$merge` and `$patch` that allow extending JSON Schemas with patches using formats [JSON Merge Patch (RFC 7396)](https://tools.ietf.org/html/rfc7396) and [JSON Patch (RFC 6902)](https://tools.ietf.org/html/rfc6902). - -To add keywords `$merge` and `$patch` to Ajv instance use this code: - -```javascript -require('ajv-merge-patch')(ajv); -``` - -Examples. - -Using `$merge`: - -```json -{ - "$merge": { - "source": { - "type": "object", - "properties": { "p": { "type": "string" } }, - "additionalProperties": false - }, - "with": { - "properties": { "q": { "type": "number" } } - } - } -} -``` - -Using `$patch`: - -```json -{ - "$patch": { - "source": { - "type": "object", - "properties": { "p": { "type": "string" } }, - "additionalProperties": false - }, - "with": [ - { "op": "add", "path": "/properties/q", "value": { "type": "number" } } - ] - } -} -``` - -The schemas above are equivalent to this schema: - -```json -{ - "type": "object", - "properties": { - "p": { "type": "string" }, - "q": { "type": "number" } - }, - "additionalProperties": false -} -``` - -The properties `source` and `with` in the keywords `$merge` and `$patch` can use absolute or relative `$ref` to point to other schemas previously added to the Ajv instance or to the fragments of the current schema. - -See the package [ajv-merge-patch](https://github.com/ajv-validator/ajv-merge-patch) for more information. - - -## Defining custom keywords - -The advantages of using custom keywords are: - -- allow creating validation scenarios that cannot be expressed using JSON Schema -- simplify your schemas -- help bringing a bigger part of the validation logic to your schemas -- make your schemas more expressive, less verbose and closer to your application domain -- implement custom data processors that modify your data (`modifying` option MUST be used in keyword definition) and/or create side effects while the data is being validated - -If a keyword is used only for side-effects and its validation result is pre-defined, use option `valid: true/false` in keyword definition to simplify both generated code (no error handling in case of `valid: true`) and your keyword functions (no need to return any validation result). - -The concerns you have to be aware of when extending JSON Schema standard with custom keywords are the portability and understanding of your schemas. You will have to support these custom keywords on other platforms and to properly document these keywords so that everybody can understand them in your schemas. - -You can define custom keywords with [addKeyword](#api-addkeyword) method. Keywords are defined on the `ajv` instance level - new instances will not have previously defined keywords. - -Ajv allows defining keywords with: -- validation function -- compilation function -- macro function -- inline compilation function that should return code (as string) that will be inlined in the currently compiled schema. - -Example. `range` and `exclusiveRange` keywords using compiled schema: - -```javascript -ajv.addKeyword('range', { - type: 'number', - compile: function (sch, parentSchema) { - var min = sch[0]; - var max = sch[1]; - - return parentSchema.exclusiveRange === true - ? function (data) { return data > min && data < max; } - : function (data) { return data >= min && data <= max; } - } -}); - -var schema = { "range": [2, 4], "exclusiveRange": true }; -var validate = ajv.compile(schema); -console.log(validate(2.01)); // true -console.log(validate(3.99)); // true -console.log(validate(2)); // false -console.log(validate(4)); // false -``` - -Several custom keywords (typeof, instanceof, range and propertyNames) are defined in [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package - they can be used for your schemas and as a starting point for your own custom keywords. - -See [Defining custom keywords](https://github.com/ajv-validator/ajv/blob/master/CUSTOM.md) for more details. - - -## Asynchronous schema compilation - -During asynchronous compilation remote references are loaded using supplied function. See `compileAsync` [method](#api-compileAsync) and `loadSchema` [option](#options). - -Example: - -```javascript -var ajv = new Ajv({ loadSchema: loadSchema }); - -ajv.compileAsync(schema).then(function (validate) { - var valid = validate(data); - // ... -}); - -function loadSchema(uri) { - return request.json(uri).then(function (res) { - if (res.statusCode >= 400) - throw new Error('Loading error: ' + res.statusCode); - return res.body; - }); -} -``` - -__Please note__: [Option](#options) `missingRefs` should NOT be set to `"ignore"` or `"fail"` for asynchronous compilation to work. - - -## Asynchronous validation - -Example in Node.js REPL: https://tonicdev.com/esp/ajv-asynchronous-validation - -You can define custom formats and keywords that perform validation asynchronously by accessing database or some other service. You should add `async: true` in the keyword or format definition (see [addFormat](#api-addformat), [addKeyword](#api-addkeyword) and [Defining custom keywords](#defining-custom-keywords)). - -If your schema uses asynchronous formats/keywords or refers to some schema that contains them it should have `"$async": true` keyword so that Ajv can compile it correctly. If asynchronous format/keyword or reference to asynchronous schema is used in the schema without `$async` keyword Ajv will throw an exception during schema compilation. - -__Please note__: all asynchronous subschemas that are referenced from the current or other schemas should have `"$async": true` keyword as well, otherwise the schema compilation will fail. - -Validation function for an asynchronous custom format/keyword should return a promise that resolves with `true` or `false` (or rejects with `new Ajv.ValidationError(errors)` if you want to return custom errors from the keyword function). - -Ajv compiles asynchronous schemas to [es7 async functions](http://tc39.github.io/ecmascript-asyncawait/) that can optionally be transpiled with [nodent](https://github.com/MatAtBread/nodent). Async functions are supported in Node.js 7+ and all modern browsers. You can also supply any other transpiler as a function via `processCode` option. See [Options](#options). - -The compiled validation function has `$async: true` property (if the schema is asynchronous), so you can differentiate these functions if you are using both synchronous and asynchronous schemas. - -Validation result will be a promise that resolves with validated data or rejects with an exception `Ajv.ValidationError` that contains the array of validation errors in `errors` property. - - -Example: - -```javascript -var ajv = new Ajv; -// require('ajv-async')(ajv); - -ajv.addKeyword('idExists', { - async: true, - type: 'number', - validate: checkIdExists -}); - - -function checkIdExists(schema, data) { - return knex(schema.table) - .select('id') - .where('id', data) - .then(function (rows) { - return !!rows.length; // true if record is found - }); -} - -var schema = { - "$async": true, - "properties": { - "userId": { - "type": "integer", - "idExists": { "table": "users" } - }, - "postId": { - "type": "integer", - "idExists": { "table": "posts" } - } - } -}; - -var validate = ajv.compile(schema); - -validate({ userId: 1, postId: 19 }) -.then(function (data) { - console.log('Data is valid', data); // { userId: 1, postId: 19 } -}) -.catch(function (err) { - if (!(err instanceof Ajv.ValidationError)) throw err; - // data is invalid - console.log('Validation errors:', err.errors); -}); -``` - -### Using transpilers with asynchronous validation functions. - -[ajv-async](https://github.com/ajv-validator/ajv-async) uses [nodent](https://github.com/MatAtBread/nodent) to transpile async functions. To use another transpiler you should separately install it (or load its bundle in the browser). - - -#### Using nodent - -```javascript -var ajv = new Ajv; -require('ajv-async')(ajv); -// in the browser if you want to load ajv-async bundle separately you can: -// window.ajvAsync(ajv); -var validate = ajv.compile(schema); // transpiled es7 async function -validate(data).then(successFunc).catch(errorFunc); -``` - - -#### Using other transpilers - -```javascript -var ajv = new Ajv({ processCode: transpileFunc }); -var validate = ajv.compile(schema); // transpiled es7 async function -validate(data).then(successFunc).catch(errorFunc); -``` - -See [Options](#options). - - -## Security considerations - -JSON Schema, if properly used, can replace data sanitisation. It doesn't replace other API security considerations. It also introduces additional security aspects to consider. - - -##### Security contact - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerabilities via GitHub issues. - - -##### Untrusted schemas - -Ajv treats JSON schemas as trusted as your application code. This security model is based on the most common use case, when the schemas are static and bundled together with the application. - -If your schemas are received from untrusted sources (or generated from untrusted data) there are several scenarios you need to prevent: -- compiling schemas can cause stack overflow (if they are too deep) -- compiling schemas can be slow (e.g. [#557](https://github.com/ajv-validator/ajv/issues/557)) -- validating certain data can be slow - -It is difficult to predict all the scenarios, but at the very least it may help to limit the size of untrusted schemas (e.g. limit JSON string length) and also the maximum schema object depth (that can be high for relatively small JSON strings). You also may want to mitigate slow regular expressions in `pattern` and `patternProperties` keywords. - -Regardless the measures you take, using untrusted schemas increases security risks. - - -##### Circular references in JavaScript objects - -Ajv does not support schemas and validated data that have circular references in objects. See [issue #802](https://github.com/ajv-validator/ajv/issues/802). - -An attempt to compile such schemas or validate such data would cause stack overflow (or will not complete in case of asynchronous validation). Depending on the parser you use, untrusted data can lead to circular references. - - -##### Security risks of trusted schemas - -Some keywords in JSON Schemas can lead to very slow validation for certain data. These keywords include (but may be not limited to): - -- `pattern` and `format` for large strings - in some cases using `maxLength` can help mitigate it, but certain regular expressions can lead to exponential validation time even with relatively short strings (see [ReDoS attack](#redos-attack)). -- `patternProperties` for large property names - use `propertyNames` to mitigate, but some regular expressions can have exponential evaluation time as well. -- `uniqueItems` for large non-scalar arrays - use `maxItems` to mitigate - -__Please note__: The suggestions above to prevent slow validation would only work if you do NOT use `allErrors: true` in production code (using it would continue validation after validation errors). - -You can validate your JSON schemas against [this meta-schema](https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-secure.json) to check that these recommendations are followed: - -```javascript -const isSchemaSecure = ajv.compile(require('ajv/lib/refs/json-schema-secure.json')); - -const schema1 = {format: 'email'}; -isSchemaSecure(schema1); // false - -const schema2 = {format: 'email', maxLength: MAX_LENGTH}; -isSchemaSecure(schema2); // true -``` - -__Please note__: following all these recommendation is not a guarantee that validation of untrusted data is safe - it can still lead to some undesirable results. - - -##### Content Security Policies (CSP) -See [Ajv and Content Security Policies (CSP)](#ajv-and-content-security-policies-csp) - - -## ReDoS attack - -Certain regular expressions can lead to the exponential evaluation time even with relatively short strings. - -Please assess the regular expressions you use in the schemas on their vulnerability to this attack - see [safe-regex](https://github.com/substack/safe-regex), for example. - -__Please note__: some formats that Ajv implements use [regular expressions](https://github.com/ajv-validator/ajv/blob/master/lib/compile/formats.js) that can be vulnerable to ReDoS attack, so if you use Ajv to validate data from untrusted sources __it is strongly recommended__ to consider the following: - -- making assessment of "format" implementations in Ajv. -- using `format: 'fast'` option that simplifies some of the regular expressions (although it does not guarantee that they are safe). -- replacing format implementations provided by Ajv with your own implementations of "format" keyword that either uses different regular expressions or another approach to format validation. Please see [addFormat](#api-addformat) method. -- disabling format validation by ignoring "format" keyword with option `format: false` - -Whatever mitigation you choose, please assume all formats provided by Ajv as potentially unsafe and make your own assessment of their suitability for your validation scenarios. - - -## Filtering data - -With [option `removeAdditional`](#options) (added by [andyscott](https://github.com/andyscott)) you can filter data during the validation. - -This option modifies original data. - -Example: - -```javascript -var ajv = new Ajv({ removeAdditional: true }); -var schema = { - "additionalProperties": false, - "properties": { - "foo": { "type": "number" }, - "bar": { - "additionalProperties": { "type": "number" }, - "properties": { - "baz": { "type": "string" } - } - } - } -} - -var data = { - "foo": 0, - "additional1": 1, // will be removed; `additionalProperties` == false - "bar": { - "baz": "abc", - "additional2": 2 // will NOT be removed; `additionalProperties` != false - }, -} - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 0, "bar": { "baz": "abc", "additional2": 2 } -``` - -If `removeAdditional` option in the example above were `"all"` then both `additional1` and `additional2` properties would have been removed. - -If the option were `"failing"` then property `additional1` would have been removed regardless of its value and property `additional2` would have been removed only if its value were failing the schema in the inner `additionalProperties` (so in the example above it would have stayed because it passes the schema, but any non-number would have been removed). - -__Please note__: If you use `removeAdditional` option with `additionalProperties` keyword inside `anyOf`/`oneOf` keywords your validation can fail with this schema, for example: - -```json -{ - "type": "object", - "oneOf": [ - { - "properties": { - "foo": { "type": "string" } - }, - "required": [ "foo" ], - "additionalProperties": false - }, - { - "properties": { - "bar": { "type": "integer" } - }, - "required": [ "bar" ], - "additionalProperties": false - } - ] -} -``` - -The intention of the schema above is to allow objects with either the string property "foo" or the integer property "bar", but not with both and not with any other properties. - -With the option `removeAdditional: true` the validation will pass for the object `{ "foo": "abc"}` but will fail for the object `{"bar": 1}`. It happens because while the first subschema in `oneOf` is validated, the property `bar` is removed because it is an additional property according to the standard (because it is not included in `properties` keyword in the same schema). - -While this behaviour is unexpected (issues [#129](https://github.com/ajv-validator/ajv/issues/129), [#134](https://github.com/ajv-validator/ajv/issues/134)), it is correct. To have the expected behaviour (both objects are allowed and additional properties are removed) the schema has to be refactored in this way: - -```json -{ - "type": "object", - "properties": { - "foo": { "type": "string" }, - "bar": { "type": "integer" } - }, - "additionalProperties": false, - "oneOf": [ - { "required": [ "foo" ] }, - { "required": [ "bar" ] } - ] -} -``` - -The schema above is also more efficient - it will compile into a faster function. - - -## Assigning defaults - -With [option `useDefaults`](#options) Ajv will assign values from `default` keyword in the schemas of `properties` and `items` (when it is the array of schemas) to the missing properties and items. - -With the option value `"empty"` properties and items equal to `null` or `""` (empty string) will be considered missing and assigned defaults. - -This option modifies original data. - -__Please note__: the default value is inserted in the generated validation code as a literal, so the value inserted in the data will be the deep clone of the default in the schema. - - -Example 1 (`default` in `properties`): - -```javascript -var ajv = new Ajv({ useDefaults: true }); -var schema = { - "type": "object", - "properties": { - "foo": { "type": "number" }, - "bar": { "type": "string", "default": "baz" } - }, - "required": [ "foo", "bar" ] -}; - -var data = { "foo": 1 }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 1, "bar": "baz" } -``` - -Example 2 (`default` in `items`): - -```javascript -var schema = { - "type": "array", - "items": [ - { "type": "number" }, - { "type": "string", "default": "foo" } - ] -} - -var data = [ 1 ]; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // [ 1, "foo" ] -``` - -`default` keywords in other cases are ignored: - -- not in `properties` or `items` subschemas -- in schemas inside `anyOf`, `oneOf` and `not` (see [#42](https://github.com/ajv-validator/ajv/issues/42)) -- in `if` subschema of `switch` keyword -- in schemas generated by custom macro keywords - -The [`strictDefaults` option](#options) customizes Ajv's behavior for the defaults that Ajv ignores (`true` raises an error, and `"log"` outputs a warning). - - -## Coercing data types - -When you are validating user inputs all your data properties are usually strings. The option `coerceTypes` allows you to have your data types coerced to the types specified in your schema `type` keywords, both to pass the validation and to use the correctly typed data afterwards. - -This option modifies original data. - -__Please note__: if you pass a scalar value to the validating function its type will be coerced and it will pass the validation, but the value of the variable you pass won't be updated because scalars are passed by value. - - -Example 1: - -```javascript -var ajv = new Ajv({ coerceTypes: true }); -var schema = { - "type": "object", - "properties": { - "foo": { "type": "number" }, - "bar": { "type": "boolean" } - }, - "required": [ "foo", "bar" ] -}; - -var data = { "foo": "1", "bar": "false" }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": 1, "bar": false } -``` - -Example 2 (array coercions): - -```javascript -var ajv = new Ajv({ coerceTypes: 'array' }); -var schema = { - "properties": { - "foo": { "type": "array", "items": { "type": "number" } }, - "bar": { "type": "boolean" } - } -}; - -var data = { "foo": "1", "bar": ["false"] }; - -var validate = ajv.compile(schema); - -console.log(validate(data)); // true -console.log(data); // { "foo": [1], "bar": false } -``` - -The coercion rules, as you can see from the example, are different from JavaScript both to validate user input as expected and to have the coercion reversible (to correctly validate cases where different types are defined in subschemas of "anyOf" and other compound keywords). - -See [Coercion rules](https://github.com/ajv-validator/ajv/blob/master/COERCION.md) for details. - - -## API - -##### new Ajv(Object options) -> Object - -Create Ajv instance. - - -##### .compile(Object schema) -> Function<Object data> - -Generate validating function and cache the compiled schema for future use. - -Validating function returns a boolean value. This function has properties `errors` and `schema`. Errors encountered during the last validation are assigned to `errors` property (it is assigned `null` if there was no errors). `schema` property contains the reference to the original schema. - -The schema passed to this method will be validated against meta-schema unless `validateSchema` option is false. If schema is invalid, an error will be thrown. See [options](#options). - - -##### .compileAsync(Object schema [, Boolean meta] [, Function callback]) -> Promise - -Asynchronous version of `compile` method that loads missing remote schemas using asynchronous function in `options.loadSchema`. This function returns a Promise that resolves to a validation function. An optional callback passed to `compileAsync` will be called with 2 parameters: error (or null) and validating function. The returned promise will reject (and the callback will be called with an error) when: - -- missing schema can't be loaded (`loadSchema` returns a Promise that rejects). -- a schema containing a missing reference is loaded, but the reference cannot be resolved. -- schema (or some loaded/referenced schema) is invalid. - -The function compiles schema and loads the first missing schema (or meta-schema) until all missing schemas are loaded. - -You can asynchronously compile meta-schema by passing `true` as the second parameter. - -See example in [Asynchronous compilation](#asynchronous-schema-compilation). - - -##### .validate(Object schema|String key|String ref, data) -> Boolean - -Validate data using passed schema (it will be compiled and cached). - -Instead of the schema you can use the key that was previously passed to `addSchema`, the schema id if it was present in the schema or any previously resolved reference. - -Validation errors will be available in the `errors` property of Ajv instance (`null` if there were no errors). - -__Please note__: every time this method is called the errors are overwritten so you need to copy them to another variable if you want to use them later. - -If the schema is asynchronous (has `$async` keyword on the top level) this method returns a Promise. See [Asynchronous validation](#asynchronous-validation). - - -##### .addSchema(Array<Object>|Object schema [, String key]) -> Ajv - -Add schema(s) to validator instance. This method does not compile schemas (but it still validates them). Because of that dependencies can be added in any order and circular dependencies are supported. It also prevents unnecessary compilation of schemas that are containers for other schemas but not used as a whole. - -Array of schemas can be passed (schemas should have ids), the second parameter will be ignored. - -Key can be passed that can be used to reference the schema and will be used as the schema id if there is no id inside the schema. If the key is not passed, the schema id will be used as the key. - - -Once the schema is added, it (and all the references inside it) can be referenced in other schemas and used to validate data. - -Although `addSchema` does not compile schemas, explicit compilation is not required - the schema will be compiled when it is used first time. - -By default the schema is validated against meta-schema before it is added, and if the schema does not pass validation the exception is thrown. This behaviour is controlled by `validateSchema` option. - -__Please note__: Ajv uses the [method chaining syntax](https://en.wikipedia.org/wiki/Method_chaining) for all methods with the prefix `add*` and `remove*`. -This allows you to do nice things like the following. - -```javascript -var validate = new Ajv().addSchema(schema).addFormat(name, regex).getSchema(uri); -``` - -##### .addMetaSchema(Array<Object>|Object schema [, String key]) -> Ajv - -Adds meta schema(s) that can be used to validate other schemas. That function should be used instead of `addSchema` because there may be instance options that would compile a meta schema incorrectly (at the moment it is `removeAdditional` option). - -There is no need to explicitly add draft-07 meta schema (http://json-schema.org/draft-07/schema) - it is added by default, unless option `meta` is set to `false`. You only need to use it if you have a changed meta-schema that you want to use to validate your schemas. See `validateSchema`. - - -##### .validateSchema(Object schema) -> Boolean - -Validates schema. This method should be used to validate schemas rather than `validate` due to the inconsistency of `uri` format in JSON Schema standard. - -By default this method is called automatically when the schema is added, so you rarely need to use it directly. - -If schema doesn't have `$schema` property, it is validated against draft 6 meta-schema (option `meta` should not be false). - -If schema has `$schema` property, then the schema with this id (that should be previously added) is used to validate passed schema. - -Errors will be available at `ajv.errors`. - - -##### .getSchema(String key) -> Function<Object data> - -Retrieve compiled schema previously added with `addSchema` by the key passed to `addSchema` or by its full reference (id). The returned validating function has `schema` property with the reference to the original schema. - - -##### .removeSchema([Object schema|String key|String ref|RegExp pattern]) -> Ajv - -Remove added/cached schema. Even if schema is referenced by other schemas it can be safely removed as dependent schemas have local references. - -Schema can be removed using: -- key passed to `addSchema` -- it's full reference (id) -- RegExp that should match schema id or key (meta-schemas won't be removed) -- actual schema object that will be stable-stringified to remove schema from cache - -If no parameter is passed all schemas but meta-schemas will be removed and the cache will be cleared. - - -##### .addFormat(String name, String|RegExp|Function|Object format) -> Ajv - -Add custom format to validate strings or numbers. It can also be used to replace pre-defined formats for Ajv instance. - -Strings are converted to RegExp. - -Function should return validation result as `true` or `false`. - -If object is passed it should have properties `validate`, `compare` and `async`: - -- _validate_: a string, RegExp or a function as described above. -- _compare_: an optional comparison function that accepts two strings and compares them according to the format meaning. This function is used with keywords `formatMaximum`/`formatMinimum` (defined in [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package). It should return `1` if the first value is bigger than the second value, `-1` if it is smaller and `0` if it is equal. -- _async_: an optional `true` value if `validate` is an asynchronous function; in this case it should return a promise that resolves with a value `true` or `false`. -- _type_: an optional type of data that the format applies to. It can be `"string"` (default) or `"number"` (see https://github.com/ajv-validator/ajv/issues/291#issuecomment-259923858). If the type of data is different, the validation will pass. - -Custom formats can be also added via `formats` option. - - -##### .addKeyword(String keyword, Object definition) -> Ajv - -Add custom validation keyword to Ajv instance. - -Keyword should be different from all standard JSON Schema keywords and different from previously defined keywords. There is no way to redefine keywords or to remove keyword definition from the instance. - -Keyword must start with a letter, `_` or `$`, and may continue with letters, numbers, `_`, `$`, or `-`. -It is recommended to use an application-specific prefix for keywords to avoid current and future name collisions. - -Example Keywords: -- `"xyz-example"`: valid, and uses prefix for the xyz project to avoid name collisions. -- `"example"`: valid, but not recommended as it could collide with future versions of JSON Schema etc. -- `"3-example"`: invalid as numbers are not allowed to be the first character in a keyword - -Keyword definition is an object with the following properties: - -- _type_: optional string or array of strings with data type(s) that the keyword applies to. If not present, the keyword will apply to all types. -- _validate_: validating function -- _compile_: compiling function -- _macro_: macro function -- _inline_: compiling function that returns code (as string) -- _schema_: an optional `false` value used with "validate" keyword to not pass schema -- _metaSchema_: an optional meta-schema for keyword schema -- _dependencies_: an optional list of properties that must be present in the parent schema - it will be checked during schema compilation -- _modifying_: `true` MUST be passed if keyword modifies data -- _statements_: `true` can be passed in case inline keyword generates statements (as opposed to expression) -- _valid_: pass `true`/`false` to pre-define validation result, the result returned from validation function will be ignored. This option cannot be used with macro keywords. -- _$data_: an optional `true` value to support [$data reference](#data-reference) as the value of custom keyword. The reference will be resolved at validation time. If the keyword has meta-schema it would be extended to allow $data and it will be used to validate the resolved value. Supporting $data reference requires that keyword has validating function (as the only option or in addition to compile, macro or inline function). -- _async_: an optional `true` value if the validation function is asynchronous (whether it is compiled or passed in _validate_ property); in this case it should return a promise that resolves with a value `true` or `false`. This option is ignored in case of "macro" and "inline" keywords. -- _errors_: an optional boolean or string `"full"` indicating whether keyword returns errors. If this property is not set Ajv will determine if the errors were set in case of failed validation. - -_compile_, _macro_ and _inline_ are mutually exclusive, only one should be used at a time. _validate_ can be used separately or in addition to them to support $data reference. - -__Please note__: If the keyword is validating data type that is different from the type(s) in its definition, the validation function will not be called (and expanded macro will not be used), so there is no need to check for data type inside validation function or inside schema returned by macro function (unless you want to enforce a specific type and for some reason do not want to use a separate `type` keyword for that). In the same way as standard keywords work, if the keyword does not apply to the data type being validated, the validation of this keyword will succeed. - -See [Defining custom keywords](#defining-custom-keywords) for more details. - - -##### .getKeyword(String keyword) -> Object|Boolean - -Returns custom keyword definition, `true` for pre-defined keywords and `false` if the keyword is unknown. - - -##### .removeKeyword(String keyword) -> Ajv - -Removes custom or pre-defined keyword so you can redefine them. - -While this method can be used to extend pre-defined keywords, it can also be used to completely change their meaning - it may lead to unexpected results. - -__Please note__: schemas compiled before the keyword is removed will continue to work without changes. To recompile schemas use `removeSchema` method and compile them again. - - -##### .errorsText([Array<Object> errors [, Object options]]) -> String - -Returns the text with all errors in a String. - -Options can have properties `separator` (string used to separate errors, ", " by default) and `dataVar` (the variable name that dataPaths are prefixed with, "data" by default). - - -## Options - -Defaults: - -```javascript -{ - // validation and reporting options: - $data: false, - allErrors: false, - verbose: false, - $comment: false, // NEW in Ajv version 6.0 - jsonPointers: false, - uniqueItems: true, - unicode: true, - nullable: false, - format: 'fast', - formats: {}, - unknownFormats: true, - schemas: {}, - logger: undefined, - // referenced schema options: - schemaId: '$id', - missingRefs: true, - extendRefs: 'ignore', // recommended 'fail' - loadSchema: undefined, // function(uri: string): Promise {} - // options to modify validated data: - removeAdditional: false, - useDefaults: false, - coerceTypes: false, - // strict mode options - strictDefaults: false, - strictKeywords: false, - strictNumbers: false, - // asynchronous validation options: - transpile: undefined, // requires ajv-async package - // advanced options: - meta: true, - validateSchema: true, - addUsedSchema: true, - inlineRefs: true, - passContext: false, - loopRequired: Infinity, - ownProperties: false, - multipleOfPrecision: false, - errorDataPath: 'object', // deprecated - messages: true, - sourceCode: false, - processCode: undefined, // function (str: string, schema: object): string {} - cache: new Cache, - serialize: undefined -} -``` - -##### Validation and reporting options - -- _$data_: support [$data references](#data-reference). Draft 6 meta-schema that is added by default will be extended to allow them. If you want to use another meta-schema you need to use $dataMetaSchema method to add support for $data reference. See [API](#api). -- _allErrors_: check all rules collecting all errors. Default is to return after the first error. -- _verbose_: include the reference to the part of the schema (`schema` and `parentSchema`) and validated data in errors (false by default). -- _$comment_ (NEW in Ajv version 6.0): log or pass the value of `$comment` keyword to a function. Option values: - - `false` (default): ignore $comment keyword. - - `true`: log the keyword value to console. - - function: pass the keyword value, its schema path and root schema to the specified function -- _jsonPointers_: set `dataPath` property of errors using [JSON Pointers](https://tools.ietf.org/html/rfc6901) instead of JavaScript property access notation. -- _uniqueItems_: validate `uniqueItems` keyword (true by default). -- _unicode_: calculate correct length of strings with unicode pairs (true by default). Pass `false` to use `.length` of strings that is faster, but gives "incorrect" lengths of strings with unicode pairs - each unicode pair is counted as two characters. -- _nullable_: support keyword "nullable" from [Open API 3 specification](https://swagger.io/docs/specification/data-models/data-types/). -- _format_: formats validation mode. Option values: - - `"fast"` (default) - simplified and fast validation (see [Formats](#formats) for details of which formats are available and affected by this option). - - `"full"` - more restrictive and slow validation. E.g., 25:00:00 and 2015/14/33 will be invalid time and date in 'full' mode but it will be valid in 'fast' mode. - - `false` - ignore all format keywords. -- _formats_: an object with custom formats. Keys and values will be passed to `addFormat` method. -- _keywords_: an object with custom keywords. Keys and values will be passed to `addKeyword` method. -- _unknownFormats_: handling of unknown formats. Option values: - - `true` (default) - if an unknown format is encountered the exception is thrown during schema compilation. If `format` keyword value is [$data reference](#data-reference) and it is unknown the validation will fail. - - `[String]` - an array of unknown format names that will be ignored. This option can be used to allow usage of third party schemas with format(s) for which you don't have definitions, but still fail if another unknown format is used. If `format` keyword value is [$data reference](#data-reference) and it is not in this array the validation will fail. - - `"ignore"` - to log warning during schema compilation and always pass validation (the default behaviour in versions before 5.0.0). This option is not recommended, as it allows to mistype format name and it won't be validated without any error message. This behaviour is required by JSON Schema specification. -- _schemas_: an array or object of schemas that will be added to the instance. In case you pass the array the schemas must have IDs in them. When the object is passed the method `addSchema(value, key)` will be called for each schema in this object. -- _logger_: sets the logging method. Default is the global `console` object that should have methods `log`, `warn` and `error`. See [Error logging](#error-logging). Option values: - - custom logger - it should have methods `log`, `warn` and `error`. If any of these methods is missing an exception will be thrown. - - `false` - logging is disabled. - - -##### Referenced schema options - -- _schemaId_: this option defines which keywords are used as schema URI. Option value: - - `"$id"` (default) - only use `$id` keyword as schema URI (as specified in JSON Schema draft-06/07), ignore `id` keyword (if it is present a warning will be logged). - - `"id"` - only use `id` keyword as schema URI (as specified in JSON Schema draft-04), ignore `$id` keyword (if it is present a warning will be logged). - - `"auto"` - use both `$id` and `id` keywords as schema URI. If both are present (in the same schema object) and different the exception will be thrown during schema compilation. -- _missingRefs_: handling of missing referenced schemas. Option values: - - `true` (default) - if the reference cannot be resolved during compilation the exception is thrown. The thrown error has properties `missingRef` (with hash fragment) and `missingSchema` (without it). Both properties are resolved relative to the current base id (usually schema id, unless it was substituted). - - `"ignore"` - to log error during compilation and always pass validation. - - `"fail"` - to log error and successfully compile schema but fail validation if this rule is checked. -- _extendRefs_: validation of other keywords when `$ref` is present in the schema. Option values: - - `"ignore"` (default) - when `$ref` is used other keywords are ignored (as per [JSON Reference](https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03#section-3) standard). A warning will be logged during the schema compilation. - - `"fail"` (recommended) - if other validation keywords are used together with `$ref` the exception will be thrown when the schema is compiled. This option is recommended to make sure schema has no keywords that are ignored, which can be confusing. - - `true` - validate all keywords in the schemas with `$ref` (the default behaviour in versions before 5.0.0). -- _loadSchema_: asynchronous function that will be used to load remote schemas when `compileAsync` [method](#api-compileAsync) is used and some reference is missing (option `missingRefs` should NOT be 'fail' or 'ignore'). This function should accept remote schema uri as a parameter and return a Promise that resolves to a schema. See example in [Asynchronous compilation](#asynchronous-schema-compilation). - - -##### Options to modify validated data - -- _removeAdditional_: remove additional properties - see example in [Filtering data](#filtering-data). This option is not used if schema is added with `addMetaSchema` method. Option values: - - `false` (default) - not to remove additional properties - - `"all"` - all additional properties are removed, regardless of `additionalProperties` keyword in schema (and no validation is made for them). - - `true` - only additional properties with `additionalProperties` keyword equal to `false` are removed. - - `"failing"` - additional properties that fail schema validation will be removed (where `additionalProperties` keyword is `false` or schema). -- _useDefaults_: replace missing or undefined properties and items with the values from corresponding `default` keywords. Default behaviour is to ignore `default` keywords. This option is not used if schema is added with `addMetaSchema` method. See examples in [Assigning defaults](#assigning-defaults). Option values: - - `false` (default) - do not use defaults - - `true` - insert defaults by value (object literal is used). - - `"empty"` - in addition to missing or undefined, use defaults for properties and items that are equal to `null` or `""` (an empty string). - - `"shared"` (deprecated) - insert defaults by reference. If the default is an object, it will be shared by all instances of validated data. If you modify the inserted default in the validated data, it will be modified in the schema as well. -- _coerceTypes_: change data type of data to match `type` keyword. See the example in [Coercing data types](#coercing-data-types) and [coercion rules](https://github.com/ajv-validator/ajv/blob/master/COERCION.md). Option values: - - `false` (default) - no type coercion. - - `true` - coerce scalar data types. - - `"array"` - in addition to coercions between scalar types, coerce scalar data to an array with one element and vice versa (as required by the schema). - - -##### Strict mode options - -- _strictDefaults_: report ignored `default` keywords in schemas. Option values: - - `false` (default) - ignored defaults are not reported - - `true` - if an ignored default is present, throw an error - - `"log"` - if an ignored default is present, log warning -- _strictKeywords_: report unknown keywords in schemas. Option values: - - `false` (default) - unknown keywords are not reported - - `true` - if an unknown keyword is present, throw an error - - `"log"` - if an unknown keyword is present, log warning -- _strictNumbers_: validate numbers strictly, failing validation for NaN and Infinity. Option values: - - `false` (default) - NaN or Infinity will pass validation for numeric types - - `true` - NaN or Infinity will not pass validation for numeric types - -##### Asynchronous validation options - -- _transpile_: Requires [ajv-async](https://github.com/ajv-validator/ajv-async) package. It determines whether Ajv transpiles compiled asynchronous validation function. Option values: - - `undefined` (default) - transpile with [nodent](https://github.com/MatAtBread/nodent) if async functions are not supported. - - `true` - always transpile with nodent. - - `false` - do not transpile; if async functions are not supported an exception will be thrown. - - -##### Advanced options - -- _meta_: add [meta-schema](http://json-schema.org/documentation.html) so it can be used by other schemas (true by default). If an object is passed, it will be used as the default meta-schema for schemas that have no `$schema` keyword. This default meta-schema MUST have `$schema` keyword. -- _validateSchema_: validate added/compiled schemas against meta-schema (true by default). `$schema` property in the schema can be http://json-schema.org/draft-07/schema or absent (draft-07 meta-schema will be used) or can be a reference to the schema previously added with `addMetaSchema` method. Option values: - - `true` (default) - if the validation fails, throw the exception. - - `"log"` - if the validation fails, log error. - - `false` - skip schema validation. -- _addUsedSchema_: by default methods `compile` and `validate` add schemas to the instance if they have `$id` (or `id`) property that doesn't start with "#". If `$id` is present and it is not unique the exception will be thrown. Set this option to `false` to skip adding schemas to the instance and the `$id` uniqueness check when these methods are used. This option does not affect `addSchema` method. -- _inlineRefs_: Affects compilation of referenced schemas. Option values: - - `true` (default) - the referenced schemas that don't have refs in them are inlined, regardless of their size - that substantially improves performance at the cost of the bigger size of compiled schema functions. - - `false` - to not inline referenced schemas (they will be compiled as separate functions). - - integer number - to limit the maximum number of keywords of the schema that will be inlined. -- _passContext_: pass validation context to custom keyword functions. If this option is `true` and you pass some context to the compiled validation function with `validate.call(context, data)`, the `context` will be available as `this` in your custom keywords. By default `this` is Ajv instance. -- _loopRequired_: by default `required` keyword is compiled into a single expression (or a sequence of statements in `allErrors` mode). In case of a very large number of properties in this keyword it may result in a very big validation function. Pass integer to set the number of properties above which `required` keyword will be validated in a loop - smaller validation function size but also worse performance. -- _ownProperties_: by default Ajv iterates over all enumerable object properties; when this option is `true` only own enumerable object properties (i.e. found directly on the object rather than on its prototype) are iterated. Contributed by @mbroadst. -- _multipleOfPrecision_: by default `multipleOf` keyword is validated by comparing the result of division with parseInt() of that result. It works for dividers that are bigger than 1. For small dividers such as 0.01 the result of the division is usually not integer (even when it should be integer, see issue [#84](https://github.com/ajv-validator/ajv/issues/84)). If you need to use fractional dividers set this option to some positive integer N to have `multipleOf` validated using this formula: `Math.abs(Math.round(division) - division) < 1e-N` (it is slower but allows for float arithmetics deviations). -- _errorDataPath_ (deprecated): set `dataPath` to point to 'object' (default) or to 'property' when validating keywords `required`, `additionalProperties` and `dependencies`. -- _messages_: Include human-readable messages in errors. `true` by default. `false` can be passed when custom messages are used (e.g. with [ajv-i18n](https://github.com/ajv-validator/ajv-i18n)). -- _sourceCode_: add `sourceCode` property to validating function (for debugging; this code can be different from the result of toString call). -- _processCode_: an optional function to process generated code before it is passed to Function constructor. It can be used to either beautify (the validating function is generated without line-breaks) or to transpile code. Starting from version 5.0.0 this option replaced options: - - `beautify` that formatted the generated function using [js-beautify](https://github.com/beautify-web/js-beautify). If you want to beautify the generated code pass a function calling `require('js-beautify').js_beautify` as `processCode: code => js_beautify(code)`. - - `transpile` that transpiled asynchronous validation function. You can still use `transpile` option with [ajv-async](https://github.com/ajv-validator/ajv-async) package. See [Asynchronous validation](#asynchronous-validation) for more information. -- _cache_: an optional instance of cache to store compiled schemas using stable-stringified schema as a key. For example, set-associative cache [sacjs](https://github.com/epoberezkin/sacjs) can be used. If not passed then a simple hash is used which is good enough for the common use case (a limited number of statically defined schemas). Cache should have methods `put(key, value)`, `get(key)`, `del(key)` and `clear()`. -- _serialize_: an optional function to serialize schema to cache key. Pass `false` to use schema itself as a key (e.g., if WeakMap used as a cache). By default [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used. - - -## Validation errors - -In case of validation failure, Ajv assigns the array of errors to `errors` property of validation function (or to `errors` property of Ajv instance when `validate` or `validateSchema` methods were called). In case of [asynchronous validation](#asynchronous-validation), the returned promise is rejected with exception `Ajv.ValidationError` that has `errors` property. - - -### Error objects - -Each error is an object with the following properties: - -- _keyword_: validation keyword. -- _dataPath_: the path to the part of the data that was validated. By default `dataPath` uses JavaScript property access notation (e.g., `".prop[1].subProp"`). When the option `jsonPointers` is true (see [Options](#options)) `dataPath` will be set using JSON pointer standard (e.g., `"/prop/1/subProp"`). -- _schemaPath_: the path (JSON-pointer as a URI fragment) to the schema of the keyword that failed validation. -- _params_: the object with the additional information about error that can be used to create custom error messages (e.g., using [ajv-i18n](https://github.com/ajv-validator/ajv-i18n) package). See below for parameters set by all keywords. -- _message_: the standard error message (can be excluded with option `messages` set to false). -- _schema_: the schema of the keyword (added with `verbose` option). -- _parentSchema_: the schema containing the keyword (added with `verbose` option) -- _data_: the data validated by the keyword (added with `verbose` option). - -__Please note__: `propertyNames` keyword schema validation errors have an additional property `propertyName`, `dataPath` points to the object. After schema validation for each property name, if it is invalid an additional error is added with the property `keyword` equal to `"propertyNames"`. - - -### Error parameters - -Properties of `params` object in errors depend on the keyword that failed validation. - -- `maxItems`, `minItems`, `maxLength`, `minLength`, `maxProperties`, `minProperties` - property `limit` (number, the schema of the keyword). -- `additionalItems` - property `limit` (the maximum number of allowed items in case when `items` keyword is an array of schemas and `additionalItems` is false). -- `additionalProperties` - property `additionalProperty` (the property not used in `properties` and `patternProperties` keywords). -- `dependencies` - properties: - - `property` (dependent property), - - `missingProperty` (required missing dependency - only the first one is reported currently) - - `deps` (required dependencies, comma separated list as a string), - - `depsCount` (the number of required dependencies). -- `format` - property `format` (the schema of the keyword). -- `maximum`, `minimum` - properties: - - `limit` (number, the schema of the keyword), - - `exclusive` (boolean, the schema of `exclusiveMaximum` or `exclusiveMinimum`), - - `comparison` (string, comparison operation to compare the data to the limit, with the data on the left and the limit on the right; can be "<", "<=", ">", ">=") -- `multipleOf` - property `multipleOf` (the schema of the keyword) -- `pattern` - property `pattern` (the schema of the keyword) -- `required` - property `missingProperty` (required property that is missing). -- `propertyNames` - property `propertyName` (an invalid property name). -- `patternRequired` (in ajv-keywords) - property `missingPattern` (required pattern that did not match any property). -- `type` - property `type` (required type(s), a string, can be a comma-separated list) -- `uniqueItems` - properties `i` and `j` (indices of duplicate items). -- `const` - property `allowedValue` pointing to the value (the schema of the keyword). -- `enum` - property `allowedValues` pointing to the array of values (the schema of the keyword). -- `$ref` - property `ref` with the referenced schema URI. -- `oneOf` - property `passingSchemas` (array of indices of passing schemas, null if no schema passes). -- custom keywords (in case keyword definition doesn't create errors) - property `keyword` (the keyword name). - - -### Error logging - -Using the `logger` option when initiallizing Ajv will allow you to define custom logging. Here you can build upon the exisiting logging. The use of other logging packages is supported as long as the package or its associated wrapper exposes the required methods. If any of the required methods are missing an exception will be thrown. -- **Required Methods**: `log`, `warn`, `error` - -```javascript -var otherLogger = new OtherLogger(); -var ajv = new Ajv({ - logger: { - log: console.log.bind(console), - warn: function warn() { - otherLogger.logWarn.apply(otherLogger, arguments); - }, - error: function error() { - otherLogger.logError.apply(otherLogger, arguments); - console.error.apply(console, arguments); - } - } -}); -``` - - -## Plugins - -Ajv can be extended with plugins that add custom keywords, formats or functions to process generated code. When such plugin is published as npm package it is recommended that it follows these conventions: - -- it exports a function -- this function accepts ajv instance as the first parameter and returns the same instance to allow chaining -- this function can accept an optional configuration as the second parameter - -If you have published a useful plugin please submit a PR to add it to the next section. - - -## Related packages - -- [ajv-async](https://github.com/ajv-validator/ajv-async) - plugin to configure async validation mode -- [ajv-bsontype](https://github.com/BoLaMN/ajv-bsontype) - plugin to validate mongodb's bsonType formats -- [ajv-cli](https://github.com/jessedc/ajv-cli) - command line interface -- [ajv-errors](https://github.com/ajv-validator/ajv-errors) - plugin for custom error messages -- [ajv-i18n](https://github.com/ajv-validator/ajv-i18n) - internationalised error messages -- [ajv-istanbul](https://github.com/ajv-validator/ajv-istanbul) - plugin to instrument generated validation code to measure test coverage of your schemas -- [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) - plugin with custom validation keywords (select, typeof, etc.) -- [ajv-merge-patch](https://github.com/ajv-validator/ajv-merge-patch) - plugin with keywords $merge and $patch -- [ajv-pack](https://github.com/ajv-validator/ajv-pack) - produces a compact module exporting validation functions -- [ajv-formats-draft2019](https://github.com/luzlab/ajv-formats-draft2019) - format validators for draft2019 that aren't already included in ajv (ie. `idn-hostname`, `idn-email`, `iri`, `iri-reference` and `duration`). - -## Some packages using Ajv - -- [webpack](https://github.com/webpack/webpack) - a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser -- [jsonscript-js](https://github.com/JSONScript/jsonscript-js) - the interpreter for [JSONScript](http://www.jsonscript.org) - scripted processing of existing endpoints and services -- [osprey-method-handler](https://github.com/mulesoft-labs/osprey-method-handler) - Express middleware for validating requests and responses based on a RAML method object, used in [osprey](https://github.com/mulesoft/osprey) - validating API proxy generated from a RAML definition -- [har-validator](https://github.com/ahmadnassri/har-validator) - HTTP Archive (HAR) validator -- [jsoneditor](https://github.com/josdejong/jsoneditor) - a web-based tool to view, edit, format, and validate JSON http://jsoneditoronline.org -- [JSON Schema Lint](https://github.com/nickcmaynard/jsonschemalint) - a web tool to validate JSON/YAML document against a single JSON Schema http://jsonschemalint.com -- [objection](https://github.com/vincit/objection.js) - SQL-friendly ORM for Node.js -- [table](https://github.com/gajus/table) - formats data into a string table -- [ripple-lib](https://github.com/ripple/ripple-lib) - a JavaScript API for interacting with [Ripple](https://ripple.com) in Node.js and the browser -- [restbase](https://github.com/wikimedia/restbase) - distributed storage with REST API & dispatcher for backend services built to provide a low-latency & high-throughput API for Wikipedia / Wikimedia content -- [hippie-swagger](https://github.com/CacheControl/hippie-swagger) - [Hippie](https://github.com/vesln/hippie) wrapper that provides end to end API testing with swagger validation -- [react-form-controlled](https://github.com/seeden/react-form-controlled) - React controlled form components with validation -- [rabbitmq-schema](https://github.com/tjmehta/rabbitmq-schema) - a schema definition module for RabbitMQ graphs and messages -- [@query/schema](https://www.npmjs.com/package/@query/schema) - stream filtering with a URI-safe query syntax parsing to JSON Schema -- [chai-ajv-json-schema](https://github.com/peon374/chai-ajv-json-schema) - chai plugin to us JSON Schema with expect in mocha tests -- [grunt-jsonschema-ajv](https://github.com/SignpostMarv/grunt-jsonschema-ajv) - Grunt plugin for validating files against JSON Schema -- [extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin) - extract text from bundle into a file -- [electron-builder](https://github.com/electron-userland/electron-builder) - a solution to package and build a ready for distribution Electron app -- [addons-linter](https://github.com/mozilla/addons-linter) - Mozilla Add-ons Linter -- [gh-pages-generator](https://github.com/epoberezkin/gh-pages-generator) - multi-page site generator converting markdown files to GitHub pages -- [ESLint](https://github.com/eslint/eslint) - the pluggable linting utility for JavaScript and JSX - - -## Tests - -``` -npm install -git submodule update --init -npm test -``` - -## Contributing - -All validation functions are generated using doT templates in [dot](https://github.com/ajv-validator/ajv/tree/master/lib/dot) folder. Templates are precompiled so doT is not a run-time dependency. - -`npm run build` - compiles templates to [dotjs](https://github.com/ajv-validator/ajv/tree/master/lib/dotjs) folder. - -`npm run watch` - automatically compiles templates when files in dot folder change - -Please see [Contributing guidelines](https://github.com/ajv-validator/ajv/blob/master/CONTRIBUTING.md) - - -## Changes history - -See https://github.com/ajv-validator/ajv/releases - -__Please note__: [Changes in version 6.0.0](https://github.com/ajv-validator/ajv/releases/tag/v6.0.0). - -[Version 5.0.0](https://github.com/ajv-validator/ajv/releases/tag/5.0.0). - -[Version 4.0.0](https://github.com/ajv-validator/ajv/releases/tag/4.0.0). - -[Version 3.0.0](https://github.com/ajv-validator/ajv/releases/tag/3.0.0). - -[Version 2.0.0](https://github.com/ajv-validator/ajv/releases/tag/2.0.0). - - -## Code of conduct - -Please review and follow the [Code of conduct](https://github.com/ajv-validator/ajv/blob/master/CODE_OF_CONDUCT.md). - -Please report any unacceptable behaviour to ajv.validator@gmail.com - it will be reviewed by the project team. - - -## Open-source software support - -Ajv is a part of [Tidelift subscription](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=readme) - it provides a centralised support to open-source software users, in addition to the support provided by software maintainers. - - -## License - -[MIT](https://github.com/ajv-validator/ajv/blob/master/LICENSE) diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.bundle.js b/conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.bundle.js deleted file mode 100644 index 79fdd92f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/dist/ajv.bundle.js +++ /dev/null @@ -1,7143 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Ajv = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; -// For the source: https://gist.github.com/dperini/729294 -// For test cases: https://mathiasbynens.be/demo/url-regex -// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. -// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; -var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; -var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; -var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; -var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; -var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; - - -module.exports = formats; - -function formats(mode) { - mode = mode == 'full' ? 'full' : 'fast'; - return util.copy(formats[mode]); -} - - -formats.fast = { - // date: http://tools.ietf.org/html/rfc3339#section-5.6 - date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, - // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 - time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, - 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, - // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js - uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, - 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, - 'uri-template': URITEMPLATE, - url: URL, - // email (sources from jsen validator): - // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 - // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') - email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, - hostname: HOSTNAME, - // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - // uuid: http://tools.ietf.org/html/rfc4122 - uuid: UUID, - // JSON-pointer: https://tools.ietf.org/html/rfc6901 - // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -formats.full = { - date: date, - time: time, - 'date-time': date_time, - uri: uri, - 'uri-reference': URIREF, - 'uri-template': URITEMPLATE, - url: URL, - email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, - hostname: HOSTNAME, - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - uuid: UUID, - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -function isLeapYear(year) { - // https://tools.ietf.org/html/rfc3339#appendix-C - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); -} - - -function date(str) { - // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 - var matches = str.match(DATE); - if (!matches) return false; - - var year = +matches[1]; - var month = +matches[2]; - var day = +matches[3]; - - return month >= 1 && month <= 12 && day >= 1 && - day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); -} - - -function time(str, full) { - var matches = str.match(TIME); - if (!matches) return false; - - var hour = matches[1]; - var minute = matches[2]; - var second = matches[3]; - var timeZone = matches[5]; - return ((hour <= 23 && minute <= 59 && second <= 59) || - (hour == 23 && minute == 59 && second == 60)) && - (!full || timeZone); -} - - -var DATE_TIME_SEPARATOR = /t|\s/i; -function date_time(str) { - // http://tools.ietf.org/html/rfc3339#section-5.6 - var dateTime = str.split(DATE_TIME_SEPARATOR); - return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); -} - - -var NOT_URI_FRAGMENT = /\/|:/; -function uri(str) { - // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." - return NOT_URI_FRAGMENT.test(str) && URI.test(str); -} - - -var Z_ANCHOR = /[^\\]\\Z/; -function regex(str) { - if (Z_ANCHOR.test(str)) return false; - try { - new RegExp(str); - return true; - } catch(e) { - return false; - } -} - -},{"./util":10}],5:[function(require,module,exports){ -'use strict'; - -var resolve = require('./resolve') - , util = require('./util') - , errorClasses = require('./error_classes') - , stableStringify = require('fast-json-stable-stringify'); - -var validateGenerator = require('../dotjs/validate'); - -/** - * Functions below are used inside compiled validations function - */ - -var ucs2length = util.ucs2length; -var equal = require('fast-deep-equal'); - -// this error is thrown by async schemas to return validation errors via exception -var ValidationError = errorClasses.Validation; - -module.exports = compile; - - -/** - * Compiles schema to validation function - * @this Ajv - * @param {Object} schema schema object - * @param {Object} root object with information about the root schema for this schema - * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution - * @param {String} baseId base ID for IDs in the schema - * @return {Function} validation function - */ -function compile(schema, root, localRefs, baseId) { - /* jshint validthis: true, evil: true */ - /* eslint no-shadow: 0 */ - var self = this - , opts = this._opts - , refVal = [ undefined ] - , refs = {} - , patterns = [] - , patternsHash = {} - , defaults = [] - , defaultsHash = {} - , customRules = []; - - root = root || { schema: schema, refVal: refVal, refs: refs }; - - var c = checkCompiling.call(this, schema, root, baseId); - var compilation = this._compilations[c.index]; - if (c.compiling) return (compilation.callValidate = callValidate); - - var formats = this._formats; - var RULES = this.RULES; - - try { - var v = localCompile(schema, root, localRefs, baseId); - compilation.validate = v; - var cv = compilation.callValidate; - if (cv) { - cv.schema = v.schema; - cv.errors = null; - cv.refs = v.refs; - cv.refVal = v.refVal; - cv.root = v.root; - cv.$async = v.$async; - if (opts.sourceCode) cv.source = v.source; - } - return v; - } finally { - endCompiling.call(this, schema, root, baseId); - } - - /* @this {*} - custom context, see passContext option */ - function callValidate() { - /* jshint validthis: true */ - var validate = compilation.validate; - var result = validate.apply(this, arguments); - callValidate.errors = validate.errors; - return result; - } - - function localCompile(_schema, _root, localRefs, baseId) { - var isRoot = !_root || (_root && _root.schema == _schema); - if (_root.schema != root.schema) - return compile.call(self, _schema, _root, localRefs, baseId); - - var $async = _schema.$async === true; - - var sourceCode = validateGenerator({ - isTop: true, - schema: _schema, - isRoot: isRoot, - baseId: baseId, - root: _root, - schemaPath: '', - errSchemaPath: '#', - errorPath: '""', - MissingRefError: errorClasses.MissingRef, - RULES: RULES, - validate: validateGenerator, - util: util, - resolve: resolve, - resolveRef: resolveRef, - usePattern: usePattern, - useDefault: useDefault, - useCustomRule: useCustomRule, - opts: opts, - formats: formats, - logger: self.logger, - self: self - }); - - sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) - + vars(defaults, defaultCode) + vars(customRules, customRuleCode) - + sourceCode; - - if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema); - // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); - var validate; - try { - var makeValidate = new Function( - 'self', - 'RULES', - 'formats', - 'root', - 'refVal', - 'defaults', - 'customRules', - 'equal', - 'ucs2length', - 'ValidationError', - sourceCode - ); - - validate = makeValidate( - self, - RULES, - formats, - root, - refVal, - defaults, - customRules, - equal, - ucs2length, - ValidationError - ); - - refVal[0] = validate; - } catch(e) { - self.logger.error('Error compiling schema, function code:', sourceCode); - throw e; - } - - validate.schema = _schema; - validate.errors = null; - validate.refs = refs; - validate.refVal = refVal; - validate.root = isRoot ? validate : _root; - if ($async) validate.$async = true; - if (opts.sourceCode === true) { - validate.source = { - code: sourceCode, - patterns: patterns, - defaults: defaults - }; - } - - return validate; - } - - function resolveRef(baseId, ref, isRoot) { - ref = resolve.url(baseId, ref); - var refIndex = refs[ref]; - var _refVal, refCode; - if (refIndex !== undefined) { - _refVal = refVal[refIndex]; - refCode = 'refVal[' + refIndex + ']'; - return resolvedRef(_refVal, refCode); - } - if (!isRoot && root.refs) { - var rootRefId = root.refs[ref]; - if (rootRefId !== undefined) { - _refVal = root.refVal[rootRefId]; - refCode = addLocalRef(ref, _refVal); - return resolvedRef(_refVal, refCode); - } - } - - refCode = addLocalRef(ref); - var v = resolve.call(self, localCompile, root, ref); - if (v === undefined) { - var localSchema = localRefs && localRefs[ref]; - if (localSchema) { - v = resolve.inlineRef(localSchema, opts.inlineRefs) - ? localSchema - : compile.call(self, localSchema, root, localRefs, baseId); - } - } - - if (v === undefined) { - removeLocalRef(ref); - } else { - replaceLocalRef(ref, v); - return resolvedRef(v, refCode); - } - } - - function addLocalRef(ref, v) { - var refId = refVal.length; - refVal[refId] = v; - refs[ref] = refId; - return 'refVal' + refId; - } - - function removeLocalRef(ref) { - delete refs[ref]; - } - - function replaceLocalRef(ref, v) { - var refId = refs[ref]; - refVal[refId] = v; - } - - function resolvedRef(refVal, code) { - return typeof refVal == 'object' || typeof refVal == 'boolean' - ? { code: code, schema: refVal, inline: true } - : { code: code, $async: refVal && !!refVal.$async }; - } - - function usePattern(regexStr) { - var index = patternsHash[regexStr]; - if (index === undefined) { - index = patternsHash[regexStr] = patterns.length; - patterns[index] = regexStr; - } - return 'pattern' + index; - } - - function useDefault(value) { - switch (typeof value) { - case 'boolean': - case 'number': - return '' + value; - case 'string': - return util.toQuotedString(value); - case 'object': - if (value === null) return 'null'; - var valueStr = stableStringify(value); - var index = defaultsHash[valueStr]; - if (index === undefined) { - index = defaultsHash[valueStr] = defaults.length; - defaults[index] = value; - } - return 'default' + index; - } - } - - function useCustomRule(rule, schema, parentSchema, it) { - if (self._opts.validateSchema !== false) { - var deps = rule.definition.dependencies; - if (deps && !deps.every(function(keyword) { - return Object.prototype.hasOwnProperty.call(parentSchema, keyword); - })) - throw new Error('parent schema must have all required keywords: ' + deps.join(',')); - - var validateSchema = rule.definition.validateSchema; - if (validateSchema) { - var valid = validateSchema(schema); - if (!valid) { - var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); - if (self._opts.validateSchema == 'log') self.logger.error(message); - else throw new Error(message); - } - } - } - - var compile = rule.definition.compile - , inline = rule.definition.inline - , macro = rule.definition.macro; - - var validate; - if (compile) { - validate = compile.call(self, schema, parentSchema, it); - } else if (macro) { - validate = macro.call(self, schema, parentSchema, it); - if (opts.validateSchema !== false) self.validateSchema(validate, true); - } else if (inline) { - validate = inline.call(self, it, rule.keyword, schema, parentSchema); - } else { - validate = rule.definition.validate; - if (!validate) return; - } - - if (validate === undefined) - throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); - - var index = customRules.length; - customRules[index] = validate; - - return { - code: 'customRule' + index, - validate: validate - }; - } -} - - -/** - * Checks if the schema is currently compiled - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) - */ -function checkCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var index = compIndex.call(this, schema, root, baseId); - if (index >= 0) return { index: index, compiling: true }; - index = this._compilations.length; - this._compilations[index] = { - schema: schema, - root: root, - baseId: baseId - }; - return { index: index, compiling: false }; -} - - -/** - * Removes the schema from the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - */ -function endCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var i = compIndex.call(this, schema, root, baseId); - if (i >= 0) this._compilations.splice(i, 1); -} - - -/** - * Index of schema compilation in the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Integer} compilation index - */ -function compIndex(schema, root, baseId) { - /* jshint validthis: true */ - for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { - // high surrogate, and there is a next character - value = str.charCodeAt(pos); - if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate - } - } - return length; -}; - -},{}],10:[function(require,module,exports){ -'use strict'; - - -module.exports = { - copy: copy, - checkDataType: checkDataType, - checkDataTypes: checkDataTypes, - coerceToTypes: coerceToTypes, - toHash: toHash, - getProperty: getProperty, - escapeQuotes: escapeQuotes, - equal: require('fast-deep-equal'), - ucs2length: require('./ucs2length'), - varOccurences: varOccurences, - varReplace: varReplace, - schemaHasRules: schemaHasRules, - schemaHasRulesExcept: schemaHasRulesExcept, - schemaUnknownRules: schemaUnknownRules, - toQuotedString: toQuotedString, - getPathExpr: getPathExpr, - getPath: getPath, - getData: getData, - unescapeFragment: unescapeFragment, - unescapeJsonPointer: unescapeJsonPointer, - escapeFragment: escapeFragment, - escapeJsonPointer: escapeJsonPointer -}; - - -function copy(o, to) { - to = to || {}; - for (var key in o) to[key] = o[key]; - return to; -} - - -function checkDataType(dataType, data, strictNumbers, negate) { - var EQUAL = negate ? ' !== ' : ' === ' - , AND = negate ? ' || ' : ' && ' - , OK = negate ? '!' : '' - , NOT = negate ? '' : '!'; - switch (dataType) { - case 'null': return data + EQUAL + 'null'; - case 'array': return OK + 'Array.isArray(' + data + ')'; - case 'object': return '(' + OK + data + AND + - 'typeof ' + data + EQUAL + '"object"' + AND + - NOT + 'Array.isArray(' + data + '))'; - case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + - NOT + '(' + data + ' % 1)' + - AND + data + EQUAL + data + - (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; - case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' + - (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; - default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; - } -} - - -function checkDataTypes(dataTypes, data, strictNumbers) { - switch (dataTypes.length) { - case 1: return checkDataType(dataTypes[0], data, strictNumbers, true); - default: - var code = ''; - var types = toHash(dataTypes); - if (types.array && types.object) { - code = types.null ? '(': '(!' + data + ' || '; - code += 'typeof ' + data + ' !== "object")'; - delete types.null; - delete types.array; - delete types.object; - } - if (types.number) delete types.integer; - for (var t in types) - code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true); - - return code; - } -} - - -var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); -function coerceToTypes(optionCoerceTypes, dataTypes) { - if (Array.isArray(dataTypes)) { - var types = []; - for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); - return paths[lvl - up]; - } - - if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); - data = 'data' + ((lvl - up) || ''); - if (!jsonPointer) return data; - } - - var expr = data; - var segments = jsonPointer.split('/'); - for (var i=0; i', - $notOp = $isMax ? '>' : '<', - $errorKeyword = undefined; - if (!($isData || typeof $schema == 'number' || $schema === undefined)) { - throw new Error($keyword + ' must be number'); - } - if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) { - throw new Error($exclusiveKeyword + ' must be number or boolean'); - } - if ($isDataExcl) { - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), - $exclusive = 'exclusive' + $lvl, - $exclType = 'exclType' + $lvl, - $exclIsNumber = 'exclIsNumber' + $lvl, - $opExpr = 'op' + $lvl, - $opStr = '\' + ' + $opExpr + ' + \''; - out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; - $schemaValueExcl = 'schemaExcl' + $lvl; - out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; - var $errorKeyword = $exclusiveKeyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - } else { - var $exclIsNumber = typeof $schemaExcl == 'number', - $opStr = $op; - if ($exclIsNumber && $isData) { - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; - } else { - if ($exclIsNumber && $schema === undefined) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; - } - } - $errorKeyword = $errorKeyword || $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be ' + ($opStr) + ' '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],14:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxItems' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxItems') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],15:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitLength(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxLength' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - if (it.opts.unicode === false) { - out += ' ' + ($data) + '.length '; - } else { - out += ' ucs2length(' + ($data) + ') '; - } - out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be '; - if ($keyword == 'maxLength') { - out += 'longer'; - } else { - out += 'shorter'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' characters\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],16:[function(require,module,exports){ -'use strict'; -module.exports = function generate__limitProperties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxProperties' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxProperties') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' properties\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],17:[function(require,module,exports){ -'use strict'; -module.exports = function generate_allOf(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $allSchemasEmpty = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($breakOnError) { - if ($allSchemasEmpty) { - out += ' if (true) { '; - } else { - out += ' ' + ($closingBraces.slice(0, -1)) + ' '; - } - } - return out; -} - -},{}],18:[function(require,module,exports){ -'use strict'; -module.exports = function generate_anyOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $noEmptySchema = $schema.every(function($sch) { - return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all)); - }); - if ($noEmptySchema) { - var $currentBaseId = $it.baseId; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; - $closingBraces += '}'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should match some schema in anyOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],19:[function(require,module,exports){ -'use strict'; -module.exports = function generate_comment(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $comment = it.util.toQuotedString($schema); - if (it.opts.$comment === true) { - out += ' console.log(' + ($comment) + ');'; - } else if (typeof it.opts.$comment == 'function') { - out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; - } - return out; -} - -},{}],20:[function(require,module,exports){ -'use strict'; -module.exports = function generate_const(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!$isData) { - out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to constant\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],21:[function(require,module,exports){ -'use strict'; -module.exports = function generate_contains(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId, - $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all)); - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($nonEmptySchema) { - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (' + ($nextValid) + ') break; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; - } else { - out += ' if (' + ($data) + '.length == 0) {'; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should contain a valid item\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - if ($nonEmptySchema) { - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - } - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} - -},{}],22:[function(require,module,exports){ -'use strict'; -module.exports = function generate_custom(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $rule = this, - $definition = 'definition' + $lvl, - $rDef = $rule.definition, - $closingBraces = ''; - var $compile, $inline, $macro, $ruleValidate, $validateCode; - if ($isData && $rDef.$data) { - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; - } else { - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - } - var $ruleErrs = $validateCode + '.errors', - $i = 'i' + $lvl, - $ruleErr = 'ruleErr' + $lvl, - $asyncKeyword = $rDef.async; - if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); - if (!($inline || $macro)) { - out += '' + ($ruleErrs) + ' = null;'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($isData && $rDef.$data) { - $closingBraces += '}'; - out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; - if ($validateSchema) { - $closingBraces += '}'; - out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; - } - } - if ($inline) { - if ($rDef.statements) { - out += ' ' + ($ruleValidate.validate) + ' '; - } else { - out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; - } - } else if ($macro) { - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - $it.schema = $ruleValidate.validate; - $it.schemaPath = ''; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($code); - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - out += ' ' + ($validateCode) + '.call( '; - if (it.opts.passContext) { - out += 'this'; - } else { - out += 'self'; - } - if ($compile || $rDef.schema === false) { - out += ' , ' + ($data) + ' '; - } else { - out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; - } - out += ' , (dataPath || \'\')'; - if (it.errorPath != '""') { - out += ' + ' + (it.errorPath); - } - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; - var def_callRuleValidate = out; - out = $$outStack.pop(); - if ($rDef.errors === false) { - out += ' ' + ($valid) + ' = '; - if ($asyncKeyword) { - out += 'await '; - } - out += '' + (def_callRuleValidate) + '; '; - } else { - if ($asyncKeyword) { - $ruleErrs = 'customErrors' + $lvl; - out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; - } else { - out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; - } - } - } - if ($rDef.modifying) { - out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; - } - out += '' + ($closingBraces); - if ($rDef.valid) { - if ($breakOnError) { - out += ' if (true) { '; - } - } else { - out += ' if ( '; - if ($rDef.valid === undefined) { - out += ' !'; - if ($macro) { - out += '' + ($nextValid); - } else { - out += '' + ($valid); - } - } else { - out += ' ' + (!$rDef.valid) + ' '; - } - out += ') { '; - $errorKeyword = $rule.keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - var def_customError = out; - out = $$outStack.pop(); - if ($inline) { - if ($rDef.errors) { - if ($rDef.errors != 'full') { - out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; - } - out += ') { '; - $it.schema = $sch; - $it.schemaPath = $schemaPath + it.util.getProperty($property); - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} - -},{}],24:[function(require,module,exports){ -'use strict'; -module.exports = function generate_enum(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $i = 'i' + $lvl, - $vSchema = 'schema' + $lvl; - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ';'; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to one of the allowed values\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],25:[function(require,module,exports){ -'use strict'; -module.exports = function generate_format(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - if (it.opts.format === false) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $unknownFormats = it.opts.unknownFormats, - $allowUnknown = Array.isArray($unknownFormats); - if ($isData) { - var $format = 'format' + $lvl, - $isObject = 'isObject' + $lvl, - $formatType = 'formatType' + $lvl; - out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; - if (it.async) { - out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; - } - out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' ('; - if ($unknownFormats != 'ignore') { - out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; - if ($allowUnknown) { - out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; - } - out += ') || '; - } - out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; - if (it.async) { - out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; - } else { - out += ' ' + ($format) + '(' + ($data) + ') '; - } - out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; - } else { - var $format = it.formats[$schema]; - if (!$format) { - if ($unknownFormats == 'ignore') { - it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else { - throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); - } - } - var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - if ($formatType != $ruleType) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - if ($async) { - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; - } else { - out += ' if (! '; - var $formatRef = 'formats' + it.util.getProperty($schema); - if ($isObject) $formatRef += '.validate'; - if (typeof $format == 'function') { - out += ' ' + ($formatRef) + '(' + ($data) + ') '; - } else { - out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; - } - out += ') { '; - } - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match format "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],26:[function(require,module,exports){ -'use strict'; -module.exports = function generate_if(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - var $thenSch = it.schema['then'], - $elseSch = it.schema['else'], - $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)), - $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)), - $currentBaseId = $it.baseId; - if ($thenPresent || $elsePresent) { - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - $it.createErrors = true; - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - if ($thenPresent) { - out += ' if (' + ($nextValid) + ') { '; - $it.schema = it.schema['then']; - $it.schemaPath = it.schemaPath + '.then'; - $it.errSchemaPath = it.errSchemaPath + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'then\'; '; - } else { - $ifClause = '\'then\''; - } - out += ' } '; - if ($elsePresent) { - out += ' else { '; - } - } else { - out += ' if (!' + ($nextValid) + ') { '; - } - if ($elsePresent) { - $it.schema = it.schema['else']; - $it.schemaPath = it.schemaPath + '.else'; - $it.errSchemaPath = it.errSchemaPath + '/else'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'else\'; '; - } else { - $ifClause = '\'else\''; - } - out += ' } '; - } - out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],27:[function(require,module,exports){ -'use strict'; - -//all requires must be explicit because browserify won't work with dynamic requires -module.exports = { - '$ref': require('./ref'), - allOf: require('./allOf'), - anyOf: require('./anyOf'), - '$comment': require('./comment'), - const: require('./const'), - contains: require('./contains'), - dependencies: require('./dependencies'), - 'enum': require('./enum'), - format: require('./format'), - 'if': require('./if'), - items: require('./items'), - maximum: require('./_limit'), - minimum: require('./_limit'), - maxItems: require('./_limitItems'), - minItems: require('./_limitItems'), - maxLength: require('./_limitLength'), - minLength: require('./_limitLength'), - maxProperties: require('./_limitProperties'), - minProperties: require('./_limitProperties'), - multipleOf: require('./multipleOf'), - not: require('./not'), - oneOf: require('./oneOf'), - pattern: require('./pattern'), - properties: require('./properties'), - propertyNames: require('./propertyNames'), - required: require('./required'), - uniqueItems: require('./uniqueItems'), - validate: require('./validate') -}; - -},{"./_limit":13,"./_limitItems":14,"./_limitLength":15,"./_limitProperties":16,"./allOf":17,"./anyOf":18,"./comment":19,"./const":20,"./contains":21,"./dependencies":23,"./enum":24,"./format":25,"./if":26,"./items":28,"./multipleOf":29,"./not":30,"./oneOf":31,"./pattern":32,"./properties":33,"./propertyNames":34,"./ref":35,"./required":36,"./uniqueItems":37,"./validate":38}],28:[function(require,module,exports){ -'use strict'; -module.exports = function generate_items(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId; - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if (Array.isArray($schema)) { - var $additionalItems = it.schema.additionalItems; - if ($additionalItems === false) { - out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - } - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) { - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' }'; - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} - -},{}],29:[function(require,module,exports){ -'use strict'; -module.exports = function generate_multipleOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - out += 'var division' + ($lvl) + ';if ('; - if ($isData) { - out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; - } - out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; - if (it.opts.multipleOfPrecision) { - out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; - } else { - out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; - } - out += ' ) '; - if ($isData) { - out += ' ) '; - } - out += ' ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be multiple of '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],30:[function(require,module,exports){ -'use strict'; -module.exports = function generate_not(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - out += ' ' + (it.validate($it)) + ' '; - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (' + ($nextValid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - out += ' var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if ($breakOnError) { - out += ' if (false) { '; - } - } - return out; -} - -},{}],31:[function(require,module,exports){ -'use strict'; -module.exports = function generate_oneOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $prevValid = 'prevValid' + $lvl, - $passingSchemas = 'passingSchemas' + $lvl; - out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } else { - out += ' var ' + ($nextValid) + ' = true; '; - } - if ($i) { - out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; - $closingBraces += '}'; - } - out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match exactly one schema in oneOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} - -},{}],32:[function(require,module,exports){ -'use strict'; -module.exports = function generate_pattern(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match pattern "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} - -},{}],33:[function(require,module,exports){ -'use strict'; -module.exports = function generate_properties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl; - var $schemaKeys = Object.keys($schema || {}).filter(notProto), - $pProperties = it.schema.patternProperties || {}, - $pPropertyKeys = Object.keys($pProperties).filter(notProto), - $aProperties = it.schema.additionalProperties, - $someProperties = $schemaKeys.length || $pPropertyKeys.length, - $noAdditional = $aProperties === false, - $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, - $removeAdditional = it.opts.removeAdditional, - $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) { - var $requiredHash = it.util.toHash($required); - } - - function notProto(p) { - return p !== '__proto__'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined;'; - } - if ($checkAdditional) { - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - if ($someProperties) { - out += ' var isAdditional' + ($lvl) + ' = !(false '; - if ($schemaKeys.length) { - if ($schemaKeys.length > 8) { - out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; - } else { - var arr1 = $schemaKeys; - if (arr1) { - var $propertyKey, i1 = -1, - l1 = arr1.length - 1; - while (i1 < l1) { - $propertyKey = arr1[i1 += 1]; - out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; - } - } - } - } - if ($pPropertyKeys.length) { - var arr2 = $pPropertyKeys; - if (arr2) { - var $pProperty, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $pProperty = arr2[$i += 1]; - out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; - } - } - } - out += ' ); if (isAdditional' + ($lvl) + ') { '; - } - if ($removeAdditional == 'all') { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - if ($noAdditional) { - if ($removeAdditional) { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - out += ' ' + ($nextValid) + ' = false; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is an invalid additional property'; - } else { - out += 'should NOT have additional properties'; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - out += ' break; '; - } - } - } else if ($additionalIsSchema) { - if ($removeAdditional == 'failing') { - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - } else { - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - } - } - it.errorPath = $currentErrorPath; - } - if ($someProperties) { - out += ' } '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - var $useDefaults = it.opts.useDefaults && !it.compositeRule; - if ($schemaKeys.length) { - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - var $prop = it.util.getProperty($propertyKey), - $passData = $data + $prop, - $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - $code = it.util.varReplace($code, $nextData, $passData); - var $useData = $passData; - } else { - var $useData = $nextData; - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; - } - if ($hasDefault) { - out += ' ' + ($code) + ' '; - } else { - if ($requiredHash && $requiredHash[$propertyKey]) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = false; '; - var $currentErrorPath = it.errorPath, - $currErrSchemaPath = $errSchemaPath, - $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - it.errorPath = $currentErrorPath; - out += ' } else { '; - } else { - if ($breakOnError) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = true; } else { '; - } else { - out += ' if (' + ($useData) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ' ) { '; - } - } - out += ' ' + ($code) + ' } '; - } - } - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($pPropertyKeys.length) { - var arr4 = $pPropertyKeys; - if (arr4) { - var $pProperty, i4 = -1, - l4 = arr4.length - 1; - while (i4 < l4) { - $pProperty = arr4[i4 += 1]; - var $sch = $pProperties[$pProperty]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else ' + ($nextValid) + ' = true; '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} - -},{}],34:[function(require,module,exports){ -'use strict'; -module.exports = function generate_propertyNames(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - out += 'var ' + ($errs) + ' = errors;'; - if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $i = 'i' + $lvl, - $invalidName = '\' + ' + $key + ' + \'', - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined; '; - } - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' var startErrs' + ($lvl) + ' = errors; '; - var $passData = $key; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) { - $required[$required.length] = $property; - } - } - } - } else { - var $required = $schema; - } - } - if ($isData || $required.length) { - var $currentErrorPath = it.errorPath, - $loopRequired = $isData || $required.length >= it.opts.loopRequired, - $ownProperties = it.opts.ownProperties; - if ($breakOnError) { - out += ' var missing' + ($lvl) + '; '; - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - out += ' var ' + ($valid) + ' = true; '; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += '; if (!' + ($valid) + ') break; } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } else { - out += ' if ( '; - var arr2 = $required; - if (arr2) { - var $propertyKey, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $propertyKey = arr2[$i += 1]; - if ($i) { - out += ' || '; - } - var $prop = it.util.getProperty($propertyKey), - $useData = $data + $prop; - out += ' ( ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; - } - } - out += ') { '; - var $propertyPath = 'missing' + $lvl, - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } - } else { - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - if ($isData) { - out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; - if ($isData) { - out += ' } '; - } - } else { - var arr3 = $required; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $prop = it.util.getProperty($propertyKey), - $missingProperty = it.util.escapeQuotes($propertyKey), - $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; - } - } - } - } - it.errorPath = $currentErrorPath; - } else if ($breakOnError) { - out += ' if (true) {'; - } - return out; -} - -},{}],37:[function(require,module,exports){ -'use strict'; -module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (($schema || $isData) && it.opts.uniqueItems !== false) { - if ($isData) { - out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; - } - out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; - var $itemType = it.schema.items && it.schema.items.type, - $typeIsArray = Array.isArray($itemType); - if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { - out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; - } else { - out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; - var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); - out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; '; - if ($typeIsArray) { - out += ' if (typeof item == \'string\') item = \'"\' + item; '; - } - out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; - } - out += ' } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} - -},{}],38:[function(require,module,exports){ -'use strict'; -module.exports = function generate_validate(it, $keyword, $ruleType) { - var out = ''; - var $async = it.schema.$async === true, - $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), - $id = it.self._getId(it.schema); - if (it.opts.strictKeywords) { - var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); - if ($unknownKwd) { - var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; - if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); - else throw new Error($keywordsMsg); - } - } - if (it.isTop) { - out += ' var validate = '; - if ($async) { - it.async = true; - out += 'async '; - } - out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; - if ($id && (it.opts.sourceCode || it.opts.processCode)) { - out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; - } - } - if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { - var $keyword = 'false schema'; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - if (it.schema === false) { - if (it.isTop) { - $breakOnError = true; - } else { - out += ' var ' + ($valid) + ' = false; '; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'boolean schema is false\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } else { - if (it.isTop) { - if ($async) { - out += ' return data; '; - } else { - out += ' validate.errors = null; return true; '; - } - } else { - out += ' var ' + ($valid) + ' = true; '; - } - } - if (it.isTop) { - out += ' }; return validate; '; - } - return out; - } - if (it.isTop) { - var $top = it.isTop, - $lvl = it.level = 0, - $dataLvl = it.dataLevel = 0, - $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - it.dataPathArr = [undefined]; - if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored in the schema root'; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - out += ' var vErrors = null; '; - out += ' var errors = 0; '; - out += ' if (rootData === undefined) rootData = data; '; - } else { - var $lvl = it.level, - $dataLvl = it.dataLevel, - $data = 'data' + ($dataLvl || ''); - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - if ($async && !it.async) throw new Error('async schema in sync schema'); - out += ' var errs_' + ($lvl) + ' = errors;'; - } - var $valid = 'valid' + $lvl, - $breakOnError = !it.opts.allErrors, - $closingBraces1 = '', - $closingBraces2 = ''; - var $errorKeyword; - var $typeSchema = it.schema.type, - $typeIsArray = Array.isArray($typeSchema); - if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { - if ($typeIsArray) { - if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null'); - } else if ($typeSchema != 'null') { - $typeSchema = [$typeSchema, 'null']; - $typeIsArray = true; - } - } - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } - if (it.schema.$ref && $refKeywords) { - if (it.opts.extendRefs == 'fail') { - throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); - } else if (it.opts.extendRefs !== true) { - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - } - } - if (it.schema.$comment && it.opts.$comment) { - out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); - } - if ($typeSchema) { - if (it.opts.coerceTypes) { - var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); - } - var $rulesGroup = it.RULES.types[$typeSchema]; - if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type', - $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { '; - if ($coerceToTypes) { - var $dataType = 'dataType' + $lvl, - $coerced = 'coerced' + $lvl; - out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; - if (it.opts.coerceTypes == 'array') { - out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; - } - out += ' var ' + ($coerced) + ' = undefined; '; - var $bracesCoercion = ''; - var arr1 = $coerceToTypes; - if (arr1) { - var $type, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $type = arr1[$i += 1]; - if ($i) { - out += ' if (' + ($coerced) + ' === undefined) { '; - $bracesCoercion += '}'; - } - if (it.opts.coerceTypes == 'array' && $type != 'array') { - out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; - } - if ($type == 'string') { - out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; - } else if ($type == 'number' || $type == 'integer') { - out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; - if ($type == 'integer') { - out += ' && !(' + ($data) + ' % 1)'; - } - out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; - } else if ($type == 'boolean') { - out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; - } else if ($type == 'null') { - out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; - } else if (it.opts.coerceTypes == 'array' && $type == 'array') { - out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; - } - } - } - out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' ' + ($data) + ' = ' + ($coerced) + '; '; - if (!$dataLvl) { - out += 'if (' + ($parentData) + ' !== undefined)'; - } - out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' } '; - } - } - if (it.schema.$ref && !$refKeywords) { - out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; - if ($breakOnError) { - out += ' } if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } else { - var arr2 = it.RULES; - if (arr2) { - var $rulesGroup, i2 = -1, - l2 = arr2.length - 1; - while (i2 < l2) { - $rulesGroup = arr2[i2 += 1]; - if ($shouldUseGroup($rulesGroup)) { - if ($rulesGroup.type) { - out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { '; - } - if (it.opts.useDefaults) { - if ($rulesGroup.type == 'object' && it.schema.properties) { - var $schema = it.schema.properties, - $schemaKeys = Object.keys($schema); - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ($sch.default !== undefined) { - var $passData = $data + it.util.getProperty($propertyKey); - if (it.compositeRule) { - if (it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored for: ' + $passData; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - } else { - out += ' if (' + ($passData) + ' === undefined '; - if (it.opts.useDefaults == 'empty') { - out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; - } - out += ' ) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { - var arr4 = it.schema.items; - if (arr4) { - var $sch, $i = -1, - l4 = arr4.length - 1; - while ($i < l4) { - $sch = arr4[$i += 1]; - if ($sch.default !== undefined) { - var $passData = $data + '[' + $i + ']'; - if (it.compositeRule) { - if (it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored for: ' + $passData; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - } else { - out += ' if (' + ($passData) + ' === undefined '; - if (it.opts.useDefaults == 'empty') { - out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; - } - out += ' ) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } - } - var arr5 = $rulesGroup.rules; - if (arr5) { - var $rule, i5 = -1, - l5 = arr5.length - 1; - while (i5 < l5) { - $rule = arr5[i5 += 1]; - if ($shouldUseRule($rule)) { - var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); - if ($code) { - out += ' ' + ($code) + ' '; - if ($breakOnError) { - $closingBraces1 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces1) + ' '; - $closingBraces1 = ''; - } - if ($rulesGroup.type) { - out += ' } '; - if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { - out += ' else { '; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - } - } - if ($breakOnError) { - out += ' if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces2) + ' '; - } - if ($top) { - if ($async) { - out += ' if (errors === 0) return data; '; - out += ' else throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; '; - out += ' return errors === 0; '; - } - out += ' }; return validate;'; - } else { - out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; - } - - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i = 0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i = 0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) return true; - } - return out; -} - -},{}],39:[function(require,module,exports){ -'use strict'; - -var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; -var customRuleCode = require('./dotjs/custom'); -var definitionSchema = require('./definition_schema'); - -module.exports = { - add: addKeyword, - get: getKeyword, - remove: removeKeyword, - validate: validateKeyword -}; - - -/** - * Define custom keyword - * @this Ajv - * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). - * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ -function addKeyword(keyword, definition) { - /* jshint validthis: true */ - /* eslint no-shadow: 0 */ - var RULES = this.RULES; - if (RULES.keywords[keyword]) - throw new Error('Keyword ' + keyword + ' is already defined'); - - if (!IDENTIFIER.test(keyword)) - throw new Error('Keyword ' + keyword + ' is not a valid identifier'); - - if (definition) { - this.validateKeyword(definition, true); - - var dataType = definition.type; - if (Array.isArray(dataType)) { - for (var i=0; i 1) { - sets[0] = sets[0].slice(0, -1); - var xl = sets.length - 1; - for (var x = 1; x < xl; ++x) { - sets[x] = sets[x].slice(1, -1); - } - sets[xl] = sets[xl].slice(1); - return sets.join(''); - } else { - return sets[0]; - } -} -function subexp(str) { - return "(?:" + str + ")"; -} -function typeOf(o) { - return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); -} -function toUpperCase(str) { - return str.toUpperCase(); -} -function toArray(obj) { - return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; -} -function assign(target, source) { - var obj = target; - if (source) { - for (var key in source) { - obj[key] = source[key]; - } - } - return obj; -} - -function buildExps(isIRI) { - var ALPHA$$ = "[A-Za-z]", - CR$ = "[\\x0D]", - DIGIT$$ = "[0-9]", - DQUOTE$$ = "[\\x22]", - HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), - //case-insensitive - LF$$ = "[\\x0A]", - SP$$ = "[\\x20]", - PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), - //expanded - GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", - SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", - RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), - UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", - //subset, excludes bidi control characters - IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", - //subset - UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), - SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), - USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), - DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), - DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), - //relaxed parsing rules - IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), - H16$ = subexp(HEXDIG$$ + "{1,4}"), - LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), - IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), - // 6( h16 ":" ) ls32 - IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), - // "::" 5( h16 ":" ) ls32 - IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), - //[ h16 ] "::" 4( h16 ":" ) ls32 - IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), - //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 - IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), - //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 - IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), - //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 - IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), - //[ *4( h16 ":" ) h16 ] "::" ls32 - IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), - //[ *5( h16 ":" ) h16 ] "::" h16 - IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), - //[ *6( h16 ":" ) h16 ] "::" - IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), - ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), - //RFC 6874 - IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), - //RFC 6874 - IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), - //RFC 6874, with relaxed parsing rules - IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), - IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), - //RFC 6874 - REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), - HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), - PORT$ = subexp(DIGIT$$ + "*"), - AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), - PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), - SEGMENT$ = subexp(PCHAR$ + "*"), - SEGMENT_NZ$ = subexp(PCHAR$ + "+"), - SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), - PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), - PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), - //simplified - PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), - //simplified - PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), - //simplified - PATH_EMPTY$ = "(?!" + PCHAR$ + ")", - PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), - FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), - HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), - URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), - RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), - URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), - ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), - GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", - SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", - AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; - return { - NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), - NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), - NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), - NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), - ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), - UNRESERVED: new RegExp(UNRESERVED$$, "g"), - OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), - PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), - IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), - IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules - }; -} -var URI_PROTOCOL = buildExps(false); - -var IRI_PROTOCOL = buildExps(true); - -var slicedToArray = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; -}(); - - - - - - - - - - - - - -var toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } else { - return Array.from(arr); - } -}; - -/** Highest positive signed 32-bit float value */ - -var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 - -/** Bootstring parameters */ -var base = 36; -var tMin = 1; -var tMax = 26; -var skew = 38; -var damp = 700; -var initialBias = 72; -var initialN = 128; // 0x80 -var delimiter = '-'; // '\x2D' - -/** Regular expressions */ -var regexPunycode = /^xn--/; -var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars -var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators - -/** Error messages */ -var errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' -}; - -/** Convenience shortcuts */ -var baseMinusTMin = base - tMin; -var floor = Math.floor; -var stringFromCharCode = String.fromCharCode; - -/*--------------------------------------------------------------------------*/ - -/** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ -function error$1(type) { - throw new RangeError(errors[type]); -} - -/** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ -function map(array, fn) { - var result = []; - var length = array.length; - while (length--) { - result[length] = fn(array[length]); - } - return result; -} - -/** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ -function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; -} - -/** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ -function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - while (counter < length) { - var value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // It's a high surrogate, and there is a next character. - var extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { - // Low surrogate. - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // It's an unmatched surrogate; only append this code unit, in case the - // next code unit is the high surrogate of a surrogate pair. - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; -} - -/** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ -var ucs2encode = function ucs2encode(array) { - return String.fromCodePoint.apply(String, toConsumableArray(array)); -}; - -/** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ -var basicToDigit = function basicToDigit(codePoint) { - if (codePoint - 0x30 < 0x0A) { - return codePoint - 0x16; - } - if (codePoint - 0x41 < 0x1A) { - return codePoint - 0x41; - } - if (codePoint - 0x61 < 0x1A) { - return codePoint - 0x61; - } - return base; -}; - -/** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ -var digitToBasic = function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); -}; - -/** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ -var adapt = function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); -}; - -/** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ -var decode = function decode(input) { - // Don't use UCS-2. - var output = []; - var inputLength = input.length; - var i = 0; - var n = initialN; - var bias = initialBias; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - var basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (var j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error$1('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - var oldi = i; - for (var w = 1, k = base;; /* no condition */k += base) { - - if (index >= inputLength) { - error$1('invalid-input'); - } - - var digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error$1('overflow'); - } - - i += digit * w; - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - - if (digit < t) { - break; - } - - var baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error$1('overflow'); - } - - w *= baseMinusT; - } - - var out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error$1('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output. - output.splice(i++, 0, n); - } - - return String.fromCodePoint.apply(String, output); -}; - -/** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ -var encode = function encode(input) { - var output = []; - - // Convert the input in UCS-2 to an array of Unicode code points. - input = ucs2decode(input); - - // Cache the length. - var inputLength = input.length; - - // Initialize the state. - var n = initialN; - var delta = 0; - var bias = initialBias; - - // Handle the basic code points. - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _currentValue2 = _step.value; - - if (_currentValue2 < 0x80) { - output.push(stringFromCharCode(_currentValue2)); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - var basicLength = output.length; - var handledCPCount = basicLength; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string with a delimiter unless it's empty. - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - var m = maxInt; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var currentValue = _step2.value; - - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow. - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - var handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error$1('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var _currentValue = _step3.value; - - if (_currentValue < n && ++delta > maxInt) { - error$1('overflow'); - } - if (_currentValue == n) { - // Represent delta as a generalized variable-length integer. - var q = delta; - for (var k = base;; /* no condition */k += base) { - var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (q < t) { - break; - } - var qMinusT = q - t; - var baseMinusT = base - t; - output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - ++delta; - ++n; - } - return output.join(''); -}; - -/** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ -var toUnicode = function toUnicode(input) { - return mapDomain(input, function (string) { - return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; - }); -}; - -/** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ -var toASCII = function toASCII(input) { - return mapDomain(input, function (string) { - return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; - }); -}; - -/*--------------------------------------------------------------------------*/ - -/** Define the public API */ -var punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '2.1.0', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode -}; - -/** - * URI.js - * - * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. - * @author Gary Court - * @see http://github.com/garycourt/uri-js - */ -/** - * Copyright 2011 Gary Court. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Gary Court. - */ -var SCHEMES = {}; -function pctEncChar(chr) { - var c = chr.charCodeAt(0); - var e = void 0; - if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); - return e; -} -function pctDecChars(str) { - var newStr = ""; - var i = 0; - var il = str.length; - while (i < il) { - var c = parseInt(str.substr(i + 1, 2), 16); - if (c < 128) { - newStr += String.fromCharCode(c); - i += 3; - } else if (c >= 194 && c < 224) { - if (il - i >= 6) { - var c2 = parseInt(str.substr(i + 4, 2), 16); - newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); - } else { - newStr += str.substr(i, 6); - } - i += 6; - } else if (c >= 224) { - if (il - i >= 9) { - var _c = parseInt(str.substr(i + 4, 2), 16); - var c3 = parseInt(str.substr(i + 7, 2), 16); - newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); - } else { - newStr += str.substr(i, 9); - } - i += 9; - } else { - newStr += str.substr(i, 3); - i += 3; - } - } - return newStr; -} -function _normalizeComponentEncoding(components, protocol) { - function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(protocol.UNRESERVED) ? str : decStr; - } - if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); - if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); - return components; -} - -function _stripLeadingZeros(str) { - return str.replace(/^0*(.*)/, "$1") || "0"; -} -function _normalizeIPv4(host, protocol) { - var matches = host.match(protocol.IPV4ADDRESS) || []; - - var _matches = slicedToArray(matches, 2), - address = _matches[1]; - - if (address) { - return address.split(".").map(_stripLeadingZeros).join("."); - } else { - return host; - } -} -function _normalizeIPv6(host, protocol) { - var matches = host.match(protocol.IPV6ADDRESS) || []; - - var _matches2 = slicedToArray(matches, 3), - address = _matches2[1], - zone = _matches2[2]; - - if (address) { - var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), - _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), - last = _address$toLowerCase$2[0], - first = _address$toLowerCase$2[1]; - - var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; - var lastFields = last.split(":").map(_stripLeadingZeros); - var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); - var fieldCount = isLastFieldIPv4Address ? 7 : 8; - var lastFieldsStart = lastFields.length - fieldCount; - var fields = Array(fieldCount); - for (var x = 0; x < fieldCount; ++x) { - fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; - } - if (isLastFieldIPv4Address) { - fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); - } - var allZeroFields = fields.reduce(function (acc, field, index) { - if (!field || field === "0") { - var lastLongest = acc[acc.length - 1]; - if (lastLongest && lastLongest.index + lastLongest.length === index) { - lastLongest.length++; - } else { - acc.push({ index: index, length: 1 }); - } - } - return acc; - }, []); - var longestZeroFields = allZeroFields.sort(function (a, b) { - return b.length - a.length; - })[0]; - var newHost = void 0; - if (longestZeroFields && longestZeroFields.length > 1) { - var newFirst = fields.slice(0, longestZeroFields.index); - var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); - newHost = newFirst.join(":") + "::" + newLast.join(":"); - } else { - newHost = fields.join(":"); - } - if (zone) { - newHost += "%" + zone; - } - return newHost; - } else { - return host; - } -} -var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; -var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; -function parse(uriString) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var components = {}; - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; - var matches = uriString.match(URI_PARSE); - if (matches) { - if (NO_MATCH_IS_UNDEFINED) { - //store each component - components.scheme = matches[1]; - components.userinfo = matches[3]; - components.host = matches[4]; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = matches[7]; - components.fragment = matches[8]; - //fix port number - if (isNaN(components.port)) { - components.port = matches[5]; - } - } else { - //IE FIX for improper RegExp matching - //store each component - components.scheme = matches[1] || undefined; - components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; - components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; - components.port = parseInt(matches[5], 10); - components.path = matches[6] || ""; - components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; - components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; - //fix port number - if (isNaN(components.port)) { - components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; - } - } - if (components.host) { - //normalize IP hosts - components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); - } - //determine reference type - if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { - components.reference = "same-document"; - } else if (components.scheme === undefined) { - components.reference = "relative"; - } else if (components.fragment === undefined) { - components.reference = "absolute"; - } else { - components.reference = "uri"; - } - //check for reference errors - if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { - components.error = components.error || "URI is not a " + options.reference + " reference."; - } - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //check if scheme can't handle IRIs - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { - //if host component is a domain name - if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { - //convert Unicode IDN -> ASCII IDN - try { - components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; - } - } - //convert IRI -> URI - _normalizeComponentEncoding(components, URI_PROTOCOL); - } else { - //normalize encodings - _normalizeComponentEncoding(components, protocol); - } - //perform scheme specific parsing - if (schemeHandler && schemeHandler.parse) { - schemeHandler.parse(components, options); - } - } else { - components.error = components.error || "URI can not be parsed."; - } - return components; -} - -function _recomposeAuthority(components, options) { - var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - if (components.userinfo !== undefined) { - uriTokens.push(components.userinfo); - uriTokens.push("@"); - } - if (components.host !== undefined) { - //normalize IP hosts, add brackets and escape zone separator for IPv6 - uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { - return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; - })); - } - if (typeof components.port === "number") { - uriTokens.push(":"); - uriTokens.push(components.port.toString(10)); - } - return uriTokens.length ? uriTokens.join("") : undefined; -} - -var RDS1 = /^\.\.?\//; -var RDS2 = /^\/\.(\/|$)/; -var RDS3 = /^\/\.\.(\/|$)/; -var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; -function removeDotSegments(input) { - var output = []; - while (input.length) { - if (input.match(RDS1)) { - input = input.replace(RDS1, ""); - } else if (input.match(RDS2)) { - input = input.replace(RDS2, "/"); - } else if (input.match(RDS3)) { - input = input.replace(RDS3, "/"); - output.pop(); - } else if (input === "." || input === "..") { - input = ""; - } else { - var im = input.match(RDS5); - if (im) { - var s = im[0]; - input = input.slice(s.length); - output.push(s); - } else { - throw new Error("Unexpected dot segment condition"); - } - } - } - return output.join(""); -} - -function serialize(components) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; - var uriTokens = []; - //find scheme handler - var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; - //perform scheme specific serialization - if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); - if (components.host) { - //if host component is an IPv6 address - if (protocol.IPV6ADDRESS.test(components.host)) {} - //TODO: normalize IPv6 address as per RFC 5952 - - //if host component is a domain name - else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { - //convert IDN via punycode - try { - components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); - } catch (e) { - components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - } - } - //normalize encoding - _normalizeComponentEncoding(components, protocol); - if (options.reference !== "suffix" && components.scheme) { - uriTokens.push(components.scheme); - uriTokens.push(":"); - } - var authority = _recomposeAuthority(components, options); - if (authority !== undefined) { - if (options.reference !== "suffix") { - uriTokens.push("//"); - } - uriTokens.push(authority); - if (components.path && components.path.charAt(0) !== "/") { - uriTokens.push("/"); - } - } - if (components.path !== undefined) { - var s = components.path; - if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { - s = removeDotSegments(s); - } - if (authority === undefined) { - s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" - } - uriTokens.push(s); - } - if (components.query !== undefined) { - uriTokens.push("?"); - uriTokens.push(components.query); - } - if (components.fragment !== undefined) { - uriTokens.push("#"); - uriTokens.push(components.fragment); - } - return uriTokens.join(""); //merge tokens into a string -} - -function resolveComponents(base, relative) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var skipNormalization = arguments[3]; - - var target = {}; - if (!skipNormalization) { - base = parse(serialize(base, options), options); //normalize base components - relative = parse(serialize(relative, options), options); //normalize relative components - } - options = options || {}; - if (!options.tolerant && relative.scheme) { - target.scheme = relative.scheme; - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { - //target.authority = relative.authority; - target.userinfo = relative.userinfo; - target.host = relative.host; - target.port = relative.port; - target.path = removeDotSegments(relative.path || ""); - target.query = relative.query; - } else { - if (!relative.path) { - target.path = base.path; - if (relative.query !== undefined) { - target.query = relative.query; - } else { - target.query = base.query; - } - } else { - if (relative.path.charAt(0) === "/") { - target.path = removeDotSegments(relative.path); - } else { - if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { - target.path = "/" + relative.path; - } else if (!base.path) { - target.path = relative.path; - } else { - target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; - } - target.path = removeDotSegments(target.path); - } - target.query = relative.query; - } - //target.authority = base.authority; - target.userinfo = base.userinfo; - target.host = base.host; - target.port = base.port; - } - target.scheme = base.scheme; - } - target.fragment = relative.fragment; - return target; -} - -function resolve(baseURI, relativeURI, options) { - var schemelessOptions = assign({ scheme: 'null' }, options); - return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); -} - -function normalize(uri, options) { - if (typeof uri === "string") { - uri = serialize(parse(uri, options), options); - } else if (typeOf(uri) === "object") { - uri = parse(serialize(uri, options), options); - } - return uri; -} - -function equal(uriA, uriB, options) { - if (typeof uriA === "string") { - uriA = serialize(parse(uriA, options), options); - } else if (typeOf(uriA) === "object") { - uriA = serialize(uriA, options); - } - if (typeof uriB === "string") { - uriB = serialize(parse(uriB, options), options); - } else if (typeOf(uriB) === "object") { - uriB = serialize(uriB, options); - } - return uriA === uriB; -} - -function escapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); -} - -function unescapeComponent(str, options) { - return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); -} - -var handler = { - scheme: "http", - domainHost: true, - parse: function parse(components, options) { - //report missing host - if (!components.host) { - components.error = components.error || "HTTP URIs must have a host."; - } - return components; - }, - serialize: function serialize(components, options) { - //normalize the default port - if (components.port === (String(components.scheme).toLowerCase() !== "https" ? 80 : 443) || components.port === "") { - components.port = undefined; - } - //normalize the empty path - if (!components.path) { - components.path = "/"; - } - //NOTE: We do not parse query strings for HTTP URIs - //as WWW Form Url Encoded query strings are part of the HTML4+ spec, - //and not the HTTP spec. - return components; - } -}; - -var handler$1 = { - scheme: "https", - domainHost: handler.domainHost, - parse: handler.parse, - serialize: handler.serialize -}; - -var O = {}; -var isIRI = true; -//RFC 3986 -var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; -var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive -var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded -//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = -//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) -//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext -//const VCHAR$$ = "[\\x21-\\x7E]"; -//const WSP$$ = "[\\x20\\x09]"; -//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext -//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); -//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); -//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); -var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; -var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; -var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); -var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; -var UNRESERVED = new RegExp(UNRESERVED$$, "g"); -var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); -var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); -var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); -var NOT_HFVALUE = NOT_HFNAME; -function decodeUnreserved(str) { - var decStr = pctDecChars(str); - return !decStr.match(UNRESERVED) ? str : decStr; -} -var handler$2 = { - scheme: "mailto", - parse: function parse$$1(components, options) { - var mailtoComponents = components; - var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; - mailtoComponents.path = undefined; - if (mailtoComponents.query) { - var unknownHeaders = false; - var headers = {}; - var hfields = mailtoComponents.query.split("&"); - for (var x = 0, xl = hfields.length; x < xl; ++x) { - var hfield = hfields[x].split("="); - switch (hfield[0]) { - case "to": - var toAddrs = hfield[1].split(","); - for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { - to.push(toAddrs[_x]); - } - break; - case "subject": - mailtoComponents.subject = unescapeComponent(hfield[1], options); - break; - case "body": - mailtoComponents.body = unescapeComponent(hfield[1], options); - break; - default: - unknownHeaders = true; - headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); - break; - } - } - if (unknownHeaders) mailtoComponents.headers = headers; - } - mailtoComponents.query = undefined; - for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { - var addr = to[_x2].split("@"); - addr[0] = unescapeComponent(addr[0]); - if (!options.unicodeSupport) { - //convert Unicode IDN -> ASCII IDN - try { - addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); - } catch (e) { - mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; - } - } else { - addr[1] = unescapeComponent(addr[1], options).toLowerCase(); - } - to[_x2] = addr.join("@"); - } - return mailtoComponents; - }, - serialize: function serialize$$1(mailtoComponents, options) { - var components = mailtoComponents; - var to = toArray(mailtoComponents.to); - if (to) { - for (var x = 0, xl = to.length; x < xl; ++x) { - var toAddr = String(to[x]); - var atIdx = toAddr.lastIndexOf("@"); - var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); - var domain = toAddr.slice(atIdx + 1); - //convert IDN via punycode - try { - domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); - } catch (e) { - components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; - } - to[x] = localPart + "@" + domain; - } - components.path = to.join(","); - } - var headers = mailtoComponents.headers = mailtoComponents.headers || {}; - if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; - if (mailtoComponents.body) headers["body"] = mailtoComponents.body; - var fields = []; - for (var name in headers) { - if (headers[name] !== O[name]) { - fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); - } - } - if (fields.length) { - components.query = fields.join("&"); - } - return components; - } -}; - -var URN_PARSE = /^([^\:]+)\:(.*)/; -//RFC 2141 -var handler$3 = { - scheme: "urn", - parse: function parse$$1(components, options) { - var matches = components.path && components.path.match(URN_PARSE); - var urnComponents = components; - if (matches) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = matches[1].toLowerCase(); - var nss = matches[2]; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - urnComponents.nid = nid; - urnComponents.nss = nss; - urnComponents.path = undefined; - if (schemeHandler) { - urnComponents = schemeHandler.parse(urnComponents, options); - } - } else { - urnComponents.error = urnComponents.error || "URN can not be parsed."; - } - return urnComponents; - }, - serialize: function serialize$$1(urnComponents, options) { - var scheme = options.scheme || urnComponents.scheme || "urn"; - var nid = urnComponents.nid; - var urnScheme = scheme + ":" + (options.nid || nid); - var schemeHandler = SCHEMES[urnScheme]; - if (schemeHandler) { - urnComponents = schemeHandler.serialize(urnComponents, options); - } - var uriComponents = urnComponents; - var nss = urnComponents.nss; - uriComponents.path = (nid || options.nid) + ":" + nss; - return uriComponents; - } -}; - -var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; -//RFC 4122 -var handler$4 = { - scheme: "urn:uuid", - parse: function parse(urnComponents, options) { - var uuidComponents = urnComponents; - uuidComponents.uuid = uuidComponents.nss; - uuidComponents.nss = undefined; - if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { - uuidComponents.error = uuidComponents.error || "UUID is not valid."; - } - return uuidComponents; - }, - serialize: function serialize(uuidComponents, options) { - var urnComponents = uuidComponents; - //normalize UUID - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); - return urnComponents; - } -}; - -SCHEMES[handler.scheme] = handler; -SCHEMES[handler$1.scheme] = handler$1; -SCHEMES[handler$2.scheme] = handler$2; -SCHEMES[handler$3.scheme] = handler$3; -SCHEMES[handler$4.scheme] = handler$4; - -exports.SCHEMES = SCHEMES; -exports.pctEncChar = pctEncChar; -exports.pctDecChars = pctDecChars; -exports.parse = parse; -exports.removeDotSegments = removeDotSegments; -exports.serialize = serialize; -exports.resolveComponents = resolveComponents; -exports.resolve = resolve; -exports.normalize = normalize; -exports.equal = equal; -exports.escapeComponent = escapeComponent; -exports.unescapeComponent = unescapeComponent; - -Object.defineProperty(exports, '__esModule', { value: true }); - -}))); - - -},{}],"ajv":[function(require,module,exports){ -'use strict'; - -var compileSchema = require('./compile') - , resolve = require('./compile/resolve') - , Cache = require('./cache') - , SchemaObject = require('./compile/schema_obj') - , stableStringify = require('fast-json-stable-stringify') - , formats = require('./compile/formats') - , rules = require('./compile/rules') - , $dataMetaSchema = require('./data') - , util = require('./compile/util'); - -module.exports = Ajv; - -Ajv.prototype.validate = validate; -Ajv.prototype.compile = compile; -Ajv.prototype.addSchema = addSchema; -Ajv.prototype.addMetaSchema = addMetaSchema; -Ajv.prototype.validateSchema = validateSchema; -Ajv.prototype.getSchema = getSchema; -Ajv.prototype.removeSchema = removeSchema; -Ajv.prototype.addFormat = addFormat; -Ajv.prototype.errorsText = errorsText; - -Ajv.prototype._addSchema = _addSchema; -Ajv.prototype._compile = _compile; - -Ajv.prototype.compileAsync = require('./compile/async'); -var customKeyword = require('./keyword'); -Ajv.prototype.addKeyword = customKeyword.add; -Ajv.prototype.getKeyword = customKeyword.get; -Ajv.prototype.removeKeyword = customKeyword.remove; -Ajv.prototype.validateKeyword = customKeyword.validate; - -var errorClasses = require('./compile/error_classes'); -Ajv.ValidationError = errorClasses.Validation; -Ajv.MissingRefError = errorClasses.MissingRef; -Ajv.$dataMetaSchema = $dataMetaSchema; - -var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; - -var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; -var META_SUPPORT_DATA = ['/properties']; - -/** - * Creates validator instance. - * Usage: `Ajv(opts)` - * @param {Object} opts optional options - * @return {Object} ajv instance - */ -function Ajv(opts) { - if (!(this instanceof Ajv)) return new Ajv(opts); - opts = this._opts = util.copy(opts) || {}; - setLogger(this); - this._schemas = {}; - this._refs = {}; - this._fragments = {}; - this._formats = formats(opts.format); - - this._cache = opts.cache || new Cache; - this._loadingSchemas = {}; - this._compilations = []; - this.RULES = rules(); - this._getId = chooseGetId(opts); - - opts.loopRequired = opts.loopRequired || Infinity; - if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; - if (opts.serialize === undefined) opts.serialize = stableStringify; - this._metaOpts = getMetaSchemaOptions(this); - - if (opts.formats) addInitialFormats(this); - if (opts.keywords) addInitialKeywords(this); - addDefaultMetaSchema(this); - if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); - if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}}); - addInitialSchemas(this); -} - - - -/** - * Validate data using schema - * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. - * @this Ajv - * @param {String|Object} schemaKeyRef key, ref or schema object - * @param {Any} data to be validated - * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). - */ -function validate(schemaKeyRef, data) { - var v; - if (typeof schemaKeyRef == 'string') { - v = this.getSchema(schemaKeyRef); - if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); - } else { - var schemaObj = this._addSchema(schemaKeyRef); - v = schemaObj.validate || this._compile(schemaObj); - } - - var valid = v(data); - if (v.$async !== true) this.errors = v.errors; - return valid; -} - - -/** - * Create validating function for passed schema. - * @this Ajv - * @param {Object} schema schema object - * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. - * @return {Function} validating function - */ -function compile(schema, _meta) { - var schemaObj = this._addSchema(schema, undefined, _meta); - return schemaObj.validate || this._compile(schemaObj); -} - - -/** - * Adds schema to the instance. - * @this Ajv - * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. - * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. - * @return {Ajv} this for method chaining - */ -function addSchema(schema, key, _skipValidation, _meta) { - if (Array.isArray(schema)){ - for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {Object} options optional options with properties `separator` and `dataVar`. - * @return {String} human readable string with all errors descriptions - */ -function errorsText(errors, options) { - errors = errors || this.errors; - if (!errors) return 'No errors'; - options = options || {}; - var separator = options.separator === undefined ? ', ' : options.separator; - var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; - - var text = ''; - for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,u=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,h=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,d=/^(?:\/(?:[^~/]|~0|~1)*)*$/,p=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,f=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return a.copy(m[e="full"==e?"full":"fast"])}function v(e){var r=e.match(o);if(!r)return!1;var t,a=+r[2],s=+r[3];return 1<=a&&a<=12&&1<=s&&s<=(2!=a||((t=+r[1])%4!=0||t%100==0&&t%400!=0)?i[a]:29)}function y(e,r){var t=e.match(n);if(!t)return!1;var a=t[1],s=t[2],o=t[3];return(a<=23&&s<=59&&o<=59||23==a&&59==s&&60==o)&&(!r||t[5])}(r.exports=m).fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":p,"relative-json-pointer":f},m.full={date:v,time:y,"date-time":function(e){var r=e.split(g);return 2==r.length&&v(r[0])&&y(r[1],!0)},uri:function(e){return P.test(e)&&l.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":c,url:u,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:w,uuid:h,"json-pointer":d,"json-pointer-uri-fragment":p,"relative-json-pointer":f};var g=/t|\s/i;var P=/\/|:/;var E=/[^\\]\\Z/;function w(e){if(E.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},{"./util":10}],5:[function(e,r,t){"use strict";var R=e("./resolve"),$=e("./util"),j=e("./error_classes"),D=e("fast-json-stable-stringify"),O=e("../dotjs/validate"),I=$.ucs2length,A=e("fast-deep-equal"),k=j.Validation;function C(e,c,u,r){var d=this,p=this._opts,h=[void 0],f={},l=[],t={},m=[],a={},v=[],s=function(e,r,t){var a=L.call(this,e,r,t);return 0<=a?{index:a,compiling:!0}:{index:a=this._compilations.length,compiling:!(this._compilations[a]={schema:e,root:r,baseId:t})}}.call(this,e,c=c||{schema:e,refVal:h,refs:f},r),o=this._compilations[s.index];if(s.compiling)return o.callValidate=P;var y=this._formats,g=this.RULES;try{var i=E(e,c,u,r);o.validate=i;var n=o.callValidate;return n&&(n.schema=i.schema,n.errors=null,n.refs=i.refs,n.refVal=i.refVal,n.root=i.root,n.$async=i.$async,p.sourceCode&&(n.source=i.source)),i}finally{(function(e,r,t){var a=L.call(this,e,r,t);0<=a&&this._compilations.splice(a,1)}).call(this,e,c,r)}function P(){var e=o.validate,r=e.apply(this,arguments);return P.errors=e.errors,r}function E(e,r,t,a){var s=!r||r&&r.schema==e;if(r.schema!=c.schema)return C.call(d,e,r,t,a);var o=!0===e.$async,i=O({isTop:!0,schema:e,isRoot:s,baseId:a,root:r,schemaPath:"",errSchemaPath:"#",errorPath:'""',MissingRefError:j.MissingRef,RULES:g,validate:O,util:$,resolve:R,resolveRef:w,usePattern:_,useDefault:F,useCustomRule:x,opts:p,formats:y,logger:d.logger,self:d}),i=Q(h,T)+Q(l,N)+Q(m,z)+Q(v,q)+i;p.processCode&&(i=p.processCode(i,e));try{var n=new Function("self","RULES","formats","root","refVal","defaults","customRules","equal","ucs2length","ValidationError",i)(d,g,y,c,h,m,v,A,I,k);h[0]=n}catch(e){throw d.logger.error("Error compiling schema, function code:",i),e}return n.schema=e,n.errors=null,n.refs=f,n.refVal=h,n.root=s?n:r,o&&(n.$async=!0),!0===p.sourceCode&&(n.source={code:i,patterns:l,defaults:m}),n}function w(e,r,t){r=R.url(e,r);var a,s,o=f[r];if(void 0!==o)return S(a=h[o],s="refVal["+o+"]");if(!t&&c.refs){var i=c.refs[r];if(void 0!==i)return S(a=c.refVal[i],s=b(r,a))}s=b(r);var n,l=R.call(d,E,c,r);if(void 0!==l||(n=u&&u[r])&&(l=R.inlineRef(n,p.inlineRefs)?n:C.call(d,n,c,u,e)),void 0!==l)return S(h[f[r]]=l,s);delete f[r]}function b(e,r){var t=h.length;return h[t]=r,"refVal"+(f[e]=t)}function S(e,r){return"object"==typeof e||"boolean"==typeof e?{code:r,schema:e,inline:!0}:{code:r,$async:e&&!!e.$async}}function _(e){var r=t[e];return void 0===r&&(r=t[e]=l.length,l[r]=e),"pattern"+r}function F(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return $.toQuotedString(e);case"object":if(null===e)return"null";var r=D(e),t=a[r];return void 0===t&&(t=a[r]=m.length,m[t]=e),"default"+t}}function x(e,r,t,a){if(!1!==d._opts.validateSchema){var s=e.definition.dependencies;if(s&&!s.every(function(e){return Object.prototype.hasOwnProperty.call(t,e)}))throw new Error("parent schema must have all required keywords: "+s.join(","));var o=e.definition.validateSchema;if(o)if(!o(r)){var i="keyword schema is invalid: "+d.errorsText(o.errors);if("log"!=d._opts.validateSchema)throw new Error(i);d.logger.error(i)}}var n,l=e.definition.compile,c=e.definition.inline,u=e.definition.macro;if(l)n=l.call(d,r,t,a);else if(u)n=u.call(d,r,t,a),!1!==p.validateSchema&&d.validateSchema(n,!0);else if(c)n=c.call(d,a,e.keyword,r,t);else if(!(n=e.definition.validate))return;if(void 0===n)throw new Error('custom keyword "'+e.keyword+'"failed to compile');var h=v.length;return{code:"customRule"+h,validate:v[h]=n}}}function L(e,r,t){for(var a=0;a",_=P?">":"<",F=void 0;if(!y&&"number"!=typeof d&&void 0!==d)throw new Error(r+" must be number");if(!b&&void 0!==w&&"number"!=typeof w&&"boolean"!=typeof w)throw new Error(E+" must be number or boolean");b?(o="exclIsNumber"+u,i="' + "+(n="op"+u)+" + '",c+=" var schemaExcl"+u+" = "+(t=e.util.getData(w.$data,h,e.dataPathArr))+"; ",F=E,(l=l||[]).push(c+=" var "+(a="exclusive"+u)+"; var "+(s="exclType"+u)+" = typeof "+(t="schemaExcl"+u)+"; if ("+s+" != 'boolean' && "+s+" != 'undefined' && "+s+" != 'number') { "),c="",!1!==e.createErrors?(c+=" { keyword: '"+(F||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(f)+" , params: {} ",!1!==e.opts.messages&&(c+=" , message: '"+E+" should be boolean' "),e.opts.verbose&&(c+=" , schema: validate.schema"+p+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+v+" "),c+=" } "):c+=" {} ",x=c,c=l.pop(),c+=!e.compositeRule&&m?e.async?" throw new ValidationError(["+x+"]); ":" validate.errors = ["+x+"]; return false; ":" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c+=" } else if ( ",y&&(c+=" ("+g+" !== undefined && typeof "+g+" != 'number') || "),c+=" "+s+" == 'number' ? ( ("+a+" = "+g+" === undefined || "+t+" "+S+"= "+g+") ? "+v+" "+_+"= "+t+" : "+v+" "+_+" "+g+" ) : ( ("+a+" = "+t+" === true) ? "+v+" "+_+"= "+g+" : "+v+" "+_+" "+g+" ) || "+v+" !== "+v+") { var op"+u+" = "+a+" ? '"+S+"' : '"+S+"='; ",void 0===d&&(f=e.errSchemaPath+"/"+(F=E),g=t,y=b)):(i=S,(o="number"==typeof w)&&y?(n="'"+i+"'",c+=" if ( ",y&&(c+=" ("+g+" !== undefined && typeof "+g+" != 'number') || "),c+=" ( "+g+" === undefined || "+w+" "+S+"= "+g+" ? "+v+" "+_+"= "+w+" : "+v+" "+_+" "+g+" ) || "+v+" !== "+v+") { "):(o&&void 0===d?(a=!0,f=e.errSchemaPath+"/"+(F=E),g=w,_+="="):(o&&(g=Math[P?"min":"max"](w,d)),w===(!o||g)?(a=!0,f=e.errSchemaPath+"/"+(F=E),_+="="):(a=!1,i+="=")),n="'"+i+"'",c+=" if ( ",y&&(c+=" ("+g+" !== undefined && typeof "+g+" != 'number') || "),c+=" "+v+" "+_+" "+g+" || "+v+" !== "+v+") { ")),F=F||r,(l=l||[]).push(c),c="",!1!==e.createErrors?(c+=" { keyword: '"+(F||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(f)+" , params: { comparison: "+n+", limit: "+g+", exclusive: "+a+" } ",!1!==e.opts.messages&&(c+=" , message: 'should be "+i+" ",c+=y?"' + "+g:g+"'"),e.opts.verbose&&(c+=" , schema: ",c+=y?"validate.schema"+p:""+d,c+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+v+" "),c+=" } "):c+=" {} ";var x=c;return c=l.pop(),c+=!e.compositeRule&&m?e.async?" throw new ValidationError(["+x+"]); ":" validate.errors = ["+x+"]; return false; ":" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c+=" } ",m&&(c+=" else { "),c}},{}],14:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u=e.opts.$data&&o&&o.$data,h=u?(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ","schema"+a):o;if(!u&&"number"!=typeof o)throw new Error(r+" must be number");t+="if ( ",u&&(t+=" ("+h+" !== undefined && typeof "+h+" != 'number') || ");var d=r,p=p||[];p.push(t+=" "+c+".length "+("maxItems"==r?">":"<")+" "+h+") { "),t="",!1!==e.createErrors?(t+=" { keyword: '"+(d||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { limit: "+h+" } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT have ",t+="maxItems"==r?"more":"fewer",t+=" than ",t+=u?"' + "+h+" + '":""+o,t+=" items' "),e.opts.verbose&&(t+=" , schema: ",t+=u?"validate.schema"+i:""+o,t+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var f=t,t=p.pop();return t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+="} ",l&&(t+=" else { "),t}},{}],15:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u=e.opts.$data&&o&&o.$data,h=u?(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ","schema"+a):o;if(!u&&"number"!=typeof o)throw new Error(r+" must be number");t+="if ( ",u&&(t+=" ("+h+" !== undefined && typeof "+h+" != 'number') || "),t+=!1===e.opts.unicode?" "+c+".length ":" ucs2length("+c+") ";var d=r,p=p||[];p.push(t+=" "+("maxLength"==r?">":"<")+" "+h+") { "),t="",!1!==e.createErrors?(t+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { limit: "+h+" } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT be ",t+="maxLength"==r?"longer":"shorter",t+=" than ",t+=u?"' + "+h+" + '":""+o,t+=" characters' "),e.opts.verbose&&(t+=" , schema: ",t+=u?"validate.schema"+i:""+o,t+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var f=t,t=p.pop();return t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+="} ",l&&(t+=" else { "),t}},{}],16:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u=e.opts.$data&&o&&o.$data,h=u?(t+=" var schema"+a+" = "+e.util.getData(o.$data,s,e.dataPathArr)+"; ","schema"+a):o;if(!u&&"number"!=typeof o)throw new Error(r+" must be number");t+="if ( ",u&&(t+=" ("+h+" !== undefined && typeof "+h+" != 'number') || ");var d=r,p=p||[];p.push(t+=" Object.keys("+c+").length "+("maxProperties"==r?">":"<")+" "+h+") { "),t="",!1!==e.createErrors?(t+=" { keyword: '"+(d||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { limit: "+h+" } ",!1!==e.opts.messages&&(t+=" , message: 'should NOT have ",t+="maxProperties"==r?"more":"fewer",t+=" than ",t+=u?"' + "+h+" + '":""+o,t+=" properties' "),e.opts.verbose&&(t+=" , schema: ",t+=u?"validate.schema"+i:""+o,t+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var f=t,t=p.pop();return t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+f+"]); ":" validate.errors = ["+f+"]; return false; ":" var err = "+f+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+="} ",l&&(t+=" else { "),t}},{}],17:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.schema[r],s=e.schemaPath+e.util.getProperty(r),o=e.errSchemaPath+"/"+r,i=!e.opts.allErrors,n=e.util.copy(e),l="";n.level++;var c="valid"+n.level,u=n.baseId,h=!0,d=a;if(d)for(var p,f=-1,m=d.length-1;f "+_+") { ",x=c+"["+_+"]",d.schema=$,d.schemaPath=i+"["+_+"]",d.errSchemaPath=n+"/"+_,d.errorPath=e.util.getPathExpr(e.errorPath,_,e.opts.jsonPointers,!0),d.dataPathArr[v]=_,R=e.validate(d),d.baseId=g,e.util.varOccurences(R,y)<2?t+=" "+e.util.varReplace(R,y,x)+" ":t+=" var "+y+" = "+x+"; "+R+" ",t+=" } ",l&&(t+=" if ("+f+") { ",p+="}"))}"object"==typeof b&&(e.opts.strictKeywords?"object"==typeof b&&0 "+o.length+") { for (var "+m+" = "+o.length+"; "+m+" < "+c+".length; "+m+"++) { ",d.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0),x=c+"["+m+"]",d.dataPathArr[v]=m,R=e.validate(d),d.baseId=g,e.util.varOccurences(R,y)<2?t+=" "+e.util.varReplace(R,y,x)+" ":t+=" var "+y+" = "+x+"; "+R+" ",l&&(t+=" if (!"+f+") break; "),t+=" } } ",l&&(t+=" if ("+f+") { ",p+="}"))}else{(e.opts.strictKeywords?"object"==typeof o&&0 1e-"+e.opts.multipleOfPrecision+" ":" division"+a+" !== parseInt(division"+a+") ",t+=" ) ",u&&(t+=" ) ");var d=d||[];d.push(t+=" ) { "),t="",!1!==e.createErrors?(t+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(n)+" , params: { multipleOf: "+h+" } ",!1!==e.opts.messages&&(t+=" , message: 'should be multiple of ",t+=u?"' + "+h:h+"'"),e.opts.verbose&&(t+=" , schema: ",t+=u?"validate.schema"+i:""+o,t+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+c+" "),t+=" } "):t+=" {} ";var p=t,t=d.pop();return t+=!e.compositeRule&&l?e.async?" throw new ValidationError(["+p+"]); ":" validate.errors = ["+p+"]; return false; ":" var err = "+p+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",t+="} ",l&&(t+=" else { "),t}},{}],30:[function(e,r,t){"use strict";r.exports=function(e,r){var t=" ",a=e.level,s=e.dataLevel,o=e.schema[r],i=e.schemaPath+e.util.getProperty(r),n=e.errSchemaPath+"/"+r,l=!e.opts.allErrors,c="data"+(s||""),u="errs__"+a,h=e.util.copy(e);h.level++;var d,p,f,m,v="valid"+h.level;return(e.opts.strictKeywords?"object"==typeof o&&0 1) { ",t=e.schema.items&&e.schema.items.type,a=Array.isArray(t),!t||"object"==t||"array"==t||a&&(0<=t.indexOf("object")||0<=t.indexOf("array"))?i+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+p+"[i], "+p+"[j])) { "+f+" = false; break outer; } } } ":(i+=" var itemIndices = {}, item; for (;i--;) { var item = "+p+"[i]; ",i+=" if ("+e.util["checkDataType"+(a?"s":"")](t,"item",e.opts.strictNumbers,!0)+") continue; ",a&&(i+=" if (typeof item == 'string') item = '\"' + item; "),i+=" if (typeof itemIndices[item] == 'number') { "+f+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "),i+=" } ",m&&(i+=" } "),(s=s||[]).push(i+=" if (!"+f+") { "),i="",!1!==e.createErrors?(i+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(h)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(i+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(i+=" , schema: ",i+=m?"validate.schema"+u:""+c,i+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+p+" "),i+=" } "):i+=" {} ",o=i,i=s.pop(),i+=!e.compositeRule&&d?e.async?" throw new ValidationError(["+o+"]); ":" validate.errors = ["+o+"]; return false; ":" var err = "+o+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",i+=" } ",d&&(i+=" else { ")):d&&(i+=" if (true) { "),i}},{}],38:[function(e,r,t){"use strict";r.exports=function(a,e){var r="",t=!0===a.schema.$async,s=a.util.schemaHasRulesExcept(a.schema,a.RULES.all,"$ref"),o=a.self._getId(a.schema);if(a.opts.strictKeywords){var i=a.util.schemaUnknownRules(a.schema,a.RULES.keywords);if(i){var n="unknown keyword: "+i;if("log"!==a.opts.strictKeywords)throw new Error(n);a.logger.warn(n)}}if(a.isTop&&(r+=" var validate = ",t&&(a.async=!0,r+="async "),r+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",o&&(a.opts.sourceCode||a.opts.processCode)&&(r+=" /*# sourceURL="+o+" */ ")),"boolean"==typeof a.schema||!s&&!a.schema.$ref){var l=a.level,c=a.dataLevel,u=a.schema[e="false schema"],h=a.schemaPath+a.util.getProperty(e),d=a.errSchemaPath+"/"+e,p=!a.opts.allErrors,f="data"+(c||""),m="valid"+l;return!1===a.schema?(a.isTop?p=!0:r+=" var "+m+" = false; ",(H=H||[]).push(r),r="",!1!==a.createErrors?(r+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+a.errorPath+" , schemaPath: "+a.util.toQuotedString(d)+" , params: {} ",!1!==a.opts.messages&&(r+=" , message: 'boolean schema is false' "),a.opts.verbose&&(r+=" , schema: false , parentSchema: validate.schema"+a.schemaPath+" , data: "+f+" "),r+=" } "):r+=" {} ",O=r,r=H.pop(),r+=!a.compositeRule&&p?a.async?" throw new ValidationError(["+O+"]); ":" validate.errors = ["+O+"]; return false; ":" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "):r+=a.isTop?t?" return data; ":" validate.errors = null; return true; ":" var "+m+" = true; ",a.isTop&&(r+=" }; return validate; "),r}if(a.isTop){var v=a.isTop,l=a.level=0,c=a.dataLevel=0,f="data";if(a.rootId=a.resolve.fullPath(a.self._getId(a.root.schema)),a.baseId=a.baseId||a.rootId,delete a.isTop,a.dataPathArr=[void 0],void 0!==a.schema.default&&a.opts.useDefaults&&a.opts.strictDefaults){var y="default is ignored in the schema root";if("log"!==a.opts.strictDefaults)throw new Error(y);a.logger.warn(y)}r+=" var vErrors = null; ",r+=" var errors = 0; ",r+=" if (rootData === undefined) rootData = data; "}else{l=a.level,f="data"+((c=a.dataLevel)||"");if(o&&(a.baseId=a.resolve.url(a.baseId,o)),t&&!a.async)throw new Error("async schema in sync schema");r+=" var errs_"+l+" = errors;"}var g,m="valid"+l,p=!a.opts.allErrors,P="",E="",w=a.schema.type,b=Array.isArray(w);if(w&&a.opts.nullable&&!0===a.schema.nullable&&(b?-1==w.indexOf("null")&&(w=w.concat("null")):"null"!=w&&(w=[w,"null"],b=!0)),b&&1==w.length&&(w=w[0],b=!1),a.schema.$ref&&s){if("fail"==a.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+a.errSchemaPath+'" (see option extendRefs)');!0!==a.opts.extendRefs&&(s=!1,a.logger.warn('$ref: keywords ignored in schema at path "'+a.errSchemaPath+'"'))}if(a.schema.$comment&&a.opts.$comment&&(r+=" "+a.RULES.all.$comment.code(a,"$comment")),w){a.opts.coerceTypes&&(g=a.util.coerceToTypes(a.opts.coerceTypes,w));var S=a.RULES.types[w];if(g||b||!0===S||S&&!G(S)){h=a.schemaPath+".type",d=a.errSchemaPath+"/type",h=a.schemaPath+".type",d=a.errSchemaPath+"/type";if(r+=" if ("+a.util[b?"checkDataTypes":"checkDataType"](w,f,a.opts.strictNumbers,!0)+") { ",g){var _="dataType"+l,F="coerced"+l;r+=" var "+_+" = typeof "+f+"; ","array"==a.opts.coerceTypes&&(r+=" if ("+_+" == 'object' && Array.isArray("+f+")) "+_+" = 'array'; "),r+=" var "+F+" = undefined; ";var x="",R=g;if(R)for(var $,j=-1,D=R.length-1;j= 0x80 (not a basic code point)","invalid-input":"Invalid input"},k=Math.floor,C=String.fromCharCode;function L(e){throw new RangeError(i[e])}function n(e,r){var t=e.split("@"),a="";return 1>1,e+=k(e/r);455k((A-a)/h))&&L("overflow"),a+=p*h;var f=d<=o?1:o+26<=d?26:d-o;if(pk(A/m)&&L("overflow"),h*=m}var v=r.length+1,o=T(a-u,v,0==u);k(a/v)>A-s&&L("overflow"),s+=k(a/v),a%=v,r.splice(a++,0,s)}return String.fromCodePoint.apply(String,r)}function c(e){var r=[],t=(e=N(e)).length,a=128,s=0,o=72,i=!0,n=!1,l=void 0;try{for(var c,u=e[Symbol.iterator]();!(i=(c=u.next()).done);i=!0){var h=c.value;h<128&&r.push(C(h))}}catch(e){n=!0,l=e}finally{try{!i&&u.return&&u.return()}finally{if(n)throw l}}var d=r.length,p=d;for(d&&r.push("-");pk((A-s)/w)&&L("overflow"),s+=(f-a)*w,a=f;var b=!0,S=!1,_=void 0;try{for(var F,x=e[Symbol.iterator]();!(b=(F=x.next()).done);b=!0){var R=F.value;if(RA&&L("overflow"),R==a){for(var $=s,j=36;;j+=36){var D=j<=o?1:o+26<=j?26:j-o;if($>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function p(e){for(var r="",t=0,a=e.length;tA-Z\\x5E-\\x7E]",'[\\"\\\\]')),M=new RegExp(U,"g"),B=new RegExp("(?:(?:%[EFef][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[89A-Fa-f][0-9A-Fa-f]%[0-9A-Fa-f][0-9A-Fa-f])|(?:%[0-9A-Fa-f][0-9A-Fa-f]))","g"),G=new RegExp(J("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',K),"g"),Y=new RegExp(J("[^]",U,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),W=Y;function X(e){var r=p(e);return r.match(M)?r:e}var ee={scheme:"mailto",parse:function(e,r){var t=e,a=t.to=t.path?t.path.split(","):[];if(t.path=void 0,t.query){for(var s=!1,o={},i=t.query.split("&"),n=0,l=i.length;n); - - message: string; - errors: Array; - ajv: true; - validation: true; - } - - class MissingRefError extends Error { - constructor(baseId: string, ref: string, message?: string); - static message: (baseId: string, ref: string) => string; - - message: string; - missingRef: string; - missingSchema: string; - } -} - -declare namespace ajv { - type ValidationError = AjvErrors.ValidationError; - - type MissingRefError = AjvErrors.MissingRefError; - - interface Ajv { - /** - * Validate data using schema - * Schema will be compiled and cached (using serialized JSON as key, [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize by default). - * @param {string|object|Boolean} schemaKeyRef key, ref or schema object - * @param {Any} data to be validated - * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). - */ - validate(schemaKeyRef: object | string | boolean, data: any): boolean | PromiseLike; - /** - * Create validating function for passed schema. - * @param {object|Boolean} schema schema object - * @return {Function} validating function - */ - compile(schema: object | boolean): ValidateFunction; - /** - * Creates validating function for passed schema with asynchronous loading of missing schemas. - * `loadSchema` option should be a function that accepts schema uri and node-style callback. - * @this Ajv - * @param {object|Boolean} schema schema object - * @param {Boolean} meta optional true to compile meta-schema; this parameter can be skipped - * @param {Function} callback optional node-style callback, it is always called with 2 parameters: error (or null) and validating function. - * @return {PromiseLike} validating function - */ - compileAsync(schema: object | boolean, meta?: Boolean, callback?: (err: Error, validate: ValidateFunction) => any): PromiseLike; - /** - * Adds schema to the instance. - * @param {object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {string} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @return {Ajv} this for method chaining - */ - addSchema(schema: Array | object, key?: string): Ajv; - /** - * Add schema that will be used to validate other schemas - * options in META_IGNORE_OPTIONS are alway set to false - * @param {object} schema schema object - * @param {string} key optional schema key - * @return {Ajv} this for method chaining - */ - addMetaSchema(schema: object, key?: string): Ajv; - /** - * Validate schema - * @param {object|Boolean} schema schema to validate - * @return {Boolean} true if schema is valid - */ - validateSchema(schema: object | boolean): boolean; - /** - * Get compiled schema from the instance by `key` or `ref`. - * @param {string} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id). - * @return {Function} schema validating function (with property `schema`). Returns undefined if keyRef can't be resolved to an existing schema. - */ - getSchema(keyRef: string): ValidateFunction | undefined; - /** - * Remove cached schema(s). - * If no parameter is passed all schemas but meta-schemas are removed. - * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed. - * Even if schema is referenced by other schemas it still can be removed as other schemas have local references. - * @param {string|object|RegExp|Boolean} schemaKeyRef key, ref, pattern to match key/ref or schema object - * @return {Ajv} this for method chaining - */ - removeSchema(schemaKeyRef?: object | string | RegExp | boolean): Ajv; - /** - * Add custom format - * @param {string} name format name - * @param {string|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid) - * @return {Ajv} this for method chaining - */ - addFormat(name: string, format: FormatValidator | FormatDefinition): Ajv; - /** - * Define custom keyword - * @this Ajv - * @param {string} keyword custom keyword, should be a valid identifier, should be different from all standard, custom and macro keywords. - * @param {object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ - addKeyword(keyword: string, definition: KeywordDefinition): Ajv; - /** - * Get keyword definition - * @this Ajv - * @param {string} keyword pre-defined or custom keyword. - * @return {object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise. - */ - getKeyword(keyword: string): object | boolean; - /** - * Remove keyword - * @this Ajv - * @param {string} keyword pre-defined or custom keyword. - * @return {Ajv} this for method chaining - */ - removeKeyword(keyword: string): Ajv; - /** - * Validate keyword - * @this Ajv - * @param {object} definition keyword definition object - * @param {boolean} throwError true to throw exception if definition is invalid - * @return {boolean} validation result - */ - validateKeyword(definition: KeywordDefinition, throwError: boolean): boolean; - /** - * Convert array of error message objects to string - * @param {Array} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {object} options optional options with properties `separator` and `dataVar`. - * @return {string} human readable string with all errors descriptions - */ - errorsText(errors?: Array | null, options?: ErrorsTextOptions): string; - errors?: Array | null; - } - - interface CustomLogger { - log(...args: any[]): any; - warn(...args: any[]): any; - error(...args: any[]): any; - } - - interface ValidateFunction { - ( - data: any, - dataPath?: string, - parentData?: object | Array, - parentDataProperty?: string | number, - rootData?: object | Array - ): boolean | PromiseLike; - schema?: object | boolean; - errors?: null | Array; - refs?: object; - refVal?: Array; - root?: ValidateFunction | object; - $async?: true; - source?: object; - } - - interface Options { - $data?: boolean; - allErrors?: boolean; - verbose?: boolean; - jsonPointers?: boolean; - uniqueItems?: boolean; - unicode?: boolean; - format?: false | string; - formats?: object; - keywords?: object; - unknownFormats?: true | string[] | 'ignore'; - schemas?: Array | object; - schemaId?: '$id' | 'id' | 'auto'; - missingRefs?: true | 'ignore' | 'fail'; - extendRefs?: true | 'ignore' | 'fail'; - loadSchema?: (uri: string, cb?: (err: Error, schema: object) => void) => PromiseLike; - removeAdditional?: boolean | 'all' | 'failing'; - useDefaults?: boolean | 'empty' | 'shared'; - coerceTypes?: boolean | 'array'; - strictDefaults?: boolean | 'log'; - strictKeywords?: boolean | 'log'; - strictNumbers?: boolean; - async?: boolean | string; - transpile?: string | ((code: string) => string); - meta?: boolean | object; - validateSchema?: boolean | 'log'; - addUsedSchema?: boolean; - inlineRefs?: boolean | number; - passContext?: boolean; - loopRequired?: number; - ownProperties?: boolean; - multipleOfPrecision?: boolean | number; - errorDataPath?: string, - messages?: boolean; - sourceCode?: boolean; - processCode?: (code: string, schema: object) => string; - cache?: object; - logger?: CustomLogger | false; - nullable?: boolean; - serialize?: ((schema: object | boolean) => any) | false; - } - - type FormatValidator = string | RegExp | ((data: string) => boolean | PromiseLike); - type NumberFormatValidator = ((data: number) => boolean | PromiseLike); - - interface NumberFormatDefinition { - type: "number", - validate: NumberFormatValidator; - compare?: (data1: number, data2: number) => number; - async?: boolean; - } - - interface StringFormatDefinition { - type?: "string", - validate: FormatValidator; - compare?: (data1: string, data2: string) => number; - async?: boolean; - } - - type FormatDefinition = NumberFormatDefinition | StringFormatDefinition; - - interface KeywordDefinition { - type?: string | Array; - async?: boolean; - $data?: boolean; - errors?: boolean | string; - metaSchema?: object; - // schema: false makes validate not to expect schema (ValidateFunction) - schema?: boolean; - statements?: boolean; - dependencies?: Array; - modifying?: boolean; - valid?: boolean; - // one and only one of the following properties should be present - validate?: SchemaValidateFunction | ValidateFunction; - compile?: (schema: any, parentSchema: object, it: CompilationContext) => ValidateFunction; - macro?: (schema: any, parentSchema: object, it: CompilationContext) => object | boolean; - inline?: (it: CompilationContext, keyword: string, schema: any, parentSchema: object) => string; - } - - interface CompilationContext { - level: number; - dataLevel: number; - dataPathArr: string[]; - schema: any; - schemaPath: string; - baseId: string; - async: boolean; - opts: Options; - formats: { - [index: string]: FormatDefinition | undefined; - }; - keywords: { - [index: string]: KeywordDefinition | undefined; - }; - compositeRule: boolean; - validate: (schema: object) => boolean; - util: { - copy(obj: any, target?: any): any; - toHash(source: string[]): { [index: string]: true | undefined }; - equal(obj: any, target: any): boolean; - getProperty(str: string): string; - schemaHasRules(schema: object, rules: any): string; - escapeQuotes(str: string): string; - toQuotedString(str: string): string; - getData(jsonPointer: string, dataLevel: number, paths: string[]): string; - escapeJsonPointer(str: string): string; - unescapeJsonPointer(str: string): string; - escapeFragment(str: string): string; - unescapeFragment(str: string): string; - }; - self: Ajv; - } - - interface SchemaValidateFunction { - ( - schema: any, - data: any, - parentSchema?: object, - dataPath?: string, - parentData?: object | Array, - parentDataProperty?: string | number, - rootData?: object | Array - ): boolean | PromiseLike; - errors?: Array; - } - - interface ErrorsTextOptions { - separator?: string; - dataVar?: string; - } - - interface ErrorObject { - keyword: string; - dataPath: string; - schemaPath: string; - params: ErrorParameters; - // Added to validation errors of propertyNames keyword schema - propertyName?: string; - // Excluded if messages set to false. - message?: string; - // These are added with the `verbose` option. - schema?: any; - parentSchema?: object; - data?: any; - } - - type ErrorParameters = RefParams | LimitParams | AdditionalPropertiesParams | - DependenciesParams | FormatParams | ComparisonParams | - MultipleOfParams | PatternParams | RequiredParams | - TypeParams | UniqueItemsParams | CustomParams | - PatternRequiredParams | PropertyNamesParams | - IfParams | SwitchParams | NoParams | EnumParams; - - interface RefParams { - ref: string; - } - - interface LimitParams { - limit: number; - } - - interface AdditionalPropertiesParams { - additionalProperty: string; - } - - interface DependenciesParams { - property: string; - missingProperty: string; - depsCount: number; - deps: string; - } - - interface FormatParams { - format: string - } - - interface ComparisonParams { - comparison: string; - limit: number | string; - exclusive: boolean; - } - - interface MultipleOfParams { - multipleOf: number; - } - - interface PatternParams { - pattern: string; - } - - interface RequiredParams { - missingProperty: string; - } - - interface TypeParams { - type: string; - } - - interface UniqueItemsParams { - i: number; - j: number; - } - - interface CustomParams { - keyword: string; - } - - interface PatternRequiredParams { - missingPattern: string; - } - - interface PropertyNamesParams { - propertyName: string; - } - - interface IfParams { - failingKeyword: string; - } - - interface SwitchParams { - caseIndex: number; - } - - interface NoParams { } - - interface EnumParams { - allowedValues: Array; - } -} - -export = ajv; diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/ajv.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/ajv.js deleted file mode 100644 index 06a45b65..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/ajv.js +++ /dev/null @@ -1,506 +0,0 @@ -'use strict'; - -var compileSchema = require('./compile') - , resolve = require('./compile/resolve') - , Cache = require('./cache') - , SchemaObject = require('./compile/schema_obj') - , stableStringify = require('fast-json-stable-stringify') - , formats = require('./compile/formats') - , rules = require('./compile/rules') - , $dataMetaSchema = require('./data') - , util = require('./compile/util'); - -module.exports = Ajv; - -Ajv.prototype.validate = validate; -Ajv.prototype.compile = compile; -Ajv.prototype.addSchema = addSchema; -Ajv.prototype.addMetaSchema = addMetaSchema; -Ajv.prototype.validateSchema = validateSchema; -Ajv.prototype.getSchema = getSchema; -Ajv.prototype.removeSchema = removeSchema; -Ajv.prototype.addFormat = addFormat; -Ajv.prototype.errorsText = errorsText; - -Ajv.prototype._addSchema = _addSchema; -Ajv.prototype._compile = _compile; - -Ajv.prototype.compileAsync = require('./compile/async'); -var customKeyword = require('./keyword'); -Ajv.prototype.addKeyword = customKeyword.add; -Ajv.prototype.getKeyword = customKeyword.get; -Ajv.prototype.removeKeyword = customKeyword.remove; -Ajv.prototype.validateKeyword = customKeyword.validate; - -var errorClasses = require('./compile/error_classes'); -Ajv.ValidationError = errorClasses.Validation; -Ajv.MissingRefError = errorClasses.MissingRef; -Ajv.$dataMetaSchema = $dataMetaSchema; - -var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema'; - -var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ]; -var META_SUPPORT_DATA = ['/properties']; - -/** - * Creates validator instance. - * Usage: `Ajv(opts)` - * @param {Object} opts optional options - * @return {Object} ajv instance - */ -function Ajv(opts) { - if (!(this instanceof Ajv)) return new Ajv(opts); - opts = this._opts = util.copy(opts) || {}; - setLogger(this); - this._schemas = {}; - this._refs = {}; - this._fragments = {}; - this._formats = formats(opts.format); - - this._cache = opts.cache || new Cache; - this._loadingSchemas = {}; - this._compilations = []; - this.RULES = rules(); - this._getId = chooseGetId(opts); - - opts.loopRequired = opts.loopRequired || Infinity; - if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true; - if (opts.serialize === undefined) opts.serialize = stableStringify; - this._metaOpts = getMetaSchemaOptions(this); - - if (opts.formats) addInitialFormats(this); - if (opts.keywords) addInitialKeywords(this); - addDefaultMetaSchema(this); - if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta); - if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}}); - addInitialSchemas(this); -} - - - -/** - * Validate data using schema - * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize. - * @this Ajv - * @param {String|Object} schemaKeyRef key, ref or schema object - * @param {Any} data to be validated - * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`). - */ -function validate(schemaKeyRef, data) { - var v; - if (typeof schemaKeyRef == 'string') { - v = this.getSchema(schemaKeyRef); - if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"'); - } else { - var schemaObj = this._addSchema(schemaKeyRef); - v = schemaObj.validate || this._compile(schemaObj); - } - - var valid = v(data); - if (v.$async !== true) this.errors = v.errors; - return valid; -} - - -/** - * Create validating function for passed schema. - * @this Ajv - * @param {Object} schema schema object - * @param {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords. - * @return {Function} validating function - */ -function compile(schema, _meta) { - var schemaObj = this._addSchema(schema, undefined, _meta); - return schemaObj.validate || this._compile(schemaObj); -} - - -/** - * Adds schema to the instance. - * @this Ajv - * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored. - * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`. - * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead. - * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead. - * @return {Ajv} this for method chaining - */ -function addSchema(schema, key, _skipValidation, _meta) { - if (Array.isArray(schema)){ - for (var i=0; i} errors optional array of validation errors, if not passed errors from the instance are used. - * @param {Object} options optional options with properties `separator` and `dataVar`. - * @return {String} human readable string with all errors descriptions - */ -function errorsText(errors, options) { - errors = errors || this.errors; - if (!errors) return 'No errors'; - options = options || {}; - var separator = options.separator === undefined ? ', ' : options.separator; - var dataVar = options.dataVar === undefined ? 'data' : options.dataVar; - - var text = ''; - for (var i=0; i%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i; -// For the source: https://gist.github.com/dperini/729294 -// For test cases: https://mathiasbynens.be/demo/url-regex -// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983. -// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu; -var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i; -var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i; -var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/; -var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i; -var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/; - - -module.exports = formats; - -function formats(mode) { - mode = mode == 'full' ? 'full' : 'fast'; - return util.copy(formats[mode]); -} - - -formats.fast = { - // date: http://tools.ietf.org/html/rfc3339#section-5.6 - date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/, - // date-time: http://tools.ietf.org/html/rfc3339#section-5.6 - time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, - 'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, - // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js - uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i, - 'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, - 'uri-template': URITEMPLATE, - url: URL, - // email (sources from jsen validator): - // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363 - // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation') - email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i, - hostname: HOSTNAME, - // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - // uuid: http://tools.ietf.org/html/rfc4122 - uuid: UUID, - // JSON-pointer: https://tools.ietf.org/html/rfc6901 - // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00 - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -formats.full = { - date: date, - time: time, - 'date-time': date_time, - uri: uri, - 'uri-reference': URIREF, - 'uri-template': URITEMPLATE, - url: URL, - email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, - hostname: HOSTNAME, - ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/, - ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i, - regex: regex, - uuid: UUID, - 'json-pointer': JSON_POINTER, - 'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT, - 'relative-json-pointer': RELATIVE_JSON_POINTER -}; - - -function isLeapYear(year) { - // https://tools.ietf.org/html/rfc3339#appendix-C - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); -} - - -function date(str) { - // full-date from http://tools.ietf.org/html/rfc3339#section-5.6 - var matches = str.match(DATE); - if (!matches) return false; - - var year = +matches[1]; - var month = +matches[2]; - var day = +matches[3]; - - return month >= 1 && month <= 12 && day >= 1 && - day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]); -} - - -function time(str, full) { - var matches = str.match(TIME); - if (!matches) return false; - - var hour = matches[1]; - var minute = matches[2]; - var second = matches[3]; - var timeZone = matches[5]; - return ((hour <= 23 && minute <= 59 && second <= 59) || - (hour == 23 && minute == 59 && second == 60)) && - (!full || timeZone); -} - - -var DATE_TIME_SEPARATOR = /t|\s/i; -function date_time(str) { - // http://tools.ietf.org/html/rfc3339#section-5.6 - var dateTime = str.split(DATE_TIME_SEPARATOR); - return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true); -} - - -var NOT_URI_FRAGMENT = /\/|:/; -function uri(str) { - // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "." - return NOT_URI_FRAGMENT.test(str) && URI.test(str); -} - - -var Z_ANCHOR = /[^\\]\\Z/; -function regex(str) { - if (Z_ANCHOR.test(str)) return false; - try { - new RegExp(str); - return true; - } catch(e) { - return false; - } -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/index.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/index.js deleted file mode 100644 index 97518c42..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/index.js +++ /dev/null @@ -1,387 +0,0 @@ -'use strict'; - -var resolve = require('./resolve') - , util = require('./util') - , errorClasses = require('./error_classes') - , stableStringify = require('fast-json-stable-stringify'); - -var validateGenerator = require('../dotjs/validate'); - -/** - * Functions below are used inside compiled validations function - */ - -var ucs2length = util.ucs2length; -var equal = require('fast-deep-equal'); - -// this error is thrown by async schemas to return validation errors via exception -var ValidationError = errorClasses.Validation; - -module.exports = compile; - - -/** - * Compiles schema to validation function - * @this Ajv - * @param {Object} schema schema object - * @param {Object} root object with information about the root schema for this schema - * @param {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution - * @param {String} baseId base ID for IDs in the schema - * @return {Function} validation function - */ -function compile(schema, root, localRefs, baseId) { - /* jshint validthis: true, evil: true */ - /* eslint no-shadow: 0 */ - var self = this - , opts = this._opts - , refVal = [ undefined ] - , refs = {} - , patterns = [] - , patternsHash = {} - , defaults = [] - , defaultsHash = {} - , customRules = []; - - root = root || { schema: schema, refVal: refVal, refs: refs }; - - var c = checkCompiling.call(this, schema, root, baseId); - var compilation = this._compilations[c.index]; - if (c.compiling) return (compilation.callValidate = callValidate); - - var formats = this._formats; - var RULES = this.RULES; - - try { - var v = localCompile(schema, root, localRefs, baseId); - compilation.validate = v; - var cv = compilation.callValidate; - if (cv) { - cv.schema = v.schema; - cv.errors = null; - cv.refs = v.refs; - cv.refVal = v.refVal; - cv.root = v.root; - cv.$async = v.$async; - if (opts.sourceCode) cv.source = v.source; - } - return v; - } finally { - endCompiling.call(this, schema, root, baseId); - } - - /* @this {*} - custom context, see passContext option */ - function callValidate() { - /* jshint validthis: true */ - var validate = compilation.validate; - var result = validate.apply(this, arguments); - callValidate.errors = validate.errors; - return result; - } - - function localCompile(_schema, _root, localRefs, baseId) { - var isRoot = !_root || (_root && _root.schema == _schema); - if (_root.schema != root.schema) - return compile.call(self, _schema, _root, localRefs, baseId); - - var $async = _schema.$async === true; - - var sourceCode = validateGenerator({ - isTop: true, - schema: _schema, - isRoot: isRoot, - baseId: baseId, - root: _root, - schemaPath: '', - errSchemaPath: '#', - errorPath: '""', - MissingRefError: errorClasses.MissingRef, - RULES: RULES, - validate: validateGenerator, - util: util, - resolve: resolve, - resolveRef: resolveRef, - usePattern: usePattern, - useDefault: useDefault, - useCustomRule: useCustomRule, - opts: opts, - formats: formats, - logger: self.logger, - self: self - }); - - sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) - + vars(defaults, defaultCode) + vars(customRules, customRuleCode) - + sourceCode; - - if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema); - // console.log('\n\n\n *** \n', JSON.stringify(sourceCode)); - var validate; - try { - var makeValidate = new Function( - 'self', - 'RULES', - 'formats', - 'root', - 'refVal', - 'defaults', - 'customRules', - 'equal', - 'ucs2length', - 'ValidationError', - sourceCode - ); - - validate = makeValidate( - self, - RULES, - formats, - root, - refVal, - defaults, - customRules, - equal, - ucs2length, - ValidationError - ); - - refVal[0] = validate; - } catch(e) { - self.logger.error('Error compiling schema, function code:', sourceCode); - throw e; - } - - validate.schema = _schema; - validate.errors = null; - validate.refs = refs; - validate.refVal = refVal; - validate.root = isRoot ? validate : _root; - if ($async) validate.$async = true; - if (opts.sourceCode === true) { - validate.source = { - code: sourceCode, - patterns: patterns, - defaults: defaults - }; - } - - return validate; - } - - function resolveRef(baseId, ref, isRoot) { - ref = resolve.url(baseId, ref); - var refIndex = refs[ref]; - var _refVal, refCode; - if (refIndex !== undefined) { - _refVal = refVal[refIndex]; - refCode = 'refVal[' + refIndex + ']'; - return resolvedRef(_refVal, refCode); - } - if (!isRoot && root.refs) { - var rootRefId = root.refs[ref]; - if (rootRefId !== undefined) { - _refVal = root.refVal[rootRefId]; - refCode = addLocalRef(ref, _refVal); - return resolvedRef(_refVal, refCode); - } - } - - refCode = addLocalRef(ref); - var v = resolve.call(self, localCompile, root, ref); - if (v === undefined) { - var localSchema = localRefs && localRefs[ref]; - if (localSchema) { - v = resolve.inlineRef(localSchema, opts.inlineRefs) - ? localSchema - : compile.call(self, localSchema, root, localRefs, baseId); - } - } - - if (v === undefined) { - removeLocalRef(ref); - } else { - replaceLocalRef(ref, v); - return resolvedRef(v, refCode); - } - } - - function addLocalRef(ref, v) { - var refId = refVal.length; - refVal[refId] = v; - refs[ref] = refId; - return 'refVal' + refId; - } - - function removeLocalRef(ref) { - delete refs[ref]; - } - - function replaceLocalRef(ref, v) { - var refId = refs[ref]; - refVal[refId] = v; - } - - function resolvedRef(refVal, code) { - return typeof refVal == 'object' || typeof refVal == 'boolean' - ? { code: code, schema: refVal, inline: true } - : { code: code, $async: refVal && !!refVal.$async }; - } - - function usePattern(regexStr) { - var index = patternsHash[regexStr]; - if (index === undefined) { - index = patternsHash[regexStr] = patterns.length; - patterns[index] = regexStr; - } - return 'pattern' + index; - } - - function useDefault(value) { - switch (typeof value) { - case 'boolean': - case 'number': - return '' + value; - case 'string': - return util.toQuotedString(value); - case 'object': - if (value === null) return 'null'; - var valueStr = stableStringify(value); - var index = defaultsHash[valueStr]; - if (index === undefined) { - index = defaultsHash[valueStr] = defaults.length; - defaults[index] = value; - } - return 'default' + index; - } - } - - function useCustomRule(rule, schema, parentSchema, it) { - if (self._opts.validateSchema !== false) { - var deps = rule.definition.dependencies; - if (deps && !deps.every(function(keyword) { - return Object.prototype.hasOwnProperty.call(parentSchema, keyword); - })) - throw new Error('parent schema must have all required keywords: ' + deps.join(',')); - - var validateSchema = rule.definition.validateSchema; - if (validateSchema) { - var valid = validateSchema(schema); - if (!valid) { - var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors); - if (self._opts.validateSchema == 'log') self.logger.error(message); - else throw new Error(message); - } - } - } - - var compile = rule.definition.compile - , inline = rule.definition.inline - , macro = rule.definition.macro; - - var validate; - if (compile) { - validate = compile.call(self, schema, parentSchema, it); - } else if (macro) { - validate = macro.call(self, schema, parentSchema, it); - if (opts.validateSchema !== false) self.validateSchema(validate, true); - } else if (inline) { - validate = inline.call(self, it, rule.keyword, schema, parentSchema); - } else { - validate = rule.definition.validate; - if (!validate) return; - } - - if (validate === undefined) - throw new Error('custom keyword "' + rule.keyword + '"failed to compile'); - - var index = customRules.length; - customRules[index] = validate; - - return { - code: 'customRule' + index, - validate: validate - }; - } -} - - -/** - * Checks if the schema is currently compiled - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean) - */ -function checkCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var index = compIndex.call(this, schema, root, baseId); - if (index >= 0) return { index: index, compiling: true }; - index = this._compilations.length; - this._compilations[index] = { - schema: schema, - root: root, - baseId: baseId - }; - return { index: index, compiling: false }; -} - - -/** - * Removes the schema from the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - */ -function endCompiling(schema, root, baseId) { - /* jshint validthis: true */ - var i = compIndex.call(this, schema, root, baseId); - if (i >= 0) this._compilations.splice(i, 1); -} - - -/** - * Index of schema compilation in the currently compiled list - * @this Ajv - * @param {Object} schema schema to compile - * @param {Object} root root object - * @param {String} baseId base schema ID - * @return {Integer} compilation index - */ -function compIndex(schema, root, baseId) { - /* jshint validthis: true */ - for (var i=0; i= 0xD800 && value <= 0xDBFF && pos < len) { - // high surrogate, and there is a next character - value = str.charCodeAt(pos); - if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate - } - } - return length; -}; diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/util.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/util.js deleted file mode 100644 index ef07b8c7..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/compile/util.js +++ /dev/null @@ -1,239 +0,0 @@ -'use strict'; - - -module.exports = { - copy: copy, - checkDataType: checkDataType, - checkDataTypes: checkDataTypes, - coerceToTypes: coerceToTypes, - toHash: toHash, - getProperty: getProperty, - escapeQuotes: escapeQuotes, - equal: require('fast-deep-equal'), - ucs2length: require('./ucs2length'), - varOccurences: varOccurences, - varReplace: varReplace, - schemaHasRules: schemaHasRules, - schemaHasRulesExcept: schemaHasRulesExcept, - schemaUnknownRules: schemaUnknownRules, - toQuotedString: toQuotedString, - getPathExpr: getPathExpr, - getPath: getPath, - getData: getData, - unescapeFragment: unescapeFragment, - unescapeJsonPointer: unescapeJsonPointer, - escapeFragment: escapeFragment, - escapeJsonPointer: escapeJsonPointer -}; - - -function copy(o, to) { - to = to || {}; - for (var key in o) to[key] = o[key]; - return to; -} - - -function checkDataType(dataType, data, strictNumbers, negate) { - var EQUAL = negate ? ' !== ' : ' === ' - , AND = negate ? ' || ' : ' && ' - , OK = negate ? '!' : '' - , NOT = negate ? '' : '!'; - switch (dataType) { - case 'null': return data + EQUAL + 'null'; - case 'array': return OK + 'Array.isArray(' + data + ')'; - case 'object': return '(' + OK + data + AND + - 'typeof ' + data + EQUAL + '"object"' + AND + - NOT + 'Array.isArray(' + data + '))'; - case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND + - NOT + '(' + data + ' % 1)' + - AND + data + EQUAL + data + - (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; - case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' + - (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')'; - default: return 'typeof ' + data + EQUAL + '"' + dataType + '"'; - } -} - - -function checkDataTypes(dataTypes, data, strictNumbers) { - switch (dataTypes.length) { - case 1: return checkDataType(dataTypes[0], data, strictNumbers, true); - default: - var code = ''; - var types = toHash(dataTypes); - if (types.array && types.object) { - code = types.null ? '(': '(!' + data + ' || '; - code += 'typeof ' + data + ' !== "object")'; - delete types.null; - delete types.array; - delete types.object; - } - if (types.number) delete types.integer; - for (var t in types) - code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true); - - return code; - } -} - - -var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]); -function coerceToTypes(optionCoerceTypes, dataTypes) { - if (Array.isArray(dataTypes)) { - var types = []; - for (var i=0; i= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl); - return paths[lvl - up]; - } - - if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl); - data = 'data' + ((lvl - up) || ''); - if (!jsonPointer) return data; - } - - var expr = data; - var segments = jsonPointer.split('/'); - for (var i=0; i' - , $notOp = $isMax ? '>' : '<' - , $errorKeyword = undefined; - - if (!($isData || typeof $schema == 'number' || $schema === undefined)) { - throw new Error($keyword + ' must be number'); - } - if (!($isDataExcl || $schemaExcl === undefined - || typeof $schemaExcl == 'number' - || typeof $schemaExcl == 'boolean')) { - throw new Error($exclusiveKeyword + ' must be number or boolean'); - } -}} - -{{? $isDataExcl }} - {{ - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr) - , $exclusive = 'exclusive' + $lvl - , $exclType = 'exclType' + $lvl - , $exclIsNumber = 'exclIsNumber' + $lvl - , $opExpr = 'op' + $lvl - , $opStr = '\' + ' + $opExpr + ' + \''; - }} - var schemaExcl{{=$lvl}} = {{=$schemaValueExcl}}; - {{ $schemaValueExcl = 'schemaExcl' + $lvl; }} - - var {{=$exclusive}}; - var {{=$exclType}} = typeof {{=$schemaValueExcl}}; - if ({{=$exclType}} != 'boolean' && {{=$exclType}} != 'undefined' && {{=$exclType}} != 'number') { - {{ var $errorKeyword = $exclusiveKeyword; }} - {{# def.error:'_exclusiveLimit' }} - } else if ({{# def.$dataNotType:'number' }} - {{=$exclType}} == 'number' - ? ( - ({{=$exclusive}} = {{=$schemaValue}} === undefined || {{=$schemaValueExcl}} {{=$op}}= {{=$schemaValue}}) - ? {{=$data}} {{=$notOp}}= {{=$schemaValueExcl}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} - ) - : ( - ({{=$exclusive}} = {{=$schemaValueExcl}} === true) - ? {{=$data}} {{=$notOp}}= {{=$schemaValue}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} - ) - || {{=$data}} !== {{=$data}}) { - var op{{=$lvl}} = {{=$exclusive}} ? '{{=$op}}' : '{{=$op}}='; - {{ - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - }} -{{??}} - {{ - var $exclIsNumber = typeof $schemaExcl == 'number' - , $opStr = $op; /*used in error*/ - }} - - {{? $exclIsNumber && $isData }} - {{ var $opExpr = '\'' + $opStr + '\''; /*used in error*/ }} - if ({{# def.$dataNotType:'number' }} - ( {{=$schemaValue}} === undefined - || {{=$schemaExcl}} {{=$op}}= {{=$schemaValue}} - ? {{=$data}} {{=$notOp}}= {{=$schemaExcl}} - : {{=$data}} {{=$notOp}} {{=$schemaValue}} ) - || {{=$data}} !== {{=$data}}) { - {{??}} - {{ - if ($exclIsNumber && $schema === undefined) { - {{# def.setExclusiveLimit }} - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) - $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - {{# def.setExclusiveLimit }} - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - - var $opExpr = '\'' + $opStr + '\''; /*used in error*/ - }} - - if ({{# def.$dataNotType:'number' }} - {{=$data}} {{=$notOp}} {{=$schemaValue}} - || {{=$data}} !== {{=$data}}) { - {{?}} -{{?}} - {{ $errorKeyword = $errorKeyword || $keyword; }} - {{# def.error:'_limit' }} - } {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitItems.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitItems.jst deleted file mode 100644 index 741329e7..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitItems.jst +++ /dev/null @@ -1,12 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{# def.numberKeyword }} - -{{ var $op = $keyword == 'maxItems' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} {{=$data}}.length {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitItems' }} -} {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitLength.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitLength.jst deleted file mode 100644 index 285c66bd..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitLength.jst +++ /dev/null @@ -1,12 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{# def.numberKeyword }} - -{{ var $op = $keyword == 'maxLength' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} {{# def.strLength }} {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitLength' }} -} {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitProperties.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitProperties.jst deleted file mode 100644 index c4c21551..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/_limitProperties.jst +++ /dev/null @@ -1,12 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{# def.numberKeyword }} - -{{ var $op = $keyword == 'maxProperties' ? '>' : '<'; }} -if ({{# def.$dataNotType:'number' }} Object.keys({{=$data}}).length {{=$op}} {{=$schemaValue}}) { - {{ var $errorKeyword = $keyword; }} - {{# def.error:'_limitProperties' }} -} {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/allOf.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/allOf.jst deleted file mode 100644 index 0e782fe9..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/allOf.jst +++ /dev/null @@ -1,32 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $currentBaseId = $it.baseId - , $allSchemasEmpty = true; -}} - -{{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{ - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - - {{# def.ifResultValid }} - {{?}} -{{~}} - -{{? $breakOnError }} - {{? $allSchemasEmpty }} - if (true) { - {{??}} - {{= $closingBraces.slice(0,-1) }} - {{?}} -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/anyOf.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/anyOf.jst deleted file mode 100644 index ea909ee6..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/anyOf.jst +++ /dev/null @@ -1,46 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $noEmptySchema = $schema.every(function($sch) { - return {{# def.nonEmptySchema:$sch }}; - }); -}} -{{? $noEmptySchema }} - {{ var $currentBaseId = $it.baseId; }} - var {{=$errs}} = errors; - var {{=$valid}} = false; - - {{# def.setCompositeRule }} - - {{~ $schema:$sch:$i }} - {{ - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - - {{=$valid}} = {{=$valid}} || {{=$nextValid}}; - - if (!{{=$valid}}) { - {{ $closingBraces += '}'; }} - {{~}} - - {{# def.resetCompositeRule }} - - {{= $closingBraces }} - - if (!{{=$valid}}) { - {{# def.extraError:'anyOf' }} - } else { - {{# def.resetErrors }} - {{? it.opts.allErrors }} } {{?}} -{{??}} - {{? $breakOnError }} - if (true) { - {{?}} -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/coerce.def b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/coerce.def deleted file mode 100644 index 86e0e18a..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/coerce.def +++ /dev/null @@ -1,61 +0,0 @@ -{{## def.coerceType: - {{ - var $dataType = 'dataType' + $lvl - , $coerced = 'coerced' + $lvl; - }} - var {{=$dataType}} = typeof {{=$data}}; - {{? it.opts.coerceTypes == 'array'}} - if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array'; - {{?}} - - var {{=$coerced}} = undefined; - - {{ var $bracesCoercion = ''; }} - {{~ $coerceToTypes:$type:$i }} - {{? $i }} - if ({{=$coerced}} === undefined) { - {{ $bracesCoercion += '}'; }} - {{?}} - - {{? it.opts.coerceTypes == 'array' && $type != 'array' }} - if ({{=$dataType}} == 'array' && {{=$data}}.length == 1) { - {{=$coerced}} = {{=$data}} = {{=$data}}[0]; - {{=$dataType}} = typeof {{=$data}}; - /*if ({{=$dataType}} == 'object' && Array.isArray({{=$data}})) {{=$dataType}} = 'array';*/ - } - {{?}} - - {{? $type == 'string' }} - if ({{=$dataType}} == 'number' || {{=$dataType}} == 'boolean') - {{=$coerced}} = '' + {{=$data}}; - else if ({{=$data}} === null) {{=$coerced}} = ''; - {{?? $type == 'number' || $type == 'integer' }} - if ({{=$dataType}} == 'boolean' || {{=$data}} === null - || ({{=$dataType}} == 'string' && {{=$data}} && {{=$data}} == +{{=$data}} - {{? $type == 'integer' }} && !({{=$data}} % 1){{?}})) - {{=$coerced}} = +{{=$data}}; - {{?? $type == 'boolean' }} - if ({{=$data}} === 'false' || {{=$data}} === 0 || {{=$data}} === null) - {{=$coerced}} = false; - else if ({{=$data}} === 'true' || {{=$data}} === 1) - {{=$coerced}} = true; - {{?? $type == 'null' }} - if ({{=$data}} === '' || {{=$data}} === 0 || {{=$data}} === false) - {{=$coerced}} = null; - {{?? it.opts.coerceTypes == 'array' && $type == 'array' }} - if ({{=$dataType}} == 'string' || {{=$dataType}} == 'number' || {{=$dataType}} == 'boolean' || {{=$data}} == null) - {{=$coerced}} = [{{=$data}}]; - {{?}} - {{~}} - - {{= $bracesCoercion }} - - if ({{=$coerced}} === undefined) { - {{# def.error:'type' }} - } else { - {{# def.setParentData }} - {{=$data}} = {{=$coerced}}; - {{? !$dataLvl }}if ({{=$parentData}} !== undefined){{?}} - {{=$parentData}}[{{=$parentDataProperty}}] = {{=$coerced}}; - } -#}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/comment.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/comment.jst deleted file mode 100644 index f9591503..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/comment.jst +++ /dev/null @@ -1,9 +0,0 @@ -{{# def.definitions }} -{{# def.setupKeyword }} - -{{ var $comment = it.util.toQuotedString($schema); }} -{{? it.opts.$comment === true }} - console.log({{=$comment}}); -{{?? typeof it.opts.$comment == 'function' }} - self._opts.$comment({{=$comment}}, {{=it.util.toQuotedString($errSchemaPath)}}, validate.root.schema); -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/const.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/const.jst deleted file mode 100644 index 2aa22980..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/const.jst +++ /dev/null @@ -1,11 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{? !$isData }} - var schema{{=$lvl}} = validate.schema{{=$schemaPath}}; -{{?}} -var {{=$valid}} = equal({{=$data}}, schema{{=$lvl}}); -{{# def.checkError:'const' }} -{{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/contains.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/contains.jst deleted file mode 100644 index 4dc99674..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/contains.jst +++ /dev/null @@ -1,55 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{ - var $idx = 'i' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $currentBaseId = it.baseId - , $nonEmptySchema = {{# def.nonEmptySchema:$schema }}; -}} - -var {{=$errs}} = errors; -var {{=$valid}}; - -{{? $nonEmptySchema }} - {{# def.setCompositeRule }} - - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - var {{=$nextValid}} = false; - - for (var {{=$idx}} = 0; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - if ({{=$nextValid}}) break; - } - - {{# def.resetCompositeRule }} - {{= $closingBraces }} - - if (!{{=$nextValid}}) { -{{??}} - if ({{=$data}}.length == 0) { -{{?}} - - {{# def.error:'contains' }} - } else { - {{? $nonEmptySchema }} - {{# def.resetErrors }} - {{?}} - {{? it.opts.allErrors }} } {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/custom.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/custom.jst deleted file mode 100644 index d30588fb..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/custom.jst +++ /dev/null @@ -1,191 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ - var $rule = this - , $definition = 'definition' + $lvl - , $rDef = $rule.definition - , $closingBraces = ''; - var $validate = $rDef.validate; - var $compile, $inline, $macro, $ruleValidate, $validateCode; -}} - -{{? $isData && $rDef.$data }} - {{ - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - }} - var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; - var {{=$validateCode}} = {{=$definition}}.validate; -{{??}} - {{ - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - }} -{{?}} - -{{ - var $ruleErrs = $validateCode + '.errors' - , $i = 'i' + $lvl - , $ruleErr = 'ruleErr' + $lvl - , $asyncKeyword = $rDef.async; - - if ($asyncKeyword && !it.async) - throw new Error('async keyword in sync schema'); -}} - - -{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} -var {{=$errs}} = errors; -var {{=$valid}}; - -{{## def.callRuleValidate: - {{=$validateCode}}.call( - {{? it.opts.passContext }}this{{??}}self{{?}} - {{? $compile || $rDef.schema === false }} - , {{=$data}} - {{??}} - , {{=$schemaValue}} - , {{=$data}} - , validate.schema{{=it.schemaPath}} - {{?}} - , {{# def.dataPath }} - {{# def.passParentData }} - , rootData - ) -#}} - -{{## def.extendErrors:_inline: - for (var {{=$i}}={{=$errs}}; {{=$i}} 0 - : it.util.schemaHasRules(_schema, it.RULES.all)) -#}} - - -{{## def.strLength: - {{? it.opts.unicode === false }} - {{=$data}}.length - {{??}} - ucs2length({{=$data}}) - {{?}} -#}} - - -{{## def.willOptimize: - it.util.varOccurences($code, $nextData) < 2 -#}} - - -{{## def.generateSubschemaCode: - {{ - var $code = it.validate($it); - $it.baseId = $currentBaseId; - }} -#}} - - -{{## def.insertSubschemaCode: - {{= it.validate($it) }} - {{ $it.baseId = $currentBaseId; }} -#}} - - -{{## def._optimizeValidate: - it.util.varReplace($code, $nextData, $passData) -#}} - - -{{## def.optimizeValidate: - {{? {{# def.willOptimize}} }} - {{= {{# def._optimizeValidate }} }} - {{??}} - var {{=$nextData}} = {{=$passData}}; - {{= $code }} - {{?}} -#}} - - -{{## def.$data: - {{ - var $isData = it.opts.$data && $schema && $schema.$data - , $schemaValue; - }} - {{? $isData }} - var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }}; - {{ $schemaValue = 'schema' + $lvl; }} - {{??}} - {{ $schemaValue = $schema; }} - {{?}} -#}} - - -{{## def.$dataNotType:_type: - {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}} -#}} - - -{{## def.check$dataIsArray: - if (schema{{=$lvl}} === undefined) {{=$valid}} = true; - else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false; - else { -#}} - - -{{## def.numberKeyword: - {{? !($isData || typeof $schema == 'number') }} - {{ throw new Error($keyword + ' must be number'); }} - {{?}} -#}} - - -{{## def.beginDefOut: - {{ - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - }} -#}} - - -{{## def.storeDefOut:_variable: - {{ - var _variable = out; - out = $$outStack.pop(); - }} -#}} - - -{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}} - -{{## def.setParentData: - {{ - var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData' - , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - }} -#}} - -{{## def.passParentData: - {{# def.setParentData }} - , {{= $parentData }} - , {{= $parentDataProperty }} -#}} - - -{{## def.iterateProperties: - {{? $ownProperties }} - {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}}); - for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) { - var {{=$key}} = {{=$dataProperties}}[{{=$idx}}]; - {{??}} - for (var {{=$key}} in {{=$data}}) { - {{?}} -#}} - - -{{## def.noPropertyInData: - {{=$useData}} === undefined - {{? $ownProperties }} - || !{{# def.isOwnProperty }} - {{?}} -#}} - - -{{## def.isOwnProperty: - Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}') -#}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/dependencies.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/dependencies.jst deleted file mode 100644 index e4bdddec..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/dependencies.jst +++ /dev/null @@ -1,79 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.missing }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.propertyInData: - {{=$data}}{{= it.util.getProperty($property) }} !== undefined - {{? $ownProperties }} - && Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($property)}}') - {{?}} -#}} - - -{{ - var $schemaDeps = {} - , $propertyDeps = {} - , $ownProperties = it.opts.ownProperties; - - for ($property in $schema) { - if ($property == '__proto__') continue; - var $sch = $schema[$property]; - var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps; - $deps[$property] = $sch; - } -}} - -var {{=$errs}} = errors; - -{{ var $currentErrorPath = it.errorPath; }} - -var missing{{=$lvl}}; -{{ for (var $property in $propertyDeps) { }} - {{ $deps = $propertyDeps[$property]; }} - {{? $deps.length }} - if ({{# def.propertyInData }} - {{? $breakOnError }} - && ({{# def.checkMissingProperty:$deps }})) { - {{# def.errorMissingProperty:'dependencies' }} - {{??}} - ) { - {{~ $deps:$propertyKey }} - {{# def.allErrorsMissingProperty:'dependencies' }} - {{~}} - {{?}} - } {{# def.elseIfValid }} - {{?}} -{{ } }} - -{{ - it.errorPath = $currentErrorPath; - var $currentBaseId = $it.baseId; -}} - - -{{ for (var $property in $schemaDeps) { }} - {{ var $sch = $schemaDeps[$property]; }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{=$nextValid}} = true; - - if ({{# def.propertyInData }}) { - {{ - $it.schema = $sch; - $it.schemaPath = $schemaPath + it.util.getProperty($property); - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); - }} - - {{# def.insertSubschemaCode }} - } - - {{# def.ifResultValid }} - {{?}} -{{ } }} - -{{? $breakOnError }} - {{= $closingBraces }} - if ({{=$errs}} == errors) { -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/enum.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/enum.jst deleted file mode 100644 index 357c2e8c..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/enum.jst +++ /dev/null @@ -1,30 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ - var $i = 'i' + $lvl - , $vSchema = 'schema' + $lvl; -}} - -{{? !$isData }} - var {{=$vSchema}} = validate.schema{{=$schemaPath}}; -{{?}} -var {{=$valid}}; - -{{?$isData}}{{# def.check$dataIsArray }}{{?}} - -{{=$valid}} = false; - -for (var {{=$i}}=0; {{=$i}}<{{=$vSchema}}.length; {{=$i}}++) - if (equal({{=$data}}, {{=$vSchema}}[{{=$i}}])) { - {{=$valid}} = true; - break; - } - -{{? $isData }} } {{?}} - -{{# def.checkError:'enum' }} - -{{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/errors.def b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/errors.def deleted file mode 100644 index 5c5752cb..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/errors.def +++ /dev/null @@ -1,194 +0,0 @@ -{{# def.definitions }} - -{{## def._error:_rule: - {{ 'istanbul ignore else'; }} - {{? it.createErrors !== false }} - { - keyword: '{{= $errorKeyword || _rule }}' - , dataPath: (dataPath || '') + {{= it.errorPath }} - , schemaPath: {{=it.util.toQuotedString($errSchemaPath)}} - , params: {{# def._errorParams[_rule] }} - {{? it.opts.messages !== false }} - , message: {{# def._errorMessages[_rule] }} - {{?}} - {{? it.opts.verbose }} - , schema: {{# def._errorSchemas[_rule] }} - , parentSchema: validate.schema{{=it.schemaPath}} - , data: {{=$data}} - {{?}} - } - {{??}} - {} - {{?}} -#}} - - -{{## def._addError:_rule: - if (vErrors === null) vErrors = [err]; - else vErrors.push(err); - errors++; -#}} - - -{{## def.addError:_rule: - var err = {{# def._error:_rule }}; - {{# def._addError:_rule }} -#}} - - -{{## def.error:_rule: - {{# def.beginDefOut}} - {{# def._error:_rule }} - {{# def.storeDefOut:__err }} - - {{? !it.compositeRule && $breakOnError }} - {{ 'istanbul ignore if'; }} - {{? it.async }} - throw new ValidationError([{{=__err}}]); - {{??}} - validate.errors = [{{=__err}}]; - return false; - {{?}} - {{??}} - var err = {{=__err}}; - {{# def._addError:_rule }} - {{?}} -#}} - - -{{## def.extraError:_rule: - {{# def.addError:_rule}} - {{? !it.compositeRule && $breakOnError }} - {{ 'istanbul ignore if'; }} - {{? it.async }} - throw new ValidationError(vErrors); - {{??}} - validate.errors = vErrors; - return false; - {{?}} - {{?}} -#}} - - -{{## def.checkError:_rule: - if (!{{=$valid}}) { - {{# def.error:_rule }} - } -#}} - - -{{## def.resetErrors: - errors = {{=$errs}}; - if (vErrors !== null) { - if ({{=$errs}}) vErrors.length = {{=$errs}}; - else vErrors = null; - } -#}} - - -{{## def.concatSchema:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=$schema}}{{?}}#}} -{{## def.appendSchema:{{?$isData}}' + {{=$schemaValue}}{{??}}{{=$schemaValue}}'{{?}}#}} -{{## def.concatSchemaEQ:{{?$isData}}' + {{=$schemaValue}} + '{{??}}{{=it.util.escapeQuotes($schema)}}{{?}}#}} - -{{## def._errorMessages = { - 'false schema': "'boolean schema is false'", - $ref: "'can\\\'t resolve reference {{=it.util.escapeQuotes($schema)}}'", - additionalItems: "'should NOT have more than {{=$schema.length}} items'", - additionalProperties: "'{{? it.opts._errorDataPathProperty }}is an invalid additional property{{??}}should NOT have additional properties{{?}}'", - anyOf: "'should match some schema in anyOf'", - const: "'should be equal to constant'", - contains: "'should contain a valid item'", - dependencies: "'should have {{? $deps.length == 1 }}property {{= it.util.escapeQuotes($deps[0]) }}{{??}}properties {{= it.util.escapeQuotes($deps.join(\", \")) }}{{?}} when property {{= it.util.escapeQuotes($property) }} is present'", - 'enum': "'should be equal to one of the allowed values'", - format: "'should match format \"{{#def.concatSchemaEQ}}\"'", - 'if': "'should match \"' + {{=$ifClause}} + '\" schema'", - _limit: "'should be {{=$opStr}} {{#def.appendSchema}}", - _exclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'", - _limitItems: "'should NOT have {{?$keyword=='maxItems'}}more{{??}}fewer{{?}} than {{#def.concatSchema}} items'", - _limitLength: "'should NOT be {{?$keyword=='maxLength'}}longer{{??}}shorter{{?}} than {{#def.concatSchema}} characters'", - _limitProperties:"'should NOT have {{?$keyword=='maxProperties'}}more{{??}}fewer{{?}} than {{#def.concatSchema}} properties'", - multipleOf: "'should be multiple of {{#def.appendSchema}}", - not: "'should NOT be valid'", - oneOf: "'should match exactly one schema in oneOf'", - pattern: "'should match pattern \"{{#def.concatSchemaEQ}}\"'", - propertyNames: "'property name \\'{{=$invalidName}}\\' is invalid'", - required: "'{{? it.opts._errorDataPathProperty }}is a required property{{??}}should have required property \\'{{=$missingProperty}}\\'{{?}}'", - type: "'should be {{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}'", - uniqueItems: "'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)'", - custom: "'should pass \"{{=$rule.keyword}}\" keyword validation'", - patternRequired: "'should have property matching pattern \\'{{=$missingPattern}}\\''", - switch: "'should pass \"switch\" keyword validation'", - _formatLimit: "'should be {{=$opStr}} \"{{#def.concatSchemaEQ}}\"'", - _formatExclusiveLimit: "'{{=$exclusiveKeyword}} should be boolean'" -} #}} - - -{{## def.schemaRefOrVal: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=$schema}}{{?}} #}} -{{## def.schemaRefOrQS: {{?$isData}}validate.schema{{=$schemaPath}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} - -{{## def._errorSchemas = { - 'false schema': "false", - $ref: "{{=it.util.toQuotedString($schema)}}", - additionalItems: "false", - additionalProperties: "false", - anyOf: "validate.schema{{=$schemaPath}}", - const: "validate.schema{{=$schemaPath}}", - contains: "validate.schema{{=$schemaPath}}", - dependencies: "validate.schema{{=$schemaPath}}", - 'enum': "validate.schema{{=$schemaPath}}", - format: "{{#def.schemaRefOrQS}}", - 'if': "validate.schema{{=$schemaPath}}", - _limit: "{{#def.schemaRefOrVal}}", - _exclusiveLimit: "validate.schema{{=$schemaPath}}", - _limitItems: "{{#def.schemaRefOrVal}}", - _limitLength: "{{#def.schemaRefOrVal}}", - _limitProperties:"{{#def.schemaRefOrVal}}", - multipleOf: "{{#def.schemaRefOrVal}}", - not: "validate.schema{{=$schemaPath}}", - oneOf: "validate.schema{{=$schemaPath}}", - pattern: "{{#def.schemaRefOrQS}}", - propertyNames: "validate.schema{{=$schemaPath}}", - required: "validate.schema{{=$schemaPath}}", - type: "validate.schema{{=$schemaPath}}", - uniqueItems: "{{#def.schemaRefOrVal}}", - custom: "validate.schema{{=$schemaPath}}", - patternRequired: "validate.schema{{=$schemaPath}}", - switch: "validate.schema{{=$schemaPath}}", - _formatLimit: "{{#def.schemaRefOrQS}}", - _formatExclusiveLimit: "validate.schema{{=$schemaPath}}" -} #}} - - -{{## def.schemaValueQS: {{?$isData}}{{=$schemaValue}}{{??}}{{=it.util.toQuotedString($schema)}}{{?}} #}} - -{{## def._errorParams = { - 'false schema': "{}", - $ref: "{ ref: '{{=it.util.escapeQuotes($schema)}}' }", - additionalItems: "{ limit: {{=$schema.length}} }", - additionalProperties: "{ additionalProperty: '{{=$additionalProperty}}' }", - anyOf: "{}", - const: "{ allowedValue: schema{{=$lvl}} }", - contains: "{}", - dependencies: "{ property: '{{= it.util.escapeQuotes($property) }}', missingProperty: '{{=$missingProperty}}', depsCount: {{=$deps.length}}, deps: '{{= it.util.escapeQuotes($deps.length==1 ? $deps[0] : $deps.join(\", \")) }}' }", - 'enum': "{ allowedValues: schema{{=$lvl}} }", - format: "{ format: {{#def.schemaValueQS}} }", - 'if': "{ failingKeyword: {{=$ifClause}} }", - _limit: "{ comparison: {{=$opExpr}}, limit: {{=$schemaValue}}, exclusive: {{=$exclusive}} }", - _exclusiveLimit: "{}", - _limitItems: "{ limit: {{=$schemaValue}} }", - _limitLength: "{ limit: {{=$schemaValue}} }", - _limitProperties:"{ limit: {{=$schemaValue}} }", - multipleOf: "{ multipleOf: {{=$schemaValue}} }", - not: "{}", - oneOf: "{ passingSchemas: {{=$passingSchemas}} }", - pattern: "{ pattern: {{#def.schemaValueQS}} }", - propertyNames: "{ propertyName: '{{=$invalidName}}' }", - required: "{ missingProperty: '{{=$missingProperty}}' }", - type: "{ type: '{{? $typeIsArray }}{{= $typeSchema.join(\",\") }}{{??}}{{=$typeSchema}}{{?}}' }", - uniqueItems: "{ i: i, j: j }", - custom: "{ keyword: '{{=$rule.keyword}}' }", - patternRequired: "{ missingPattern: '{{=$missingPattern}}' }", - switch: "{ caseIndex: {{=$caseIndex}} }", - _formatLimit: "{ comparison: {{=$opExpr}}, limit: {{#def.schemaValueQS}}, exclusive: {{=$exclusive}} }", - _formatExclusiveLimit: "{}" -} #}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/format.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/format.jst deleted file mode 100644 index 37f14da8..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/format.jst +++ /dev/null @@ -1,106 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} - -{{## def.skipFormat: - {{? $breakOnError }} if (true) { {{?}} - {{ return out; }} -#}} - -{{? it.opts.format === false }}{{# def.skipFormat }}{{?}} - - -{{# def.$data }} - - -{{## def.$dataCheckFormat: - {{# def.$dataNotType:'string' }} - ({{? $unknownFormats != 'ignore' }} - ({{=$schemaValue}} && !{{=$format}} - {{? $allowUnknown }} - && self._opts.unknownFormats.indexOf({{=$schemaValue}}) == -1 - {{?}}) || - {{?}} - ({{=$format}} && {{=$formatType}} == '{{=$ruleType}}' - && !(typeof {{=$format}} == 'function' - ? {{? it.async}} - (async{{=$lvl}} ? await {{=$format}}({{=$data}}) : {{=$format}}({{=$data}})) - {{??}} - {{=$format}}({{=$data}}) - {{?}} - : {{=$format}}.test({{=$data}})))) -#}} - -{{## def.checkFormat: - {{ - var $formatRef = 'formats' + it.util.getProperty($schema); - if ($isObject) $formatRef += '.validate'; - }} - {{? typeof $format == 'function' }} - {{=$formatRef}}({{=$data}}) - {{??}} - {{=$formatRef}}.test({{=$data}}) - {{?}} -#}} - - -{{ - var $unknownFormats = it.opts.unknownFormats - , $allowUnknown = Array.isArray($unknownFormats); -}} - -{{? $isData }} - {{ - var $format = 'format' + $lvl - , $isObject = 'isObject' + $lvl - , $formatType = 'formatType' + $lvl; - }} - var {{=$format}} = formats[{{=$schemaValue}}]; - var {{=$isObject}} = typeof {{=$format}} == 'object' - && !({{=$format}} instanceof RegExp) - && {{=$format}}.validate; - var {{=$formatType}} = {{=$isObject}} && {{=$format}}.type || 'string'; - if ({{=$isObject}}) { - {{? it.async}} - var async{{=$lvl}} = {{=$format}}.async; - {{?}} - {{=$format}} = {{=$format}}.validate; - } - if ({{# def.$dataCheckFormat }}) { -{{??}} - {{ var $format = it.formats[$schema]; }} - {{? !$format }} - {{? $unknownFormats == 'ignore' }} - {{ it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); }} - {{# def.skipFormat }} - {{?? $allowUnknown && $unknownFormats.indexOf($schema) >= 0 }} - {{# def.skipFormat }} - {{??}} - {{ throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); }} - {{?}} - {{?}} - {{ - var $isObject = typeof $format == 'object' - && !($format instanceof RegExp) - && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - }} - {{? $formatType != $ruleType }} - {{# def.skipFormat }} - {{?}} - {{? $async }} - {{ - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - }} - if (!(await {{=$formatRef}}({{=$data}}))) { - {{??}} - if (!{{# def.checkFormat }}) { - {{?}} -{{?}} - {{# def.error:'format' }} - } {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/if.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/if.jst deleted file mode 100644 index adb50361..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/if.jst +++ /dev/null @@ -1,73 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateIfClause:_clause: - {{ - $it.schema = it.schema['_clause']; - $it.schemaPath = it.schemaPath + '._clause'; - $it.errSchemaPath = it.errSchemaPath + '/_clause'; - }} - {{# def.insertSubschemaCode }} - {{=$valid}} = {{=$nextValid}}; - {{? $thenPresent && $elsePresent }} - {{ $ifClause = 'ifClause' + $lvl; }} - var {{=$ifClause}} = '_clause'; - {{??}} - {{ $ifClause = '\'_clause\''; }} - {{?}} -#}} - -{{ - var $thenSch = it.schema['then'] - , $elseSch = it.schema['else'] - , $thenPresent = $thenSch !== undefined && {{# def.nonEmptySchema:$thenSch }} - , $elsePresent = $elseSch !== undefined && {{# def.nonEmptySchema:$elseSch }} - , $currentBaseId = $it.baseId; -}} - -{{? $thenPresent || $elsePresent }} - {{ - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - var {{=$errs}} = errors; - var {{=$valid}} = true; - - {{# def.setCompositeRule }} - {{# def.insertSubschemaCode }} - {{ $it.createErrors = true; }} - {{# def.resetErrors }} - {{# def.resetCompositeRule }} - - {{? $thenPresent }} - if ({{=$nextValid}}) { - {{# def.validateIfClause:then }} - } - {{? $elsePresent }} - else { - {{?}} - {{??}} - if (!{{=$nextValid}}) { - {{?}} - - {{? $elsePresent }} - {{# def.validateIfClause:else }} - } - {{?}} - - if (!{{=$valid}}) { - {{# def.extraError:'if' }} - } - {{? $breakOnError }} else { {{?}} -{{??}} - {{? $breakOnError }} - if (true) { - {{?}} -{{?}} - diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/items.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/items.jst deleted file mode 100644 index acc932a2..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/items.jst +++ /dev/null @@ -1,98 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateItems:startFrom: - for (var {{=$idx}} = {{=startFrom}}; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - {{? $breakOnError }} - if (!{{=$nextValid}}) break; - {{?}} - } -#}} - -{{ - var $idx = 'i' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $currentBaseId = it.baseId; -}} - -var {{=$errs}} = errors; -var {{=$valid}}; - -{{? Array.isArray($schema) }} - {{ /* 'items' is an array of schemas */}} - {{ var $additionalItems = it.schema.additionalItems; }} - {{? $additionalItems === false }} - {{=$valid}} = {{=$data}}.length <= {{= $schema.length }}; - {{ - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - }} - {{# def.checkError:'additionalItems' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{# def.elseIfValid}} - {{?}} - - {{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{=$nextValid}} = true; - - if ({{=$data}}.length > {{=$i}}) { - {{ - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - } - - {{# def.ifResultValid }} - {{?}} - {{~}} - - {{? typeof $additionalItems == 'object' && {{# def.nonEmptySchema:$additionalItems }} }} - {{ - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - }} - {{=$nextValid}} = true; - - if ({{=$data}}.length > {{= $schema.length }}) { - {{# def.validateItems: $schema.length }} - } - - {{# def.ifResultValid }} - {{?}} - -{{?? {{# def.nonEmptySchema:$schema }} }} - {{ /* 'items' is a single schema */}} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - {{# def.validateItems: 0 }} -{{?}} - -{{? $breakOnError }} - {{= $closingBraces }} - if ({{=$errs}} == errors) { -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/missing.def b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/missing.def deleted file mode 100644 index a73b9f96..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/missing.def +++ /dev/null @@ -1,39 +0,0 @@ -{{## def.checkMissingProperty:_properties: - {{~ _properties:$propertyKey:$i }} - {{?$i}} || {{?}} - {{ - var $prop = it.util.getProperty($propertyKey) - , $useData = $data + $prop; - }} - ( ({{# def.noPropertyInData }}) && (missing{{=$lvl}} = {{= it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) }}) ) - {{~}} -#}} - - -{{## def.errorMissingProperty:_error: - {{ - var $propertyPath = 'missing' + $lvl - , $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers - ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) - : $currentErrorPath + ' + ' + $propertyPath; - } - }} - {{# def.error:_error }} -#}} - - -{{## def.allErrorsMissingProperty:_error: - {{ - var $prop = it.util.getProperty($propertyKey) - , $missingProperty = it.util.escapeQuotes($propertyKey) - , $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - }} - if ({{# def.noPropertyInData }}) { - {{# def.addError:_error }} - } -#}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/multipleOf.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/multipleOf.jst deleted file mode 100644 index 6d88a456..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/multipleOf.jst +++ /dev/null @@ -1,22 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{# def.numberKeyword }} - -var division{{=$lvl}}; -if ({{?$isData}} - {{=$schemaValue}} !== undefined && ( - typeof {{=$schemaValue}} != 'number' || - {{?}} - (division{{=$lvl}} = {{=$data}} / {{=$schemaValue}}, - {{? it.opts.multipleOfPrecision }} - Math.abs(Math.round(division{{=$lvl}}) - division{{=$lvl}}) > 1e-{{=it.opts.multipleOfPrecision}} - {{??}} - division{{=$lvl}} !== parseInt(division{{=$lvl}}) - {{?}} - ) - {{?$isData}} ) {{?}} ) { - {{# def.error:'multipleOf' }} -} {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/not.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/not.jst deleted file mode 100644 index e03185ae..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/not.jst +++ /dev/null @@ -1,43 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{? {{# def.nonEmptySchema:$schema }} }} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - var {{=$errs}} = errors; - - {{# def.setCompositeRule }} - - {{ - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - }} - {{= it.validate($it) }} - {{ - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - }} - - {{# def.resetCompositeRule }} - - if ({{=$nextValid}}) { - {{# def.error:'not' }} - } else { - {{# def.resetErrors }} - {{? it.opts.allErrors }} } {{?}} -{{??}} - {{# def.addError:'not' }} - {{? $breakOnError}} - if (false) { - {{?}} -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/oneOf.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/oneOf.jst deleted file mode 100644 index bcce2c6e..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/oneOf.jst +++ /dev/null @@ -1,54 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -{{ - var $currentBaseId = $it.baseId - , $prevValid = 'prevValid' + $lvl - , $passingSchemas = 'passingSchemas' + $lvl; -}} - -var {{=$errs}} = errors - , {{=$prevValid}} = false - , {{=$valid}} = false - , {{=$passingSchemas}} = null; - -{{# def.setCompositeRule }} - -{{~ $schema:$sch:$i }} - {{? {{# def.nonEmptySchema:$sch }} }} - {{ - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - }} - - {{# def.insertSubschemaCode }} - {{??}} - var {{=$nextValid}} = true; - {{?}} - - {{? $i }} - if ({{=$nextValid}} && {{=$prevValid}}) { - {{=$valid}} = false; - {{=$passingSchemas}} = [{{=$passingSchemas}}, {{=$i}}]; - } else { - {{ $closingBraces += '}'; }} - {{?}} - - if ({{=$nextValid}}) { - {{=$valid}} = {{=$prevValid}} = true; - {{=$passingSchemas}} = {{=$i}}; - } -{{~}} - -{{# def.resetCompositeRule }} - -{{= $closingBraces }} - -if (!{{=$valid}}) { - {{# def.extraError:'oneOf' }} -} else { - {{# def.resetErrors }} -{{? it.opts.allErrors }} } {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/pattern.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/pattern.jst deleted file mode 100644 index 3a37ef6c..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/pattern.jst +++ /dev/null @@ -1,14 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - -{{ - var $regexp = $isData - ? '(new RegExp(' + $schemaValue + '))' - : it.usePattern($schema); -}} - -if ({{# def.$dataNotType:'string' }} !{{=$regexp}}.test({{=$data}}) ) { - {{# def.error:'pattern' }} -} {{? $breakOnError }} else { {{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/properties.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/properties.jst deleted file mode 100644 index 5cebb9b1..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/properties.jst +++ /dev/null @@ -1,245 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - - -{{## def.validateAdditional: - {{ /* additionalProperties is schema */ - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty - ? it.errorPath - : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} -#}} - - -{{ - var $key = 'key' + $lvl - , $idx = 'idx' + $lvl - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $dataProperties = 'dataProperties' + $lvl; - - var $schemaKeys = Object.keys($schema || {}).filter(notProto) - , $pProperties = it.schema.patternProperties || {} - , $pPropertyKeys = Object.keys($pProperties).filter(notProto) - , $aProperties = it.schema.additionalProperties - , $someProperties = $schemaKeys.length || $pPropertyKeys.length - , $noAdditional = $aProperties === false - , $additionalIsSchema = typeof $aProperties == 'object' - && Object.keys($aProperties).length - , $removeAdditional = it.opts.removeAdditional - , $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional - , $ownProperties = it.opts.ownProperties - , $currentBaseId = it.baseId; - - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) { - var $requiredHash = it.util.toHash($required); - } - - function notProto(p) { return p !== '__proto__'; } -}} - - -var {{=$errs}} = errors; -var {{=$nextValid}} = true; -{{? $ownProperties }} - var {{=$dataProperties}} = undefined; -{{?}} - -{{? $checkAdditional }} - {{# def.iterateProperties }} - {{? $someProperties }} - var isAdditional{{=$lvl}} = !(false - {{? $schemaKeys.length }} - {{? $schemaKeys.length > 8 }} - || validate.schema{{=$schemaPath}}.hasOwnProperty({{=$key}}) - {{??}} - {{~ $schemaKeys:$propertyKey }} - || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} - {{~}} - {{?}} - {{?}} - {{? $pPropertyKeys.length }} - {{~ $pPropertyKeys:$pProperty:$i }} - || {{= it.usePattern($pProperty) }}.test({{=$key}}) - {{~}} - {{?}} - ); - - if (isAdditional{{=$lvl}}) { - {{?}} - {{? $removeAdditional == 'all' }} - delete {{=$data}}[{{=$key}}]; - {{??}} - {{ - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - }} - {{? $noAdditional }} - {{? $removeAdditional }} - delete {{=$data}}[{{=$key}}]; - {{??}} - {{=$nextValid}} = false; - {{ - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - }} - {{# def.error:'additionalProperties' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{? $breakOnError }} break; {{?}} - {{?}} - {{?? $additionalIsSchema }} - {{? $removeAdditional == 'failing' }} - var {{=$errs}} = errors; - {{# def.setCompositeRule }} - - {{# def.validateAdditional }} - - if (!{{=$nextValid}}) { - errors = {{=$errs}}; - if (validate.errors !== null) { - if (errors) validate.errors.length = errors; - else validate.errors = null; - } - delete {{=$data}}[{{=$key}}]; - } - - {{# def.resetCompositeRule }} - {{??}} - {{# def.validateAdditional }} - {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} - {{?}} - {{?}} - {{ it.errorPath = $currentErrorPath; }} - {{?}} - {{? $someProperties }} - } - {{?}} - } - - {{# def.ifResultValid }} -{{?}} - -{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} - -{{? $schemaKeys.length }} - {{~ $schemaKeys:$propertyKey }} - {{ var $sch = $schema[$propertyKey]; }} - - {{? {{# def.nonEmptySchema:$sch}} }} - {{ - var $prop = it.util.getProperty($propertyKey) - , $passData = $data + $prop - , $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - }} - - {{# def.generateSubschemaCode }} - - {{? {{# def.willOptimize }} }} - {{ - $code = {{# def._optimizeValidate }}; - var $useData = $passData; - }} - {{??}} - {{ var $useData = $nextData; }} - var {{=$nextData}} = {{=$passData}}; - {{?}} - - {{? $hasDefault }} - {{= $code }} - {{??}} - {{? $requiredHash && $requiredHash[$propertyKey] }} - if ({{# def.noPropertyInData }}) { - {{=$nextValid}} = false; - {{ - var $currentErrorPath = it.errorPath - , $currErrSchemaPath = $errSchemaPath - , $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - }} - {{# def.error:'required' }} - {{ $errSchemaPath = $currErrSchemaPath; }} - {{ it.errorPath = $currentErrorPath; }} - } else { - {{??}} - {{? $breakOnError }} - if ({{# def.noPropertyInData }}) { - {{=$nextValid}} = true; - } else { - {{??}} - if ({{=$useData}} !== undefined - {{? $ownProperties }} - && {{# def.isOwnProperty }} - {{?}} - ) { - {{?}} - {{?}} - - {{= $code }} - } - {{?}} {{ /* $hasDefault */ }} - {{?}} {{ /* def.nonEmptySchema */ }} - - {{# def.ifResultValid }} - {{~}} -{{?}} - -{{? $pPropertyKeys.length }} - {{~ $pPropertyKeys:$pProperty }} - {{ var $sch = $pProperties[$pProperty]; }} - - {{? {{# def.nonEmptySchema:$sch}} }} - {{ - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' - + it.util.escapeFragment($pProperty); - }} - - {{# def.iterateProperties }} - if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { - {{ - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - }} - - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - - {{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} - } - {{? $breakOnError }} else {{=$nextValid}} = true; {{?}} - } - - {{# def.ifResultValid }} - {{?}} {{ /* def.nonEmptySchema */ }} - {{~}} -{{?}} - - -{{? $breakOnError }} - {{= $closingBraces }} - if ({{=$errs}} == errors) { -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/propertyNames.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/propertyNames.jst deleted file mode 100644 index d456ccaf..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/propertyNames.jst +++ /dev/null @@ -1,52 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.setupNextLevel }} - -var {{=$errs}} = errors; - -{{? {{# def.nonEmptySchema:$schema }} }} - {{ - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - }} - - {{ - var $key = 'key' + $lvl - , $idx = 'idx' + $lvl - , $i = 'i' + $lvl - , $invalidName = '\' + ' + $key + ' + \'' - , $dataNxt = $it.dataLevel = it.dataLevel + 1 - , $nextData = 'data' + $dataNxt - , $dataProperties = 'dataProperties' + $lvl - , $ownProperties = it.opts.ownProperties - , $currentBaseId = it.baseId; - }} - - {{? $ownProperties }} - var {{=$dataProperties}} = undefined; - {{?}} - {{# def.iterateProperties }} - var startErrs{{=$lvl}} = errors; - - {{ var $passData = $key; }} - {{# def.setCompositeRule }} - {{# def.generateSubschemaCode }} - {{# def.optimizeValidate }} - {{# def.resetCompositeRule }} - - if (!{{=$nextValid}}) { - for (var {{=$i}}=startErrs{{=$lvl}}; {{=$i}}= it.opts.loopRequired - , $ownProperties = it.opts.ownProperties; - }} - - {{? $breakOnError }} - var missing{{=$lvl}}; - {{? $loopRequired }} - {{# def.setupLoop }} - var {{=$valid}} = true; - - {{?$isData}}{{# def.check$dataIsArray }}{{?}} - - for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { - {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined - {{? $ownProperties }} - && {{# def.isRequiredOwnProperty }} - {{?}}; - if (!{{=$valid}}) break; - } - - {{? $isData }} } {{?}} - - {{# def.checkError:'required' }} - else { - {{??}} - if ({{# def.checkMissingProperty:$required }}) { - {{# def.errorMissingProperty:'required' }} - } else { - {{?}} - {{??}} - {{? $loopRequired }} - {{# def.setupLoop }} - {{? $isData }} - if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) { - {{# def.addError:'required' }} - } else if ({{=$vSchema}} !== undefined) { - {{?}} - - for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) { - if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined - {{? $ownProperties }} - || !{{# def.isRequiredOwnProperty }} - {{?}}) { - {{# def.addError:'required' }} - } - } - - {{? $isData }} } {{?}} - {{??}} - {{~ $required:$propertyKey }} - {{# def.allErrorsMissingProperty:'required' }} - {{~}} - {{?}} - {{?}} - - {{ it.errorPath = $currentErrorPath; }} - -{{?? $breakOnError }} - if (true) { -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/uniqueItems.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/uniqueItems.jst deleted file mode 100644 index e69b8308..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/uniqueItems.jst +++ /dev/null @@ -1,62 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.setupKeyword }} -{{# def.$data }} - - -{{? ($schema || $isData) && it.opts.uniqueItems !== false }} - {{? $isData }} - var {{=$valid}}; - if ({{=$schemaValue}} === false || {{=$schemaValue}} === undefined) - {{=$valid}} = true; - else if (typeof {{=$schemaValue}} != 'boolean') - {{=$valid}} = false; - else { - {{?}} - - var i = {{=$data}}.length - , {{=$valid}} = true - , j; - if (i > 1) { - {{ - var $itemType = it.schema.items && it.schema.items.type - , $typeIsArray = Array.isArray($itemType); - }} - {{? !$itemType || $itemType == 'object' || $itemType == 'array' || - ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0)) }} - outer: - for (;i--;) { - for (j = i; j--;) { - if (equal({{=$data}}[i], {{=$data}}[j])) { - {{=$valid}} = false; - break outer; - } - } - } - {{??}} - var itemIndices = {}, item; - for (;i--;) { - var item = {{=$data}}[i]; - {{ var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); }} - if ({{= it.util[$method]($itemType, 'item', it.opts.strictNumbers, true) }}) continue; - {{? $typeIsArray}} - if (typeof item == 'string') item = '"' + item; - {{?}} - if (typeof itemIndices[item] == 'number') { - {{=$valid}} = false; - j = itemIndices[item]; - break; - } - itemIndices[item] = i; - } - {{?}} - } - - {{? $isData }} } {{?}} - - if (!{{=$valid}}) { - {{# def.error:'uniqueItems' }} - } {{? $breakOnError }} else { {{?}} -{{??}} - {{? $breakOnError }} if (true) { {{?}} -{{?}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/validate.jst b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/validate.jst deleted file mode 100644 index fd833a53..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dot/validate.jst +++ /dev/null @@ -1,276 +0,0 @@ -{{# def.definitions }} -{{# def.errors }} -{{# def.defaults }} -{{# def.coerce }} - -{{ /** - * schema compilation (render) time: - * it = { schema, RULES, _validate, opts } - * it.validate - this template function, - * it is used recursively to generate code for subschemas - * - * runtime: - * "validate" is a variable name to which this function will be assigned - * validateRef etc. are defined in the parent scope in index.js - */ }} - -{{ - var $async = it.schema.$async === true - , $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref') - , $id = it.self._getId(it.schema); -}} - -{{ - if (it.opts.strictKeywords) { - var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); - if ($unknownKwd) { - var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; - if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); - else throw new Error($keywordsMsg); - } - } -}} - -{{? it.isTop }} - var validate = {{?$async}}{{it.async = true;}}async {{?}}function(data, dataPath, parentData, parentDataProperty, rootData) { - 'use strict'; - {{? $id && (it.opts.sourceCode || it.opts.processCode) }} - {{= '/\*# sourceURL=' + $id + ' */' }} - {{?}} -{{?}} - -{{? typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref) }} - {{ var $keyword = 'false schema'; }} - {{# def.setupKeyword }} - {{? it.schema === false}} - {{? it.isTop}} - {{ $breakOnError = true; }} - {{??}} - var {{=$valid}} = false; - {{?}} - {{# def.error:'false schema' }} - {{??}} - {{? it.isTop}} - {{? $async }} - return data; - {{??}} - validate.errors = null; - return true; - {{?}} - {{??}} - var {{=$valid}} = true; - {{?}} - {{?}} - - {{? it.isTop}} - }; - return validate; - {{?}} - - {{ return out; }} -{{?}} - - -{{? it.isTop }} - {{ - var $top = it.isTop - , $lvl = it.level = 0 - , $dataLvl = it.dataLevel = 0 - , $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - - it.dataPathArr = [undefined]; - - if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored in the schema root'; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - }} - - var vErrors = null; {{ /* don't edit, used in replace */ }} - var errors = 0; {{ /* don't edit, used in replace */ }} - if (rootData === undefined) rootData = data; {{ /* don't edit, used in replace */ }} -{{??}} - {{ - var $lvl = it.level - , $dataLvl = it.dataLevel - , $data = 'data' + ($dataLvl || ''); - - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - - if ($async && !it.async) throw new Error('async schema in sync schema'); - }} - - var errs_{{=$lvl}} = errors; -{{?}} - -{{ - var $valid = 'valid' + $lvl - , $breakOnError = !it.opts.allErrors - , $closingBraces1 = '' - , $closingBraces2 = ''; - - var $errorKeyword; - var $typeSchema = it.schema.type - , $typeIsArray = Array.isArray($typeSchema); - - if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { - if ($typeIsArray) { - if ($typeSchema.indexOf('null') == -1) - $typeSchema = $typeSchema.concat('null'); - } else if ($typeSchema != 'null') { - $typeSchema = [$typeSchema, 'null']; - $typeIsArray = true; - } - } - - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } -}} - -{{## def.checkType: - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type' - , $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - }} - - if ({{= it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true) }}) { -#}} - -{{? it.schema.$ref && $refKeywords }} - {{? it.opts.extendRefs == 'fail' }} - {{ throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); }} - {{?? it.opts.extendRefs !== true }} - {{ - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - }} - {{?}} -{{?}} - -{{? it.schema.$comment && it.opts.$comment }} - {{= it.RULES.all.$comment.code(it, '$comment') }} -{{?}} - -{{? $typeSchema }} - {{? it.opts.coerceTypes }} - {{ var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); }} - {{?}} - - {{ var $rulesGroup = it.RULES.types[$typeSchema]; }} - {{? $coerceToTypes || $typeIsArray || $rulesGroup === true || - ($rulesGroup && !$shouldUseGroup($rulesGroup)) }} - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type'; - }} - {{# def.checkType }} - {{? $coerceToTypes }} - {{# def.coerceType }} - {{??}} - {{# def.error:'type' }} - {{?}} - } - {{?}} -{{?}} - - -{{? it.schema.$ref && !$refKeywords }} - {{= it.RULES.all.$ref.code(it, '$ref') }} - {{? $breakOnError }} - } - if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { - {{ $closingBraces2 += '}'; }} - {{?}} -{{??}} - {{~ it.RULES:$rulesGroup }} - {{? $shouldUseGroup($rulesGroup) }} - {{? $rulesGroup.type }} - if ({{= it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers) }}) { - {{?}} - {{? it.opts.useDefaults }} - {{? $rulesGroup.type == 'object' && it.schema.properties }} - {{# def.defaultProperties }} - {{?? $rulesGroup.type == 'array' && Array.isArray(it.schema.items) }} - {{# def.defaultItems }} - {{?}} - {{?}} - {{~ $rulesGroup.rules:$rule }} - {{? $shouldUseRule($rule) }} - {{ var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); }} - {{? $code }} - {{= $code }} - {{? $breakOnError }} - {{ $closingBraces1 += '}'; }} - {{?}} - {{?}} - {{?}} - {{~}} - {{? $breakOnError }} - {{= $closingBraces1 }} - {{ $closingBraces1 = ''; }} - {{?}} - {{? $rulesGroup.type }} - } - {{? $typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes }} - else { - {{ - var $schemaPath = it.schemaPath + '.type' - , $errSchemaPath = it.errSchemaPath + '/type'; - }} - {{# def.error:'type' }} - } - {{?}} - {{?}} - - {{? $breakOnError }} - if (errors === {{?$top}}0{{??}}errs_{{=$lvl}}{{?}}) { - {{ $closingBraces2 += '}'; }} - {{?}} - {{?}} - {{~}} -{{?}} - -{{? $breakOnError }} {{= $closingBraces2 }} {{?}} - -{{? $top }} - {{? $async }} - if (errors === 0) return data; {{ /* don't edit, used in replace */ }} - else throw new ValidationError(vErrors); {{ /* don't edit, used in replace */ }} - {{??}} - validate.errors = vErrors; {{ /* don't edit, used in replace */ }} - return errors === 0; {{ /* don't edit, used in replace */ }} - {{?}} - }; - - return validate; -{{??}} - var {{=$valid}} = errors === errs_{{=$lvl}}; -{{?}} - -{{ - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i=0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) - return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || - ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i=0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) - return true; - } -}} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/README.md b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/README.md deleted file mode 100644 index 4d994846..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -These files are compiled dot templates from dot folder. - -Do NOT edit them directly, edit the templates and run `npm run build` from main ajv folder. diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limit.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limit.js deleted file mode 100644 index 05a1979d..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limit.js +++ /dev/null @@ -1,163 +0,0 @@ -'use strict'; -module.exports = function generate__limit(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $isMax = $keyword == 'maximum', - $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum', - $schemaExcl = it.schema[$exclusiveKeyword], - $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, - $op = $isMax ? '<' : '>', - $notOp = $isMax ? '>' : '<', - $errorKeyword = undefined; - if (!($isData || typeof $schema == 'number' || $schema === undefined)) { - throw new Error($keyword + ' must be number'); - } - if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) { - throw new Error($exclusiveKeyword + ' must be number or boolean'); - } - if ($isDataExcl) { - var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), - $exclusive = 'exclusive' + $lvl, - $exclType = 'exclType' + $lvl, - $exclIsNumber = 'exclIsNumber' + $lvl, - $opExpr = 'op' + $lvl, - $opStr = '\' + ' + $opExpr + ' + \''; - out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; '; - $schemaValueExcl = 'schemaExcl' + $lvl; - out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { '; - var $errorKeyword = $exclusiveKeyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; '; - if ($schema === undefined) { - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaValueExcl; - $isData = $isDataExcl; - } - } else { - var $exclIsNumber = typeof $schemaExcl == 'number', - $opStr = $op; - if ($exclIsNumber && $isData) { - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { '; - } else { - if ($exclIsNumber && $schema === undefined) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $schemaValue = $schemaExcl; - $notOp += '='; - } else { - if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema); - if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) { - $exclusive = true; - $errorKeyword = $exclusiveKeyword; - $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword; - $notOp += '='; - } else { - $exclusive = false; - $opStr += '='; - } - } - var $opExpr = '\'' + $opStr + '\''; - out += ' if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { '; - } - } - $errorKeyword = $errorKeyword || $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be ' + ($opStr) + ' '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitItems.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitItems.js deleted file mode 100644 index e092a559..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitItems.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; -module.exports = function generate__limitItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxItems' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxItems') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitLength.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitLength.js deleted file mode 100644 index ecbd3fe1..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitLength.js +++ /dev/null @@ -1,85 +0,0 @@ -'use strict'; -module.exports = function generate__limitLength(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxLength' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - if (it.opts.unicode === false) { - out += ' ' + ($data) + '.length '; - } else { - out += ' ucs2length(' + ($data) + ') '; - } - out += ' ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be '; - if ($keyword == 'maxLength') { - out += 'longer'; - } else { - out += 'shorter'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' characters\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitProperties.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitProperties.js deleted file mode 100644 index d232755a..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/_limitProperties.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; -module.exports = function generate__limitProperties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - var $op = $keyword == 'maxProperties' ? '>' : '<'; - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || '; - } - out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { '; - var $errorKeyword = $keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have '; - if ($keyword == 'maxProperties') { - out += 'more'; - } else { - out += 'fewer'; - } - out += ' than '; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + ($schema); - } - out += ' properties\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/allOf.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/allOf.js deleted file mode 100644 index 8fd2e8f4..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/allOf.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; -module.exports = function generate_allOf(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $allSchemasEmpty = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $allSchemasEmpty = false; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($breakOnError) { - if ($allSchemasEmpty) { - out += ' if (true) { '; - } else { - out += ' ' + ($closingBraces.slice(0, -1)) + ' '; - } - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/anyOf.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/anyOf.js deleted file mode 100644 index 0421495e..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/anyOf.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; -module.exports = function generate_anyOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $noEmptySchema = $schema.every(function($sch) { - return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all)); - }); - if ($noEmptySchema) { - var $currentBaseId = $it.baseId; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { '; - $closingBraces += '}'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should match some schema in anyOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/comment.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/comment.js deleted file mode 100644 index dd66bb8f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/comment.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -module.exports = function generate_comment(it, $keyword, $ruleType) { - var out = ' '; - var $schema = it.schema[$keyword]; - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $comment = it.util.toQuotedString($schema); - if (it.opts.$comment === true) { - out += ' console.log(' + ($comment) + ');'; - } else if (typeof it.opts.$comment == 'function') { - out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);'; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/const.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/const.js deleted file mode 100644 index 15b7c619..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/const.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; -module.exports = function generate_const(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!$isData) { - out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to constant\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/contains.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/contains.js deleted file mode 100644 index 64ab12c5..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/contains.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -module.exports = function generate_contains(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId, - $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all)); - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($nonEmptySchema) { - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (' + ($nextValid) + ') break; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {'; - } else { - out += ' if (' + ($data) + '.length == 0) {'; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should contain a valid item\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - if ($nonEmptySchema) { - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - } - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/custom.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/custom.js deleted file mode 100644 index f3e641e7..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/custom.js +++ /dev/null @@ -1,228 +0,0 @@ -'use strict'; -module.exports = function generate_custom(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $rule = this, - $definition = 'definition' + $lvl, - $rDef = $rule.definition, - $closingBraces = ''; - var $compile, $inline, $macro, $ruleValidate, $validateCode; - if ($isData && $rDef.$data) { - $validateCode = 'keywordValidate' + $lvl; - var $validateSchema = $rDef.validateSchema; - out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;'; - } else { - $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); - if (!$ruleValidate) return; - $schemaValue = 'validate.schema' + $schemaPath; - $validateCode = $ruleValidate.code; - $compile = $rDef.compile; - $inline = $rDef.inline; - $macro = $rDef.macro; - } - var $ruleErrs = $validateCode + '.errors', - $i = 'i' + $lvl, - $ruleErr = 'ruleErr' + $lvl, - $asyncKeyword = $rDef.async; - if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema'); - if (!($inline || $macro)) { - out += '' + ($ruleErrs) + ' = null;'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if ($isData && $rDef.$data) { - $closingBraces += '}'; - out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { '; - if ($validateSchema) { - $closingBraces += '}'; - out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { '; - } - } - if ($inline) { - if ($rDef.statements) { - out += ' ' + ($ruleValidate.validate) + ' '; - } else { - out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; '; - } - } else if ($macro) { - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - $it.schema = $ruleValidate.validate; - $it.schemaPath = ''; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' ' + ($code); - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - out += ' ' + ($validateCode) + '.call( '; - if (it.opts.passContext) { - out += 'this'; - } else { - out += 'self'; - } - if ($compile || $rDef.schema === false) { - out += ' , ' + ($data) + ' '; - } else { - out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' '; - } - out += ' , (dataPath || \'\')'; - if (it.errorPath != '""') { - out += ' + ' + (it.errorPath); - } - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData ) '; - var def_callRuleValidate = out; - out = $$outStack.pop(); - if ($rDef.errors === false) { - out += ' ' + ($valid) + ' = '; - if ($asyncKeyword) { - out += 'await '; - } - out += '' + (def_callRuleValidate) + '; '; - } else { - if ($asyncKeyword) { - $ruleErrs = 'customErrors' + $lvl; - out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } '; - } else { - out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; '; - } - } - } - if ($rDef.modifying) { - out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];'; - } - out += '' + ($closingBraces); - if ($rDef.valid) { - if ($breakOnError) { - out += ' if (true) { '; - } - } else { - out += ' if ( '; - if ($rDef.valid === undefined) { - out += ' !'; - if ($macro) { - out += '' + ($nextValid); - } else { - out += '' + ($valid); - } - } else { - out += ' ' + (!$rDef.valid) + ' '; - } - out += ') { '; - $errorKeyword = $rule.keyword; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - var def_customError = out; - out = $$outStack.pop(); - if ($inline) { - if ($rDef.errors) { - if ($rDef.errors != 'full') { - out += ' for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') '; - } - out += ') { '; - $it.schema = $sch; - $it.schemaPath = $schemaPath + it.util.getProperty($property); - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property); - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/enum.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/enum.js deleted file mode 100644 index 90580b9f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/enum.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; -module.exports = function generate_enum(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $i = 'i' + $lvl, - $vSchema = 'schema' + $lvl; - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';'; - } - out += 'var ' + ($valid) + ';'; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }'; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be equal to one of the allowed values\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' }'; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/format.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/format.js deleted file mode 100644 index cd9a5693..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/format.js +++ /dev/null @@ -1,150 +0,0 @@ -'use strict'; -module.exports = function generate_format(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - if (it.opts.format === false) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $unknownFormats = it.opts.unknownFormats, - $allowUnknown = Array.isArray($unknownFormats); - if ($isData) { - var $format = 'format' + $lvl, - $isObject = 'isObject' + $lvl, - $formatType = 'formatType' + $lvl; - out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { '; - if (it.async) { - out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; '; - } - out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' ('; - if ($unknownFormats != 'ignore') { - out += ' (' + ($schemaValue) + ' && !' + ($format) + ' '; - if ($allowUnknown) { - out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 '; - } - out += ') || '; - } - out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? '; - if (it.async) { - out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) '; - } else { - out += ' ' + ($format) + '(' + ($data) + ') '; - } - out += ' : ' + ($format) + '.test(' + ($data) + '))))) {'; - } else { - var $format = it.formats[$schema]; - if (!$format) { - if ($unknownFormats == 'ignore') { - it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"'); - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } else { - throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"'); - } - } - var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate; - var $formatType = $isObject && $format.type || 'string'; - if ($isObject) { - var $async = $format.async === true; - $format = $format.validate; - } - if ($formatType != $ruleType) { - if ($breakOnError) { - out += ' if (true) { '; - } - return out; - } - if ($async) { - if (!it.async) throw new Error('async format in sync schema'); - var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate'; - out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { '; - } else { - out += ' if (! '; - var $formatRef = 'formats' + it.util.getProperty($schema); - if ($isObject) $formatRef += '.validate'; - if (typeof $format == 'function') { - out += ' ' + ($formatRef) + '(' + ($data) + ') '; - } else { - out += ' ' + ($formatRef) + '.test(' + ($data) + ') '; - } - out += ') { '; - } - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match format "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/if.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/if.js deleted file mode 100644 index 93c7ed2a..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/if.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; -module.exports = function generate_if(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - var $thenSch = it.schema['then'], - $elseSch = it.schema['else'], - $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)), - $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)), - $currentBaseId = $it.baseId; - if ($thenPresent || $elsePresent) { - var $ifClause; - $it.createErrors = false; - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - $it.createErrors = true; - out += ' errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - if ($thenPresent) { - out += ' if (' + ($nextValid) + ') { '; - $it.schema = it.schema['then']; - $it.schemaPath = it.schemaPath + '.then'; - $it.errSchemaPath = it.errSchemaPath + '/then'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'then\'; '; - } else { - $ifClause = '\'then\''; - } - out += ' } '; - if ($elsePresent) { - out += ' else { '; - } - } else { - out += ' if (!' + ($nextValid) + ') { '; - } - if ($elsePresent) { - $it.schema = it.schema['else']; - $it.schemaPath = it.schemaPath + '.else'; - $it.errSchemaPath = it.errSchemaPath + '/else'; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - out += ' ' + ($valid) + ' = ' + ($nextValid) + '; '; - if ($thenPresent && $elsePresent) { - $ifClause = 'ifClause' + $lvl; - out += ' var ' + ($ifClause) + ' = \'else\'; '; - } else { - $ifClause = '\'else\''; - } - out += ' } '; - } - out += ' if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/index.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/index.js deleted file mode 100644 index 2fb1b00e..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/index.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -//all requires must be explicit because browserify won't work with dynamic requires -module.exports = { - '$ref': require('./ref'), - allOf: require('./allOf'), - anyOf: require('./anyOf'), - '$comment': require('./comment'), - const: require('./const'), - contains: require('./contains'), - dependencies: require('./dependencies'), - 'enum': require('./enum'), - format: require('./format'), - 'if': require('./if'), - items: require('./items'), - maximum: require('./_limit'), - minimum: require('./_limit'), - maxItems: require('./_limitItems'), - minItems: require('./_limitItems'), - maxLength: require('./_limitLength'), - minLength: require('./_limitLength'), - maxProperties: require('./_limitProperties'), - minProperties: require('./_limitProperties'), - multipleOf: require('./multipleOf'), - not: require('./not'), - oneOf: require('./oneOf'), - pattern: require('./pattern'), - properties: require('./properties'), - propertyNames: require('./propertyNames'), - required: require('./required'), - uniqueItems: require('./uniqueItems'), - validate: require('./validate') -}; diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/items.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/items.js deleted file mode 100644 index 139c1d94..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/items.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; -module.exports = function generate_items(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $idx = 'i' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $currentBaseId = it.baseId; - out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';'; - if (Array.isArray($schema)) { - var $additionalItems = it.schema.additionalItems; - if ($additionalItems === false) { - out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - $closingBraces += '}'; - out += ' else { '; - } - } - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { '; - var $passData = $data + '[' + $i + ']'; - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true); - $it.dataPathArr[$dataNxt] = $i; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) { - $it.schema = $additionalItems; - $it.schemaPath = it.schemaPath + '.additionalItems'; - $it.errSchemaPath = it.errSchemaPath + '/additionalItems'; - out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') { for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true); - var $passData = $data + '[' + $idx + ']'; - $it.dataPathArr[$dataNxt] = $idx; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' }'; - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/multipleOf.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/multipleOf.js deleted file mode 100644 index 9d6401b8..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/multipleOf.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; -module.exports = function generate_multipleOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (!($isData || typeof $schema == 'number')) { - throw new Error($keyword + ' must be number'); - } - out += 'var division' + ($lvl) + ';if ('; - if ($isData) { - out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || '; - } - out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', '; - if (it.opts.multipleOfPrecision) { - out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' '; - } else { - out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') '; - } - out += ' ) '; - if ($isData) { - out += ' ) '; - } - out += ' ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be multiple of '; - if ($isData) { - out += '\' + ' + ($schemaValue); - } else { - out += '' + ($schemaValue) + '\''; - } - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/not.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/not.js deleted file mode 100644 index 6aea6599..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/not.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; -module.exports = function generate_not(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - $it.level++; - var $nextValid = 'valid' + $it.level; - if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.createErrors = false; - var $allErrorsOption; - if ($it.opts.allErrors) { - $allErrorsOption = $it.opts.allErrors; - $it.opts.allErrors = false; - } - out += ' ' + (it.validate($it)) + ' '; - $it.createErrors = true; - if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption; - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (' + ($nextValid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } '; - if (it.opts.allErrors) { - out += ' } '; - } - } else { - out += ' var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT be valid\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if ($breakOnError) { - out += ' if (false) { '; - } - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/oneOf.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/oneOf.js deleted file mode 100644 index 30988d5e..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/oneOf.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; -module.exports = function generate_oneOf(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $currentBaseId = $it.baseId, - $prevValid = 'prevValid' + $lvl, - $passingSchemas = 'passingSchemas' + $lvl; - out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var arr1 = $schema; - if (arr1) { - var $sch, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $sch = arr1[$i += 1]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $it.schema = $sch; - $it.schemaPath = $schemaPath + '[' + $i + ']'; - $it.errSchemaPath = $errSchemaPath + '/' + $i; - out += ' ' + (it.validate($it)) + ' '; - $it.baseId = $currentBaseId; - } else { - out += ' var ' + ($nextValid) + ' = true; '; - } - if ($i) { - out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { '; - $closingBraces += '}'; - } - out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }'; - } - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += '' + ($closingBraces) + 'if (!' + ($valid) + ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match exactly one schema in oneOf\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; return false; '; - } - } - out += '} else { errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }'; - if (it.opts.allErrors) { - out += ' } '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/pattern.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/pattern.js deleted file mode 100644 index 1d74d6b0..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/pattern.js +++ /dev/null @@ -1,75 +0,0 @@ -'use strict'; -module.exports = function generate_pattern(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema); - out += 'if ( '; - if ($isData) { - out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || '; - } - out += ' !' + ($regexp) + '.test(' + ($data) + ') ) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern: '; - if ($isData) { - out += '' + ($schemaValue); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should match pattern "'; - if ($isData) { - out += '\' + ' + ($schemaValue) + ' + \''; - } else { - out += '' + (it.util.escapeQuotes($schema)); - } - out += '"\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + (it.util.toQuotedString($schema)); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += '} '; - if ($breakOnError) { - out += ' else { '; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/properties.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/properties.js deleted file mode 100644 index d981a6a4..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/properties.js +++ /dev/null @@ -1,335 +0,0 @@ -'use strict'; -module.exports = function generate_properties(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl; - var $schemaKeys = Object.keys($schema || {}).filter(notProto), - $pProperties = it.schema.patternProperties || {}, - $pPropertyKeys = Object.keys($pProperties).filter(notProto), - $aProperties = it.schema.additionalProperties, - $someProperties = $schemaKeys.length || $pPropertyKeys.length, - $noAdditional = $aProperties === false, - $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length, - $removeAdditional = it.opts.removeAdditional, - $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - var $required = it.schema.required; - if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) { - var $requiredHash = it.util.toHash($required); - } - - function notProto(p) { - return p !== '__proto__'; - } - out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;'; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined;'; - } - if ($checkAdditional) { - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - if ($someProperties) { - out += ' var isAdditional' + ($lvl) + ' = !(false '; - if ($schemaKeys.length) { - if ($schemaKeys.length > 8) { - out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') '; - } else { - var arr1 = $schemaKeys; - if (arr1) { - var $propertyKey, i1 = -1, - l1 = arr1.length - 1; - while (i1 < l1) { - $propertyKey = arr1[i1 += 1]; - out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' '; - } - } - } - } - if ($pPropertyKeys.length) { - var arr2 = $pPropertyKeys; - if (arr2) { - var $pProperty, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $pProperty = arr2[$i += 1]; - out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') '; - } - } - } - out += ' ); if (isAdditional' + ($lvl) + ') { '; - } - if ($removeAdditional == 'all') { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - var $currentErrorPath = it.errorPath; - var $additionalProperty = '\' + ' + $key + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - } - if ($noAdditional) { - if ($removeAdditional) { - out += ' delete ' + ($data) + '[' + ($key) + ']; '; - } else { - out += ' ' + ($nextValid) + ' = false; '; - var $currErrSchemaPath = $errSchemaPath; - $errSchemaPath = it.errSchemaPath + '/additionalProperties'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is an invalid additional property'; - } else { - out += 'should NOT have additional properties'; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - if ($breakOnError) { - out += ' break; '; - } - } - } else if ($additionalIsSchema) { - if ($removeAdditional == 'failing') { - out += ' var ' + ($errs) + ' = errors; '; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; } '; - it.compositeRule = $it.compositeRule = $wasComposite; - } else { - $it.schema = $aProperties; - $it.schemaPath = it.schemaPath + '.additionalProperties'; - $it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; - $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - } - } - it.errorPath = $currentErrorPath; - } - if ($someProperties) { - out += ' } '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - var $useDefaults = it.opts.useDefaults && !it.compositeRule; - if ($schemaKeys.length) { - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - var $prop = it.util.getProperty($propertyKey), - $passData = $data + $prop, - $hasDefault = $useDefaults && $sch.default !== undefined; - $it.schema = $sch; - $it.schemaPath = $schemaPath + $prop; - $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); - $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); - $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - $code = it.util.varReplace($code, $nextData, $passData); - var $useData = $passData; - } else { - var $useData = $nextData; - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; '; - } - if ($hasDefault) { - out += ' ' + ($code) + ' '; - } else { - if ($requiredHash && $requiredHash[$propertyKey]) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = false; '; - var $currentErrorPath = it.errorPath, - $currErrSchemaPath = $errSchemaPath, - $missingProperty = it.util.escapeQuotes($propertyKey); - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - $errSchemaPath = it.errSchemaPath + '/required'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - $errSchemaPath = $currErrSchemaPath; - it.errorPath = $currentErrorPath; - out += ' } else { '; - } else { - if ($breakOnError) { - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { ' + ($nextValid) + ' = true; } else { '; - } else { - out += ' if (' + ($useData) + ' !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ' ) { '; - } - } - out += ' ' + ($code) + ' } '; - } - } - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - if ($pPropertyKeys.length) { - var arr4 = $pPropertyKeys; - if (arr4) { - var $pProperty, i4 = -1, - l4 = arr4.length - 1; - while (i4 < l4) { - $pProperty = arr4[i4 += 1]; - var $sch = $pProperties[$pProperty]; - if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) { - $it.schema = $sch; - $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); - $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty); - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { '; - $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); - var $passData = $data + '[' + $key + ']'; - $it.dataPathArr[$dataNxt] = $key; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - if ($breakOnError) { - out += ' if (!' + ($nextValid) + ') break; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else ' + ($nextValid) + ' = true; '; - } - out += ' } '; - if ($breakOnError) { - out += ' if (' + ($nextValid) + ') { '; - $closingBraces += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {'; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/propertyNames.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/propertyNames.js deleted file mode 100644 index 064a0ed8..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/propertyNames.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict'; -module.exports = function generate_propertyNames(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $errs = 'errs__' + $lvl; - var $it = it.util.copy(it); - var $closingBraces = ''; - $it.level++; - var $nextValid = 'valid' + $it.level; - out += 'var ' + ($errs) + ' = errors;'; - if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) { - $it.schema = $schema; - $it.schemaPath = $schemaPath; - $it.errSchemaPath = $errSchemaPath; - var $key = 'key' + $lvl, - $idx = 'idx' + $lvl, - $i = 'i' + $lvl, - $invalidName = '\' + ' + $key + ' + \'', - $dataNxt = $it.dataLevel = it.dataLevel + 1, - $nextData = 'data' + $dataNxt, - $dataProperties = 'dataProperties' + $lvl, - $ownProperties = it.opts.ownProperties, - $currentBaseId = it.baseId; - if ($ownProperties) { - out += ' var ' + ($dataProperties) + ' = undefined; '; - } - if ($ownProperties) { - out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; '; - } else { - out += ' for (var ' + ($key) + ' in ' + ($data) + ') { '; - } - out += ' var startErrs' + ($lvl) + ' = errors; '; - var $passData = $key; - var $wasComposite = it.compositeRule; - it.compositeRule = $it.compositeRule = true; - var $code = it.validate($it); - $it.baseId = $currentBaseId; - if (it.util.varOccurences($code, $nextData) < 2) { - out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' '; - } else { - out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' '; - } - it.compositeRule = $it.compositeRule = $wasComposite; - out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + ' 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) { - $required[$required.length] = $property; - } - } - } - } else { - var $required = $schema; - } - } - if ($isData || $required.length) { - var $currentErrorPath = it.errorPath, - $loopRequired = $isData || $required.length >= it.opts.loopRequired, - $ownProperties = it.opts.ownProperties; - if ($breakOnError) { - out += ' var missing' + ($lvl) + '; '; - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - out += ' var ' + ($valid) + ' = true; '; - if ($isData) { - out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {'; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined '; - if ($ownProperties) { - out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += '; if (!' + ($valid) + ') break; } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } else { - out += ' if ( '; - var arr2 = $required; - if (arr2) { - var $propertyKey, $i = -1, - l2 = arr2.length - 1; - while ($i < l2) { - $propertyKey = arr2[$i += 1]; - if ($i) { - out += ' || '; - } - var $prop = it.util.getProperty($propertyKey), - $useData = $data + $prop; - out += ' ( ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) '; - } - } - out += ') { '; - var $propertyPath = 'missing' + $lvl, - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - } - } else { - if ($loopRequired) { - if (!$isData) { - out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; '; - } - var $i = 'i' + $lvl, - $propertyPath = 'schema' + $lvl + '[' + $i + ']', - $missingProperty = '\' + ' + $propertyPath + ' + \''; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers); - } - if ($isData) { - out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { '; - } - out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } '; - if ($isData) { - out += ' } '; - } - } else { - var arr3 = $required; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $prop = it.util.getProperty($propertyKey), - $missingProperty = it.util.escapeQuotes($propertyKey), - $useData = $data + $prop; - if (it.opts._errorDataPathProperty) { - it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); - } - out += ' if ( ' + ($useData) + ' === undefined '; - if ($ownProperties) { - out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') '; - } - out += ') { var err = '; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \''; - if (it.opts._errorDataPathProperty) { - out += 'is a required property'; - } else { - out += 'should have required property \\\'' + ($missingProperty) + '\\\''; - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - out += '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } '; - } - } - } - } - it.errorPath = $currentErrorPath; - } else if ($breakOnError) { - out += ' if (true) {'; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/uniqueItems.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/uniqueItems.js deleted file mode 100644 index 0736a0ed..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/uniqueItems.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; -module.exports = function generate_uniqueItems(it, $keyword, $ruleType) { - var out = ' '; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - var $isData = it.opts.$data && $schema && $schema.$data, - $schemaValue; - if ($isData) { - out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; '; - $schemaValue = 'schema' + $lvl; - } else { - $schemaValue = $schema; - } - if (($schema || $isData) && it.opts.uniqueItems !== false) { - if ($isData) { - out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { '; - } - out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { '; - var $itemType = it.schema.items && it.schema.items.type, - $typeIsArray = Array.isArray($itemType); - if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) { - out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } '; - } else { - out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; '; - var $method = 'checkDataType' + ($typeIsArray ? 's' : ''); - out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; '; - if ($typeIsArray) { - out += ' if (typeof item == \'string\') item = \'"\' + item; '; - } - out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } '; - } - out += ' } '; - if ($isData) { - out += ' } '; - } - out += ' if (!' + ($valid) + ') { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } '; - if (it.opts.messages !== false) { - out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' '; - } - if (it.opts.verbose) { - out += ' , schema: '; - if ($isData) { - out += 'validate.schema' + ($schemaPath); - } else { - out += '' + ($schema); - } - out += ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - if ($breakOnError) { - out += ' else { '; - } - } else { - if ($breakOnError) { - out += ' if (true) { '; - } - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/validate.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/validate.js deleted file mode 100644 index af51dec3..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/dotjs/validate.js +++ /dev/null @@ -1,490 +0,0 @@ -'use strict'; -module.exports = function generate_validate(it, $keyword, $ruleType) { - var out = ''; - var $async = it.schema.$async === true, - $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'), - $id = it.self._getId(it.schema); - if (it.opts.strictKeywords) { - var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords); - if ($unknownKwd) { - var $keywordsMsg = 'unknown keyword: ' + $unknownKwd; - if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg); - else throw new Error($keywordsMsg); - } - } - if (it.isTop) { - out += ' var validate = '; - if ($async) { - it.async = true; - out += 'async '; - } - out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; '; - if ($id && (it.opts.sourceCode || it.opts.processCode)) { - out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' '; - } - } - if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) { - var $keyword = 'false schema'; - var $lvl = it.level; - var $dataLvl = it.dataLevel; - var $schema = it.schema[$keyword]; - var $schemaPath = it.schemaPath + it.util.getProperty($keyword); - var $errSchemaPath = it.errSchemaPath + '/' + $keyword; - var $breakOnError = !it.opts.allErrors; - var $errorKeyword; - var $data = 'data' + ($dataLvl || ''); - var $valid = 'valid' + $lvl; - if (it.schema === false) { - if (it.isTop) { - $breakOnError = true; - } else { - out += ' var ' + ($valid) + ' = false; '; - } - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} '; - if (it.opts.messages !== false) { - out += ' , message: \'boolean schema is false\' '; - } - if (it.opts.verbose) { - out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } else { - if (it.isTop) { - if ($async) { - out += ' return data; '; - } else { - out += ' validate.errors = null; return true; '; - } - } else { - out += ' var ' + ($valid) + ' = true; '; - } - } - if (it.isTop) { - out += ' }; return validate; '; - } - return out; - } - if (it.isTop) { - var $top = it.isTop, - $lvl = it.level = 0, - $dataLvl = it.dataLevel = 0, - $data = 'data'; - it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema)); - it.baseId = it.baseId || it.rootId; - delete it.isTop; - it.dataPathArr = [undefined]; - if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored in the schema root'; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - out += ' var vErrors = null; '; - out += ' var errors = 0; '; - out += ' if (rootData === undefined) rootData = data; '; - } else { - var $lvl = it.level, - $dataLvl = it.dataLevel, - $data = 'data' + ($dataLvl || ''); - if ($id) it.baseId = it.resolve.url(it.baseId, $id); - if ($async && !it.async) throw new Error('async schema in sync schema'); - out += ' var errs_' + ($lvl) + ' = errors;'; - } - var $valid = 'valid' + $lvl, - $breakOnError = !it.opts.allErrors, - $closingBraces1 = '', - $closingBraces2 = ''; - var $errorKeyword; - var $typeSchema = it.schema.type, - $typeIsArray = Array.isArray($typeSchema); - if ($typeSchema && it.opts.nullable && it.schema.nullable === true) { - if ($typeIsArray) { - if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null'); - } else if ($typeSchema != 'null') { - $typeSchema = [$typeSchema, 'null']; - $typeIsArray = true; - } - } - if ($typeIsArray && $typeSchema.length == 1) { - $typeSchema = $typeSchema[0]; - $typeIsArray = false; - } - if (it.schema.$ref && $refKeywords) { - if (it.opts.extendRefs == 'fail') { - throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)'); - } else if (it.opts.extendRefs !== true) { - $refKeywords = false; - it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"'); - } - } - if (it.schema.$comment && it.opts.$comment) { - out += ' ' + (it.RULES.all.$comment.code(it, '$comment')); - } - if ($typeSchema) { - if (it.opts.coerceTypes) { - var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema); - } - var $rulesGroup = it.RULES.types[$typeSchema]; - if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) { - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type', - $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType'; - out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { '; - if ($coerceToTypes) { - var $dataType = 'dataType' + $lvl, - $coerced = 'coerced' + $lvl; - out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; '; - if (it.opts.coerceTypes == 'array') { - out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; '; - } - out += ' var ' + ($coerced) + ' = undefined; '; - var $bracesCoercion = ''; - var arr1 = $coerceToTypes; - if (arr1) { - var $type, $i = -1, - l1 = arr1.length - 1; - while ($i < l1) { - $type = arr1[$i += 1]; - if ($i) { - out += ' if (' + ($coerced) + ' === undefined) { '; - $bracesCoercion += '}'; - } - if (it.opts.coerceTypes == 'array' && $type != 'array') { - out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; } '; - } - if ($type == 'string') { - out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; '; - } else if ($type == 'number' || $type == 'integer') { - out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' '; - if ($type == 'integer') { - out += ' && !(' + ($data) + ' % 1)'; - } - out += ')) ' + ($coerced) + ' = +' + ($data) + '; '; - } else if ($type == 'boolean') { - out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; '; - } else if ($type == 'null') { - out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; '; - } else if (it.opts.coerceTypes == 'array' && $type == 'array') { - out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; '; - } - } - } - out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) { '; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } else { '; - var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData', - $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty'; - out += ' ' + ($data) + ' = ' + ($coerced) + '; '; - if (!$dataLvl) { - out += 'if (' + ($parentData) + ' !== undefined)'; - } - out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } '; - } else { - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - } - out += ' } '; - } - } - if (it.schema.$ref && !$refKeywords) { - out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' '; - if ($breakOnError) { - out += ' } if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } else { - var arr2 = it.RULES; - if (arr2) { - var $rulesGroup, i2 = -1, - l2 = arr2.length - 1; - while (i2 < l2) { - $rulesGroup = arr2[i2 += 1]; - if ($shouldUseGroup($rulesGroup)) { - if ($rulesGroup.type) { - out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { '; - } - if (it.opts.useDefaults) { - if ($rulesGroup.type == 'object' && it.schema.properties) { - var $schema = it.schema.properties, - $schemaKeys = Object.keys($schema); - var arr3 = $schemaKeys; - if (arr3) { - var $propertyKey, i3 = -1, - l3 = arr3.length - 1; - while (i3 < l3) { - $propertyKey = arr3[i3 += 1]; - var $sch = $schema[$propertyKey]; - if ($sch.default !== undefined) { - var $passData = $data + it.util.getProperty($propertyKey); - if (it.compositeRule) { - if (it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored for: ' + $passData; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - } else { - out += ' if (' + ($passData) + ' === undefined '; - if (it.opts.useDefaults == 'empty') { - out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; - } - out += ' ) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) { - var arr4 = it.schema.items; - if (arr4) { - var $sch, $i = -1, - l4 = arr4.length - 1; - while ($i < l4) { - $sch = arr4[$i += 1]; - if ($sch.default !== undefined) { - var $passData = $data + '[' + $i + ']'; - if (it.compositeRule) { - if (it.opts.strictDefaults) { - var $defaultMsg = 'default is ignored for: ' + $passData; - if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg); - else throw new Error($defaultMsg); - } - } else { - out += ' if (' + ($passData) + ' === undefined '; - if (it.opts.useDefaults == 'empty') { - out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' '; - } - out += ' ) ' + ($passData) + ' = '; - if (it.opts.useDefaults == 'shared') { - out += ' ' + (it.useDefault($sch.default)) + ' '; - } else { - out += ' ' + (JSON.stringify($sch.default)) + ' '; - } - out += '; '; - } - } - } - } - } - } - var arr5 = $rulesGroup.rules; - if (arr5) { - var $rule, i5 = -1, - l5 = arr5.length - 1; - while (i5 < l5) { - $rule = arr5[i5 += 1]; - if ($shouldUseRule($rule)) { - var $code = $rule.code(it, $rule.keyword, $rulesGroup.type); - if ($code) { - out += ' ' + ($code) + ' '; - if ($breakOnError) { - $closingBraces1 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces1) + ' '; - $closingBraces1 = ''; - } - if ($rulesGroup.type) { - out += ' } '; - if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) { - out += ' else { '; - var $schemaPath = it.schemaPath + '.type', - $errSchemaPath = it.errSchemaPath + '/type'; - var $$outStack = $$outStack || []; - $$outStack.push(out); - out = ''; /* istanbul ignore else */ - if (it.createErrors !== false) { - out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \''; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' } '; - if (it.opts.messages !== false) { - out += ' , message: \'should be '; - if ($typeIsArray) { - out += '' + ($typeSchema.join(",")); - } else { - out += '' + ($typeSchema); - } - out += '\' '; - } - if (it.opts.verbose) { - out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' '; - } - out += ' } '; - } else { - out += ' {} '; - } - var __err = out; - out = $$outStack.pop(); - if (!it.compositeRule && $breakOnError) { - /* istanbul ignore if */ - if (it.async) { - out += ' throw new ValidationError([' + (__err) + ']); '; - } else { - out += ' validate.errors = [' + (__err) + ']; return false; '; - } - } else { - out += ' var err = ' + (__err) + '; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; '; - } - out += ' } '; - } - } - if ($breakOnError) { - out += ' if (errors === '; - if ($top) { - out += '0'; - } else { - out += 'errs_' + ($lvl); - } - out += ') { '; - $closingBraces2 += '}'; - } - } - } - } - } - if ($breakOnError) { - out += ' ' + ($closingBraces2) + ' '; - } - if ($top) { - if ($async) { - out += ' if (errors === 0) return data; '; - out += ' else throw new ValidationError(vErrors); '; - } else { - out += ' validate.errors = vErrors; '; - out += ' return errors === 0; '; - } - out += ' }; return validate;'; - } else { - out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';'; - } - - function $shouldUseGroup($rulesGroup) { - var rules = $rulesGroup.rules; - for (var i = 0; i < rules.length; i++) - if ($shouldUseRule(rules[i])) return true; - } - - function $shouldUseRule($rule) { - return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule)); - } - - function $ruleImplementsSomeKeyword($rule) { - var impl = $rule.implements; - for (var i = 0; i < impl.length; i++) - if (it.schema[impl[i]] !== undefined) return true; - } - return out; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/keyword.js b/conf/site/node_modules/sass-loader/node_modules/ajv/lib/keyword.js deleted file mode 100644 index 06da9a2d..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/lib/keyword.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict'; - -var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i; -var customRuleCode = require('./dotjs/custom'); -var definitionSchema = require('./definition_schema'); - -module.exports = { - add: addKeyword, - get: getKeyword, - remove: removeKeyword, - validate: validateKeyword -}; - - -/** - * Define custom keyword - * @this Ajv - * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords). - * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`. - * @return {Ajv} this for method chaining - */ -function addKeyword(keyword, definition) { - /* jshint validthis: true */ - /* eslint no-shadow: 0 */ - var RULES = this.RULES; - if (RULES.keywords[keyword]) - throw new Error('Keyword ' + keyword + ' is already defined'); - - if (!IDENTIFIER.test(keyword)) - throw new Error('Keyword ' + keyword + ' is not a valid identifier'); - - if (definition) { - this.validateKeyword(definition, true); - - var dataType = definition.type; - if (Array.isArray(dataType)) { - for (var i=0; i ../ajv-dist/bower.json - cd ../ajv-dist - - if [[ `git status --porcelain` ]]; then - echo "Changes detected. Updating master branch..." - git add -A - git commit -m "updated by travis build #$TRAVIS_BUILD_NUMBER" - git push --quiet origin master > /dev/null 2>&1 - fi - - echo "Publishing tag..." - - git tag $TRAVIS_TAG - git push --tags > /dev/null 2>&1 - - echo "Done" -fi diff --git a/conf/site/node_modules/sass-loader/node_modules/ajv/scripts/travis-gh-pages b/conf/site/node_modules/sass-loader/node_modules/ajv/scripts/travis-gh-pages deleted file mode 100755 index b3d4f3d0..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/ajv/scripts/travis-gh-pages +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ "$TRAVIS_BRANCH" == "master" && "$TRAVIS_PULL_REQUEST" == "false" && $TRAVIS_JOB_NUMBER =~ ".3" ]]; then - git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qE '\.md$|^LICENSE$|travis-gh-pages$' && { - rm -rf ../gh-pages - git clone -b gh-pages --single-branch https://${GITHUB_TOKEN}@github.com/ajv-validator/ajv.git ../gh-pages - mkdir -p ../gh-pages/_source - cp *.md ../gh-pages/_source - cp LICENSE ../gh-pages/_source - currentDir=$(pwd) - cd ../gh-pages - $currentDir/node_modules/.bin/gh-pages-generator - # remove logo from README - sed -i -E "s/]+ajv_logo[^>]+>//" index.md - git config user.email "$GIT_USER_EMAIL" - git config user.name "$GIT_USER_NAME" - git add . - git commit -am "updated by travis build #$TRAVIS_BUILD_NUMBER" - git push --quiet origin gh-pages > /dev/null 2>&1 - } -fi diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/LICENSE b/conf/site/node_modules/sass-loader/node_modules/neo-async/LICENSE deleted file mode 100644 index 4ec13d1f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2014-2018 Suguru Motegi -Based on Async.js, Copyright Caolan McMahon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/README.md b/conf/site/node_modules/sass-loader/node_modules/neo-async/README.md deleted file mode 100644 index d49e93cf..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/README.md +++ /dev/null @@ -1,273 +0,0 @@ -

Neo-Async

- -

- -

- -

- npm - Travis Status - Coverage Status - download - Code Quality: Javascript - Total Alerts - FOSSA -

- -Neo-Async is thought to be used as a drop-in replacement for [Async](https://github.com/caolan/async), it almost fully covers its functionality and runs [faster](#benchmark). - -Benchmark is [here](#benchmark)! - -Bluebird's benchmark is [here](https://github.com/suguru03/bluebird/tree/aigle/benchmark)! - -## Code Coverage -![coverage](https://raw.githubusercontent.com/wiki/suguru03/neo-async/images/coverage.png) - -## Installation - -### In a browser -```html - -``` - -### In an AMD loader -```js -require(['async'], function(async) {}); -``` - -### Promise and async/await - -I recommend to use [`Aigle`](https://github.com/suguru03/aigle). - -It is optimized for Promise handling and has almost the same functionality as `neo-async`. - -### Node.js - -#### standard - -```bash -$ npm install neo-async -``` -```js -var async = require('neo-async'); -``` - -#### replacement -```bash -$ npm install neo-async -$ ln -s ./node_modules/neo-async ./node_modules/async -``` -```js -var async = require('async'); -``` - -### Bower - -```bash -bower install neo-async -``` - -## Feature - -[JSDoc](http://suguru03.github.io/neo-async/doc/async.html) - -\* not in Async - -### Collections - -- [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) -- [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -- [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -- [`forEach`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) -- [`forEachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -- [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -- [`eachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) -- [`eachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -- [`forEachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) -- [`forEachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -- [`map`](http://suguru03.github.io/neo-async/doc/async.map.html) -- [`mapSeries`](http://suguru03.github.io/neo-async/doc/async.mapSeries.html) -- [`mapLimit`](http://suguru03.github.io/neo-async/doc/async.mapLimit.html) -- [`mapValues`](http://suguru03.github.io/neo-async/doc/async.mapValues.html) -- [`mapValuesSeries`](http://suguru03.github.io/neo-async/doc/async.mapValuesSeries.html) -- [`mapValuesLimit`](http://suguru03.github.io/neo-async/doc/async.mapValuesLimit.html) -- [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html) -- [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) -- [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) -- [`select`](http://suguru03.github.io/neo-async/doc/async.filter.html) -> [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html) -- [`selectSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) -> [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) -- [`selectLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) -> [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) -- [`reject`](http://suguru03.github.io/neo-async/doc/async.reject.html) -- [`rejectSeries`](http://suguru03.github.io/neo-async/doc/async.rejectSeries.html) -- [`rejectLimit`](http://suguru03.github.io/neo-async/doc/async.rejectLimit.html) -- [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html) -- [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) -- [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) -- [`find`](http://suguru03.github.io/neo-async/doc/async.detect.html) -> [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html) -- [`findSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) -> [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) -- [`findLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) -> [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) -- [`pick`](http://suguru03.github.io/neo-async/doc/async.pick.html) * -- [`pickSeries`](http://suguru03.github.io/neo-async/doc/async.pickSeries.html) * -- [`pickLimit`](http://suguru03.github.io/neo-async/doc/async.pickLimit.html) * -- [`omit`](http://suguru03.github.io/neo-async/doc/async.omit.html) * -- [`omitSeries`](http://suguru03.github.io/neo-async/doc/async.omitSeries.html) * -- [`omitLimit`](http://suguru03.github.io/neo-async/doc/async.omitLimit.html) * -- [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -- [`inject`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -- [`foldl`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -- [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) -- [`foldr`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) -> [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) -- [`transform`](http://suguru03.github.io/neo-async/doc/async.transform.html) -- [`transformSeries`](http://suguru03.github.io/neo-async/doc/async.transformSeries.html) * -- [`transformLimit`](http://suguru03.github.io/neo-async/doc/async.transformLimit.html) * -- [`sortBy`](http://suguru03.github.io/neo-async/doc/async.sortBy.html) -- [`sortBySeries`](http://suguru03.github.io/neo-async/doc/async.sortBySeries.html) * -- [`sortByLimit`](http://suguru03.github.io/neo-async/doc/async.sortByLimit.html) * -- [`some`](http://suguru03.github.io/neo-async/doc/async.some.html) -- [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) -- [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) -- [`any`](http://suguru03.github.io/neo-async/doc/async.some.html) -> [`some`](http://suguru03.github.io/neo-async/doc/async.some.html) -- [`anySeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) -> [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) -- [`anyLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) -> [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) -- [`every`](http://suguru03.github.io/neo-async/doc/async.every.html) -- [`everySeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) -- [`everyLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) -- [`all`](http://suguru03.github.io/neo-async/doc/async.every.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.every.html) -- [`allSeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) -- [`allLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) -- [`concat`](http://suguru03.github.io/neo-async/doc/async.concat.html) -- [`concatSeries`](http://suguru03.github.io/neo-async/doc/async.concatSeries.html) -- [`concatLimit`](http://suguru03.github.io/neo-async/doc/async.concatLimit.html) * - -### Control Flow - -- [`parallel`](http://suguru03.github.io/neo-async/doc/async.parallel.html) -- [`series`](http://suguru03.github.io/neo-async/doc/async.series.html) -- [`parallelLimit`](http://suguru03.github.io/neo-async/doc/async.series.html) -- [`tryEach`](http://suguru03.github.io/neo-async/doc/async.tryEach.html) -- [`waterfall`](http://suguru03.github.io/neo-async/doc/async.waterfall.html) -- [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) * -- [`angelfall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) -> [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) * -- [`whilst`](#whilst) -- [`doWhilst`](#doWhilst) -- [`until`](#until) -- [`doUntil`](#doUntil) -- [`during`](#during) -- [`doDuring`](#doDuring) -- [`forever`](#forever) -- [`compose`](#compose) -- [`seq`](#seq) -- [`applyEach`](#applyEach) -- [`applyEachSeries`](#applyEachSeries) -- [`queue`](#queue) -- [`priorityQueue`](#priorityQueue) -- [`cargo`](#cargo) -- [`auto`](#auto) -- [`autoInject`](#autoInject) -- [`retry`](#retry) -- [`retryable`](#retryable) -- [`iterator`](#iterator) -- [`times`](http://suguru03.github.io/neo-async/doc/async.times.html) -- [`timesSeries`](http://suguru03.github.io/neo-async/doc/async.timesSeries.html) -- [`timesLimit`](http://suguru03.github.io/neo-async/doc/async.timesLimit.html) -- [`race`](#race) - -### Utils -- [`apply`](#apply) -- [`setImmediate`](#setImmediate) -- [`nextTick`](#nextTick) -- [`memoize`](#memoize) -- [`unmemoize`](#unmemoize) -- [`ensureAsync`](#ensureAsync) -- [`constant`](#constant) -- [`asyncify`](#asyncify) -- [`wrapSync`](#asyncify) -> [`asyncify`](#asyncify) -- [`log`](#log) -- [`dir`](#dir) -- [`timeout`](http://suguru03.github.io/neo-async/doc/async.timeout.html) -- [`reflect`](#reflect) -- [`reflectAll`](#reflectAll) -- [`createLogger`](#createLogger) - -## Mode -- [`safe`](#safe) * -- [`fast`](#fast) * - -## Benchmark - -[Benchmark: Async vs Neo-Async](http://suguru03.hatenablog.com/entry/2016/06/10/135559) - -### How to check - -```bash -$ node perf -``` - -### Environment - -* Darwin 17.3.0 x64 -* Node.js v8.9.4 -* async v2.6.0 -* neo-async v2.5.0 -* benchmark v2.1.4 - -### Result - -The value is the ratio (Neo-Async/Async) of the average speed. - -#### Collections -|function|benchmark| -|---|--:| -|each/forEach|2.43| -|eachSeries/forEachSeries|1.75| -|eachLimit/forEachLimit|1.68| -|eachOf|3.29| -|eachOfSeries|1.50| -|eachOfLimit|1.59| -|map|3.95| -|mapSeries|1.81| -|mapLimit|1.27| -|mapValues|2.73| -|mapValuesSeries|1.59| -|mapValuesLimit|1.23| -|filter|3.00| -|filterSeries|1.74| -|filterLimit|1.17| -|reject|4.59| -|rejectSeries|2.31| -|rejectLimit|1.58| -|detect|4.30| -|detectSeries|1.86| -|detectLimit|1.32| -|reduce|1.82| -|transform|2.46| -|sortBy|4.08| -|some|2.19| -|someSeries|1.83| -|someLimit|1.32| -|every|2.09| -|everySeries|1.84| -|everyLimit|1.35| -|concat|3.79| -|concatSeries|4.45| - -#### Control Flow -|funciton|benchmark| -|---|--:| -|parallel|2.93| -|series|1.96| -|waterfall|1.29| -|whilst|1.00| -|doWhilst|1.12| -|until|1.12| -|doUntil|1.12| -|during|1.18| -|doDuring|2.42| -|times|4.25| -|auto|1.97| - - -## License -[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async?ref=badge_large) diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/all.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/all.js deleted file mode 100644 index dad54e7f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/all.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').all; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/allLimit.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/allLimit.js deleted file mode 100644 index d9d7aaa1..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/allLimit.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').allLimit; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/allSeries.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/allSeries.js deleted file mode 100644 index 2a7a8ba8..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/allSeries.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').allSeries; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/angelFall.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/angelFall.js deleted file mode 100644 index 476c23ec..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/angelFall.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').angelfall; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/any.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/any.js deleted file mode 100644 index d6b07bb5..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/any.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').any; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/anyLimit.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/anyLimit.js deleted file mode 100644 index 34114f88..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/anyLimit.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').anyLimit; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/anySeries.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/anySeries.js deleted file mode 100644 index bb3781fd..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/anySeries.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').anySeries; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/apply.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/apply.js deleted file mode 100644 index 41135e21..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/apply.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').apply; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEach.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEach.js deleted file mode 100644 index 292bd1c0..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEach.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').applyEach; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEachSeries.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEachSeries.js deleted file mode 100644 index 0aece7cd..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/applyEachSeries.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('./async').applyEachSeries; diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/async.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/async.js deleted file mode 100644 index e78eb168..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/async.js +++ /dev/null @@ -1,9184 +0,0 @@ -(function(global, factory) { - /*jshint -W030 */ - 'use strict'; - typeof exports === 'object' && typeof module !== 'undefined' - ? factory(exports) - : typeof define === 'function' && define.amd - ? define(['exports'], factory) - : global.async - ? factory((global.neo_async = global.neo_async || {})) - : factory((global.async = global.async || {})); -})(this, function(exports) { - 'use strict'; - - var noop = function noop() {}; - var throwError = function throwError() { - throw new Error('Callback was already called.'); - }; - - var DEFAULT_TIMES = 5; - var DEFAULT_INTERVAL = 0; - - var obj = 'object'; - var func = 'function'; - var isArray = Array.isArray; - var nativeKeys = Object.keys; - var nativePush = Array.prototype.push; - var iteratorSymbol = typeof Symbol === func && Symbol.iterator; - - var nextTick, asyncNextTick, asyncSetImmediate; - createImmediate(); - - /** - * @memberof async - * @namespace each - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.each(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(); - * }, num * 10); - * }; - * async.each(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.each(object, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(); - * }, num * 10); - * }; - * async.each(object, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - * @example - * - * // break - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num !== 2); - * }, num * 10); - * }; - * async.each(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 2] - * }); - * - */ - var each = createEach(arrayEach, baseEach, symbolEach); - - /** - * @memberof async - * @namespace map - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.map(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.map(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.map(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.map(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var map = createMap(arrayEachIndex, baseEachIndex, symbolEachIndex, true); - - /** - * @memberof async - * @namespace mapValues - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValues(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2 } - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValues(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2 } - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValues(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2 } - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValues(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2 } - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var mapValues = createMap(arrayEachIndex, baseEachKey, symbolEachKey, false); - - /** - * @memberof async - * @namespace filter - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filter(array, iterator, function(err, res) { - * console.log(res); // [1, 3]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filter(array, iterator, function(err, res) { - * console.log(res); // [1, 3]; - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filter(object, iterator, function(err, res) { - * console.log(res); // [1, 3]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filter(object, iterator, function(err, res) { - * console.log(res); // [1, 3]; - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var filter = createFilter(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue, true); - - /** - * @memberof async - * @namespace filterSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3] - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3] - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3] - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - var filterSeries = createFilterSeries(true); - - /** - * @memberof async - * @namespace filterLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3] - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.filterLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3] - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - var filterLimit = createFilterLimit(true); - - /** - * @memberof async - * @namespace reject - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.reject(array, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.reject(array, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.reject(object, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.reject(object, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var reject = createFilter(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue, false); - - /** - * @memberof async - * @namespace rejectSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectSeries(array, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectSeries(object, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectSeries(object, iterator, function(err, res) { - * console.log(res); // [2]; - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - var rejectSeries = createFilterSeries(false); - - /** - * @memberof async - * @namespace rejectLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [4, 2] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [4, 2] - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [4, 2] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.rejectLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [4, 2] - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - var rejectLimit = createFilterLimit(false); - - /** - * @memberof async - * @namespace detect - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detect(array, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detect(array, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detect(object, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detect(object, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 'a']] - * }); - * - */ - var detect = createDetect(arrayEachValue, baseEachValue, symbolEachValue, true); - - /** - * @memberof async - * @namespace detectSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectSeries(array, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectSeries(array, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectSeries(object, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectSeries(object, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 'a']] - * }); - * - */ - var detectSeries = createDetectSeries(true); - - /** - * @memberof async - * @namespace detectLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectLimit(array, 2, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectLimit(array, 2, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectLimit(object, 2, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.detectLimit(object, 2, iterator, function(err, res) { - * console.log(res); // 1 - * console.log(order); // [[1, 'a']] - * }); - * - */ - var detectLimit = createDetectLimit(true); - - /** - * @memberof async - * @namespace every - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.every(array, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.every(array, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 0], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.every(object, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.every(object, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 'a'], [2, 'c']] - * }); - * - */ - var every = createEvery(arrayEachValue, baseEachValue, symbolEachValue); - - /** - * @memberof async - * @namespace everySeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everySeries(array, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everySeries(array, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everySeries(object, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everySeries(object, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 'a'], [3, 'b'] [2, 'c']] - * }); - * - */ - var everySeries = createEverySeries(); - - /** - * @memberof async - * @namespace everyLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everyLimit(array, 2, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 3, 5, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everyLimit(array, 2, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everyLimit(object, 2, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [1, 3, 5, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.everyLimit(object, 2, iterator, function(err, res) { - * console.log(res); // false - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e']] - * }); - * - */ - var everyLimit = createEveryLimit(); - - /** - * @memberof async - * @namespace pick - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pick(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3 } - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pick(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3 } - * console.log(order); // [[0, 1], [2, 2], [3, 1], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pick(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3 } - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pick(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3 } - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] - * }); - * - */ - var pick = createPick(arrayEachIndexValue, baseEachKeyValue, symbolEachKeyValue, true); - - /** - * @memberof async - * @namespace pickSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickSeries(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3 } - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickSeries(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3 } - * console.log(order); // [[0, 1], [3, 1], [2, 2], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickSeries(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3 } - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickSeries(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3 } - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c'], [4, 'd']] - * }); - * - */ - var pickSeries = createPickSeries(true); - - /** - * @memberof async - * @namespace pickLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 5, '2': 3 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 5, '2': 3 } - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 5, c: 3 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.pickLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 5, c: 3 } - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - var pickLimit = createPickLimit(true); - - /** - * @memberof async - * @namespace omit - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omit(array, iterator, function(err, res) { - * console.log(res); // { '2': 2, '3': 4 } - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omit(array, iterator, function(err, res) { - * console.log(res); // { '2': 2, '3': 4 } - * console.log(order); // [[0, 1], [2, 2], [3, 1], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omit(object, iterator, function(err, res) { - * console.log(res); // { c: 2, d: 4 } - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omit(object, iterator, function(err, res) { - * console.log(res); // { c: 2, d: 4 } - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] - * }); - * - */ - var omit = createPick(arrayEachIndexValue, baseEachKeyValue, symbolEachKeyValue, false); - - /** - * @memberof async - * @namespace omitSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitSeries(array, iterator, function(err, res) { - * console.log(res); // { '2': 2, '3': 4 } - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2, 4]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitSeries(array, iterator, function(err, res) { - * console.log(res); // { '2': 2, '3': 4 } - * console.log(order); // [[0, 1], [3, 1], [2, 2], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitSeries(object, iterator, function(err, res) { - * console.log(res); // { c: 2, d: 4 } - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitSeries(object, iterator, function(err, res) { - * console.log(res); // { c: 2, d: 4 } - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c'], [4, 'd']] - * }); - * - */ - var omitSeries = createPickSeries(false); - - /** - * @memberof async - * @namespace omitLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '3': 4, '4': 2 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '3': 4, '4': 2 } - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { d: 4, e: 2 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.omitLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { d: 4, e: 2 } - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - var omitLimit = createPickLimit(false); - - /** - * @memberof async - * @namespace transform - * @param {Array|Object} collection - * @param {Array|Object|Function} [accumulator] - * @param {Function} [iterator] - * @param {Function} [callback] - * @example - * - * // array - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num) - * done(); - * }, num * 10); - * }; - * async.transform(collection, iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4] - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // array with index and accumulator - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * result[index] = num; - * done(); - * }, num * 10); - * }; - * async.transform(collection, {}, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2, '3': 4 } - * console.log(order); // [[1, 0], [2, 2], [3, 1], [4, 3]] - * }); - * - * @example - * - * // object with accumulator - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num); - * done(); - * }, num * 10); - * }; - * async.transform(collection, [], iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4] - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * result[key] = num; - * done(); - * }, num * 10); - * }; - * async.transform(collection, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2, d: 4 } - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] - * }); - * - */ - var transform = createTransform(arrayEachResult, baseEachResult, symbolEachResult); - - /** - * @memberof async - * @namespace sortBy - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortBy(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.sortBy(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortBy(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.sortBy(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var sortBy = createSortBy(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue); - - /** - * @memberof async - * @namespace concat - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concat(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3]; - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, [num]); - * }, num * 10); - * }; - * async.concat(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 0], [2, 2], [3, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concat(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [1, 2, 3] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, [num]); - * }, num * 10); - * }; - * async.concat(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] - * }); - * - */ - var concat = createConcat(arrayEachIndex, baseEachIndex, symbolEachIndex); - - /** - * @memberof async - * @namespace groupBy - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [4.2, 6.4, 6.1]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBy(array, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } - * console.log(order); // [4.2, 6.1, 6.4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [4.2, 6.4, 6.1]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBy(array, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } - * console.log(order); // [[4.2, 0], [6.1, 2], [6.4, 1]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 4.2, b: 6.4, c: 6.1 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBy(object, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } - * console.log(order); // [4.2, 6.1, 6.4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 4.2, b: 6.4, c: 6.1 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBy(object, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } - * console.log(order); // [[4.2, 'a'], [6.1, 'c'], [6.4, 'b']] - * }); - * - */ - var groupBy = createGroupBy(arrayEachValue, baseEachValue, symbolEachValue); - - /** - * @memberof async - * @namespace parallel - * @param {Array|Object} tasks - functions - * @param {Function} callback - * @example - * - * var order = []; - * var tasks = [ - * function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 30); - * }, - * function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 40); - * }, - * function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 20); - * } - * ]; - * async.parallel(tasks, function(err, res) { - * console.log(res); // [1, 2, 3, 4]; - * console.log(order); // [1, 4, 2, 3] - * }); - * - * @example - * - * var order = []; - * var tasks = { - * 'a': function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * 'b': function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 30); - * }, - * 'c': function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 40); - * }, - * 'd': function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 20); - * } - * }; - * async.parallel(tasks, function(err, res) { - * console.log(res); // { a: 1, b: 2, c: 3, d:4 } - * console.log(order); // [1, 4, 2, 3] - * }); - * - */ - var parallel = createParallel(arrayEachFunc, baseEachFunc); - - /** - * @memberof async - * @namespace applyEach - */ - var applyEach = createApplyEach(map); - - /** - * @memberof async - * @namespace applyEachSeries - */ - var applyEachSeries = createApplyEach(mapSeries); - - /** - * @memberof async - * @namespace log - */ - var log = createLogger('log'); - - /** - * @memberof async - * @namespace dir - */ - var dir = createLogger('dir'); - - /** - * @version 2.6.2 - * @namespace async - */ - var index = { - VERSION: '2.6.2', - - // Collections - each: each, - eachSeries: eachSeries, - eachLimit: eachLimit, - forEach: each, - forEachSeries: eachSeries, - forEachLimit: eachLimit, - eachOf: each, - eachOfSeries: eachSeries, - eachOfLimit: eachLimit, - forEachOf: each, - forEachOfSeries: eachSeries, - forEachOfLimit: eachLimit, - map: map, - mapSeries: mapSeries, - mapLimit: mapLimit, - mapValues: mapValues, - mapValuesSeries: mapValuesSeries, - mapValuesLimit: mapValuesLimit, - filter: filter, - filterSeries: filterSeries, - filterLimit: filterLimit, - select: filter, - selectSeries: filterSeries, - selectLimit: filterLimit, - reject: reject, - rejectSeries: rejectSeries, - rejectLimit: rejectLimit, - detect: detect, - detectSeries: detectSeries, - detectLimit: detectLimit, - find: detect, - findSeries: detectSeries, - findLimit: detectLimit, - pick: pick, - pickSeries: pickSeries, - pickLimit: pickLimit, - omit: omit, - omitSeries: omitSeries, - omitLimit: omitLimit, - reduce: reduce, - inject: reduce, - foldl: reduce, - reduceRight: reduceRight, - foldr: reduceRight, - transform: transform, - transformSeries: transformSeries, - transformLimit: transformLimit, - sortBy: sortBy, - sortBySeries: sortBySeries, - sortByLimit: sortByLimit, - some: some, - someSeries: someSeries, - someLimit: someLimit, - any: some, - anySeries: someSeries, - anyLimit: someLimit, - every: every, - everySeries: everySeries, - everyLimit: everyLimit, - all: every, - allSeries: everySeries, - allLimit: everyLimit, - concat: concat, - concatSeries: concatSeries, - concatLimit: concatLimit, - groupBy: groupBy, - groupBySeries: groupBySeries, - groupByLimit: groupByLimit, - - // Control Flow - parallel: parallel, - series: series, - parallelLimit: parallelLimit, - tryEach: tryEach, - waterfall: waterfall, - angelFall: angelFall, - angelfall: angelFall, - whilst: whilst, - doWhilst: doWhilst, - until: until, - doUntil: doUntil, - during: during, - doDuring: doDuring, - forever: forever, - compose: compose, - seq: seq, - applyEach: applyEach, - applyEachSeries: applyEachSeries, - queue: queue, - priorityQueue: priorityQueue, - cargo: cargo, - auto: auto, - autoInject: autoInject, - retry: retry, - retryable: retryable, - iterator: iterator, - times: times, - timesSeries: timesSeries, - timesLimit: timesLimit, - race: race, - - // Utils - apply: apply, - nextTick: asyncNextTick, - setImmediate: asyncSetImmediate, - memoize: memoize, - unmemoize: unmemoize, - ensureAsync: ensureAsync, - constant: constant, - asyncify: asyncify, - wrapSync: asyncify, - log: log, - dir: dir, - reflect: reflect, - reflectAll: reflectAll, - timeout: timeout, - createLogger: createLogger, - - // Mode - safe: safe, - fast: fast - }; - - exports['default'] = index; - baseEachSync( - index, - function(func, key) { - exports[key] = func; - }, - nativeKeys(index) - ); - - /** - * @private - */ - function createImmediate(safeMode) { - var delay = function delay(fn) { - var args = slice(arguments, 1); - setTimeout(function() { - fn.apply(null, args); - }); - }; - asyncSetImmediate = typeof setImmediate === func ? setImmediate : delay; - if (typeof process === obj && typeof process.nextTick === func) { - nextTick = /^v0.10/.test(process.version) ? asyncSetImmediate : process.nextTick; - asyncNextTick = /^v0/.test(process.version) ? asyncSetImmediate : process.nextTick; - } else { - asyncNextTick = nextTick = asyncSetImmediate; - } - if (safeMode === false) { - nextTick = function(cb) { - cb(); - }; - } - } - - /* sync functions based on lodash */ - - /** - * Converts `arguments` to an array. - * - * @private - * @param {Array} array = The array to slice. - */ - function createArray(array) { - var index = -1; - var size = array.length; - var result = Array(size); - - while (++index < size) { - result[index] = array[index]; - } - return result; - } - - /** - * Create an array from `start` - * - * @private - * @param {Array} array - The array to slice. - * @param {number} start - The start position. - */ - function slice(array, start) { - var end = array.length; - var index = -1; - var size = end - start; - if (size <= 0) { - return []; - } - var result = Array(size); - - while (++index < size) { - result[index] = array[index + start]; - } - return result; - } - - /** - * @private - * @param {Object} object - */ - function objectClone(object) { - var keys = nativeKeys(object); - var size = keys.length; - var index = -1; - var result = {}; - - while (++index < size) { - var key = keys[index]; - result[key] = object[key]; - } - return result; - } - - /** - * Create an array with all falsey values removed. - * - * @private - * @param {Array} array - The array to compact. - */ - function compact(array) { - var index = -1; - var size = array.length; - var result = []; - - while (++index < size) { - var value = array[index]; - if (value) { - result[result.length] = value; - } - } - return result; - } - - /** - * Create an array of reverse sequence. - * - * @private - * @param {Array} array - The array to reverse. - */ - function reverse(array) { - var index = -1; - var size = array.length; - var result = Array(size); - var resIndex = size; - - while (++index < size) { - result[--resIndex] = array[index]; - } - return result; - } - - /** - * Checks if key exists in object property. - * - * @private - * @param {Object} object - The object to inspect. - * @param {string} key - The key to check. - */ - function has(object, key) { - return object.hasOwnProperty(key); - } - - /** - * Check if target exists in array. - * @private - * @param {Array} array - * @param {*} target - */ - function notInclude(array, target) { - var index = -1; - var size = array.length; - - while (++index < size) { - if (array[index] === target) { - return false; - } - } - return true; - } - - /** - * @private - * @param {Array} array - The array to iterate over. - * @param {Function} iterator - The function invoked per iteration. - */ - function arrayEachSync(array, iterator) { - var index = -1; - var size = array.length; - - while (++index < size) { - iterator(array[index], index); - } - return array; - } - - /** - * @private - * @param {Object} object - The object to iterate over. - * @param {Function} iterator - The function invoked per iteration. - * @param {Array} keys - */ - function baseEachSync(object, iterator, keys) { - var index = -1; - var size = keys.length; - - while (++index < size) { - var key = keys[index]; - iterator(object[key], key); - } - return object; - } - - /** - * @private - * @param {number} n - * @param {Function} iterator - */ - function timesSync(n, iterator) { - var index = -1; - while (++index < n) { - iterator(index); - } - } - - /** - * @private - * @param {Array} array - * @param {number[]} criteria - */ - function sortByCriteria(array, criteria) { - var l = array.length; - var indices = Array(l); - var i; - for (i = 0; i < l; i++) { - indices[i] = i; - } - quickSort(criteria, 0, l - 1, indices); - var result = Array(l); - for (var n = 0; n < l; n++) { - i = indices[n]; - result[n] = i === undefined ? array[n] : array[i]; - } - return result; - } - - function partition(array, i, j, mid, indices) { - var l = i; - var r = j; - while (l <= r) { - i = l; - while (l < r && array[l] < mid) { - l++; - } - while (r >= i && array[r] >= mid) { - r--; - } - if (l > r) { - break; - } - swap(array, indices, l++, r--); - } - return l; - } - - function swap(array, indices, l, r) { - var n = array[l]; - array[l] = array[r]; - array[r] = n; - var i = indices[l]; - indices[l] = indices[r]; - indices[r] = i; - } - - function quickSort(array, i, j, indices) { - if (i === j) { - return; - } - var k = i; - while (++k <= j && array[i] === array[k]) { - var l = k - 1; - if (indices[l] > indices[k]) { - var index = indices[l]; - indices[l] = indices[k]; - indices[k] = index; - } - } - if (k > j) { - return; - } - var p = array[i] > array[k] ? i : k; - k = partition(array, i, j, array[p], indices); - quickSort(array, i, k - 1, indices); - quickSort(array, k, j, indices); - } - - /** - * @Private - */ - function makeConcatResult(array) { - var result = []; - arrayEachSync(array, function(value) { - if (value === noop) { - return; - } - if (isArray(value)) { - nativePush.apply(result, value); - } else { - result.push(value); - } - }); - return result; - } - - /* async functions */ - - /** - * @private - */ - function arrayEach(array, iterator, callback) { - var index = -1; - var size = array.length; - - if (iterator.length === 3) { - while (++index < size) { - iterator(array[index], index, onlyOnce(callback)); - } - } else { - while (++index < size) { - iterator(array[index], onlyOnce(callback)); - } - } - } - - /** - * @private - */ - function baseEach(object, iterator, callback, keys) { - var key; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - iterator(object[key], key, onlyOnce(callback)); - } - } else { - while (++index < size) { - iterator(object[keys[index]], onlyOnce(callback)); - } - } - } - - /** - * @private - */ - function symbolEach(collection, iterator, callback) { - var iter = collection[iteratorSymbol](); - var index = 0; - var item; - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - iterator(item.value, index++, onlyOnce(callback)); - } - } else { - while ((item = iter.next()).done === false) { - index++; - iterator(item.value, onlyOnce(callback)); - } - } - return index; - } - - /** - * @private - */ - function arrayEachResult(array, result, iterator, callback) { - var index = -1; - var size = array.length; - - if (iterator.length === 4) { - while (++index < size) { - iterator(result, array[index], index, onlyOnce(callback)); - } - } else { - while (++index < size) { - iterator(result, array[index], onlyOnce(callback)); - } - } - } - - /** - * @private - */ - function baseEachResult(object, result, iterator, callback, keys) { - var key; - var index = -1; - var size = keys.length; - - if (iterator.length === 4) { - while (++index < size) { - key = keys[index]; - iterator(result, object[key], key, onlyOnce(callback)); - } - } else { - while (++index < size) { - iterator(result, object[keys[index]], onlyOnce(callback)); - } - } - } - - /** - * @private - */ - function symbolEachResult(collection, result, iterator, callback) { - var item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 4) { - while ((item = iter.next()).done === false) { - iterator(result, item.value, index++, onlyOnce(callback)); - } - } else { - while ((item = iter.next()).done === false) { - index++; - iterator(result, item.value, onlyOnce(callback)); - } - } - return index; - } - - /** - * @private - */ - function arrayEachFunc(array, createCallback) { - var index = -1; - var size = array.length; - - while (++index < size) { - array[index](createCallback(index)); - } - } - - /** - * @private - */ - function baseEachFunc(object, createCallback, keys) { - var key; - var index = -1; - var size = keys.length; - - while (++index < size) { - key = keys[index]; - object[key](createCallback(key)); - } - } - - /** - * @private - */ - function arrayEachIndex(array, iterator, createCallback) { - var index = -1; - var size = array.length; - - if (iterator.length === 3) { - while (++index < size) { - iterator(array[index], index, createCallback(index)); - } - } else { - while (++index < size) { - iterator(array[index], createCallback(index)); - } - } - } - - /** - * @private - */ - function baseEachIndex(object, iterator, createCallback, keys) { - var key; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - iterator(object[key], key, createCallback(index)); - } - } else { - while (++index < size) { - iterator(object[keys[index]], createCallback(index)); - } - } - } - - /** - * @private - */ - function symbolEachIndex(collection, iterator, createCallback) { - var item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - iterator(item.value, index, createCallback(index++)); - } - } else { - while ((item = iter.next()).done === false) { - iterator(item.value, createCallback(index++)); - } - } - return index; - } - - /** - * @private - */ - function baseEachKey(object, iterator, createCallback, keys) { - var key; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - iterator(object[key], key, createCallback(key)); - } - } else { - while (++index < size) { - key = keys[index]; - iterator(object[key], createCallback(key)); - } - } - } - - /** - * @private - */ - function symbolEachKey(collection, iterator, createCallback) { - var item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - iterator(item.value, index, createCallback(index++)); - } - } else { - while ((item = iter.next()).done === false) { - iterator(item.value, createCallback(index++)); - } - } - return index; - } - - /** - * @private - */ - function arrayEachValue(array, iterator, createCallback) { - var value; - var index = -1; - var size = array.length; - - if (iterator.length === 3) { - while (++index < size) { - value = array[index]; - iterator(value, index, createCallback(value)); - } - } else { - while (++index < size) { - value = array[index]; - iterator(value, createCallback(value)); - } - } - } - - /** - * @private - */ - function baseEachValue(object, iterator, createCallback, keys) { - var key, value; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - value = object[key]; - iterator(value, key, createCallback(value)); - } - } else { - while (++index < size) { - value = object[keys[index]]; - iterator(value, createCallback(value)); - } - } - } - - /** - * @private - */ - function symbolEachValue(collection, iterator, createCallback) { - var value, item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - value = item.value; - iterator(value, index++, createCallback(value)); - } - } else { - while ((item = iter.next()).done === false) { - index++; - value = item.value; - iterator(value, createCallback(value)); - } - } - return index; - } - - /** - * @private - */ - function arrayEachIndexValue(array, iterator, createCallback) { - var value; - var index = -1; - var size = array.length; - - if (iterator.length === 3) { - while (++index < size) { - value = array[index]; - iterator(value, index, createCallback(index, value)); - } - } else { - while (++index < size) { - value = array[index]; - iterator(value, createCallback(index, value)); - } - } - } - - /** - * @private - */ - function baseEachIndexValue(object, iterator, createCallback, keys) { - var key, value; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - value = object[key]; - iterator(value, key, createCallback(index, value)); - } - } else { - while (++index < size) { - value = object[keys[index]]; - iterator(value, createCallback(index, value)); - } - } - } - - /** - * @private - */ - function symbolEachIndexValue(collection, iterator, createCallback) { - var value, item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - value = item.value; - iterator(value, index, createCallback(index++, value)); - } - } else { - while ((item = iter.next()).done === false) { - value = item.value; - iterator(value, createCallback(index++, value)); - } - } - return index; - } - - /** - * @private - */ - function baseEachKeyValue(object, iterator, createCallback, keys) { - var key, value; - var index = -1; - var size = keys.length; - - if (iterator.length === 3) { - while (++index < size) { - key = keys[index]; - value = object[key]; - iterator(value, key, createCallback(key, value)); - } - } else { - while (++index < size) { - key = keys[index]; - value = object[key]; - iterator(value, createCallback(key, value)); - } - } - } - - /** - * @private - */ - function symbolEachKeyValue(collection, iterator, createCallback) { - var value, item; - var index = 0; - var iter = collection[iteratorSymbol](); - - if (iterator.length === 3) { - while ((item = iter.next()).done === false) { - value = item.value; - iterator(value, index, createCallback(index++, value)); - } - } else { - while ((item = iter.next()).done === false) { - value = item.value; - iterator(value, createCallback(index++, value)); - } - } - return index; - } - - /** - * @private - * @param {Function} func - */ - function onlyOnce(func) { - return function(err, res) { - var fn = func; - func = throwError; - fn(err, res); - }; - } - - /** - * @private - * @param {Function} func - */ - function once(func) { - return function(err, res) { - var fn = func; - func = noop; - fn(err, res); - }; - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - */ - function createEach(arrayEach, baseEach, symbolEach) { - return function each(collection, iterator, callback) { - callback = once(callback || noop); - var size, keys; - var completed = 0; - if (isArray(collection)) { - size = collection.length; - arrayEach(collection, iterator, done); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = symbolEach(collection, iterator, done); - size && size === completed && callback(null); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - baseEach(collection, iterator, done, keys); - } - if (!size) { - callback(null); - } - - function done(err, bool) { - if (err) { - callback = once(callback); - callback(err); - } else if (++completed === size) { - callback(null); - } else if (bool === false) { - callback = once(callback); - callback(null); - } - } - }; - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - */ - function createMap(arrayEach, baseEach, symbolEach, useArray) { - var init, clone; - if (useArray) { - init = Array; - clone = createArray; - } else { - init = function() { - return {}; - }; - clone = objectClone; - } - - return function(collection, iterator, callback) { - callback = callback || noop; - var size, keys, result; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = init(size); - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - // TODO: size could be changed - result = init(0); - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, result); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - result = init(size); - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - callback(null, init()); - } - - function createCallback(key) { - return function done(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - callback = once(callback); - callback(err, clone(result)); - return; - } - result[key] = res; - key = null; - if (++completed === size) { - callback(null, result); - } - }; - } - }; - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - * @param {boolean} bool - */ - function createFilter(arrayEach, baseEach, symbolEach, bool) { - return function(collection, iterator, callback) { - callback = callback || noop; - var size, keys, result; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = Array(size); - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - result = []; - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, compact(result)); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - result = Array(size); - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - return callback(null, []); - } - - function createCallback(index, value) { - return function done(err, res) { - if (index === null) { - throwError(); - } - if (err) { - index = null; - callback = once(callback); - callback(err); - return; - } - if (!!res === bool) { - result[index] = value; - } - index = null; - if (++completed === size) { - callback(null, compact(result)); - } - }; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createFilterSeries(bool) { - return function(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, value, keys, iter, item, iterate; - var sync = false; - var completed = 0; - var result = []; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, []); - } - iterate(); - - function arrayIterator() { - value = collection[completed]; - iterator(value, done); - } - - function arrayIteratorWithIndex() { - value = collection[completed]; - iterator(value, completed, done); - } - - function symbolIterator() { - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, completed, done); - } - - function objectIterator() { - key = keys[completed]; - value = collection[key]; - iterator(value, done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - value = collection[key]; - iterator(value, key, done); - } - - function done(err, res) { - if (err) { - callback(err); - return; - } - if (!!res === bool) { - result[result.length] = value; - } - if (++completed === size) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createFilterLimit(bool) { - return function(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, value, keys, iter, item, iterate, result; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - result = []; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, []); - } - result = result || Array(size); - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, createCallback(value, index)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, index, createCallback(value, index)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, compact(result)); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, started, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, compact(result)); - } - } - - function objectIterator() { - index = started++; - if (index < size) { - value = collection[keys[index]]; - iterator(value, createCallback(value, index)); - } - } - - function objectIteratorWithKey() { - index = started++; - if (index < size) { - key = keys[index]; - value = collection[key]; - iterator(value, key, createCallback(value, index)); - } - } - - function createCallback(value, index) { - return function(err, res) { - if (index === null) { - throwError(); - } - if (err) { - index = null; - iterate = noop; - callback = once(callback); - callback(err); - return; - } - if (!!res === bool) { - result[index] = value; - } - index = null; - if (++completed === size) { - callback = onlyOnce(callback); - callback(null, compact(result)); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - }; - } - - /** - * @memberof async - * @namespace eachSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.eachSeries(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(); - * }, num * 10); - * }; - * async.eachSeries(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.eachSeries(object, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(); - * }, num * 10); - * }; - * async.eachSeries(object, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b']] - * }); - * - * @example - * - * // break - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num !== 3); - * }, num * 10); - * }; - * async.eachSeries(array, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3] - * }); - */ - function eachSeries(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, keys, iter, item, iterate; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null); - } - iterate(); - - function arrayIterator() { - iterator(collection[completed], done); - } - - function arrayIteratorWithIndex() { - iterator(collection[completed], completed, done); - } - - function symbolIterator() { - item = iter.next(); - item.done ? callback(null) : iterator(item.value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - item.done ? callback(null) : iterator(item.value, completed, done); - } - - function objectIterator() { - iterator(collection[keys[completed]], done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - iterator(collection[key], key, done); - } - - function done(err, bool) { - if (err) { - callback(err); - } else if (++completed === size || bool === false) { - iterate = throwError; - callback(null); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace eachLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.eachLimit(array, 2, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(); - * }, num * 10); - * }; - * async.eachLimit(array, 2, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(); - * }, num * 10); - * }; - * async.eachLimit(object, 2, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(); - * }, num * 10); - * }; - * async.eachLimit(object, 2, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - * @example - * - * // break - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num !== 5); - * }, num * 10); - * }; - * async.eachLimit(array, 2, iterator, function(err, res) { - * console.log(res); // undefined - * console.log(order); // [1, 3, 5] - * }); - * - */ - function eachLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, keys, iter, item, iterate; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } else { - return callback(null); - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - if (started < size) { - iterator(collection[started++], done); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - iterator(collection[index], index, done); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - started++; - iterator(item.value, done); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, started++, done); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null); - } - } - - function objectIterator() { - if (started < size) { - iterator(collection[keys[started++]], done); - } - } - - function objectIteratorWithKey() { - index = started++; - if (index < size) { - key = keys[index]; - iterator(collection[key], key, done); - } - } - - function done(err, bool) { - if (err || bool === false) { - iterate = noop; - callback = once(callback); - callback(err); - } else if (++completed === size) { - iterator = noop; - iterate = throwError; - callback = onlyOnce(callback); - callback(null); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace mapSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.mapSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.mapSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - function mapSeries(collection, iterator, callback) { - callback = callback || noop; - var size, key, keys, iter, item, result, iterate; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - result = []; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, []); - } - result = result || Array(size); - iterate(); - - function arrayIterator() { - iterator(collection[completed], done); - } - - function arrayIteratorWithIndex() { - iterator(collection[completed], completed, done); - } - - function symbolIterator() { - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, completed, done); - } - - function objectIterator() { - iterator(collection[keys[completed]], done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - iterator(collection[key], key, done); - } - - function done(err, res) { - if (err) { - iterate = throwError; - callback = onlyOnce(callback); - callback(err, createArray(result)); - return; - } - result[completed] = res; - if (++completed === size) { - iterate = throwError; - callback(null, result); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace mapLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3, 4, 2] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.mapLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3, 4, 2] - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3, 4, 2] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.mapLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 5, 3, 4, 2] - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - function mapLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, keys, iter, item, result, iterate; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - result = []; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, []); - } - result = result || Array(size); - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - iterator(collection[index], createCallback(index)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - iterator(collection[index], index, createCallback(index)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, started, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function objectIterator() { - index = started++; - if (index < size) { - iterator(collection[keys[index]], createCallback(index)); - } - } - - function objectIteratorWithKey() { - index = started++; - if (index < size) { - key = keys[index]; - iterator(collection[key], key, createCallback(index)); - } - } - - function createCallback(index) { - return function(err, res) { - if (index === null) { - throwError(); - } - if (err) { - index = null; - iterate = noop; - callback = once(callback); - callback(err, createArray(result)); - return; - } - result[index] = res; - index = null; - if (++completed === size) { - iterate = throwError; - callback(null, result); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @memberof async - * @namespace mapValuesSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesSeries(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2 } - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesSeries(array, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2 } - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesSeries(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2 } - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesSeries(object, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2 } - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - function mapValuesSeries(collection, iterator, callback) { - callback = callback || noop; - var size, key, keys, iter, item, iterate; - var sync = false; - var result = {}; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, result); - } - iterate(); - - function arrayIterator() { - key = completed; - iterator(collection[completed], done); - } - - function arrayIteratorWithIndex() { - key = completed; - iterator(collection[completed], completed, done); - } - - function symbolIterator() { - key = completed; - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, done); - } - - function symbolIteratorWithKey() { - key = completed; - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, completed, done); - } - - function objectIterator() { - key = keys[completed]; - iterator(collection[key], done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - iterator(collection[key], key, done); - } - - function done(err, res) { - if (err) { - iterate = throwError; - callback = onlyOnce(callback); - callback(err, objectClone(result)); - return; - } - result[key] = res; - if (++completed === size) { - iterate = throwError; - callback(null, result); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace mapValuesLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 } - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.mapValuesLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 } - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - function mapValuesLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, keys, iter, item, iterate; - var sync = false; - var result = {}; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, result); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - iterator(collection[index], createCallback(index)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - iterator(collection[index], index, createCallback(index)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, started, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function objectIterator() { - index = started++; - if (index < size) { - key = keys[index]; - iterator(collection[key], createCallback(key)); - } - } - - function objectIteratorWithKey() { - index = started++; - if (index < size) { - key = keys[index]; - iterator(collection[key], key, createCallback(key)); - } - } - - function createCallback(key) { - return function(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - iterate = noop; - callback = once(callback); - callback(err, objectClone(result)); - return; - } - result[key] = res; - key = null; - if (++completed === size) { - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - * @param {boolean} bool - */ - function createDetect(arrayEach, baseEach, symbolEach, bool) { - return function(collection, iterator, callback) { - callback = callback || noop; - var size, keys; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - callback(null); - } - - function createCallback(value) { - var called = false; - return function done(err, res) { - if (called) { - throwError(); - } - called = true; - if (err) { - callback = once(callback); - callback(err); - } else if (!!res === bool) { - callback = once(callback); - callback(null, value); - } else if (++completed === size) { - callback(null); - } - }; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createDetectSeries(bool) { - return function(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, value, keys, iter, item, iterate; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null); - } - iterate(); - - function arrayIterator() { - value = collection[completed]; - iterator(value, done); - } - - function arrayIteratorWithIndex() { - value = collection[completed]; - iterator(value, completed, done); - } - - function symbolIterator() { - item = iter.next(); - value = item.value; - item.done ? callback(null) : iterator(value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - value = item.value; - item.done ? callback(null) : iterator(value, completed, done); - } - - function objectIterator() { - value = collection[keys[completed]]; - iterator(value, done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - value = collection[key]; - iterator(value, key, done); - } - - function done(err, res) { - if (err) { - callback(err); - } else if (!!res === bool) { - iterate = throwError; - callback(null, value); - } else if (++completed === size) { - iterate = throwError; - callback(null); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createDetectLimit(bool) { - return function(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, value, keys, iter, item, iterate; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, createCallback(value)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, index, createCallback(value)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - started++; - value = item.value; - iterator(value, createCallback(value)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, started++, createCallback(value)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null); - } - } - - function objectIterator() { - index = started++; - if (index < size) { - value = collection[keys[index]]; - iterator(value, createCallback(value)); - } - } - - function objectIteratorWithKey() { - if (started < size) { - key = keys[started++]; - value = collection[key]; - iterator(value, key, createCallback(value)); - } - } - - function createCallback(value) { - var called = false; - return function(err, res) { - if (called) { - throwError(); - } - called = true; - if (err) { - iterate = noop; - callback = once(callback); - callback(err); - } else if (!!res === bool) { - iterate = noop; - callback = once(callback); - callback(null, value); - } else if (++completed === size) { - callback(null); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - }; - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - * @param {boolean} bool - */ - function createPick(arrayEach, baseEach, symbolEach, bool) { - return function(collection, iterator, callback) { - callback = callback || noop; - var size, keys; - var completed = 0; - var result = {}; - - if (isArray(collection)) { - size = collection.length; - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, result); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - return callback(null, {}); - } - - function createCallback(key, value) { - return function done(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - callback = once(callback); - callback(err, objectClone(result)); - return; - } - if (!!res === bool) { - result[key] = value; - } - key = null; - if (++completed === size) { - callback(null, result); - } - }; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createPickSeries(bool) { - return function(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, value, keys, iter, item, iterate; - var sync = false; - var result = {}; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, {}); - } - iterate(); - - function arrayIterator() { - key = completed; - value = collection[completed]; - iterator(value, done); - } - - function arrayIteratorWithIndex() { - key = completed; - value = collection[completed]; - iterator(value, completed, done); - } - - function symbolIterator() { - key = completed; - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, done); - } - - function symbolIteratorWithKey() { - key = completed; - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, key, done); - } - - function objectIterator() { - key = keys[completed]; - value = collection[key]; - iterator(value, done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - value = collection[key]; - iterator(value, key, done); - } - - function done(err, res) { - if (err) { - callback(err, result); - return; - } - if (!!res === bool) { - result[key] = value; - } - if (++completed === size) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - }; - } - - /** - * @private - * @param {boolean} bool - */ - function createPickLimit(bool) { - return function(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, value, keys, iter, item, iterate; - var sync = false; - var result = {}; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, {}); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, createCallback(value, index)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, index, createCallback(value, index)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, started, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function objectIterator() { - if (started < size) { - key = keys[started++]; - value = collection[key]; - iterator(value, createCallback(value, key)); - } - } - - function objectIteratorWithKey() { - if (started < size) { - key = keys[started++]; - value = collection[key]; - iterator(value, key, createCallback(value, key)); - } - } - - function createCallback(value, key) { - return function(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - iterate = noop; - callback = once(callback); - callback(err, objectClone(result)); - return; - } - if (!!res === bool) { - result[key] = value; - } - key = null; - if (++completed === size) { - iterate = throwError; - callback = onlyOnce(callback); - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - }; - } - - /** - * @memberof async - * @namespace reduce - * @param {Array|Object} collection - * @param {*} result - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduce(collection, 0, iterator, function(err, res) { - * console.log(res); // 10 - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduce(collection, '', iterator, function(err, res) { - * console.log(res); // '1324' - * console.log(order); // [[1, 0], [3, 1], [2, 2], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduce(collection, '', iterator, function(err, res) { - * console.log(res); // '1324' - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduce(collection, 0, iterator, function(err, res) { - * console.log(res); // 10 - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b'], [4, 'd']] - * }); - * - */ - function reduce(collection, result, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, keys, iter, item, iterate; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, result); - } - iterate(result); - - function arrayIterator(result) { - iterator(result, collection[completed], done); - } - - function arrayIteratorWithIndex(result) { - iterator(result, collection[completed], completed, done); - } - - function symbolIterator(result) { - item = iter.next(); - item.done ? callback(null, result) : iterator(result, item.value, done); - } - - function symbolIteratorWithKey(result) { - item = iter.next(); - item.done ? callback(null, result) : iterator(result, item.value, completed, done); - } - - function objectIterator(result) { - iterator(result, collection[keys[completed]], done); - } - - function objectIteratorWithKey(result) { - key = keys[completed]; - iterator(result, collection[key], key, done); - } - - function done(err, result) { - if (err) { - callback(err, result); - } else if (++completed === size) { - iterator = throwError; - callback(null, result); - } else if (sync) { - nextTick(function() { - iterate(result); - }); - } else { - sync = true; - iterate(result); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace reduceRight - * @param {Array|Object} collection - * @param {*} result - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduceRight(collection, 0, iterator, function(err, res) { - * console.log(res); // 10 - * console.log(order); // [4, 2, 3, 1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduceRight(collection, '', iterator, function(err, res) { - * console.log(res); // '4231' - * console.log(order); // [[4, 3], [2, 2], [3, 1], [1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduceRight(collection, '', iterator, function(err, res) { - * console.log(res); // '4231' - * console.log(order); // [4, 2, 3, 1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, result + num); - * }, num * 10); - * }; - * async.reduceRight(collection, 0, iterator, function(err, res) { - * console.log(res); // 10 - * console.log(order); // [[4, 3], [2, 2], [3, 1], [1, 0]] - * }); - * - */ - function reduceRight(collection, result, iterator, callback) { - callback = onlyOnce(callback || noop); - var resIndex, index, key, keys, iter, item, col, iterate; - var sync = false; - - if (isArray(collection)) { - resIndex = collection.length; - iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - col = []; - iter = collection[iteratorSymbol](); - index = -1; - while ((item = iter.next()).done === false) { - col[++index] = item.value; - } - collection = col; - resIndex = col.length; - iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - resIndex = keys.length; - iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; - } - if (!resIndex) { - return callback(null, result); - } - iterate(result); - - function arrayIterator(result) { - iterator(result, collection[--resIndex], done); - } - - function arrayIteratorWithIndex(result) { - iterator(result, collection[--resIndex], resIndex, done); - } - - function objectIterator(result) { - iterator(result, collection[keys[--resIndex]], done); - } - - function objectIteratorWithKey(result) { - key = keys[--resIndex]; - iterator(result, collection[key], key, done); - } - - function done(err, result) { - if (err) { - callback(err, result); - } else if (resIndex === 0) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(function() { - iterate(result); - }); - } else { - sync = true; - iterate(result); - } - sync = false; - } - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - */ - function createTransform(arrayEach, baseEach, symbolEach) { - return function transform(collection, accumulator, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = accumulator; - accumulator = undefined; - } - callback = callback || noop; - var size, keys, result; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = accumulator !== undefined ? accumulator : []; - arrayEach(collection, result, iterator, done); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - result = accumulator !== undefined ? accumulator : {}; - size = symbolEach(collection, result, iterator, done); - size && size === completed && callback(null, result); - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - result = accumulator !== undefined ? accumulator : {}; - baseEach(collection, result, iterator, done, keys); - } - if (!size) { - callback(null, accumulator !== undefined ? accumulator : result || {}); - } - - function done(err, bool) { - if (err) { - callback = once(callback); - callback(err, isArray(result) ? createArray(result) : objectClone(result)); - } else if (++completed === size) { - callback(null, result); - } else if (bool === false) { - callback = once(callback); - callback(null, isArray(result) ? createArray(result) : objectClone(result)); - } - } - }; - } - - /** - * @memberof async - * @namespace transformSeries - * @param {Array|Object} collection - * @param {Array|Object|Function} [accumulator] - * @param {Function} [iterator] - * @param {Function} [callback] - * @example - * - * // array - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num) - * done(); - * }, num * 10); - * }; - * async.transformSeries(collection, iterator, function(err, res) { - * console.log(res); // [1, 3, 2, 4] - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // array with index and accumulator - * var order = []; - * var collection = [1, 3, 2, 4]; - * var iterator = function(result, num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * result[index] = num; - * done(); - * }, num * 10); - * }; - * async.transformSeries(collection, {}, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 3, '2': 2, '3': 4 } - * console.log(order); // [[1, 0], [3, 1], [2, 2], [4, 3]] - * }); - * - * @example - * - * // object with accumulator - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num); - * done(); - * }, num * 10); - * }; - * async.transformSeries(collection, [], iterator, function(err, res) { - * console.log(res); // [1, 3, 2, 4] - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2, d: 4 }; - * var iterator = function(result, num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * result[key] = num; - * done(); - * }, num * 10); - * }; - * async.transformSeries(collection, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 3, c: 2, d: 4 } - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b'], [4, 'd']] - * }); - * - */ - function transformSeries(collection, accumulator, iterator, callback) { - if (arguments.length === 3) { - callback = iterator; - iterator = accumulator; - accumulator = undefined; - } - callback = onlyOnce(callback || noop); - var size, key, keys, iter, item, iterate, result; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = accumulator !== undefined ? accumulator : []; - iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - result = accumulator !== undefined ? accumulator : {}; - iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - result = accumulator !== undefined ? accumulator : {}; - iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, accumulator !== undefined ? accumulator : result || {}); - } - iterate(); - - function arrayIterator() { - iterator(result, collection[completed], done); - } - - function arrayIteratorWithIndex() { - iterator(result, collection[completed], completed, done); - } - - function symbolIterator() { - item = iter.next(); - item.done ? callback(null, result) : iterator(result, item.value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - item.done ? callback(null, result) : iterator(result, item.value, completed, done); - } - - function objectIterator() { - iterator(result, collection[keys[completed]], done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - iterator(result, collection[key], key, done); - } - - function done(err, bool) { - if (err) { - callback(err, result); - } else if (++completed === size || bool === false) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace transformLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Array|Object|Function} [accumulator] - * @param {Function} [iterator] - * @param {Function} [callback] - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num); - * done(); - * }, num * 10); - * }; - * async.transformLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index and accumulator - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(result, num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * result[index] = key; - * done(); - * }, num * 10); - * }; - * async.transformLimit(array, 2, {}, iterator, function(err, res) { - * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object with accumulator - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(result, num, done) { - * setTimeout(function() { - * order.push(num); - * result.push(num); - * done(); - * }, num * 10); - * }; - * async.transformLimit(object, 2, [], iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(result, num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * result[key] = num; - * done(); - * }, num * 10); - * }; - * async.transformLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - function transformLimit(collection, limit, accumulator, iterator, callback) { - if (arguments.length === 4) { - callback = iterator; - iterator = accumulator; - accumulator = undefined; - } - callback = callback || noop; - var size, index, key, keys, iter, item, iterate, result; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = accumulator !== undefined ? accumulator : []; - iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - result = accumulator !== undefined ? accumulator : {}; - iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - result = accumulator !== undefined ? accumulator : {}; - iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, accumulator !== undefined ? accumulator : result || {}); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - iterator(result, collection[index], onlyOnce(done)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - iterator(result, collection[index], index, onlyOnce(done)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - started++; - iterator(result, item.value, onlyOnce(done)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - iterator(result, item.value, started++, onlyOnce(done)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function objectIterator() { - index = started++; - if (index < size) { - iterator(result, collection[keys[index]], onlyOnce(done)); - } - } - - function objectIteratorWithKey() { - index = started++; - if (index < size) { - key = keys[index]; - iterator(result, collection[key], key, onlyOnce(done)); - } - } - - function done(err, bool) { - if (err || bool === false) { - iterate = noop; - callback(err || null, isArray(result) ? createArray(result) : objectClone(result)); - callback = noop; - } else if (++completed === size) { - iterator = noop; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @private - * @param {function} arrayEach - * @param {function} baseEach - * @param {function} symbolEach - */ - function createSortBy(arrayEach, baseEach, symbolEach) { - return function sortBy(collection, iterator, callback) { - callback = callback || noop; - var size, array, criteria; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - array = Array(size); - criteria = Array(size); - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - array = []; - criteria = []; - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, sortByCriteria(array, criteria)); - } else if (typeof collection === obj) { - var keys = nativeKeys(collection); - size = keys.length; - array = Array(size); - criteria = Array(size); - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - callback(null, []); - } - - function createCallback(index, value) { - var called = false; - array[index] = value; - return function done(err, criterion) { - if (called) { - throwError(); - } - called = true; - criteria[index] = criterion; - if (err) { - callback = once(callback); - callback(err); - } else if (++completed === size) { - callback(null, sortByCriteria(array, criteria)); - } - }; - } - }; - } - - /** - * @memberof async - * @namespace sortBySeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortBySeries(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.sortBySeries(array, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortBySeries(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.sortBySeries(object, iterator, function(err, res) { - * console.log(res); // [1, 2, 3] - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - function sortBySeries(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, value, keys, iter, item, array, criteria, iterate; - var sync = false; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - array = collection; - criteria = Array(size); - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - array = []; - criteria = []; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - array = Array(size); - criteria = Array(size); - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, []); - } - iterate(); - - function arrayIterator() { - value = collection[completed]; - iterator(value, done); - } - - function arrayIteratorWithIndex() { - value = collection[completed]; - iterator(value, completed, done); - } - - function symbolIterator() { - item = iter.next(); - if (item.done) { - return callback(null, sortByCriteria(array, criteria)); - } - value = item.value; - array[completed] = value; - iterator(value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done) { - return callback(null, sortByCriteria(array, criteria)); - } - value = item.value; - array[completed] = value; - iterator(value, completed, done); - } - - function objectIterator() { - value = collection[keys[completed]]; - array[completed] = value; - iterator(value, done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - value = collection[key]; - array[completed] = value; - iterator(value, key, done); - } - - function done(err, criterion) { - criteria[completed] = criterion; - if (err) { - callback(err); - } else if (++completed === size) { - iterate = throwError; - callback(null, sortByCriteria(array, criteria)); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace sortByLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortByLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4, 5] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num); - * }, num * 10); - * }; - * async.sortByLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4, 5] - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num); - * }, num * 10); - * }; - * async.sortByLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4, 5] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.sortByLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 2, 3, 4, 5] - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - function sortByLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, value, array, keys, iter, item, criteria, iterate; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - array = collection; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - array = []; - criteria = []; - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - array = Array(size); - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, []); - } - criteria = criteria || Array(size); - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - if (started < size) { - value = collection[started]; - iterator(value, createCallback(value, started++)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, index, createCallback(value, index)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - value = item.value; - array[started] = value; - iterator(value, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, sortByCriteria(array, criteria)); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - value = item.value; - array[started] = value; - iterator(value, started, createCallback(value, started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, sortByCriteria(array, criteria)); - } - } - - function objectIterator() { - if (started < size) { - value = collection[keys[started]]; - array[started] = value; - iterator(value, createCallback(value, started++)); - } - } - - function objectIteratorWithKey() { - if (started < size) { - key = keys[started]; - value = collection[key]; - array[started] = value; - iterator(value, key, createCallback(value, started++)); - } - } - - function createCallback(value, index) { - var called = false; - return function(err, criterion) { - if (called) { - throwError(); - } - called = true; - criteria[index] = criterion; - if (err) { - iterate = noop; - callback(err); - callback = noop; - } else if (++completed === size) { - callback(null, sortByCriteria(array, criteria)); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @memberof async - * @namespace some - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.some(array, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.some(array, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.some(object, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.some(object, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 'a']] - * }); - * - */ - function some(collection, iterator, callback) { - callback = callback || noop; - detect(collection, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !!res); - } - } - - /** - * @memberof async - * @namespace someSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someSeries(array, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someSeries(array, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someSeries(object, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someSeries(object, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 'a']] - * }); - * - */ - function someSeries(collection, iterator, callback) { - callback = callback || noop; - detectSeries(collection, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !!res); - } - } - - /** - * @memberof async - * @namespace someLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someLimit(array, 2, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someLimit(array, 2, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 0]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someLimit(object, 2, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num % 2); - * }, num * 10); - * }; - * async.someLimit(object, 2, iterator, function(err, res) { - * console.log(res); // true - * console.log(order); // [[1, 'a']] - * }); - * - */ - function someLimit(collection, limit, iterator, callback) { - callback = callback || noop; - detectLimit(collection, limit, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !!res); - } - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - */ - function createEvery(arrayEach, baseEach, symbolEach) { - var deny = createDetect(arrayEach, baseEach, symbolEach, false); - - return function every(collection, iterator, callback) { - callback = callback || noop; - deny(collection, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !res); - } - }; - } - - /** - * @private - */ - function createEverySeries() { - var denySeries = createDetectSeries(false); - - return function everySeries(collection, iterator, callback) { - callback = callback || noop; - denySeries(collection, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !res); - } - }; - } - - /** - * @private - */ - function createEveryLimit() { - var denyLimit = createDetectLimit(false); - - return function everyLimit(collection, limit, iterator, callback) { - callback = callback || noop; - denyLimit(collection, limit, iterator, done); - - function done(err, res) { - if (err) { - return callback(err); - } - callback(null, !res); - } - }; - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - */ - function createConcat(arrayEach, baseEach, symbolEach) { - return function concat(collection, iterator, callback) { - callback = callback || noop; - var size, result; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - result = Array(size); - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - result = []; - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, result); - } else if (typeof collection === obj) { - var keys = nativeKeys(collection); - size = keys.length; - result = Array(size); - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - callback(null, []); - } - - function createCallback(index) { - return function done(err, res) { - if (index === null) { - throwError(); - } - if (err) { - index = null; - callback = once(callback); - arrayEachSync(result, function(array, index) { - if (array === undefined) { - result[index] = noop; - } - }); - callback(err, makeConcatResult(result)); - return; - } - switch (arguments.length) { - case 0: - case 1: - result[index] = noop; - break; - case 2: - result[index] = res; - break; - default: - result[index] = slice(arguments, 1); - break; - } - index = null; - if (++completed === size) { - callback(null, makeConcatResult(result)); - } - }; - } - }; - } - - /** - * @memberof async - * @namespace concatSeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2]; - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 3, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatSeries(array, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 0], [3, 1], [2, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [1, 3, 2] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 3, c: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatSeries(object, iterator, function(err, res) { - * console.log(res); // [1, 3, 2] - * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] - * }); - * - */ - function concatSeries(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, keys, iter, item, iterate; - var sync = false; - var result = []; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, result); - } - iterate(); - - function arrayIterator() { - iterator(collection[completed], done); - } - - function arrayIteratorWithIndex() { - iterator(collection[completed], completed, done); - } - - function symbolIterator() { - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - item.done ? callback(null, result) : iterator(item.value, completed, done); - } - - function objectIterator() { - iterator(collection[keys[completed]], done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - iterator(collection[key], key, done); - } - - function done(err, array) { - if (isArray(array)) { - nativePush.apply(result, array); - } else if (arguments.length >= 2) { - nativePush.apply(result, slice(arguments, 1)); - } - if (err) { - callback(err, result); - } else if (++completed === size) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace concatLimit - * @param {Array|Object} collection - * @param {number} limit - limit >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1, 5, 3, 4, 2]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, [num]); - * }, num * 10); - * }; - * async.cocnatLimit(array, 2, iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, [num]); - * }, num * 10); - * }; - * async.concatLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [1, 3, 5, 2, 4] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, num); - * }, num * 10); - * }; - * async.cocnatLimit(object, 2, iterator, function(err, res) { - * console.log(res); // [1, 3, 5, 2, 4] - * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] - * }); - * - */ - function concatLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, key, iter, item, iterate, result; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - result = []; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - var keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, []); - } - result = result || Array(size); - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - if (started < size) { - iterator(collection[started], createCallback(started++)); - } - } - - function arrayIteratorWithIndex() { - if (started < size) { - iterator(collection[started], started, createCallback(started++)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, makeConcatResult(result)); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - iterator(item.value, started, createCallback(started++)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, makeConcatResult(result)); - } - } - - function objectIterator() { - if (started < size) { - iterator(collection[keys[started]], createCallback(started++)); - } - } - - function objectIteratorWithKey() { - if (started < size) { - key = keys[started]; - iterator(collection[key], key, createCallback(started++)); - } - } - - function createCallback(index) { - return function(err, res) { - if (index === null) { - throwError(); - } - if (err) { - index = null; - iterate = noop; - callback = once(callback); - arrayEachSync(result, function(array, index) { - if (array === undefined) { - result[index] = noop; - } - }); - callback(err, makeConcatResult(result)); - return; - } - switch (arguments.length) { - case 0: - case 1: - result[index] = noop; - break; - case 2: - result[index] = res; - break; - default: - result[index] = slice(arguments, 1); - break; - } - index = null; - if (++completed === size) { - iterate = throwError; - callback(null, makeConcatResult(result)); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - * @param {Function} symbolEach - */ - function createGroupBy(arrayEach, baseEach, symbolEach) { - return function groupBy(collection, iterator, callback) { - callback = callback || noop; - var size; - var completed = 0; - var result = {}; - - if (isArray(collection)) { - size = collection.length; - arrayEach(collection, iterator, createCallback); - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = symbolEach(collection, iterator, createCallback); - size && size === completed && callback(null, result); - } else if (typeof collection === obj) { - var keys = nativeKeys(collection); - size = keys.length; - baseEach(collection, iterator, createCallback, keys); - } - if (!size) { - callback(null, {}); - } - - function createCallback(value) { - var called = false; - return function done(err, key) { - if (called) { - throwError(); - } - called = true; - if (err) { - callback = once(callback); - callback(err, objectClone(result)); - return; - } - var array = result[key]; - if (!array) { - result[key] = [value]; - } else { - array.push(value); - } - if (++completed === size) { - callback(null, result); - } - }; - } - }; - } - - /** - * @memberof async - * @namespace groupBySeries - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [4.2, 6.4, 6.1]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBySeries(array, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } - * console.log(order); // [4.2, 6.4, 6.1] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [4.2, 6.4, 6.1]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBySeries(array, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } - * console.log(order); // [[4.2, 0], [6.4, 1], [6.1, 2]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 4.2, b: 6.4, c: 6.1 }; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBySeries(object, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } - * console.log(order); // [4.2, 6.4, 6.1] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 4.2, b: 6.4, c: 6.1 }; - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupBySeries(object, iterator, function(err, res) { - * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } - * console.log(order); // [[4.2, 'a'], [6.4, 'b'], [6.1, 'c']] - * }); - * - */ - function groupBySeries(collection, iterator, callback) { - callback = onlyOnce(callback || noop); - var size, key, value, keys, iter, item, iterate; - var sync = false; - var completed = 0; - var result = {}; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size) { - return callback(null, result); - } - iterate(); - - function arrayIterator() { - value = collection[completed]; - iterator(value, done); - } - - function arrayIteratorWithIndex() { - value = collection[completed]; - iterator(value, completed, done); - } - - function symbolIterator() { - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, done); - } - - function symbolIteratorWithKey() { - item = iter.next(); - value = item.value; - item.done ? callback(null, result) : iterator(value, completed, done); - } - - function objectIterator() { - value = collection[keys[completed]]; - iterator(value, done); - } - - function objectIteratorWithKey() { - key = keys[completed]; - value = collection[key]; - iterator(value, key, done); - } - - function done(err, key) { - if (err) { - iterate = throwError; - callback = onlyOnce(callback); - callback(err, objectClone(result)); - return; - } - var array = result[key]; - if (!array) { - result[key] = [value]; - } else { - array.push(value); - } - if (++completed === size) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace groupByLimit - * @param {Array|Object} collection - * @param {Function} iterator - * @param {Function} callback - * @example - * - * // array - * var order = []; - * var array = [1.1, 5.9, 3.2, 3.9, 2.1]; - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupByLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } - * console.log(order); // [1.1, 3.2, 5.9, 2.1, 3.9] - * }); - * - * @example - * - * // array with index - * var order = []; - * var array = [1.1, 5.9, 3.2, 3.9, 2.1]; - * var iterator = function(num, index, done) { - * setTimeout(function() { - * order.push([num, index]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupByLimit(array, 2, iterator, function(err, res) { - * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } - * console.log(order); // [[1.1, 0], [3.2, 2], [5.9, 1], [2.1, 4], [3.9, 3]] - * }); - * - * @example - * - * // object - * var order = []; - * var object = { a: 1.1, b: 5.9, c: 3.2, d: 3.9, e: 2.1 } - * var iterator = function(num, done) { - * setTimeout(function() { - * order.push(num); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupByLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } - * console.log(order); // [1.1, 3.2, 5.9, 2.1, 3.9] - * }); - * - * @example - * - * // object with key - * var order = []; - * var object = { a: 1.1, b: 5.9, c: 3.2, d: 3.9, e: 2.1 } - * var iterator = function(num, key, done) { - * setTimeout(function() { - * order.push([num, key]); - * done(null, Math.floor(num)); - * }, num * 10); - * }; - * async.groupByLimit(object, 2, iterator, function(err, res) { - * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } - * console.log(order); // [[1.1, 'a'], [3.2, 'c'], [5.9, 'b'], [2.1, 'e'], [3.9, 'd']] - * }); - * - */ - function groupByLimit(collection, limit, iterator, callback) { - callback = callback || noop; - var size, index, key, value, keys, iter, item, iterate; - var sync = false; - var started = 0; - var completed = 0; - var result = {}; - - if (isArray(collection)) { - size = collection.length; - iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; - } else if (!collection) { - } else if (iteratorSymbol && collection[iteratorSymbol]) { - size = Infinity; - iter = collection[iteratorSymbol](); - iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; - } else if (typeof collection === obj) { - keys = nativeKeys(collection); - size = keys.length; - iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, result); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - if (started < size) { - value = collection[started++]; - iterator(value, createCallback(value)); - } - } - - function arrayIteratorWithIndex() { - index = started++; - if (index < size) { - value = collection[index]; - iterator(value, index, createCallback(value)); - } - } - - function symbolIterator() { - item = iter.next(); - if (item.done === false) { - started++; - value = item.value; - iterator(value, createCallback(value)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function symbolIteratorWithKey() { - item = iter.next(); - if (item.done === false) { - value = item.value; - iterator(value, started++, createCallback(value)); - } else if (completed === started && iterator !== noop) { - iterator = noop; - callback(null, result); - } - } - - function objectIterator() { - if (started < size) { - value = collection[keys[started++]]; - iterator(value, createCallback(value)); - } - } - - function objectIteratorWithKey() { - if (started < size) { - key = keys[started++]; - value = collection[key]; - iterator(value, key, createCallback(value)); - } - } - - function createCallback(value) { - var called = false; - return function(err, key) { - if (called) { - throwError(); - } - called = true; - if (err) { - iterate = noop; - callback = once(callback); - callback(err, objectClone(result)); - return; - } - var array = result[key]; - if (!array) { - result[key] = [value]; - } else { - array.push(value); - } - if (++completed === size) { - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @private - * @param {Function} arrayEach - * @param {Function} baseEach - */ - function createParallel(arrayEach, baseEach) { - return function parallel(tasks, callback) { - callback = callback || noop; - var size, keys, result; - var completed = 0; - - if (isArray(tasks)) { - size = tasks.length; - result = Array(size); - arrayEach(tasks, createCallback); - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - size = keys.length; - result = {}; - baseEach(tasks, createCallback, keys); - } - if (!size) { - callback(null, result); - } - - function createCallback(key) { - return function(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - callback = once(callback); - callback(err, result); - return; - } - result[key] = arguments.length <= 2 ? res : slice(arguments, 1); - key = null; - if (++completed === size) { - callback(null, result); - } - }; - } - }; - } - - /** - * @memberof async - * @namespace series - * @param {Array|Object} tasks - functions - * @param {Function} callback - * @example - * - * var order = []; - * var tasks = [ - * function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 30); - * }, - * function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 40); - * }, - * function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 20); - * } - * ]; - * async.series(tasks, function(err, res) { - * console.log(res); // [1, 2, 3, 4]; - * console.log(order); // [1, 2, 3, 4] - * }); - * - * @example - * - * var order = []; - * var tasks = { - * 'a': function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * 'b': function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 30); - * }, - * 'c': function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 40); - * }, - * 'd': function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 20); - * } - * }; - * async.series(tasks, function(err, res) { - * console.log(res); // { a: 1, b: 2, c: 3, d:4 } - * console.log(order); // [1, 4, 2, 3] - * }); - * - */ - function series(tasks, callback) { - callback = callback || noop; - var size, key, keys, result, iterate; - var sync = false; - var completed = 0; - - if (isArray(tasks)) { - size = tasks.length; - result = Array(size); - iterate = arrayIterator; - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - size = keys.length; - result = {}; - iterate = objectIterator; - } else { - return callback(null); - } - if (!size) { - return callback(null, result); - } - iterate(); - - function arrayIterator() { - key = completed; - tasks[completed](done); - } - - function objectIterator() { - key = keys[completed]; - tasks[key](done); - } - - function done(err, res) { - if (err) { - iterate = throwError; - callback = onlyOnce(callback); - callback(err, result); - return; - } - result[key] = arguments.length <= 2 ? res : slice(arguments, 1); - if (++completed === size) { - iterate = throwError; - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace parallelLimit - * @param {Array|Object} tasks - functions - * @param {number} limit - limit >= 1 - * @param {Function} callback - * @example - * - * var order = []; - * var tasks = [ - * function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 50); - * }, - * function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 30); - * }, - * function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 40); - * } - * ]; - * async.parallelLimit(tasks, 2, function(err, res) { - * console.log(res); // [1, 2, 3, 4]; - * console.log(order); // [1, 3, 2, 4] - * }); - * - * @example - * - * var order = []; - * var tasks = { - * 'a': function(done) { - * setTimeout(function() { - * order.push(1); - * done(null, 1); - * }, 10); - * }, - * 'b': function(done) { - * setTimeout(function() { - * order.push(2); - * done(null, 2); - * }, 50); - * }, - * 'c': function(done) { - * setTimeout(function() { - * order.push(3); - * done(null, 3); - * }, 20); - * }, - * 'd': function(done) { - * setTimeout(function() { - * order.push(4); - * done(null, 4); - * }, 40); - * } - * }; - * async.parallelLimit(tasks, 2, function(err, res) { - * console.log(res); // { a: 1, b: 2, c: 3, d:4 } - * console.log(order); // [1, 3, 2, 4] - * }); - * - */ - function parallelLimit(tasks, limit, callback) { - callback = callback || noop; - var size, index, key, keys, result, iterate; - var sync = false; - var started = 0; - var completed = 0; - - if (isArray(tasks)) { - size = tasks.length; - result = Array(size); - iterate = arrayIterator; - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - size = keys.length; - result = {}; - iterate = objectIterator; - } - if (!size || isNaN(limit) || limit < 1) { - return callback(null, result); - } - timesSync(limit > size ? size : limit, iterate); - - function arrayIterator() { - index = started++; - if (index < size) { - tasks[index](createCallback(index)); - } - } - - function objectIterator() { - if (started < size) { - key = keys[started++]; - tasks[key](createCallback(key)); - } - } - - function createCallback(key) { - return function(err, res) { - if (key === null) { - throwError(); - } - if (err) { - key = null; - iterate = noop; - callback = once(callback); - callback(err, result); - return; - } - result[key] = arguments.length <= 2 ? res : slice(arguments, 1); - key = null; - if (++completed === size) { - callback(null, result); - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @memberof async - * @namespace tryEach - * @param {Array|Object} tasks - functions - * @param {Function} callback - * @example - * - * var tasks = [ - * function(done) { - * setTimeout(function() { - * done(new Error('error')); - * }, 10); - * }, - * function(done) { - * setTimeout(function() { - * done(null, 2); - * }, 10); - * } - * ]; - * async.tryEach(tasks, function(err, res) { - * console.log(res); // 2 - * }); - * - * @example - * - * var tasks = [ - * function(done) { - * setTimeout(function() { - * done(new Error('error1')); - * }, 10); - * }, - * function(done) { - * setTimeout(function() { - * done(new Error('error2'); - * }, 10); - * } - * ]; - * async.tryEach(tasks, function(err, res) { - * console.log(err); // error2 - * console.log(res); // undefined - * }); - * - */ - function tryEach(tasks, callback) { - callback = callback || noop; - var size, keys, iterate; - var sync = false; - var completed = 0; - - if (isArray(tasks)) { - size = tasks.length; - iterate = arrayIterator; - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - size = keys.length; - iterate = objectIterator; - } - if (!size) { - return callback(null); - } - iterate(); - - function arrayIterator() { - tasks[completed](done); - } - - function objectIterator() { - tasks[keys[completed]](done); - } - - function done(err, res) { - if (!err) { - if (arguments.length <= 2) { - callback(null, res); - } else { - callback(null, slice(arguments, 1)); - } - } else if (++completed === size) { - callback(err); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * check for waterfall tasks - * @private - * @param {Array} tasks - * @param {Function} callback - * @return {boolean} - */ - function checkWaterfallTasks(tasks, callback) { - if (!isArray(tasks)) { - callback(new Error('First argument to waterfall must be an array of functions')); - return false; - } - if (tasks.length === 0) { - callback(null); - return false; - } - return true; - } - - /** - * check for waterfall tasks - * @private - * @param {function} func - * @param {Array|Object} args - arguments - * @return {function} next - */ - function waterfallIterator(func, args, next) { - switch (args.length) { - case 0: - case 1: - return func(next); - case 2: - return func(args[1], next); - case 3: - return func(args[1], args[2], next); - case 4: - return func(args[1], args[2], args[3], next); - case 5: - return func(args[1], args[2], args[3], args[4], next); - case 6: - return func(args[1], args[2], args[3], args[4], args[5], next); - default: - args = slice(args, 1); - args.push(next); - return func.apply(null, args); - } - } - - /** - * @memberof async - * @namespace waterfall - * @param {Array} tasks - functions - * @param {Function} callback - * @example - * - * var order = []; - * var tasks = [ - * function(next) { - * setTimeout(function() { - * order.push(1); - * next(null, 1); - * }, 10); - * }, - * function(arg1, next) { - * setTimeout(function() { - * order.push(2); - * next(null, 1, 2); - * }, 30); - * }, - * function(arg1, arg2, next) { - * setTimeout(function() { - * order.push(3); - * next(null, 3); - * }, 20); - * }, - * function(arg1, next) { - * setTimeout(function() { - * order.push(4); - * next(null, 1, 2, 3, 4); - * }, 40); - * } - * ]; - * async.waterfall(tasks, function(err, arg1, arg2, arg3, arg4) { - * console.log(arg1, arg2, arg3, arg4); // 1 2 3 4 - * }); - * - */ - function waterfall(tasks, callback) { - callback = callback || noop; - if (!checkWaterfallTasks(tasks, callback)) { - return; - } - var func, args, done, sync; - var completed = 0; - var size = tasks.length; - waterfallIterator(tasks[0], [], createCallback(0)); - - function iterate() { - waterfallIterator(func, args, createCallback(func)); - } - - function createCallback(index) { - return function next(err, res) { - if (index === undefined) { - callback = noop; - throwError(); - } - index = undefined; - if (err) { - done = callback; - callback = throwError; - done(err); - return; - } - if (++completed === size) { - done = callback; - callback = throwError; - if (arguments.length <= 2) { - done(err, res); - } else { - done.apply(null, createArray(arguments)); - } - return; - } - if (sync) { - args = arguments; - func = tasks[completed] || throwError; - nextTick(iterate); - } else { - sync = true; - waterfallIterator(tasks[completed] || throwError, arguments, createCallback(completed)); - } - sync = false; - }; - } - } - - /** - * `angelFall` is like `waterfall` and inject callback to last argument of next task. - * - * @memberof async - * @namespace angelFall - * @param {Array} tasks - functions - * @param {Function} callback - * @example - * - * var order = []; - * var tasks = [ - * function(next) { - * setTimeout(function() { - * order.push(1); - * next(null, 1); - * }, 10); - * }, - * function(arg1, empty, next) { - * setTimeout(function() { - * order.push(2); - * next(null, 1, 2); - * }, 30); - * }, - * function(next) { - * setTimeout(function() { - * order.push(3); - * next(null, 3); - * }, 20); - * }, - * function(arg1, empty1, empty2, empty3, next) { - * setTimeout(function() { - * order.push(4); - * next(null, 1, 2, 3, 4); - * }, 40); - * } - * ]; - * async.angelFall(tasks, function(err, arg1, arg2, arg3, arg4) { - * console.log(arg1, arg2, arg3, arg4); // 1 2 3 4 - * }); - * - */ - function angelFall(tasks, callback) { - callback = callback || noop; - if (!checkWaterfallTasks(tasks, callback)) { - return; - } - var completed = 0; - var sync = false; - var size = tasks.length; - var func = tasks[completed]; - var args = []; - var iterate = function() { - switch (func.length) { - case 0: - try { - next(null, func()); - } catch (e) { - next(e); - } - return; - case 1: - return func(next); - case 2: - return func(args[1], next); - case 3: - return func(args[1], args[2], next); - case 4: - return func(args[1], args[2], args[3], next); - case 5: - return func(args[1], args[2], args[3], args[4], next); - default: - args = slice(args, 1); - args[func.length - 1] = next; - return func.apply(null, args); - } - }; - iterate(); - - function next(err, res) { - if (err) { - iterate = throwError; - callback = onlyOnce(callback); - callback(err); - return; - } - if (++completed === size) { - iterate = throwError; - var done = callback; - callback = throwError; - if (arguments.length === 2) { - done(err, res); - } else { - done.apply(null, createArray(arguments)); - } - return; - } - func = tasks[completed]; - args = arguments; - if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace whilst - * @param {Function} test - * @param {Function} iterator - * @param {Function} callback - */ - function whilst(test, iterator, callback) { - callback = callback || noop; - var sync = false; - if (test()) { - iterate(); - } else { - callback(null); - } - - function iterate() { - if (sync) { - nextTick(next); - } else { - sync = true; - iterator(done); - } - sync = false; - } - - function next() { - iterator(done); - } - - function done(err, arg) { - if (err) { - return callback(err); - } - if (arguments.length <= 2) { - if (test(arg)) { - iterate(); - } else { - callback(null, arg); - } - return; - } - arg = slice(arguments, 1); - if (test.apply(null, arg)) { - iterate(); - } else { - callback.apply(null, [null].concat(arg)); - } - } - } - - /** - * @memberof async - * @namespace doWhilst - * @param {Function} iterator - * @param {Function} test - * @param {Function} callback - */ - function doWhilst(iterator, test, callback) { - callback = callback || noop; - var sync = false; - next(); - - function iterate() { - if (sync) { - nextTick(next); - } else { - sync = true; - iterator(done); - } - sync = false; - } - - function next() { - iterator(done); - } - - function done(err, arg) { - if (err) { - return callback(err); - } - if (arguments.length <= 2) { - if (test(arg)) { - iterate(); - } else { - callback(null, arg); - } - return; - } - arg = slice(arguments, 1); - if (test.apply(null, arg)) { - iterate(); - } else { - callback.apply(null, [null].concat(arg)); - } - } - } - - /** - * @memberof async - * @namespace until - * @param {Function} test - * @param {Function} iterator - * @param {Function} callback - */ - function until(test, iterator, callback) { - callback = callback || noop; - var sync = false; - if (!test()) { - iterate(); - } else { - callback(null); - } - - function iterate() { - if (sync) { - nextTick(next); - } else { - sync = true; - iterator(done); - } - sync = false; - } - - function next() { - iterator(done); - } - - function done(err, arg) { - if (err) { - return callback(err); - } - if (arguments.length <= 2) { - if (!test(arg)) { - iterate(); - } else { - callback(null, arg); - } - return; - } - arg = slice(arguments, 1); - if (!test.apply(null, arg)) { - iterate(); - } else { - callback.apply(null, [null].concat(arg)); - } - } - } - - /** - * @memberof async - * @namespace doUntil - * @param {Function} iterator - * @param {Function} test - * @param {Function} callback - */ - function doUntil(iterator, test, callback) { - callback = callback || noop; - var sync = false; - next(); - - function iterate() { - if (sync) { - nextTick(next); - } else { - sync = true; - iterator(done); - } - sync = false; - } - - function next() { - iterator(done); - } - - function done(err, arg) { - if (err) { - return callback(err); - } - if (arguments.length <= 2) { - if (!test(arg)) { - iterate(); - } else { - callback(null, arg); - } - return; - } - arg = slice(arguments, 1); - if (!test.apply(null, arg)) { - iterate(); - } else { - callback.apply(null, [null].concat(arg)); - } - } - } - - /** - * @memberof async - * @namespace during - * @param {Function} test - * @param {Function} iterator - * @param {Function} callback - */ - function during(test, iterator, callback) { - callback = callback || noop; - _test(); - - function _test() { - test(iterate); - } - - function iterate(err, truth) { - if (err) { - return callback(err); - } - if (truth) { - iterator(done); - } else { - callback(null); - } - } - - function done(err) { - if (err) { - return callback(err); - } - _test(); - } - } - - /** - * @memberof async - * @namespace doDuring - * @param {Function} test - * @param {Function} iterator - * @param {Function} callback - */ - function doDuring(iterator, test, callback) { - callback = callback || noop; - iterate(null, true); - - function iterate(err, truth) { - if (err) { - return callback(err); - } - if (truth) { - iterator(done); - } else { - callback(null); - } - } - - function done(err, res) { - if (err) { - return callback(err); - } - switch (arguments.length) { - case 0: - case 1: - test(iterate); - break; - case 2: - test(res, iterate); - break; - default: - var args = slice(arguments, 1); - args.push(iterate); - test.apply(null, args); - break; - } - } - } - - /** - * @memberof async - * @namespace forever - */ - function forever(iterator, callback) { - var sync = false; - iterate(); - - function iterate() { - iterator(next); - } - - function next(err) { - if (err) { - if (callback) { - return callback(err); - } - throw err; - } - if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace compose - */ - function compose() { - return seq.apply(null, reverse(arguments)); - } - - /** - * @memberof async - * @namespace seq - */ - function seq(/* functions... */) { - var fns = createArray(arguments); - - return function() { - var self = this; - var args = createArray(arguments); - var callback = args[args.length - 1]; - if (typeof callback === func) { - args.pop(); - } else { - callback = noop; - } - reduce(fns, args, iterator, done); - - function iterator(newargs, fn, callback) { - var func = function(err) { - var nextargs = slice(arguments, 1); - callback(err, nextargs); - }; - newargs.push(func); - fn.apply(self, newargs); - } - - function done(err, res) { - res = isArray(res) ? res : [res]; - res.unshift(err); - callback.apply(self, res); - } - }; - } - - function createApplyEach(func) { - return function applyEach(fns /* arguments */) { - var go = function() { - var self = this; - var args = createArray(arguments); - var callback = args.pop() || noop; - return func(fns, iterator, callback); - - function iterator(fn, done) { - fn.apply(self, args.concat([done])); - } - }; - if (arguments.length > 1) { - var args = slice(arguments, 1); - return go.apply(this, args); - } else { - return go; - } - }; - } - - /** - * @see https://github.com/caolan/async/blob/master/lib/internal/DoublyLinkedList.js - */ - function DLL() { - this.head = null; - this.tail = null; - this.length = 0; - } - - DLL.prototype._removeLink = function(node) { - var prev = node.prev; - var next = node.next; - if (prev) { - prev.next = next; - } else { - this.head = next; - } - if (next) { - next.prev = prev; - } else { - this.tail = prev; - } - node.prev = null; - node.next = null; - this.length--; - return node; - }; - - DLL.prototype.empty = DLL; - - DLL.prototype._setInitial = function(node) { - this.length = 1; - this.head = this.tail = node; - }; - - DLL.prototype.insertBefore = function(node, newNode) { - newNode.prev = node.prev; - newNode.next = node; - if (node.prev) { - node.prev.next = newNode; - } else { - this.head = newNode; - } - node.prev = newNode; - this.length++; - }; - - DLL.prototype.unshift = function(node) { - if (this.head) { - this.insertBefore(this.head, node); - } else { - this._setInitial(node); - } - }; - - DLL.prototype.push = function(node) { - var tail = this.tail; - if (tail) { - node.prev = tail; - node.next = tail.next; - this.tail = node; - tail.next = node; - this.length++; - } else { - this._setInitial(node); - } - }; - - DLL.prototype.shift = function() { - return this.head && this._removeLink(this.head); - }; - - DLL.prototype.splice = function(end) { - var task; - var tasks = []; - while (end-- && (task = this.shift())) { - tasks.push(task); - } - return tasks; - }; - - DLL.prototype.remove = function(test) { - var node = this.head; - while (node) { - if (test(node)) { - this._removeLink(node); - } - node = node.next; - } - return this; - }; - - /** - * @private - */ - function baseQueue(isQueue, worker, concurrency, payload) { - if (concurrency === undefined) { - concurrency = 1; - } else if (isNaN(concurrency) || concurrency < 1) { - throw new Error('Concurrency must not be zero'); - } - - var workers = 0; - var workersList = []; - var _callback, _unshift; - - var q = { - _tasks: new DLL(), - concurrency: concurrency, - payload: payload, - saturated: noop, - unsaturated: noop, - buffer: concurrency / 4, - empty: noop, - drain: noop, - error: noop, - started: false, - paused: false, - push: push, - kill: kill, - unshift: unshift, - remove: remove, - process: isQueue ? runQueue : runCargo, - length: getLength, - running: running, - workersList: getWorkersList, - idle: idle, - pause: pause, - resume: resume, - _worker: worker - }; - return q; - - function push(tasks, callback) { - _insert(tasks, callback); - } - - function unshift(tasks, callback) { - _insert(tasks, callback, true); - } - - function _exec(task) { - var item = { - data: task, - callback: _callback - }; - if (_unshift) { - q._tasks.unshift(item); - } else { - q._tasks.push(item); - } - nextTick(q.process); - } - - function _insert(tasks, callback, unshift) { - if (callback == null) { - callback = noop; - } else if (typeof callback !== 'function') { - throw new Error('task callback must be a function'); - } - q.started = true; - var _tasks = isArray(tasks) ? tasks : [tasks]; - - if (tasks === undefined || !_tasks.length) { - if (q.idle()) { - nextTick(q.drain); - } - return; - } - - _unshift = unshift; - _callback = callback; - arrayEachSync(_tasks, _exec); - // Avoid leaking the callback - _callback = undefined; - } - - function kill() { - q.drain = noop; - q._tasks.empty(); - } - - function _next(q, tasks) { - var called = false; - return function done(err, res) { - if (called) { - throwError(); - } - called = true; - - workers--; - var task; - var index = -1; - var size = workersList.length; - var taskIndex = -1; - var taskSize = tasks.length; - var useApply = arguments.length > 2; - var args = useApply && createArray(arguments); - while (++taskIndex < taskSize) { - task = tasks[taskIndex]; - while (++index < size) { - if (workersList[index] === task) { - if (index === 0) { - workersList.shift(); - } else { - workersList.splice(index, 1); - } - index = size; - size--; - } - } - index = -1; - if (useApply) { - task.callback.apply(task, args); - } else { - task.callback(err, res); - } - if (err) { - q.error(err, task.data); - } - } - - if (workers <= q.concurrency - q.buffer) { - q.unsaturated(); - } - - if (q._tasks.length + workers === 0) { - q.drain(); - } - q.process(); - }; - } - - function runQueue() { - while (!q.paused && workers < q.concurrency && q._tasks.length) { - var task = q._tasks.shift(); - workers++; - workersList.push(task); - if (q._tasks.length === 0) { - q.empty(); - } - if (workers === q.concurrency) { - q.saturated(); - } - var done = _next(q, [task]); - worker(task.data, done); - } - } - - function runCargo() { - while (!q.paused && workers < q.concurrency && q._tasks.length) { - var tasks = q._tasks.splice(q.payload || q._tasks.length); - var index = -1; - var size = tasks.length; - var data = Array(size); - while (++index < size) { - data[index] = tasks[index].data; - } - workers++; - nativePush.apply(workersList, tasks); - if (q._tasks.length === 0) { - q.empty(); - } - if (workers === q.concurrency) { - q.saturated(); - } - var done = _next(q, tasks); - worker(data, done); - } - } - - function getLength() { - return q._tasks.length; - } - - function running() { - return workers; - } - - function getWorkersList() { - return workersList; - } - - function idle() { - return q.length() + workers === 0; - } - - function pause() { - q.paused = true; - } - - function _resume() { - nextTick(q.process); - } - - function resume() { - if (q.paused === false) { - return; - } - q.paused = false; - var count = q.concurrency < q._tasks.length ? q.concurrency : q._tasks.length; - timesSync(count, _resume); - } - - /** - * @param {Function} test - */ - function remove(test) { - q._tasks.remove(test); - } - } - - /** - * @memberof async - * @namespace queue - */ - function queue(worker, concurrency) { - return baseQueue(true, worker, concurrency); - } - - /** - * @memberof async - * @namespace priorityQueue - */ - function priorityQueue(worker, concurrency) { - var q = baseQueue(true, worker, concurrency); - q.push = push; - delete q.unshift; - return q; - - function push(tasks, priority, callback) { - q.started = true; - priority = priority || 0; - var _tasks = isArray(tasks) ? tasks : [tasks]; - var taskSize = _tasks.length; - - if (tasks === undefined || taskSize === 0) { - if (q.idle()) { - nextTick(q.drain); - } - return; - } - - callback = typeof callback === func ? callback : noop; - var nextNode = q._tasks.head; - while (nextNode && priority >= nextNode.priority) { - nextNode = nextNode.next; - } - while (taskSize--) { - var item = { - data: _tasks[taskSize], - priority: priority, - callback: callback - }; - if (nextNode) { - q._tasks.insertBefore(nextNode, item); - } else { - q._tasks.push(item); - } - nextTick(q.process); - } - } - } - - /** - * @memberof async - * @namespace cargo - */ - function cargo(worker, payload) { - return baseQueue(false, worker, 1, payload); - } - - /** - * @memberof async - * @namespace auto - * @param {Object} tasks - * @param {number} [concurrency] - * @param {Function} [callback] - */ - function auto(tasks, concurrency, callback) { - if (typeof concurrency === func) { - callback = concurrency; - concurrency = null; - } - var keys = nativeKeys(tasks); - var rest = keys.length; - var results = {}; - if (rest === 0) { - return callback(null, results); - } - var runningTasks = 0; - var readyTasks = new DLL(); - var listeners = Object.create(null); - callback = onlyOnce(callback || noop); - concurrency = concurrency || rest; - - baseEachSync(tasks, iterator, keys); - proceedQueue(); - - function iterator(task, key) { - // no dependencies - var _task, _taskSize; - if (!isArray(task)) { - _task = task; - _taskSize = 0; - readyTasks.push([_task, _taskSize, done]); - return; - } - var dependencySize = task.length - 1; - _task = task[dependencySize]; - _taskSize = dependencySize; - if (dependencySize === 0) { - readyTasks.push([_task, _taskSize, done]); - return; - } - // dependencies - var index = -1; - while (++index < dependencySize) { - var dependencyName = task[index]; - if (notInclude(keys, dependencyName)) { - var msg = - 'async.auto task `' + - key + - '` has non-existent dependency `' + - dependencyName + - '` in ' + - task.join(', '); - throw new Error(msg); - } - var taskListeners = listeners[dependencyName]; - if (!taskListeners) { - taskListeners = listeners[dependencyName] = []; - } - taskListeners.push(taskListener); - } - - function done(err, arg) { - if (key === null) { - throwError(); - } - arg = arguments.length <= 2 ? arg : slice(arguments, 1); - if (err) { - rest = 0; - runningTasks = 0; - readyTasks.length = 0; - var safeResults = objectClone(results); - safeResults[key] = arg; - key = null; - var _callback = callback; - callback = noop; - _callback(err, safeResults); - return; - } - runningTasks--; - rest--; - results[key] = arg; - taskComplete(key); - key = null; - } - - function taskListener() { - if (--dependencySize === 0) { - readyTasks.push([_task, _taskSize, done]); - } - } - } - - function proceedQueue() { - if (readyTasks.length === 0 && runningTasks === 0) { - if (rest !== 0) { - throw new Error('async.auto task has cyclic dependencies'); - } - return callback(null, results); - } - while (readyTasks.length && runningTasks < concurrency && callback !== noop) { - runningTasks++; - var array = readyTasks.shift(); - if (array[1] === 0) { - array[0](array[2]); - } else { - array[0](results, array[2]); - } - } - } - - function taskComplete(key) { - var taskListeners = listeners[key] || []; - arrayEachSync(taskListeners, function(task) { - task(); - }); - proceedQueue(); - } - } - - var FN_ARGS = /^(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; - var FN_ARG_SPLIT = /,/; - var FN_ARG = /(=.+)?(\s*)$/; - var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm; - - /** - * parse function arguments for `autoInject` - * - * @private - */ - function parseParams(func) { - func = func.toString().replace(STRIP_COMMENTS, ''); - func = func.match(FN_ARGS)[2].replace(' ', ''); - func = func ? func.split(FN_ARG_SPLIT) : []; - func = func.map(function(arg) { - return arg.replace(FN_ARG, '').trim(); - }); - return func; - } - - /** - * @memberof async - * @namespace autoInject - * @param {Object} tasks - * @param {number} [concurrency] - * @param {Function} [callback] - */ - function autoInject(tasks, concurrency, callback) { - var newTasks = {}; - baseEachSync(tasks, iterator, nativeKeys(tasks)); - auto(newTasks, concurrency, callback); - - function iterator(task, key) { - var params; - var taskLength = task.length; - - if (isArray(task)) { - if (taskLength === 0) { - throw new Error('autoInject task functions require explicit parameters.'); - } - params = createArray(task); - taskLength = params.length - 1; - task = params[taskLength]; - if (taskLength === 0) { - newTasks[key] = task; - return; - } - } else if (taskLength === 1) { - newTasks[key] = task; - return; - } else { - params = parseParams(task); - if (taskLength === 0 && params.length === 0) { - throw new Error('autoInject task functions require explicit parameters.'); - } - taskLength = params.length - 1; - } - params[taskLength] = newTask; - newTasks[key] = params; - - function newTask(results, done) { - switch (taskLength) { - case 1: - task(results[params[0]], done); - break; - case 2: - task(results[params[0]], results[params[1]], done); - break; - case 3: - task(results[params[0]], results[params[1]], results[params[2]], done); - break; - default: - var i = -1; - while (++i < taskLength) { - params[i] = results[params[i]]; - } - params[i] = done; - task.apply(null, params); - break; - } - } - } - } - - /** - * @memberof async - * @namespace retry - * @param {integer|Object|Function} opts - * @param {Function} [task] - * @param {Function} [callback] - */ - function retry(opts, task, callback) { - var times, intervalFunc, errorFilter; - var count = 0; - if (arguments.length < 3 && typeof opts === func) { - callback = task || noop; - task = opts; - opts = null; - times = DEFAULT_TIMES; - } else { - callback = callback || noop; - switch (typeof opts) { - case 'object': - if (typeof opts.errorFilter === func) { - errorFilter = opts.errorFilter; - } - var interval = opts.interval; - switch (typeof interval) { - case func: - intervalFunc = interval; - break; - case 'string': - case 'number': - interval = +interval; - intervalFunc = interval - ? function() { - return interval; - } - : function() { - return DEFAULT_INTERVAL; - }; - break; - } - times = +opts.times || DEFAULT_TIMES; - break; - case 'number': - times = opts || DEFAULT_TIMES; - break; - case 'string': - times = +opts || DEFAULT_TIMES; - break; - default: - throw new Error('Invalid arguments for async.retry'); - } - } - if (typeof task !== 'function') { - throw new Error('Invalid arguments for async.retry'); - } - - if (intervalFunc) { - task(intervalCallback); - } else { - task(simpleCallback); - } - - function simpleIterator() { - task(simpleCallback); - } - - function simpleCallback(err, res) { - if (++count === times || !err || (errorFilter && !errorFilter(err))) { - if (arguments.length <= 2) { - return callback(err, res); - } - var args = createArray(arguments); - return callback.apply(null, args); - } - simpleIterator(); - } - - function intervalIterator() { - task(intervalCallback); - } - - function intervalCallback(err, res) { - if (++count === times || !err || (errorFilter && !errorFilter(err))) { - if (arguments.length <= 2) { - return callback(err, res); - } - var args = createArray(arguments); - return callback.apply(null, args); - } - setTimeout(intervalIterator, intervalFunc(count)); - } - } - - function retryable(opts, task) { - if (!task) { - task = opts; - opts = null; - } - return done; - - function done() { - var taskFn; - var args = createArray(arguments); - var lastIndex = args.length - 1; - var callback = args[lastIndex]; - switch (task.length) { - case 1: - taskFn = task1; - break; - case 2: - taskFn = task2; - break; - case 3: - taskFn = task3; - break; - default: - taskFn = task4; - } - if (opts) { - retry(opts, taskFn, callback); - } else { - retry(taskFn, callback); - } - - function task1(done) { - task(done); - } - - function task2(done) { - task(args[0], done); - } - - function task3(done) { - task(args[0], args[1], done); - } - - function task4(callback) { - args[lastIndex] = callback; - task.apply(null, args); - } - } - } - - /** - * @memberof async - * @namespace iterator - */ - function iterator(tasks) { - var size = 0; - var keys = []; - if (isArray(tasks)) { - size = tasks.length; - } else { - keys = nativeKeys(tasks); - size = keys.length; - } - return makeCallback(0); - - function makeCallback(index) { - var fn = function() { - if (size) { - var key = keys[index] || index; - tasks[key].apply(null, createArray(arguments)); - } - return fn.next(); - }; - fn.next = function() { - return index < size - 1 ? makeCallback(index + 1) : null; - }; - return fn; - } - } - - /** - * @memberof async - * @namespace apply - */ - function apply(func) { - switch (arguments.length) { - case 0: - case 1: - return func; - case 2: - return func.bind(null, arguments[1]); - case 3: - return func.bind(null, arguments[1], arguments[2]); - case 4: - return func.bind(null, arguments[1], arguments[2], arguments[3]); - case 5: - return func.bind(null, arguments[1], arguments[2], arguments[3], arguments[4]); - default: - var size = arguments.length; - var index = 0; - var args = Array(size); - args[index] = null; - while (++index < size) { - args[index] = arguments[index]; - } - return func.bind.apply(func, args); - } - } - - /** - * @memberof async - * @namespace timeout - * @param {Function} func - * @param {number} millisec - * @param {*} info - */ - function timeout(func, millisec, info) { - var callback, timer; - return wrappedFunc; - - function wrappedFunc() { - timer = setTimeout(timeoutCallback, millisec); - var args = createArray(arguments); - var lastIndex = args.length - 1; - callback = args[lastIndex]; - args[lastIndex] = injectedCallback; - simpleApply(func, args); - } - - function timeoutCallback() { - var name = func.name || 'anonymous'; - var err = new Error('Callback function "' + name + '" timed out.'); - err.code = 'ETIMEDOUT'; - if (info) { - err.info = info; - } - timer = null; - callback(err); - } - - function injectedCallback() { - if (timer !== null) { - simpleApply(callback, createArray(arguments)); - clearTimeout(timer); - } - } - - function simpleApply(func, args) { - switch (args.length) { - case 0: - func(); - break; - case 1: - func(args[0]); - break; - case 2: - func(args[0], args[1]); - break; - default: - func.apply(null, args); - break; - } - } - } - - /** - * @memberof async - * @namespace times - * @param {number} n - n >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * var iterator = function(n, done) { - * done(null, n); - * }; - * async.times(4, iterator, function(err, res) { - * console.log(res); // [0, 1, 2, 3]; - * }); - * - */ - function times(n, iterator, callback) { - callback = callback || noop; - n = +n; - if (isNaN(n) || n < 1) { - return callback(null, []); - } - var result = Array(n); - timesSync(n, iterate); - - function iterate(num) { - iterator(num, createCallback(num)); - } - - function createCallback(index) { - return function(err, res) { - if (index === null) { - throwError(); - } - result[index] = res; - index = null; - if (err) { - callback(err); - callback = noop; - } else if (--n === 0) { - callback(null, result); - } - }; - } - } - - /** - * @memberof async - * @namespace timesSeries - * @param {number} n - n >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * var iterator = function(n, done) { - * done(null, n); - * }; - * async.timesSeries(4, iterator, function(err, res) { - * console.log(res); // [0, 1, 2, 3]; - * }); - * - */ - function timesSeries(n, iterator, callback) { - callback = callback || noop; - n = +n; - if (isNaN(n) || n < 1) { - return callback(null, []); - } - var result = Array(n); - var sync = false; - var completed = 0; - iterate(); - - function iterate() { - iterator(completed, done); - } - - function done(err, res) { - result[completed] = res; - if (err) { - callback(err); - callback = throwError; - } else if (++completed >= n) { - callback(null, result); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - } - } - - /** - * @memberof async - * @namespace timesLimit - * @param {number} n - n >= 1 - * @param {number} limit - n >= 1 - * @param {Function} iterator - * @param {Function} callback - * @example - * - * var iterator = function(n, done) { - * done(null, n); - * }; - * async.timesLimit(4, 2, iterator, function(err, res) { - * console.log(res); // [0, 1, 2, 3]; - * }); - * - */ - function timesLimit(n, limit, iterator, callback) { - callback = callback || noop; - n = +n; - if (isNaN(n) || n < 1 || isNaN(limit) || limit < 1) { - return callback(null, []); - } - var result = Array(n); - var sync = false; - var started = 0; - var completed = 0; - timesSync(limit > n ? n : limit, iterate); - - function iterate() { - var index = started++; - if (index < n) { - iterator(index, createCallback(index)); - } - } - - function createCallback(index) { - return function(err, res) { - if (index === null) { - throwError(); - } - result[index] = res; - index = null; - if (err) { - callback(err); - callback = noop; - } else if (++completed >= n) { - callback(null, result); - callback = throwError; - } else if (sync) { - nextTick(iterate); - } else { - sync = true; - iterate(); - } - sync = false; - }; - } - } - - /** - * @memberof async - * @namespace race - * @param {Array|Object} tasks - functions - * @param {Function} callback - * @example - * - * // array - * var called = 0; - * var tasks = [ - * function(done) { - * setTimeout(function() { - * called++; - * done(null, '1'); - * }, 30); - * }, - * function(done) { - * setTimeout(function() { - * called++; - * done(null, '2'); - * }, 20); - * }, - * function(done) { - * setTimeout(function() { - * called++; - * done(null, '3'); - * }, 10); - * } - * ]; - * async.race(tasks, function(err, res) { - * console.log(res); // '3' - * console.log(called); // 1 - * setTimeout(function() { - * console.log(called); // 3 - * }, 50); - * }); - * - * @example - * - * // object - * var called = 0; - * var tasks = { - * 'test1': function(done) { - * setTimeout(function() { - * called++; - * done(null, '1'); - * }, 30); - * }, - * 'test2': function(done) { - * setTimeout(function() { - * called++; - * done(null, '2'); - * }, 20); - * }, - * 'test3': function(done) { - * setTimeout(function() { - * called++; - * done(null, '3'); - * }, 10); - * } - * }; - * async.race(tasks, function(err, res) { - * console.log(res); // '3' - * console.log(called); // 1 - * setTimeout(function() { - * console.log(called); // 3 - * done(); - * }, 50); - * }); - * - */ - function race(tasks, callback) { - callback = once(callback || noop); - var size, keys; - var index = -1; - if (isArray(tasks)) { - size = tasks.length; - while (++index < size) { - tasks[index](callback); - } - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - size = keys.length; - while (++index < size) { - tasks[keys[index]](callback); - } - } else { - return callback(new TypeError('First argument to race must be a collection of functions')); - } - if (!size) { - callback(null); - } - } - - /** - * @memberof async - * @namespace memoize - */ - function memoize(fn, hasher) { - hasher = - hasher || - function(hash) { - return hash; - }; - - var memo = {}; - var queues = {}; - var memoized = function() { - var args = createArray(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (has(memo, key)) { - nextTick(function() { - callback.apply(null, memo[key]); - }); - return; - } - if (has(queues, key)) { - return queues[key].push(callback); - } - - queues[key] = [callback]; - args.push(done); - fn.apply(null, args); - - function done(err) { - var args = createArray(arguments); - if (!err) { - memo[key] = args; - } - var q = queues[key]; - delete queues[key]; - - var i = -1; - var size = q.length; - while (++i < size) { - q[i].apply(null, args); - } - } - }; - memoized.memo = memo; - memoized.unmemoized = fn; - return memoized; - } - - /** - * @memberof async - * @namespace unmemoize - */ - function unmemoize(fn) { - return function() { - return (fn.unmemoized || fn).apply(null, arguments); - }; - } - - /** - * @memberof async - * @namespace ensureAsync - */ - function ensureAsync(fn) { - return function(/* ...args, callback */) { - var args = createArray(arguments); - var lastIndex = args.length - 1; - var callback = args[lastIndex]; - var sync = true; - args[lastIndex] = done; - fn.apply(this, args); - sync = false; - - function done() { - var innerArgs = createArray(arguments); - if (sync) { - nextTick(function() { - callback.apply(null, innerArgs); - }); - } else { - callback.apply(null, innerArgs); - } - } - }; - } - - /** - * @memberof async - * @namespace constant - */ - function constant(/* values... */) { - var args = [null].concat(createArray(arguments)); - return function(callback) { - callback = arguments[arguments.length - 1]; - callback.apply(this, args); - }; - } - - function asyncify(fn) { - return function(/* args..., callback */) { - var args = createArray(arguments); - var callback = args.pop(); - var result; - try { - result = fn.apply(this, args); - } catch (e) { - return callback(e); - } - if (result && typeof result.then === func) { - result.then( - function(value) { - invokeCallback(callback, null, value); - }, - function(err) { - invokeCallback(callback, err && err.message ? err : new Error(err)); - } - ); - } else { - callback(null, result); - } - }; - } - - function invokeCallback(callback, err, value) { - try { - callback(err, value); - } catch (e) { - nextTick(rethrow, e); - } - } - - function rethrow(error) { - throw error; - } - - /** - * @memberof async - * @namespace reflect - * @param {Function} func - * @return {Function} - */ - function reflect(func) { - return function(/* args..., callback */) { - var callback; - switch (arguments.length) { - case 1: - callback = arguments[0]; - return func(done); - case 2: - callback = arguments[1]; - return func(arguments[0], done); - default: - var args = createArray(arguments); - var lastIndex = args.length - 1; - callback = args[lastIndex]; - args[lastIndex] = done; - func.apply(this, args); - } - - function done(err, res) { - if (err) { - return callback(null, { - error: err - }); - } - if (arguments.length > 2) { - res = slice(arguments, 1); - } - callback(null, { - value: res - }); - } - }; - } - - /** - * @memberof async - * @namespace reflectAll - * @param {Array[]|Object} tasks - * @return {Function} - */ - function reflectAll(tasks) { - var newTasks, keys; - if (isArray(tasks)) { - newTasks = Array(tasks.length); - arrayEachSync(tasks, iterate); - } else if (tasks && typeof tasks === obj) { - keys = nativeKeys(tasks); - newTasks = {}; - baseEachSync(tasks, iterate, keys); - } - return newTasks; - - function iterate(func, key) { - newTasks[key] = reflect(func); - } - } - - /** - * @memberof async - * @namespace createLogger - */ - function createLogger(name) { - return function(fn) { - var args = slice(arguments, 1); - args.push(done); - fn.apply(null, args); - }; - - function done(err) { - if (typeof console === obj) { - if (err) { - if (console.error) { - console.error(err); - } - return; - } - if (console[name]) { - var args = slice(arguments, 1); - arrayEachSync(args, function(arg) { - console[name](arg); - }); - } - } - } - } - - /** - * @memberof async - * @namespace safe - */ - function safe() { - createImmediate(); - return exports; - } - - /** - * @memberof async - * @namespace fast - */ - function fast() { - createImmediate(false); - return exports; - } -}); diff --git a/conf/site/node_modules/sass-loader/node_modules/neo-async/async.min.js b/conf/site/node_modules/sass-loader/node_modules/neo-async/async.min.js deleted file mode 100644 index 4161a3f6..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/neo-async/async.min.js +++ /dev/null @@ -1,80 +0,0 @@ -(function(N,O){"object"===typeof exports&&"undefined"!==typeof module?O(exports):"function"===typeof define&&define.amd?define(["exports"],O):N.async?O(N.neo_async=N.neo_async||{}):O(N.async=N.async||{})})(this,function(N){function O(a){var c=function(a){var d=J(arguments,1);setTimeout(function(){a.apply(null,d)})};T="function"===typeof setImmediate?setImmediate:c;"object"===typeof process&&"function"===typeof process.nextTick?(D=/^v0.10/.test(process.version)?T:process.nextTick,ba=/^v0/.test(process.version)? -T:process.nextTick):ba=D=T;!1===a&&(D=function(a){a()})}function H(a){for(var c=-1,b=a.length,d=Array(b);++c=d)return[];for(var e=Array(d);++bd[e]){var g=d[f]; -d[f]=d[e];d[e]=g}}if(!(e>b)){for(var l,e=a[a[c]>a[e]?c:e],f=c,g=b;f<=g;){for(l=f;f=l&&a[g]>=e;)g--;if(f>g)break;var q=a;l=d;var s=f++,h=g--,k=q[s];q[s]=q[h];q[h]=k;q=l[s];l[s]=l[h];l[h]=q}e=f;ca(a,c,e-1,d);ca(a,e,b,d)}}}function S(a){var c=[];Q(a,function(a){a!==w&&(C(a)?X.apply(c,a):c.push(a))});return c}function da(a,c,b){var d=-1,e=a.length;if(3===c.length)for(;++db)return e(null,[]);y=y||Array(m);K(b>m?m:b,x)}}function Y(a,c,b){function d(){c(a[v],s)}function e(){c(a[v],v,s)}function f(){n=r.next();n.done?b(null):c(n.value,s)}function g(){n=r.next();n.done?b(null):c(n.value,v,s)}function l(){c(a[m[v]],s)}function q(){k=m[v];c(a[k],k,s)}function s(a,d){a?b(a):++v===h||!1===d?(p=A,b(null)):u?D(p): -(u=!0,p());u=!1}b=E(b||w);var h,k,m,r,n,p,u=!1,v=0;C(a)?(h=a.length,p=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,r=a[z](),p=3===c.length?g:f):"object"===typeof a&&(m=F(a),h=m.length,p=3===c.length?q:l));if(!h)return b(null);p()}function Z(a,c,b,d){function e(){xc)return d(null);K(c>k?k:c,v)}function za(a,c,b){function d(){c(a[t],s)}function e(){c(a[t],t,s)}function f(){n=r.next(); -n.done?b(null,p):c(n.value,s)}function g(){n=r.next();n.done?b(null,p):c(n.value,t,s)}function l(){c(a[m[t]],s)}function q(){k=m[t];c(a[k],k,s)}function s(a,d){a?(u=A,b=E(b),b(a,H(p))):(p[t]=d,++t===h?(u=A,b(null,p),b=A):v?D(u):(v=!0,u()),v=!1)}b=b||w;var h,k,m,r,n,p,u,v=!1,t=0;C(a)?(h=a.length,u=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,p=[],r=a[z](),u=3===c.length?g:f):"object"===typeof a&&(m=F(a),h=m.length,u=3===c.length?q:l));if(!h)return b(null,[]);p=p||Array(h);u()}function Aa(a,c,b,d){return function(e, -f,g){function l(a){var b=!1;return function(c,e){b&&A();b=!0;c?(g=I(g),g(c)):!!e===d?(g=I(g),g(null,a)):++h===q&&g(null)}}g=g||w;var q,s,h=0;C(e)?(q=e.length,a(e,f,l)):e&&(z&&e[z]?(q=b(e,f,l))&&q===h&&g(null):"object"===typeof e&&(s=F(e),q=s.length,c(e,f,l,s)));q||g(null)}}function Ba(a){return function(c,b,d){function e(){r=c[x];b(r,h)}function f(){r=c[x];b(r,x,h)}function g(){u=p.next();r=u.value;u.done?d(null):b(r,h)}function l(){u=p.next();r=u.value;u.done?d(null):b(r,x,h)}function q(){r=c[n[x]]; -b(r,h)}function s(){m=n[x];r=c[m];b(r,m,h)}function h(b,c){b?d(b):!!c===a?(v=A,d(null,r)):++x===k?(v=A,d(null)):t?D(v):(t=!0,v());t=!1}d=E(d||w);var k,m,r,n,p,u,v,t=!1,x=0;C(c)?(k=c.length,v=3===b.length?f:e):c&&(z&&c[z]?(k=Infinity,p=c[z](),v=3===b.length?l:g):"object"===typeof c&&(n=F(c),k=n.length,v=3===b.length?s:q));if(!k)return d(null);v()}}function Ca(a){return function(c,b,d,e){function f(){r=G++;rb)return e(null);K(b>m?m:b,x)}}function Da(a,c,b,d){return function(e,f,g){function l(a,b){return function(c,e){null===a&&A();c?(a=null,g=I(g),g(c,L(k))):(!!e===d&&(k[a]=b),a=null,++h===q&&g(null,k))}}g=g||w;var q,s,h=0,k={};C(e)?(q=e.length,a(e,f,l)):e&&(z&&e[z]?(q=b(e,f,l))&&q===h&&g(null,k):"object"===typeof e&&(s=F(e),q=s.length,c(e,f,l,s)));if(!q)return g(null,{})}}function Ea(a){return function(c, -b,d){function e(){m=y;r=c[y];b(r,h)}function f(){m=y;r=c[y];b(r,y,h)}function g(){m=y;u=p.next();r=u.value;u.done?d(null,x):b(r,h)}function l(){m=y;u=p.next();r=u.value;u.done?d(null,x):b(r,m,h)}function q(){m=n[y];r=c[m];b(r,h)}function s(){m=n[y];r=c[m];b(r,m,h)}function h(b,c){b?d(b,x):(!!c===a&&(x[m]=r),++y===k?(v=A,d(null,x)):t?D(v):(t=!0,v()),t=!1)}d=E(d||w);var k,m,r,n,p,u,v,t=!1,x={},y=0;C(c)?(k=c.length,v=3===b.length?f:e):c&&(z&&c[z]?(k=Infinity,p=c[z](),v=3===b.length?l:g):"object"===typeof c&& -(n=F(c),k=n.length,v=3===b.length?s:q));if(!k)return d(null,{});v()}}function Fa(a){return function(c,b,d,e){function f(){r=B++;rb)return e(null,{});K(b>m?m:b,x)}}function $(a,c,b,d){function e(d){b(d,a[t],h)}function f(d){b(d,a[t],t,h)}function g(a){p=n.next();p.done?d(null,a):b(a,p.value, -h)}function l(a){p=n.next();p.done?d(null,a):b(a,p.value,t,h)}function q(d){b(d,a[r[t]],h)}function s(d){m=r[t];b(d,a[m],m,h)}function h(a,c){a?d(a,c):++t===k?(b=A,d(null,c)):v?D(function(){u(c)}):(v=!0,u(c));v=!1}d=E(d||w);var k,m,r,n,p,u,v=!1,t=0;C(a)?(k=a.length,u=4===b.length?f:e):a&&(z&&a[z]?(k=Infinity,n=a[z](),u=4===b.length?l:g):"object"===typeof a&&(r=F(a),k=r.length,u=4===b.length?s:q));if(!k)return d(null,c);u(c)}function Ga(a,c,b,d){function e(d){b(d,a[--s],q)}function f(d){b(d,a[--s], -s,q)}function g(d){b(d,a[m[--s]],q)}function l(d){k=m[--s];b(d,a[k],k,q)}function q(a,b){a?d(a,b):0===s?(u=A,d(null,b)):v?D(function(){u(b)}):(v=!0,u(b));v=!1}d=E(d||w);var s,h,k,m,r,n,p,u,v=!1;if(C(a))s=a.length,u=4===b.length?f:e;else if(a)if(z&&a[z]){p=[];r=a[z]();for(h=-1;!1===(n=r.next()).done;)p[++h]=n.value;a=p;s=p.length;u=4===b.length?f:e}else"object"===typeof a&&(m=F(a),s=m.length,u=4===b.length?l:g);if(!s)return d(null,c);u(c)}function Ha(a,c,b){b=b||w;ja(a,c,function(a,c){if(a)return b(a); -b(null,!!c)})}function Ia(a,c,b){b=b||w;ka(a,c,function(a,c){if(a)return b(a);b(null,!!c)})}function Ja(a,c,b,d){d=d||w;la(a,c,b,function(a,b){if(a)return d(a);d(null,!!b)})}function Ka(a,c){return C(a)?0===a.length?(c(null),!1):!0:(c(Error("First argument to waterfall must be an array of functions")),!1)}function ma(a,c,b){switch(c.length){case 0:case 1:return a(b);case 2:return a(c[1],b);case 3:return a(c[1],c[2],b);case 4:return a(c[1],c[2],c[3],b);case 5:return a(c[1],c[2],c[3],c[4],b);case 6:return a(c[1], -c[2],c[3],c[4],c[5],b);default:return c=J(c,1),c.push(b),a.apply(null,c)}}function La(a,c){function b(b,h){if(b)q=A,c=E(c),c(b);else if(++d===f){q=A;var k=c;c=A;2===arguments.length?k(b,h):k.apply(null,H(arguments))}else g=a[d],l=arguments,e?D(q):(e=!0,q()),e=!1}c=c||w;if(Ka(a,c)){var d=0,e=!1,f=a.length,g=a[d],l=[],q=function(){switch(g.length){case 0:try{b(null,g())}catch(a){b(a)}break;case 1:return g(b);case 2:return g(l[1],b);case 3:return g(l[1],l[2],b);case 4:return g(l[1],l[2],l[3],b);case 5:return g(l[1], -l[2],l[3],l[4],b);default:return l=J(l,1),l[g.length-1]=b,g.apply(null,l)}};q()}}function Ma(){var a=H(arguments);return function(){var c=this,b=H(arguments),d=b[b.length-1];"function"===typeof d?b.pop():d=w;$(a,b,function(a,b,d){a.push(function(a){var b=J(arguments,1);d(a,b)});b.apply(c,a)},function(a,b){b=C(b)?b:[b];b.unshift(a);d.apply(c,b)})}}function Na(a){return function(c){var b=function(){var b=this,d=H(arguments),g=d.pop()||w;return a(c,function(a,c){a.apply(b,d.concat([c]))},g)};if(1b)throw Error("Concurrency must not be zero");var h=0,k=[],m,r,n={_tasks:new M,concurrency:b,payload:d,saturated:w,unsaturated:w,buffer:b/4,empty:w,drain:w,error:w,started:!1,paused:!1,push:function(a, -b){f(a,b)},kill:function(){n.drain=w;n._tasks.empty()},unshift:function(a,b){f(a,b,!0)},remove:function(a){n._tasks.remove(a)},process:a?l:q,length:function(){return n._tasks.length},running:function(){return h},workersList:function(){return k},idle:function(){return 0===n.length()+h},pause:function(){n.paused=!0},resume:function(){!1!==n.paused&&(n.paused=!1,K(n.concurrency=arguments.length?f:J(arguments,1);if(a){q=g=0;s.length=0;var k=L(l);k[d]=f;d=null;var h= -b;b=w;h(a,k)}else q--,g--,l[d]=f,e(d),d=null}function n(){0===--v&&s.push([p,u,c])}var p,u;if(C(a)){var v=a.length-1;p=a[v];u=v;if(0===v)s.push([p,u,c]);else for(var t=-1;++t=arguments.length)return b(a,e);var f=H(arguments);return b.apply(null,f)}c(d)}function e(){c(f)}function f(a,d){if(++s===g||!a||q&&!q(a)){if(2>=arguments.length)return b(a,d);var c=H(arguments);return b.apply(null,c)}setTimeout(e,l(s))}var g,l,q,s=0;if(3>arguments.length&&"function"===typeof a)b=c||w,c=a,a=null,g=5;else switch(b=b||w,typeof a){case "object":"function"===typeof a.errorFilter&&(q=a.errorFilter);var h=a.interval; -switch(typeof h){case "function":l=h;break;case "string":case "number":l=(h=+h)?function(){return h}:function(){return 0}}g=+a.times||5;break;case "number":g=a||5;break;case "string":g=+a||5;break;default:throw Error("Invalid arguments for async.retry");}if("function"!==typeof c)throw Error("Invalid arguments for async.retry");l?c(f):c(d)}function Pa(a){return function(){var c=H(arguments),b=c.pop(),d;try{d=a.apply(this,c)}catch(e){return b(e)}d&&"function"===typeof d.then?d.then(function(a){try{b(null, -a)}catch(d){D(Qa,d)}},function(a){a=a&&a.message?a:Error(a);try{b(a,void 0)}catch(d){D(Qa,d)}}):b(null,d)}}function Qa(a){throw a;}function Ra(a){return function(){function c(a,d){if(a)return b(null,{error:a});2=arguments.length?c:J(arguments,1),a=null,++q===f&&d(null,l))}}d=d||w;var f,g,l,q=0;C(b)?(f=b.length,l=Array(f),a(b,e)):b&&"object"===typeof b&&(g=F(b),f=g.length,l={},c(b,e,g));f||d(null,l)}}(function(a,c){for(var b=-1,d=a.length;++bc)return d(null,[]);v=v||Array(k);K(c>k?k:c,t)},mapValues:fb,mapValuesSeries:function(a,c,b){function d(){k=t;c(a[t], -s)}function e(){k=t;c(a[t],t,s)}function f(){k=t;n=r.next();n.done?b(null,v):c(n.value,s)}function g(){k=t;n=r.next();n.done?b(null,v):c(n.value,t,s)}function l(){k=m[t];c(a[k],s)}function q(){k=m[t];c(a[k],k,s)}function s(a,d){a?(p=A,b=E(b),b(a,L(v))):(v[k]=d,++t===h?(p=A,b(null,v),b=A):u?D(p):(u=!0,p()),u=!1)}b=b||w;var h,k,m,r,n,p,u=!1,v={},t=0;C(a)?(h=a.length,p=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,r=a[z](),p=3===c.length?g:f):"object"===typeof a&&(m=F(a),h=m.length,p=3===c.length?q:l)); -if(!h)return b(null,v);p()},mapValuesLimit:function(a,c,b,d){function e(){m=y++;mc)return d(null,x);K(c>k?k:c,v)},filter:Ta,filterSeries:Ua,filterLimit:Va,select:Ta,selectSeries:Ua,selectLimit:Va,reject:gb,rejectSeries:hb,rejectLimit:ib,detect:ja,detectSeries:ka,detectLimit:la,find:ja,findSeries:ka,findLimit:la,pick:jb,pickSeries:kb, -pickLimit:lb,omit:mb,omitSeries:nb,omitLimit:ob,reduce:$,inject:$,foldl:$,reduceRight:Ga,foldr:Ga,transform:pb,transformSeries:function(a,c,b,d){function e(){b(v,a[x],h)}function f(){b(v,a[x],x,h)}function g(){p=n.next();p.done?d(null,v):b(v,p.value,h)}function l(){p=n.next();p.done?d(null,v):b(v,p.value,x,h)}function q(){b(v,a[r[x]],h)}function s(){m=r[x];b(v,a[m],m,h)}function h(a,b){a?d(a,v):++x===k||!1===b?(u=A,d(null,v)):t?D(u):(t=!0,u());t=!1}3===arguments.length&&(d=b,b=c,c=void 0);d=E(d|| -w);var k,m,r,n,p,u,v,t=!1,x=0;C(a)?(k=a.length,v=void 0!==c?c:[],u=4===b.length?f:e):a&&(z&&a[z]?(k=Infinity,n=a[z](),v=void 0!==c?c:{},u=4===b.length?l:g):"object"===typeof a&&(r=F(a),k=r.length,v=void 0!==c?c:{},u=4===b.length?s:q));if(!k)return d(null,void 0!==c?c:v||{});u()},transformLimit:function(a,c,b,d,e){function f(){r=A++;rc)return e(null,void 0!==b?b:x||{});K(c>m?m:c,t)},sortBy:qb,sortBySeries:function(a,c,b){function d(){m=a[y];c(m,s)}function e(){m=a[y];c(m,y,s)}function f(){p=n.next();if(p.done)return b(null,P(u,v));m=p.value;u[y]=m;c(m,s)}function g(){p=n.next();if(p.done)return b(null,P(u,v));m=p.value;u[y]=m;c(m,y,s)}function l(){m=a[r[y]];u[y]=m;c(m,s)}function q(){k=r[y];m=a[k];u[y]=m;c(m,k,s)}function s(a,d){v[y]=d;a?b(a):++y===h?(t=A,b(null, -P(u,v))):x?D(t):(x=!0,t());x=!1}b=E(b||w);var h,k,m,r,n,p,u,v,t,x=!1,y=0;C(a)?(h=a.length,u=a,v=Array(h),t=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,u=[],v=[],n=a[z](),t=3===c.length?g:f):"object"===typeof a&&(r=F(a),h=r.length,u=Array(h),v=Array(h),t=3===c.length?q:l));if(!h)return b(null,[]);t()},sortByLimit:function(a,c,b,d){function e(){Bc)return d(null,[]);x=x||Array(k);K(c>k?k:c,y)},some:Ha,someSeries:Ia,someLimit:Ja,any:Ha,anySeries:Ia,anyLimit:Ja,every:Wa,everySeries:Xa,everyLimit:Ya,all:Wa,allSeries:Xa,allLimit:Ya,concat:rb,concatSeries:function(a,c,b){function d(){c(a[t],s)}function e(){c(a[t],t,s)}function f(){n=r.next();n.done?b(null,v):c(n.value,s)}function g(){n=r.next();n.done?b(null,v):c(n.value,t,s)}function l(){c(a[m[t]], -s)}function q(){k=m[t];c(a[k],k,s)}function s(a,d){C(d)?X.apply(v,d):2<=arguments.length&&X.apply(v,J(arguments,1));a?b(a,v):++t===h?(p=A,b(null,v)):u?D(p):(u=!0,p());u=!1}b=E(b||w);var h,k,m,r,n,p,u=!1,v=[],t=0;C(a)?(h=a.length,p=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,r=a[z](),p=3===c.length?g:f):"object"===typeof a&&(m=F(a),h=m.length,p=3===c.length?q:l));if(!h)return b(null,v);p()},concatLimit:function(a,c,b,d){function e(){tc)return d(null,[]);u=u||Array(k);K(c>k?k:c,p)},groupBy:sb,groupBySeries:function(a,c,b){function d(){m=a[t];c(m,s)}function e(){m=a[t];c(m,t,s)}function f(){p=n.next();m=p.value;p.done?b(null,x):c(m,s)}function g(){p=n.next();m=p.value;p.done? -b(null,x):c(m,t,s)}function l(){m=a[r[t]];c(m,s)}function q(){k=r[t];m=a[k];c(m,k,s)}function s(a,d){if(a)u=A,b=E(b),b(a,L(x));else{var c=x[d];c?c.push(m):x[d]=[m];++t===h?(u=A,b(null,x)):v?D(u):(v=!0,u());v=!1}}b=E(b||w);var h,k,m,r,n,p,u,v=!1,t=0,x={};C(a)?(h=a.length,u=3===c.length?e:d):a&&(z&&a[z]?(h=Infinity,n=a[z](),u=3===c.length?g:f):"object"===typeof a&&(r=F(a),h=r.length,u=3===c.length?q:l));if(!h)return b(null,x);u()},groupByLimit:function(a,c,b,d){function e(){yc)return d(null,B);K(c>k?k:c,t)},parallel:tb,series:function(a,c){function b(){g=k;a[k](e)}function d(){g=l[k];a[g](e)}function e(a,b){a?(s=A,c=E(c),c(a,q)):(q[g]=2>=arguments.length?b:J(arguments,1),++k===f?(s=A,c(null,q)):h?D(s):(h=!0,s()),h=!1)}c=c||w;var f,g,l,q,s,h=!1,k=0;if(C(a))f=a.length,q=Array(f), -s=b;else if(a&&"object"===typeof a)l=F(a),f=l.length,q={},s=d;else return c(null);if(!f)return c(null,q);s()},parallelLimit:function(a,c,b){function d(){l=r++;if(l=arguments.length?c:J(arguments,1),a=null,++n===g?b(null,h):m?D(k):(m=!0,k()),m=!1)}}b=b||w;var g,l,q,s,h,k,m=!1,r=0,n=0;C(a)?(g=a.length,h=Array(g),k=d):a&&"object"===typeof a&&(s=F(a),g=s.length,h= -{},k=e);if(!g||isNaN(c)||1>c)return b(null,h);K(c>g?g:c,k)},tryEach:function(a,c){function b(){a[q](e)}function d(){a[g[q]](e)}function e(a,b){a?++q===f?c(a):l():2>=arguments.length?c(null,b):c(null,J(arguments,1))}c=c||w;var f,g,l,q=0;C(a)?(f=a.length,l=b):a&&"object"===typeof a&&(g=F(a),f=g.length,l=d);if(!f)return c(null);l()},waterfall:function(a,c){function b(){ma(e,f,d(e))}function d(h){return function(k,m){void 0===h&&(c=w,A());h=void 0;k?(g=c,c=A,g(k)):++q===s?(g=c,c=A,2>=arguments.length? -g(k,m):g.apply(null,H(arguments))):(l?(f=arguments,e=a[q]||A,D(b)):(l=!0,ma(a[q]||A,arguments,d(q))),l=!1)}}c=c||w;if(Ka(a,c)){var e,f,g,l,q=0,s=a.length;ma(a[0],[],d(0))}},angelFall:La,angelfall:La,whilst:function(a,c,b){function d(){g?D(e):(g=!0,c(f));g=!1}function e(){c(f)}function f(c,e){if(c)return b(c);2>=arguments.length?a(e)?d():b(null,e):(e=J(arguments,1),a.apply(null,e)?d():b.apply(null,[null].concat(e)))}b=b||w;var g=!1;a()?d():b(null)},doWhilst:function(a,c,b){function d(){g?D(e):(g=!0, -a(f));g=!1}function e(){a(f)}function f(a,e){if(a)return b(a);2>=arguments.length?c(e)?d():b(null,e):(e=J(arguments,1),c.apply(null,e)?d():b.apply(null,[null].concat(e)))}b=b||w;var g=!1;e()},until:function(a,c,b){function d(){g?D(e):(g=!0,c(f));g=!1}function e(){c(f)}function f(c,e){if(c)return b(c);2>=arguments.length?a(e)?b(null,e):d():(e=J(arguments,1),a.apply(null,e)?b.apply(null,[null].concat(e)):d())}b=b||w;var g=!1;a()?b(null):d()},doUntil:function(a,c,b){function d(){g?D(e):(g=!0,a(f));g= -!1}function e(){a(f)}function f(a,e){if(a)return b(a);2>=arguments.length?c(e)?b(null,e):d():(e=J(arguments,1),c.apply(null,e)?b.apply(null,[null].concat(e)):d())}b=b||w;var g=!1;e()},during:function(a,c,b){function d(a,d){if(a)return b(a);d?c(e):b(null)}function e(c){if(c)return b(c);a(d)}b=b||w;a(d)},doDuring:function(a,c,b){function d(d,c){if(d)return b(d);c?a(e):b(null)}function e(a,e){if(a)return b(a);switch(arguments.length){case 0:case 1:c(d);break;case 2:c(e,d);break;default:var l=J(arguments, -1);l.push(d);c.apply(null,l)}}b=b||w;d(null,!0)},forever:function(a,c){function b(){a(d)}function d(a){if(a){if(c)return c(a);throw a;}e?D(b):(e=!0,b());e=!1}var e=!1;b()},compose:function(){return Ma.apply(null,Za(arguments))},seq:Ma,applyEach:ub,applyEachSeries:vb,queue:function(a,c){return na(!0,a,c)},priorityQueue:function(a,c){var b=na(!0,a,c);b.push=function(a,c,f){b.started=!0;c=c||0;var g=C(a)?a:[a],l=g.length;if(void 0===a||0===l)b.idle()&&D(b.drain);else{f="function"===typeof f?f:w;for(a= -b._tasks.head;a&&c>=a.priority;)a=a.next;for(;l--;){var q={data:g[l],priority:c,callback:f};a?b._tasks.insertBefore(a,q):b._tasks.push(q);D(b.process)}}};delete b.unshift;return b},cargo:function(a,c){return na(!1,a,1,c)},auto:Oa,autoInject:function(a,c,b){var d={};W(a,function(a,b){var c,l=a.length;if(C(a)){if(0===l)throw Error("autoInject task functions require explicit parameters.");c=H(a);l=c.length-1;a=c[l];if(0===l){d[b]=a;return}}else{if(1===l){d[b]=a;return}c=ab(a);if(0===l&&0===c.length)throw Error("autoInject task functions require explicit parameters."); -l=c.length-1}c[l]=function(b,d){switch(l){case 1:a(b[c[0]],d);break;case 2:a(b[c[0]],b[c[1]],d);break;case 3:a(b[c[0]],b[c[1]],b[c[2]],d);break;default:for(var f=-1;++fa)return b(null,[]);var e=Array(a);K(a,function(a){c(a,d(a))})},timesSeries:function(a,c,b){function d(){c(l, -e)}function e(c,e){f[l]=e;c?(b(c),b=A):++l>=a?(b(null,f),b=A):g?D(d):(g=!0,d());g=!1}b=b||w;a=+a;if(isNaN(a)||1>a)return b(null,[]);var f=Array(a),g=!1,l=0;d()},timesLimit:function(a,c,b,d){function e(){var c=q++;c=a?(d(null,g),d=A):l?D(e):(l=!0,e());l=!1}}d=d||w;a=+a;if(isNaN(a)||1>a||isNaN(c)||1>c)return d(null,[]);var g=Array(a),l=!1,q=0,s=0;K(c>a?a:c,e)},race:function(a,c){c=I(c||w);var b,d,e=-1;if(C(a))for(b= -a.length;++e -# [1.0.0](https://github.com/webpack-contrib/schema-utils/compare/v0.4.7...v1.0.0) (2018-08-07) - - -### Features - -* **src:** add support for custom error messages ([#33](https://github.com/webpack-contrib/schema-utils/issues/33)) ([1cbe4ef](https://github.com/webpack-contrib/schema-utils/commit/1cbe4ef)) - - - - -## [0.4.7](https://github.com/webpack-contrib/schema-utils/compare/v0.4.6...v0.4.7) (2018-08-07) - - -### Bug Fixes - -* **src:** `node >= v4.0.0` support ([#32](https://github.com/webpack-contrib/schema-utils/issues/32)) ([cb13dd4](https://github.com/webpack-contrib/schema-utils/commit/cb13dd4)) - - - - -## [0.4.6](https://github.com/webpack-contrib/schema-utils/compare/v0.4.5...v0.4.6) (2018-08-06) - - -### Bug Fixes - -* **package:** remove lockfile ([#28](https://github.com/webpack-contrib/schema-utils/issues/28)) ([69f1a81](https://github.com/webpack-contrib/schema-utils/commit/69f1a81)) -* **package:** remove unnecessary `webpack` dependency ([#26](https://github.com/webpack-contrib/schema-utils/issues/26)) ([532eaa5](https://github.com/webpack-contrib/schema-utils/commit/532eaa5)) - - - - -## [0.4.5](https://github.com/webpack-contrib/schema-utils/compare/v0.4.4...v0.4.5) (2018-02-13) - - -### Bug Fixes - -* **CHANGELOG:** update broken links ([4483b9f](https://github.com/webpack-contrib/schema-utils/commit/4483b9f)) -* **package:** update broken links ([f2494ba](https://github.com/webpack-contrib/schema-utils/commit/f2494ba)) - - - - -## [0.4.4](https://github.com/webpack-contrib/schema-utils/compare/v0.4.3...v0.4.4) (2018-02-13) - - -### Bug Fixes - -* **package:** update `dependencies` ([#22](https://github.com/webpack-contrib/schema-utils/issues/22)) ([3aecac6](https://github.com/webpack-contrib/schema-utils/commit/3aecac6)) - - - - -## [0.4.3](https://github.com/webpack-contrib/schema-utils/compare/v0.4.2...v0.4.3) (2017-12-14) - - -### Bug Fixes - -* **validateOptions:** throw `err` instead of `process.exit(1)` ([#17](https://github.com/webpack-contrib/schema-utils/issues/17)) ([c595eda](https://github.com/webpack-contrib/schema-utils/commit/c595eda)) -* **ValidationError:** never return `this` in the ctor ([#16](https://github.com/webpack-contrib/schema-utils/issues/16)) ([c723791](https://github.com/webpack-contrib/schema-utils/commit/c723791)) - - - - -## [0.4.2](https://github.com/webpack-contrib/schema-utils/compare/v0.4.1...v0.4.2) (2017-11-09) - - -### Bug Fixes - -* **validateOptions:** catch `ValidationError` and handle it internally ([#15](https://github.com/webpack-contrib/schema-utils/issues/15)) ([9c5ef5e](https://github.com/webpack-contrib/schema-utils/commit/9c5ef5e)) - - - - -## [0.4.1](https://github.com/webpack-contrib/schema-utils/compare/v0.4.0...v0.4.1) (2017-11-03) - - -### Bug Fixes - -* **ValidationError:** use `Error.captureStackTrace` for `err.stack` handling ([#14](https://github.com/webpack-contrib/schema-utils/issues/14)) ([a6fb974](https://github.com/webpack-contrib/schema-utils/commit/a6fb974)) - - - - -# [0.4.0](https://github.com/webpack-contrib/schema-utils/compare/v0.3.0...v0.4.0) (2017-10-28) - - -### Features - -* add support for `typeof`, `instanceof` (`{Function\|RegExp}`) ([#10](https://github.com/webpack-contrib/schema-utils/issues/10)) ([9f01816](https://github.com/webpack-contrib/schema-utils/commit/9f01816)) - - - - -# [0.3.0](https://github.com/webpack-contrib/schema-utils/compare/v0.2.1...v0.3.0) (2017-04-29) - - -### Features - -* add ValidationError ([#8](https://github.com/webpack-contrib/schema-utils/issues/8)) ([d48f0fb](https://github.com/webpack-contrib/schema-utils/commit/d48f0fb)) - - - - -## [0.2.1](https://github.com/webpack-contrib/schema-utils/compare/v0.2.0...v0.2.1) (2017-03-13) - - -### Bug Fixes - -* Include .babelrc to `files` ([28f0363](https://github.com/webpack-contrib/schema-utils/commit/28f0363)) -* Include source to `files` ([43b0f2f](https://github.com/webpack-contrib/schema-utils/commit/43b0f2f)) - - - - -# [0.2.0](https://github.com/webpack-contrib/schema-utils/compare/v0.1.0...v0.2.0) (2017-03-12) - - -# 0.1.0 (2017-03-07) - - -### Features - -* **validations:** add validateOptions module ([ae9b47b](https://github.com/webpack-contrib/schema-utils/commit/ae9b47b)) - - - -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/LICENSE b/conf/site/node_modules/sass-loader/node_modules/schema-utils/LICENSE deleted file mode 100644 index 8c11fc72..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/README.md b/conf/site/node_modules/sass-loader/node_modules/schema-utils/README.md deleted file mode 100644 index 18fb3b94..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/README.md +++ /dev/null @@ -1,276 +0,0 @@ - - -[![npm][npm]][npm-url] -[![node][node]][node-url] -[![deps][deps]][deps-url] -[![tests][tests]][tests-url] -[![coverage][cover]][cover-url] -[![chat][chat]][chat-url] -[![size][size]][size-url] - -# schema-utils - -Package for validate options in loaders and plugins. - -## Getting Started - -To begin, you'll need to install `schema-utils`: - -```console -npm install schema-utils -``` - -## API - -**schema.json** - -```json -{ - "type": "object", - "properties": { - "option": { - "type": ["boolean"] - } - }, - "additionalProperties": false -} -``` - -```js -import schema from './path/to/schema.json'; -import validate from 'schema-utils'; - -const options = { option: true }; -const configuration = { name: 'Loader Name/Plugin Name/Name' }; - -validate(schema, options, configuration); -``` - -### `schema` - -Type: `String` - -JSON schema. - -Simple example of schema: - -```json -{ - "type": "object", - "properties": { - "name": { - "description": "This is description of option.", - "type": "string" - } - }, - "additionalProperties": false -} -``` - -### `options` - -Type: `Object` - -Object with options. - -```js -validate( - schema, - { - name: 123, - }, - { name: 'MyPlugin' } -); -``` - -### `configuration` - -Allow to configure validator. - -There is an alternative method to configure the `name` and`baseDataPath` options via the `title` property in the schema. -For example: - -```json -{ - "title": "My Loader options", - "type": "object", - "properties": { - "name": { - "description": "This is description of option.", - "type": "string" - } - }, - "additionalProperties": false -} -``` - -The last word used for the `baseDataPath` option, other words used for the `name` option. -Based on the example above the `name` option equals `My Loader`, the `baseDataPath` option equals `options`. - -#### `name` - -Type: `Object` -Default: `"Object"` - -Allow to setup name in validation errors. - -```js -validate(schema, options, { name: 'MyPlugin' }); -``` - -```shell -Invalid configuration object. MyPlugin has been initialised using a configuration object that does not match the API schema. - - configuration.optionName should be a integer. -``` - -#### `baseDataPath` - -Type: `String` -Default: `"configuration"` - -Allow to setup base data path in validation errors. - -```js -validate(schema, options, { name: 'MyPlugin', baseDataPath: 'options' }); -``` - -```shell -Invalid options object. MyPlugin has been initialised using an options object that does not match the API schema. - - options.optionName should be a integer. -``` - -#### `postFormatter` - -Type: `Function` -Default: `undefined` - -Allow to reformat errors. - -```js -validate(schema, options, { - name: 'MyPlugin', - postFormatter: (formattedError, error) => { - if (error.keyword === 'type') { - return `${formattedError}\nAdditional Information.`; - } - - return formattedError; - }, -}); -``` - -```shell -Invalid options object. MyPlugin has been initialized using an options object that does not match the API schema. - - options.optionName should be a integer. - Additional Information. -``` - -## Examples - -**schema.json** - -```json -{ - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "test": { - "anyOf": [ - { "type": "array" }, - { "type": "string" }, - { "instanceof": "RegExp" } - ] - }, - "transform": { - "instanceof": "Function" - }, - "sourceMap": { - "type": "boolean" - } - }, - "additionalProperties": false -} -``` - -### `Loader` - -```js -import { getOptions } from 'loader-utils'; -import validateOptions from 'schema-utils'; - -import schema from 'path/to/schema.json'; - -function loader(src, map) { - const options = getOptions(this) || {}; - - validateOptions(schema, options, { - name: 'Loader Name', - baseDataPath: 'options', - }); - - // Code... -} - -export default loader; -``` - -### `Plugin` - -```js -import validateOptions from 'schema-utils'; - -import schema from 'path/to/schema.json'; - -class Plugin { - constructor(options) { - validateOptions(schema, options, { - name: 'Plugin Name', - baseDataPath: 'options', - }); - - this.options = options; - } - - apply(compiler) { - // Code... - } -} - -export default Plugin; -``` - -## Contributing - -Please take a moment to read our contributing guidelines if you haven't yet done so. - -[CONTRIBUTING](./.github/CONTRIBUTING.md) - -## License - -[MIT](./LICENSE) - -[npm]: https://img.shields.io/npm/v/schema-utils.svg -[npm-url]: https://npmjs.com/package/schema-utils -[node]: https://img.shields.io/node/v/schema-utils.svg -[node-url]: https://nodejs.org -[deps]: https://david-dm.org/webpack/schema-utils.svg -[deps-url]: https://david-dm.org/webpack/schema-utils -[tests]: https://github.com/webpack/schema-utils/workflows/schema-utils/badge.svg -[tests-url]: https://github.com/webpack/schema-utils/actions -[cover]: https://codecov.io/gh/webpack/schema-utils/branch/master/graph/badge.svg -[cover-url]: https://codecov.io/gh/webpack/schema-utils -[chat]: https://badges.gitter.im/webpack/webpack.svg -[chat-url]: https://gitter.im/webpack/webpack -[size]: https://packagephobia.now.sh/badge?p=schema-utils -[size-url]: https://packagephobia.now.sh/result?p=schema-utils diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/ValidationError.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/ValidationError.d.ts deleted file mode 100644 index 1b53f70f..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/ValidationError.d.ts +++ /dev/null @@ -1,88 +0,0 @@ -export default ValidationError; -export type JSONSchema6 = import('json-schema').JSONSchema6; -export type JSONSchema7 = import('json-schema').JSONSchema7; -export type Schema = - | (import('json-schema').JSONSchema4 & import('./validate').Extend) - | (import('json-schema').JSONSchema6 & import('./validate').Extend) - | (import('json-schema').JSONSchema7 & import('./validate').Extend); -export type ValidationErrorConfiguration = { - name?: string | undefined; - baseDataPath?: string | undefined; - postFormatter?: import('./validate').PostFormatter | undefined; -}; -export type PostFormatter = ( - formattedError: string, - error: import('ajv').ErrorObject & { - children?: import('ajv').ErrorObject[] | undefined; - } -) => string; -export type SchemaUtilErrorObject = import('ajv').ErrorObject & { - children?: import('ajv').ErrorObject[] | undefined; -}; -export type SPECIFICITY = number; -declare class ValidationError extends Error { - /** - * @param {Array} errors - * @param {Schema} schema - * @param {ValidationErrorConfiguration} configuration - */ - constructor( - errors: Array, - schema: Schema, - configuration?: ValidationErrorConfiguration - ); - /** @type {Array} */ - errors: Array; - /** @type {Schema} */ - schema: Schema; - /** @type {string} */ - headerName: string; - /** @type {string} */ - baseDataPath: string; - /** @type {PostFormatter | null} */ - postFormatter: PostFormatter | null; - /** - * @param {string} path - * @returns {Schema} - */ - getSchemaPart(path: string): Schema; - /** - * @param {Schema} schema - * @param {boolean} logic - * @param {Array} prevSchemas - * @returns {string} - */ - formatSchema( - schema: Schema, - logic?: boolean, - prevSchemas?: Array - ): string; - /** - * @param {Schema=} schemaPart - * @param {(boolean | Array)=} additionalPath - * @param {boolean=} needDot - * @param {boolean=} logic - * @returns {string} - */ - getSchemaPartText( - schemaPart?: Schema | undefined, - additionalPath?: (boolean | Array) | undefined, - needDot?: boolean | undefined, - logic?: boolean | undefined - ): string; - /** - * @param {Schema=} schemaPart - * @returns {string} - */ - getSchemaPartDescription(schemaPart?: Schema | undefined): string; - /** - * @param {SchemaUtilErrorObject} error - * @returns {string} - */ - formatValidationError(error: SchemaUtilErrorObject): string; - /** - * @param {Array} errors - * @returns {string} - */ - formatValidationErrors(errors: Array): string; -} diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/index.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/index.d.ts deleted file mode 100644 index 2ee7d9e9..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const _exports: typeof import('./validate').default; -export = _exports; diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/keywords/absolutePath.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/keywords/absolutePath.d.ts deleted file mode 100644 index 6843dd63..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/keywords/absolutePath.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export default addAbsolutePathKeyword; -export type Ajv = import('ajv').Ajv; -export type ValidateFunction = import('ajv').ValidateFunction; -export type SchemaUtilErrorObject = import('ajv').ErrorObject & { - children?: import('ajv').ErrorObject[] | undefined; -}; -/** - * - * @param {Ajv} ajv - * @returns {Ajv} - */ -declare function addAbsolutePathKeyword(ajv: Ajv): Ajv; diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/Range.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/Range.d.ts deleted file mode 100644 index 2f50521b..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/Range.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -export = Range; -/** - * @typedef {[number, boolean]} RangeValue - */ -/** - * @callback RangeValueCallback - * @param {RangeValue} rangeValue - * @returns {boolean} - */ -declare class Range { - /** - * @param {"left" | "right"} side - * @param {boolean} exclusive - * @returns {">" | ">=" | "<" | "<="} - */ - static getOperator( - side: 'left' | 'right', - exclusive: boolean - ): '>' | '>=' | '<' | '<='; - /** - * @param {number} value - * @param {boolean} logic is not logic applied - * @param {boolean} exclusive is range exclusive - * @returns {string} - */ - static formatRight(value: number, logic: boolean, exclusive: boolean): string; - /** - * @param {number} value - * @param {boolean} logic is not logic applied - * @param {boolean} exclusive is range exclusive - * @returns {string} - */ - static formatLeft(value: number, logic: boolean, exclusive: boolean): string; - /** - * @param {number} start left side value - * @param {number} end right side value - * @param {boolean} startExclusive is range exclusive from left side - * @param {boolean} endExclusive is range exclusive from right side - * @param {boolean} logic is not logic applied - * @returns {string} - */ - static formatRange( - start: number, - end: number, - startExclusive: boolean, - endExclusive: boolean, - logic: boolean - ): string; - /** - * @param {Array} values - * @param {boolean} logic is not logic applied - * @return {RangeValue} computed value and it's exclusive flag - */ - static getRangeValue( - values: Array, - logic: boolean - ): [number, boolean]; - /** @type {Array} */ - _left: Array; - /** @type {Array} */ - _right: Array; - /** - * @param {number} value - * @param {boolean=} exclusive - */ - left(value: number, exclusive?: boolean | undefined): void; - /** - * @param {number} value - * @param {boolean=} exclusive - */ - right(value: number, exclusive?: boolean | undefined): void; - /** - * @param {boolean} logic is not logic applied - * @return {string} "smart" range string representation - */ - format(logic?: boolean): string; -} -declare namespace Range { - export { RangeValue, RangeValueCallback }; -} -type RangeValue = [number, boolean]; -type RangeValueCallback = (rangeValue: [number, boolean]) => boolean; diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/hints.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/hints.d.ts deleted file mode 100644 index 39412aa5..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/util/hints.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function stringHints(schema: Schema, logic: boolean): string[]; -export function numberHints(schema: Schema, logic: boolean): string[]; -export type Schema = - | (import('json-schema').JSONSchema4 & import('../validate').Extend) - | (import('json-schema').JSONSchema6 & import('../validate').Extend) - | (import('json-schema').JSONSchema7 & import('../validate').Extend); diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/validate.d.ts b/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/validate.d.ts deleted file mode 100644 index 995c2c8b..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/declarations/validate.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -export default validate; -export type JSONSchema4 = import('json-schema').JSONSchema4; -export type JSONSchema6 = import('json-schema').JSONSchema6; -export type JSONSchema7 = import('json-schema').JSONSchema7; -export type ErrorObject = Ajv.ErrorObject; -export type Extend = { - formatMinimum?: number | undefined; - formatMaximum?: number | undefined; - formatExclusiveMinimum?: boolean | undefined; - formatExclusiveMaximum?: boolean | undefined; -}; -export type Schema = - | (import('json-schema').JSONSchema4 & Extend) - | (import('json-schema').JSONSchema6 & Extend) - | (import('json-schema').JSONSchema7 & Extend); -export type SchemaUtilErrorObject = Ajv.ErrorObject & { - children?: Ajv.ErrorObject[] | undefined; -}; -export type PostFormatter = ( - formattedError: string, - error: SchemaUtilErrorObject -) => string; -export type ValidationErrorConfiguration = { - name?: string | undefined; - baseDataPath?: string | undefined; - postFormatter?: PostFormatter | undefined; -}; -/** - * @param {Schema} schema - * @param {Array | object} options - * @param {ValidationErrorConfiguration=} configuration - * @returns {void} - */ -declare function validate( - schema: Schema, - options: Array | object, - configuration?: ValidationErrorConfiguration | undefined -): void; -declare namespace validate { - export { ValidationError }; - export { ValidationError as ValidateError }; -} -import Ajv from 'ajv'; -import ValidationError from './ValidationError'; diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/ValidationError.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/ValidationError.js deleted file mode 100644 index ae5bd94c..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/ValidationError.js +++ /dev/null @@ -1,1261 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -const { - stringHints, - numberHints -} = require('./util/hints'); -/** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */ - -/** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */ - -/** @typedef {import("./validate").Schema} Schema */ - -/** @typedef {import("./validate").ValidationErrorConfiguration} ValidationErrorConfiguration */ - -/** @typedef {import("./validate").PostFormatter} PostFormatter */ - -/** @typedef {import("./validate").SchemaUtilErrorObject} SchemaUtilErrorObject */ - -/** @enum {number} */ - - -const SPECIFICITY = { - type: 1, - not: 1, - oneOf: 1, - anyOf: 1, - if: 1, - enum: 1, - const: 1, - instanceof: 1, - required: 2, - pattern: 2, - patternRequired: 2, - format: 2, - formatMinimum: 2, - formatMaximum: 2, - minimum: 2, - exclusiveMinimum: 2, - maximum: 2, - exclusiveMaximum: 2, - multipleOf: 2, - uniqueItems: 2, - contains: 2, - minLength: 2, - maxLength: 2, - minItems: 2, - maxItems: 2, - minProperties: 2, - maxProperties: 2, - dependencies: 2, - propertyNames: 2, - additionalItems: 2, - additionalProperties: 2, - absolutePath: 2 -}; -/** - * - * @param {Array} array - * @param {(item: SchemaUtilErrorObject) => number} fn - * @returns {Array} - */ - -function filterMax(array, fn) { - const evaluatedMax = array.reduce((max, item) => Math.max(max, fn(item)), 0); - return array.filter(item => fn(item) === evaluatedMax); -} -/** - * - * @param {Array} children - * @returns {Array} - */ - - -function filterChildren(children) { - let newChildren = children; - newChildren = filterMax(newChildren, - /** - * - * @param {SchemaUtilErrorObject} error - * @returns {number} - */ - error => error.dataPath ? error.dataPath.length : 0); - newChildren = filterMax(newChildren, - /** - * @param {SchemaUtilErrorObject} error - * @returns {number} - */ - error => SPECIFICITY[ - /** @type {keyof typeof SPECIFICITY} */ - error.keyword] || 2); - return newChildren; -} -/** - * Find all children errors - * @param {Array} children - * @param {Array} schemaPaths - * @return {number} returns index of first child - */ - - -function findAllChildren(children, schemaPaths) { - let i = children.length - 1; - - const predicate = - /** - * @param {string} schemaPath - * @returns {boolean} - */ - schemaPath => children[i].schemaPath.indexOf(schemaPath) !== 0; - - while (i > -1 && !schemaPaths.every(predicate)) { - if (children[i].keyword === 'anyOf' || children[i].keyword === 'oneOf') { - const refs = extractRefs(children[i]); - const childrenStart = findAllChildren(children.slice(0, i), refs.concat(children[i].schemaPath)); - i = childrenStart - 1; - } else { - i -= 1; - } - } - - return i + 1; -} -/** - * Extracts all refs from schema - * @param {SchemaUtilErrorObject} error - * @return {Array} - */ - - -function extractRefs(error) { - const { - schema - } = error; - - if (!Array.isArray(schema)) { - return []; - } - - return schema.map(({ - $ref - }) => $ref).filter(s => s); -} -/** - * Groups children by their first level parent (assuming that error is root) - * @param {Array} children - * @return {Array} - */ - - -function groupChildrenByFirstChild(children) { - const result = []; - let i = children.length - 1; - - while (i > 0) { - const child = children[i]; - - if (child.keyword === 'anyOf' || child.keyword === 'oneOf') { - const refs = extractRefs(child); - const childrenStart = findAllChildren(children.slice(0, i), refs.concat(child.schemaPath)); - - if (childrenStart !== i) { - result.push(Object.assign({}, child, { - children: children.slice(childrenStart, i) - })); - i = childrenStart; - } else { - result.push(child); - } - } else { - result.push(child); - } - - i -= 1; - } - - if (i === 0) { - result.push(children[i]); - } - - return result.reverse(); -} -/** - * @param {string} str - * @param {string} prefix - * @returns {string} - */ - - -function indent(str, prefix) { - return str.replace(/\n(?!$)/g, `\n${prefix}`); -} -/** - * @param {Schema} schema - * @returns {schema is (Schema & {not: Schema})} - */ - - -function hasNotInSchema(schema) { - return !!schema.not; -} -/** - * @param {Schema} schema - * @return {Schema} - */ - - -function findFirstTypedSchema(schema) { - if (hasNotInSchema(schema)) { - return findFirstTypedSchema(schema.not); - } - - return schema; -} -/** - * @param {Schema} schema - * @return {boolean} - */ - - -function canApplyNot(schema) { - const typedSchema = findFirstTypedSchema(schema); - return likeNumber(typedSchema) || likeInteger(typedSchema) || likeString(typedSchema) || likeNull(typedSchema) || likeBoolean(typedSchema); -} -/** - * @param {any} maybeObj - * @returns {boolean} - */ - - -function isObject(maybeObj) { - return typeof maybeObj === 'object' && maybeObj !== null; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeNumber(schema) { - return schema.type === 'number' || typeof schema.minimum !== 'undefined' || typeof schema.exclusiveMinimum !== 'undefined' || typeof schema.maximum !== 'undefined' || typeof schema.exclusiveMaximum !== 'undefined' || typeof schema.multipleOf !== 'undefined'; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeInteger(schema) { - return schema.type === 'integer' || typeof schema.minimum !== 'undefined' || typeof schema.exclusiveMinimum !== 'undefined' || typeof schema.maximum !== 'undefined' || typeof schema.exclusiveMaximum !== 'undefined' || typeof schema.multipleOf !== 'undefined'; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeString(schema) { - return schema.type === 'string' || typeof schema.minLength !== 'undefined' || typeof schema.maxLength !== 'undefined' || typeof schema.pattern !== 'undefined' || typeof schema.format !== 'undefined' || typeof schema.formatMinimum !== 'undefined' || typeof schema.formatMaximum !== 'undefined'; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeBoolean(schema) { - return schema.type === 'boolean'; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeArray(schema) { - return schema.type === 'array' || typeof schema.minItems === 'number' || typeof schema.maxItems === 'number' || typeof schema.uniqueItems !== 'undefined' || typeof schema.items !== 'undefined' || typeof schema.additionalItems !== 'undefined' || typeof schema.contains !== 'undefined'; -} -/** - * @param {Schema & {patternRequired?: Array}} schema - * @returns {boolean} - */ - - -function likeObject(schema) { - return schema.type === 'object' || typeof schema.minProperties !== 'undefined' || typeof schema.maxProperties !== 'undefined' || typeof schema.required !== 'undefined' || typeof schema.properties !== 'undefined' || typeof schema.patternProperties !== 'undefined' || typeof schema.additionalProperties !== 'undefined' || typeof schema.dependencies !== 'undefined' || typeof schema.propertyNames !== 'undefined' || typeof schema.patternRequired !== 'undefined'; -} -/** - * @param {Schema} schema - * @returns {boolean} - */ - - -function likeNull(schema) { - return schema.type === 'null'; -} -/** - * @param {string} type - * @returns {string} - */ - - -function getArticle(type) { - if (/^[aeiou]/i.test(type)) { - return 'an'; - } - - return 'a'; -} -/** - * @param {Schema=} schema - * @returns {string} - */ - - -function getSchemaNonTypes(schema) { - if (!schema) { - return ''; - } - - if (!schema.type) { - if (likeNumber(schema) || likeInteger(schema)) { - return ' | should be any non-number'; - } - - if (likeString(schema)) { - return ' | should be any non-string'; - } - - if (likeArray(schema)) { - return ' | should be any non-array'; - } - - if (likeObject(schema)) { - return ' | should be any non-object'; - } - } - - return ''; -} -/** - * @param {Array} hints - * @returns {string} - */ - - -function formatHints(hints) { - return hints.length > 0 ? `(${hints.join(', ')})` : ''; -} -/** - * @param {Schema} schema - * @param {boolean} logic - * @returns {string[]} - */ - - -function getHints(schema, logic) { - if (likeNumber(schema) || likeInteger(schema)) { - return numberHints(schema, logic); - } else if (likeString(schema)) { - return stringHints(schema, logic); - } - - return []; -} - -class ValidationError extends Error { - /** - * @param {Array} errors - * @param {Schema} schema - * @param {ValidationErrorConfiguration} configuration - */ - constructor(errors, schema, configuration = {}) { - super(); - /** @type {string} */ - - this.name = 'ValidationError'; - /** @type {Array} */ - - this.errors = errors; - /** @type {Schema} */ - - this.schema = schema; - let headerNameFromSchema; - let baseDataPathFromSchema; - - if (schema.title && (!configuration.name || !configuration.baseDataPath)) { - const splittedTitleFromSchema = schema.title.match(/^(.+) (.+)$/); - - if (splittedTitleFromSchema) { - if (!configuration.name) { - [, headerNameFromSchema] = splittedTitleFromSchema; - } - - if (!configuration.baseDataPath) { - [,, baseDataPathFromSchema] = splittedTitleFromSchema; - } - } - } - /** @type {string} */ - - - this.headerName = configuration.name || headerNameFromSchema || 'Object'; - /** @type {string} */ - - this.baseDataPath = configuration.baseDataPath || baseDataPathFromSchema || 'configuration'; - /** @type {PostFormatter | null} */ - - this.postFormatter = configuration.postFormatter || null; - const header = `Invalid ${this.baseDataPath} object. ${this.headerName} has been initialized using ${getArticle(this.baseDataPath)} ${this.baseDataPath} object that does not match the API schema.\n`; - /** @type {string} */ - - this.message = `${header}${this.formatValidationErrors(errors)}`; - Error.captureStackTrace(this, this.constructor); - } - /** - * @param {string} path - * @returns {Schema} - */ - - - getSchemaPart(path) { - const newPath = path.split('/'); - let schemaPart = this.schema; - - for (let i = 1; i < newPath.length; i++) { - const inner = schemaPart[ - /** @type {keyof Schema} */ - newPath[i]]; - - if (!inner) { - break; - } - - schemaPart = inner; - } - - return schemaPart; - } - /** - * @param {Schema} schema - * @param {boolean} logic - * @param {Array} prevSchemas - * @returns {string} - */ - - - formatSchema(schema, logic = true, prevSchemas = []) { - let newLogic = logic; - - const formatInnerSchema = - /** - * - * @param {Object} innerSchema - * @param {boolean=} addSelf - * @returns {string} - */ - (innerSchema, addSelf) => { - if (!addSelf) { - return this.formatSchema(innerSchema, newLogic, prevSchemas); - } - - if (prevSchemas.includes(innerSchema)) { - return '(recursive)'; - } - - return this.formatSchema(innerSchema, newLogic, prevSchemas.concat(schema)); - }; - - if (hasNotInSchema(schema) && !likeObject(schema)) { - if (canApplyNot(schema.not)) { - newLogic = !logic; - return formatInnerSchema(schema.not); - } - - const needApplyLogicHere = !schema.not.not; - const prefix = logic ? '' : 'non '; - newLogic = !logic; - return needApplyLogicHere ? prefix + formatInnerSchema(schema.not) : formatInnerSchema(schema.not); - } - - if ( - /** @type {Schema & {instanceof: string | Array}} */ - schema.instanceof) { - const { - instanceof: value - } = - /** @type {Schema & {instanceof: string | Array}} */ - schema; - const values = !Array.isArray(value) ? [value] : value; - return values.map( - /** - * @param {string} item - * @returns {string} - */ - item => item === 'Function' ? 'function' : item).join(' | '); - } - - if (schema.enum) { - return ( - /** @type {Array} */ - schema.enum.map(item => JSON.stringify(item)).join(' | ') - ); - } - - if (typeof schema.const !== 'undefined') { - return JSON.stringify(schema.const); - } - - if (schema.oneOf) { - return ( - /** @type {Array} */ - schema.oneOf.map(item => formatInnerSchema(item, true)).join(' | ') - ); - } - - if (schema.anyOf) { - return ( - /** @type {Array} */ - schema.anyOf.map(item => formatInnerSchema(item, true)).join(' | ') - ); - } - - if (schema.allOf) { - return ( - /** @type {Array} */ - schema.allOf.map(item => formatInnerSchema(item, true)).join(' & ') - ); - } - - if ( - /** @type {JSONSchema7} */ - schema.if) { - const { - if: ifValue, - then: thenValue, - else: elseValue - } = - /** @type {JSONSchema7} */ - schema; - return `${ifValue ? `if ${formatInnerSchema(ifValue)}` : ''}${thenValue ? ` then ${formatInnerSchema(thenValue)}` : ''}${elseValue ? ` else ${formatInnerSchema(elseValue)}` : ''}`; - } - - if (schema.$ref) { - return formatInnerSchema(this.getSchemaPart(schema.$ref), true); - } - - if (likeNumber(schema) || likeInteger(schema)) { - const [type, ...hints] = getHints(schema, logic); - const str = `${type}${hints.length > 0 ? ` ${formatHints(hints)}` : ''}`; - return logic ? str : hints.length > 0 ? `non-${type} | ${str}` : `non-${type}`; - } - - if (likeString(schema)) { - const [type, ...hints] = getHints(schema, logic); - const str = `${type}${hints.length > 0 ? ` ${formatHints(hints)}` : ''}`; - return logic ? str : str === 'string' ? 'non-string' : `non-string | ${str}`; - } - - if (likeBoolean(schema)) { - return `${logic ? '' : 'non-'}boolean`; - } - - if (likeArray(schema)) { - // not logic already applied in formatValidationError - newLogic = true; - const hints = []; - - if (typeof schema.minItems === 'number') { - hints.push(`should not have fewer than ${schema.minItems} item${schema.minItems > 1 ? 's' : ''}`); - } - - if (typeof schema.maxItems === 'number') { - hints.push(`should not have more than ${schema.maxItems} item${schema.maxItems > 1 ? 's' : ''}`); - } - - if (schema.uniqueItems) { - hints.push('should not have duplicate items'); - } - - const hasAdditionalItems = typeof schema.additionalItems === 'undefined' || Boolean(schema.additionalItems); - let items = ''; - - if (schema.items) { - if (Array.isArray(schema.items) && schema.items.length > 0) { - items = `${ - /** @type {Array} */ - schema.items.map(item => formatInnerSchema(item)).join(', ')}`; - - if (hasAdditionalItems) { - if (schema.additionalItems && isObject(schema.additionalItems) && Object.keys(schema.additionalItems).length > 0) { - hints.push(`additional items should be ${formatInnerSchema(schema.additionalItems)}`); - } - } - } else if (schema.items && Object.keys(schema.items).length > 0) { - // "additionalItems" is ignored - items = `${formatInnerSchema(schema.items)}`; - } else { - // Fallback for empty `items` value - items = 'any'; - } - } else { - // "additionalItems" is ignored - items = 'any'; - } - - if (schema.contains && Object.keys(schema.contains).length > 0) { - hints.push(`should contains at least one ${this.formatSchema(schema.contains)} item`); - } - - return `[${items}${hasAdditionalItems ? ', ...' : ''}]${hints.length > 0 ? ` (${hints.join(', ')})` : ''}`; - } - - if (likeObject(schema)) { - // not logic already applied in formatValidationError - newLogic = true; - const hints = []; - - if (typeof schema.minProperties === 'number') { - hints.push(`should not have fewer than ${schema.minProperties} ${schema.minProperties > 1 ? 'properties' : 'property'}`); - } - - if (typeof schema.maxProperties === 'number') { - hints.push(`should not have more than ${schema.maxProperties} ${schema.minProperties && schema.minProperties > 1 ? 'properties' : 'property'}`); - } - - if (schema.patternProperties && Object.keys(schema.patternProperties).length > 0) { - const patternProperties = Object.keys(schema.patternProperties); - hints.push(`additional property names should match pattern${patternProperties.length > 1 ? 's' : ''} ${patternProperties.map(pattern => JSON.stringify(pattern)).join(' | ')}`); - } - - const properties = schema.properties ? Object.keys(schema.properties) : []; - const required = schema.required ? schema.required : []; - const allProperties = [...new Set( - /** @type {Array} */ - [].concat(required).concat(properties))]; - const objectStructure = allProperties.map(property => { - const isRequired = required.includes(property); // Some properties need quotes, maybe we should add check - // Maybe we should output type of property (`foo: string`), but it is looks very unreadable - - return `${property}${isRequired ? '' : '?'}`; - }).concat(typeof schema.additionalProperties === 'undefined' || Boolean(schema.additionalProperties) ? schema.additionalProperties && isObject(schema.additionalProperties) ? [`: ${formatInnerSchema(schema.additionalProperties)}`] : ['…'] : []).join(', '); - const { - dependencies, - propertyNames, - patternRequired - } = - /** @type {Schema & {patternRequired?: Array;}} */ - schema; - - if (dependencies) { - Object.keys(dependencies).forEach(dependencyName => { - const dependency = dependencies[dependencyName]; - - if (Array.isArray(dependency)) { - hints.push(`should have ${dependency.length > 1 ? 'properties' : 'property'} ${dependency.map(dep => `'${dep}'`).join(', ')} when property '${dependencyName}' is present`); - } else { - hints.push(`should be valid according to the schema ${formatInnerSchema(dependency)} when property '${dependencyName}' is present`); - } - }); - } - - if (propertyNames && Object.keys(propertyNames).length > 0) { - hints.push(`each property name should match format ${JSON.stringify(schema.propertyNames.format)}`); - } - - if (patternRequired && patternRequired.length > 0) { - hints.push(`should have property matching pattern ${patternRequired.map( - /** - * @param {string} item - * @returns {string} - */ - item => JSON.stringify(item))}`); - } - - return `object {${objectStructure ? ` ${objectStructure} ` : ''}}${hints.length > 0 ? ` (${hints.join(', ')})` : ''}`; - } - - if (likeNull(schema)) { - return `${logic ? '' : 'non-'}null`; - } - - if (Array.isArray(schema.type)) { - // not logic already applied in formatValidationError - return `${schema.type.join(' | ')}`; - } // Fallback for unknown keywords - // not logic already applied in formatValidationError - - /* istanbul ignore next */ - - - return JSON.stringify(schema, null, 2); - } - /** - * @param {Schema=} schemaPart - * @param {(boolean | Array)=} additionalPath - * @param {boolean=} needDot - * @param {boolean=} logic - * @returns {string} - */ - - - getSchemaPartText(schemaPart, additionalPath, needDot = false, logic = true) { - if (!schemaPart) { - return ''; - } - - if (Array.isArray(additionalPath)) { - for (let i = 0; i < additionalPath.length; i++) { - /** @type {Schema | undefined} */ - const inner = schemaPart[ - /** @type {keyof Schema} */ - additionalPath[i]]; - - if (inner) { - // eslint-disable-next-line no-param-reassign - schemaPart = inner; - } else { - break; - } - } - } - - while (schemaPart.$ref) { - // eslint-disable-next-line no-param-reassign - schemaPart = this.getSchemaPart(schemaPart.$ref); - } - - let schemaText = `${this.formatSchema(schemaPart, logic)}${needDot ? '.' : ''}`; - - if (schemaPart.description) { - schemaText += `\n-> ${schemaPart.description}`; - } - - return schemaText; - } - /** - * @param {Schema=} schemaPart - * @returns {string} - */ - - - getSchemaPartDescription(schemaPart) { - if (!schemaPart) { - return ''; - } - - while (schemaPart.$ref) { - // eslint-disable-next-line no-param-reassign - schemaPart = this.getSchemaPart(schemaPart.$ref); - } - - if (schemaPart.description) { - return `\n-> ${schemaPart.description}`; - } - - return ''; - } - /** - * @param {SchemaUtilErrorObject} error - * @returns {string} - */ - - - formatValidationError(error) { - const { - keyword, - dataPath: errorDataPath - } = error; - const dataPath = `${this.baseDataPath}${errorDataPath}`; - - switch (keyword) { - case 'type': - { - const { - parentSchema, - params - } = error; // eslint-disable-next-line default-case - - switch ( - /** @type {import("ajv").TypeParams} */ - params.type) { - case 'number': - return `${dataPath} should be a ${this.getSchemaPartText(parentSchema, false, true)}`; - - case 'integer': - return `${dataPath} should be a ${this.getSchemaPartText(parentSchema, false, true)}`; - - case 'string': - return `${dataPath} should be a ${this.getSchemaPartText(parentSchema, false, true)}`; - - case 'boolean': - return `${dataPath} should be a ${this.getSchemaPartText(parentSchema, false, true)}`; - - case 'array': - return `${dataPath} should be an array:\n${this.getSchemaPartText(parentSchema)}`; - - case 'object': - return `${dataPath} should be an object:\n${this.getSchemaPartText(parentSchema)}`; - - case 'null': - return `${dataPath} should be a ${this.getSchemaPartText(parentSchema, false, true)}`; - - default: - return `${dataPath} should be:\n${this.getSchemaPartText(parentSchema)}`; - } - } - - case 'instanceof': - { - const { - parentSchema - } = error; - return `${dataPath} should be an instance of ${this.getSchemaPartText(parentSchema, false, true)}`; - } - - case 'pattern': - { - const { - params, - parentSchema - } = error; - const { - pattern - } = - /** @type {import("ajv").PatternParams} */ - params; - return `${dataPath} should match pattern ${JSON.stringify(pattern)}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'format': - { - const { - params, - parentSchema - } = error; - const { - format - } = - /** @type {import("ajv").FormatParams} */ - params; - return `${dataPath} should match format ${JSON.stringify(format)}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'formatMinimum': - case 'formatMaximum': - { - const { - params, - parentSchema - } = error; - const { - comparison, - limit - } = - /** @type {import("ajv").ComparisonParams} */ - params; - return `${dataPath} should be ${comparison} ${JSON.stringify(limit)}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'minimum': - case 'maximum': - case 'exclusiveMinimum': - case 'exclusiveMaximum': - { - const { - parentSchema, - params - } = error; - const { - comparison, - limit - } = - /** @type {import("ajv").ComparisonParams} */ - params; - const [, ...hints] = getHints( - /** @type {Schema} */ - parentSchema, true); - - if (hints.length === 0) { - hints.push(`should be ${comparison} ${limit}`); - } - - return `${dataPath} ${hints.join(' ')}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'multipleOf': - { - const { - params, - parentSchema - } = error; - const { - multipleOf - } = - /** @type {import("ajv").MultipleOfParams} */ - params; - return `${dataPath} should be multiple of ${multipleOf}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'patternRequired': - { - const { - params, - parentSchema - } = error; - const { - missingPattern - } = - /** @type {import("ajv").PatternRequiredParams} */ - params; - return `${dataPath} should have property matching pattern ${JSON.stringify(missingPattern)}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'minLength': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - - if (limit === 1) { - return `${dataPath} should be an non-empty string${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - const length = limit - 1; - return `${dataPath} should be longer than ${length} character${length > 1 ? 's' : ''}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'minItems': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - - if (limit === 1) { - return `${dataPath} should be an non-empty array${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - return `${dataPath} should not have fewer than ${limit} items${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'minProperties': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - - if (limit === 1) { - return `${dataPath} should be an non-empty object${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - return `${dataPath} should not have fewer than ${limit} properties${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'maxLength': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - const max = limit + 1; - return `${dataPath} should be shorter than ${max} character${max > 1 ? 's' : ''}${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'maxItems': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - return `${dataPath} should not have more than ${limit} items${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'maxProperties': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - return `${dataPath} should not have more than ${limit} properties${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'uniqueItems': - { - const { - params, - parentSchema - } = error; - const { - i - } = - /** @type {import("ajv").UniqueItemsParams} */ - params; - return `${dataPath} should not contain the item '${error.data[i]}' twice${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'additionalItems': - { - const { - params, - parentSchema - } = error; - const { - limit - } = - /** @type {import("ajv").LimitParams} */ - params; - return `${dataPath} should not have more than ${limit} items${getSchemaNonTypes(parentSchema)}. These items are valid:\n${this.getSchemaPartText(parentSchema)}`; - } - - case 'contains': - { - const { - parentSchema - } = error; - return `${dataPath} should contains at least one ${this.getSchemaPartText(parentSchema, ['contains'])} item${getSchemaNonTypes(parentSchema)}.`; - } - - case 'required': - { - const { - parentSchema, - params - } = error; - const missingProperty = - /** @type {import("ajv").DependenciesParams} */ - params.missingProperty.replace(/^\./, ''); - const hasProperty = parentSchema && Boolean( - /** @type {Schema} */ - parentSchema.properties && - /** @type {Schema} */ - parentSchema.properties[missingProperty]); - return `${dataPath} misses the property '${missingProperty}'${getSchemaNonTypes(parentSchema)}.${hasProperty ? ` Should be:\n${this.getSchemaPartText(parentSchema, ['properties', missingProperty])}` : this.getSchemaPartDescription(parentSchema)}`; - } - - case 'additionalProperties': - { - const { - params, - parentSchema - } = error; - const { - additionalProperty - } = - /** @type {import("ajv").AdditionalPropertiesParams} */ - params; - return `${dataPath} has an unknown property '${additionalProperty}'${getSchemaNonTypes(parentSchema)}. These properties are valid:\n${this.getSchemaPartText(parentSchema)}`; - } - - case 'dependencies': - { - const { - params, - parentSchema - } = error; - const { - property, - deps - } = - /** @type {import("ajv").DependenciesParams} */ - params; - const dependencies = deps.split(',').map( - /** - * @param {string} dep - * @returns {string} - */ - dep => `'${dep.trim()}'`).join(', '); - return `${dataPath} should have properties ${dependencies} when property '${property}' is present${getSchemaNonTypes(parentSchema)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'propertyNames': - { - const { - params, - parentSchema, - schema - } = error; - const { - propertyName - } = - /** @type {import("ajv").PropertyNamesParams} */ - params; - return `${dataPath} property name '${propertyName}' is invalid${getSchemaNonTypes(parentSchema)}. Property names should be match format ${JSON.stringify(schema.format)}.${this.getSchemaPartDescription(parentSchema)}`; - } - - case 'enum': - { - const { - parentSchema - } = error; - - if (parentSchema && - /** @type {Schema} */ - parentSchema.enum && - /** @type {Schema} */ - parentSchema.enum.length === 1) { - return `${dataPath} should be ${this.getSchemaPartText(parentSchema, false, true)}`; - } - - return `${dataPath} should be one of these:\n${this.getSchemaPartText(parentSchema)}`; - } - - case 'const': - { - const { - parentSchema - } = error; - return `${dataPath} should be equal to constant ${this.getSchemaPartText(parentSchema, false, true)}`; - } - - case 'not': - { - const postfix = likeObject( - /** @type {Schema} */ - error.parentSchema) ? `\n${this.getSchemaPartText(error.parentSchema)}` : ''; - const schemaOutput = this.getSchemaPartText(error.schema, false, false, false); - - if (canApplyNot(error.schema)) { - return `${dataPath} should be any ${schemaOutput}${postfix}.`; - } - - const { - schema, - parentSchema - } = error; - return `${dataPath} should not be ${this.getSchemaPartText(schema, false, true)}${parentSchema && likeObject(parentSchema) ? `\n${this.getSchemaPartText(parentSchema)}` : ''}`; - } - - case 'oneOf': - case 'anyOf': - { - const { - parentSchema, - children - } = error; - - if (children && children.length > 0) { - if (error.schema.length === 1) { - const lastChild = children[children.length - 1]; - const remainingChildren = children.slice(0, children.length - 1); - return this.formatValidationError(Object.assign({}, lastChild, { - children: remainingChildren, - parentSchema: Object.assign({}, parentSchema, lastChild.parentSchema) - })); - } - - let filteredChildren = filterChildren(children); - - if (filteredChildren.length === 1) { - return this.formatValidationError(filteredChildren[0]); - } - - filteredChildren = groupChildrenByFirstChild(filteredChildren); - return `${dataPath} should be one of these:\n${this.getSchemaPartText(parentSchema)}\nDetails:\n${filteredChildren.map( - /** - * @param {SchemaUtilErrorObject} nestedError - * @returns {string} - */ - nestedError => ` * ${indent(this.formatValidationError(nestedError), ' ')}`).join('\n')}`; - } - - return `${dataPath} should be one of these:\n${this.getSchemaPartText(parentSchema)}`; - } - - case 'if': - { - const { - params, - parentSchema - } = error; - const { - failingKeyword - } = - /** @type {import("ajv").IfParams} */ - params; - return `${dataPath} should match "${failingKeyword}" schema:\n${this.getSchemaPartText(parentSchema, [failingKeyword])}`; - } - - case 'absolutePath': - { - const { - message, - parentSchema - } = error; - return `${dataPath}: ${message}${this.getSchemaPartDescription(parentSchema)}`; - } - - /* istanbul ignore next */ - - default: - { - const { - message, - parentSchema - } = error; - const ErrorInJSON = JSON.stringify(error, null, 2); // For `custom`, `false schema`, `$ref` keywords - // Fallback for unknown keywords - - return `${dataPath} ${message} (${ErrorInJSON}).\n${this.getSchemaPartText(parentSchema, false)}`; - } - } - } - /** - * @param {Array} errors - * @returns {string} - */ - - - formatValidationErrors(errors) { - return errors.map(error => { - let formattedError = this.formatValidationError(error); - - if (this.postFormatter) { - formattedError = this.postFormatter(formattedError, error); - } - - return ` - ${indent(formattedError, ' ')}`; - }).join('\n'); - } - -} - -var _default = ValidationError; -exports.default = _default; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/index.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/index.js deleted file mode 100644 index e7c67917..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/index.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -const validate = require('./validate'); - -module.exports = validate.default; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/keywords/absolutePath.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/keywords/absolutePath.js deleted file mode 100644 index 1ff958f2..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/keywords/absolutePath.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -/** @typedef {import("ajv").Ajv} Ajv */ - -/** @typedef {import("ajv").ValidateFunction} ValidateFunction */ - -/** @typedef {import("../validate").SchemaUtilErrorObject} SchemaUtilErrorObject */ - -/** - * @param {string} message - * @param {object} schema - * @param {string} data - * @returns {SchemaUtilErrorObject} - */ -function errorMessage(message, schema, data) { - return { - // @ts-ignore - // eslint-disable-next-line no-undefined - dataPath: undefined, - // @ts-ignore - // eslint-disable-next-line no-undefined - schemaPath: undefined, - keyword: 'absolutePath', - params: { - absolutePath: data - }, - message, - parentSchema: schema - }; -} -/** - * @param {boolean} shouldBeAbsolute - * @param {object} schema - * @param {string} data - * @returns {SchemaUtilErrorObject} - */ - - -function getErrorFor(shouldBeAbsolute, schema, data) { - const message = shouldBeAbsolute ? `The provided value ${JSON.stringify(data)} is not an absolute path!` : `A relative path is expected. However, the provided value ${JSON.stringify(data)} is an absolute path!`; - return errorMessage(message, schema, data); -} -/** - * - * @param {Ajv} ajv - * @returns {Ajv} - */ - - -function addAbsolutePathKeyword(ajv) { - ajv.addKeyword('absolutePath', { - errors: true, - type: 'string', - - compile(schema, parentSchema) { - /** @type {ValidateFunction} */ - const callback = data => { - let passes = true; - const isExclamationMarkPresent = data.includes('!'); - - if (isExclamationMarkPresent) { - callback.errors = [errorMessage(`The provided value ${JSON.stringify(data)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`, parentSchema, data)]; - passes = false; - } // ?:[A-Za-z]:\\ - Windows absolute path - // \\\\ - Windows network absolute path - // \/ - Unix-like OS absolute path - - - const isCorrectAbsolutePath = schema === /^(?:[A-Za-z]:(\\|\/)|\\\\|\/)/.test(data); - - if (!isCorrectAbsolutePath) { - callback.errors = [getErrorFor(schema, parentSchema, data)]; - passes = false; - } - - return passes; - }; - - callback.errors = []; - return callback; - } - - }); - return ajv; -} - -var _default = addAbsolutePathKeyword; -exports.default = _default; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/Range.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/Range.js deleted file mode 100644 index 74bb0572..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/Range.js +++ /dev/null @@ -1,163 +0,0 @@ -"use strict"; - -/** - * @typedef {[number, boolean]} RangeValue - */ - -/** - * @callback RangeValueCallback - * @param {RangeValue} rangeValue - * @returns {boolean} - */ -class Range { - /** - * @param {"left" | "right"} side - * @param {boolean} exclusive - * @returns {">" | ">=" | "<" | "<="} - */ - static getOperator(side, exclusive) { - if (side === 'left') { - return exclusive ? '>' : '>='; - } - - return exclusive ? '<' : '<='; - } - /** - * @param {number} value - * @param {boolean} logic is not logic applied - * @param {boolean} exclusive is range exclusive - * @returns {string} - */ - - - static formatRight(value, logic, exclusive) { - if (logic === false) { - return Range.formatLeft(value, !logic, !exclusive); - } - - return `should be ${Range.getOperator('right', exclusive)} ${value}`; - } - /** - * @param {number} value - * @param {boolean} logic is not logic applied - * @param {boolean} exclusive is range exclusive - * @returns {string} - */ - - - static formatLeft(value, logic, exclusive) { - if (logic === false) { - return Range.formatRight(value, !logic, !exclusive); - } - - return `should be ${Range.getOperator('left', exclusive)} ${value}`; - } - /** - * @param {number} start left side value - * @param {number} end right side value - * @param {boolean} startExclusive is range exclusive from left side - * @param {boolean} endExclusive is range exclusive from right side - * @param {boolean} logic is not logic applied - * @returns {string} - */ - - - static formatRange(start, end, startExclusive, endExclusive, logic) { - let result = 'should be'; - result += ` ${Range.getOperator(logic ? 'left' : 'right', logic ? startExclusive : !startExclusive)} ${start} `; - result += logic ? 'and' : 'or'; - result += ` ${Range.getOperator(logic ? 'right' : 'left', logic ? endExclusive : !endExclusive)} ${end}`; - return result; - } - /** - * @param {Array} values - * @param {boolean} logic is not logic applied - * @return {RangeValue} computed value and it's exclusive flag - */ - - - static getRangeValue(values, logic) { - let minMax = logic ? Infinity : -Infinity; - let j = -1; - const predicate = logic ? - /** @type {RangeValueCallback} */ - ([value]) => value <= minMax : - /** @type {RangeValueCallback} */ - ([value]) => value >= minMax; - - for (let i = 0; i < values.length; i++) { - if (predicate(values[i])) { - [minMax] = values[i]; - j = i; - } - } - - if (j > -1) { - return values[j]; - } - - return [Infinity, true]; - } - - constructor() { - /** @type {Array} */ - this._left = []; - /** @type {Array} */ - - this._right = []; - } - /** - * @param {number} value - * @param {boolean=} exclusive - */ - - - left(value, exclusive = false) { - this._left.push([value, exclusive]); - } - /** - * @param {number} value - * @param {boolean=} exclusive - */ - - - right(value, exclusive = false) { - this._right.push([value, exclusive]); - } - /** - * @param {boolean} logic is not logic applied - * @return {string} "smart" range string representation - */ - - - format(logic = true) { - const [start, leftExclusive] = Range.getRangeValue(this._left, logic); - const [end, rightExclusive] = Range.getRangeValue(this._right, !logic); - - if (!Number.isFinite(start) && !Number.isFinite(end)) { - return ''; - } - - const realStart = leftExclusive ? start + 1 : start; - const realEnd = rightExclusive ? end - 1 : end; // e.g. 5 < x < 7, 5 < x <= 6, 6 <= x <= 6 - - if (realStart === realEnd) { - return `should be ${logic ? '' : '!'}= ${realStart}`; - } // e.g. 4 < x < ∞ - - - if (Number.isFinite(start) && !Number.isFinite(end)) { - return Range.formatLeft(start, logic, leftExclusive); - } // e.g. ∞ < x < 4 - - - if (!Number.isFinite(start) && Number.isFinite(end)) { - return Range.formatRight(end, logic, rightExclusive); - } - - return Range.formatRange(start, end, leftExclusive, rightExclusive, logic); - } - -} - -module.exports = Range; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/hints.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/hints.js deleted file mode 100644 index afa00d54..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/util/hints.js +++ /dev/null @@ -1,105 +0,0 @@ -"use strict"; - -const Range = require('./Range'); -/** @typedef {import("../validate").Schema} Schema */ - -/** - * @param {Schema} schema - * @param {boolean} logic - * @return {string[]} - */ - - -module.exports.stringHints = function stringHints(schema, logic) { - const hints = []; - let type = 'string'; - const currentSchema = { ...schema - }; - - if (!logic) { - const tmpLength = currentSchema.minLength; - const tmpFormat = currentSchema.formatMinimum; - const tmpExclusive = currentSchema.formatExclusiveMaximum; - currentSchema.minLength = currentSchema.maxLength; - currentSchema.maxLength = tmpLength; - currentSchema.formatMinimum = currentSchema.formatMaximum; - currentSchema.formatMaximum = tmpFormat; - currentSchema.formatExclusiveMaximum = !currentSchema.formatExclusiveMinimum; - currentSchema.formatExclusiveMinimum = !tmpExclusive; - } - - if (typeof currentSchema.minLength === 'number') { - if (currentSchema.minLength === 1) { - type = 'non-empty string'; - } else { - const length = Math.max(currentSchema.minLength - 1, 0); - hints.push(`should be longer than ${length} character${length > 1 ? 's' : ''}`); - } - } - - if (typeof currentSchema.maxLength === 'number') { - if (currentSchema.maxLength === 0) { - type = 'empty string'; - } else { - const length = currentSchema.maxLength + 1; - hints.push(`should be shorter than ${length} character${length > 1 ? 's' : ''}`); - } - } - - if (currentSchema.pattern) { - hints.push(`should${logic ? '' : ' not'} match pattern ${JSON.stringify(currentSchema.pattern)}`); - } - - if (currentSchema.format) { - hints.push(`should${logic ? '' : ' not'} match format ${JSON.stringify(currentSchema.format)}`); - } - - if (currentSchema.formatMinimum) { - hints.push(`should be ${currentSchema.formatExclusiveMinimum ? '>' : '>='} ${JSON.stringify(currentSchema.formatMinimum)}`); - } - - if (currentSchema.formatMaximum) { - hints.push(`should be ${currentSchema.formatExclusiveMaximum ? '<' : '<='} ${JSON.stringify(currentSchema.formatMaximum)}`); - } - - return [type].concat(hints); -}; -/** - * @param {Schema} schema - * @param {boolean} logic - * @return {string[]} - */ - - -module.exports.numberHints = function numberHints(schema, logic) { - const hints = [schema.type === 'integer' ? 'integer' : 'number']; - const range = new Range(); - - if (typeof schema.minimum === 'number') { - range.left(schema.minimum); - } - - if (typeof schema.exclusiveMinimum === 'number') { - range.left(schema.exclusiveMinimum, true); - } - - if (typeof schema.maximum === 'number') { - range.right(schema.maximum); - } - - if (typeof schema.exclusiveMaximum === 'number') { - range.right(schema.exclusiveMaximum, true); - } - - const rangeFormat = range.format(logic); - - if (rangeFormat) { - hints.push(rangeFormat); - } - - if (typeof schema.multipleOf === 'number') { - hints.push(`should${logic ? '' : ' not'} be multiple of ${schema.multipleOf}`); - } - - return hints; -}; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/validate.js b/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/validate.js deleted file mode 100644 index ebc660f3..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/dist/validate.js +++ /dev/null @@ -1,160 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _ajv = _interopRequireDefault(require("ajv")); - -var _ajvKeywords = _interopRequireDefault(require("ajv-keywords")); - -var _absolutePath = _interopRequireDefault(require("./keywords/absolutePath")); - -var _ValidationError = _interopRequireDefault(require("./ValidationError")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** @typedef {import("json-schema").JSONSchema4} JSONSchema4 */ - -/** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */ - -/** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */ - -/** @typedef {import("ajv").ErrorObject} ErrorObject */ - -/** - * @typedef {Object} Extend - * @property {number=} formatMinimum - * @property {number=} formatMaximum - * @property {boolean=} formatExclusiveMinimum - * @property {boolean=} formatExclusiveMaximum - */ - -/** @typedef {(JSONSchema4 | JSONSchema6 | JSONSchema7) & Extend} Schema */ - -/** @typedef {ErrorObject & { children?: Array}} SchemaUtilErrorObject */ - -/** - * @callback PostFormatter - * @param {string} formattedError - * @param {SchemaUtilErrorObject} error - * @returns {string} - */ - -/** - * @typedef {Object} ValidationErrorConfiguration - * @property {string=} name - * @property {string=} baseDataPath - * @property {PostFormatter=} postFormatter - */ -const ajv = new _ajv.default({ - allErrors: true, - verbose: true, - $data: true -}); -(0, _ajvKeywords.default)(ajv, ['instanceof', 'formatMinimum', 'formatMaximum', 'patternRequired']); // Custom keywords - -(0, _absolutePath.default)(ajv); -/** - * @param {Schema} schema - * @param {Array | object} options - * @param {ValidationErrorConfiguration=} configuration - * @returns {void} - */ - -function validate(schema, options, configuration) { - let errors = []; - - if (Array.isArray(options)) { - errors = Array.from(options, nestedOptions => validateObject(schema, nestedOptions)); - errors.forEach((list, idx) => { - const applyPrefix = - /** - * @param {SchemaUtilErrorObject} error - */ - error => { - // eslint-disable-next-line no-param-reassign - error.dataPath = `[${idx}]${error.dataPath}`; - - if (error.children) { - error.children.forEach(applyPrefix); - } - }; - - list.forEach(applyPrefix); - }); - errors = errors.reduce((arr, items) => { - arr.push(...items); - return arr; - }, []); - } else { - errors = validateObject(schema, options); - } - - if (errors.length > 0) { - throw new _ValidationError.default(errors, schema, configuration); - } -} -/** - * @param {Schema} schema - * @param {Array | object} options - * @returns {Array} - */ - - -function validateObject(schema, options) { - const compiledSchema = ajv.compile(schema); - const valid = compiledSchema(options); - if (valid) return []; - return compiledSchema.errors ? filterErrors(compiledSchema.errors) : []; -} -/** - * @param {Array} errors - * @returns {Array} - */ - - -function filterErrors(errors) { - /** @type {Array} */ - let newErrors = []; - - for (const error of - /** @type {Array} */ - errors) { - const { - dataPath - } = error; - /** @type {Array} */ - - let children = []; - newErrors = newErrors.filter(oldError => { - if (oldError.dataPath.includes(dataPath)) { - if (oldError.children) { - children = children.concat(oldError.children.slice(0)); - } // eslint-disable-next-line no-undefined, no-param-reassign - - - oldError.children = undefined; - children.push(oldError); - return false; - } - - return true; - }); - - if (children.length) { - error.children = children; - } - - newErrors.push(error); - } - - return newErrors; -} // TODO change after resolve https://github.com/microsoft/TypeScript/issues/34994 - - -validate.ValidationError = _ValidationError.default; -validate.ValidateError = _ValidationError.default; -var _default = validate; -exports.default = _default; \ No newline at end of file diff --git a/conf/site/node_modules/sass-loader/node_modules/schema-utils/package.json b/conf/site/node_modules/sass-loader/node_modules/schema-utils/package.json deleted file mode 100644 index de0d79ea..00000000 --- a/conf/site/node_modules/sass-loader/node_modules/schema-utils/package.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "_args": [ - [ - "schema-utils@2.7.0", - "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site" - ] - ], - "_development": true, - "_from": "schema-utils@2.7.0", - "_id": "schema-utils@2.7.0", - "_inBundle": false, - "_integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "_location": "/sass-loader/schema-utils", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "schema-utils@2.7.0", - "name": "schema-utils", - "escapedName": "schema-utils", - "rawSpec": "2.7.0", - "saveSpec": null, - "fetchSpec": "2.7.0" - }, - "_requiredBy": [ - "/sass-loader" - ], - "_resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "_spec": "2.7.0", - "_where": "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site", - "author": { - "name": "webpack Contrib", - "url": "https://github.com/webpack-contrib" - }, - "bugs": { - "url": "https://github.com/webpack/schema-utils/issues" - }, - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "description": "webpack Validation Utils", - "devDependencies": { - "@babel/cli": "^7.10.1", - "@babel/core": "^7.10.1", - "@babel/preset-env": "^7.10.1", - "@commitlint/cli": "^8.3.5", - "@commitlint/config-conventional": "^8.3.4", - "@webpack-contrib/defaults": "^6.3.0", - "@webpack-contrib/eslint-config-webpack": "^3.0.0", - "babel-jest": "^25.5.1", - "cross-env": "^6.0.3", - "del": "^5.1.0", - "del-cli": "^3.0.1", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-import": "^2.20.2", - "husky": "^4.2.5", - "jest": "^25.5.4", - "lint-staged": "^10.2.7", - "npm-run-all": "^4.1.5", - "prettier": "^1.19.1", - "standard-version": "^8.0.0", - "typescript": "^3.9.3" - }, - "engines": { - "node": ">= 8.9.0" - }, - "files": [ - "dist", - "declarations" - ], - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "homepage": "https://github.com/webpack/schema-utils", - "keywords": [ - "webpack" - ], - "license": "MIT", - "main": "dist/index.js", - "name": "schema-utils", - "repository": { - "type": "git", - "url": "git+https://github.com/webpack/schema-utils.git" - }, - "scripts": { - "build": "npm-run-all -p \"build:**\"", - "build:code": "cross-env NODE_ENV=production babel src -d dist --copy-files", - "build:types": "tsc --declaration --emitDeclarationOnly --outDir declarations && prettier \"declarations/**/*.ts\" --write", - "clean": "del-cli dist declarations", - "commitlint": "commitlint --from=master", - "defaults": "webpack-defaults", - "lint": "npm-run-all -l -p \"lint:**\"", - "lint:js": "eslint --cache .", - "lint:prettier": "prettier \"{**/*,*}.{js,json,md,yml,css,ts}\" --list-different", - "lint:types": "tsc --pretty --noEmit", - "prebuild": "npm run clean", - "prepare": "npm run build", - "pretest": "npm run lint", - "release": "standard-version", - "security": "npm audit", - "start": "npm run build -- -w", - "test": "npm run test:coverage", - "test:coverage": "npm run test:only -- --collectCoverageFrom=\"src/**/*.js\" --coverage", - "test:only": "cross-env NODE_ENV=test jest", - "test:watch": "npm run test:only -- --watch" - }, - "types": "declarations/index.d.ts", - "version": "2.7.0" -} diff --git a/conf/site/node_modules/sass-loader/package.json b/conf/site/node_modules/sass-loader/package.json index bade6bf1..9bee2622 100644 --- a/conf/site/node_modules/sass-loader/package.json +++ b/conf/site/node_modules/sass-loader/package.json @@ -1,42 +1,36 @@ { "_args": [ [ - "sass-loader@9.0.3", + "sass-loader@10.0.1", "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site" ] ], "_development": true, - "_from": "sass-loader@9.0.3", - "_id": "sass-loader@9.0.3", + "_from": "sass-loader@10.0.1", + "_id": "sass-loader@10.0.1", "_inBundle": false, - "_integrity": "sha512-fOwsP98ac1VMme+V3+o0HaaMHp8Q/C9P+MUazLFVi3Jl7ORGHQXL1XeRZt3zLSGZQQPC8xE42Y2WptItvGjDQg==", + "_integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", "_location": "/sass-loader", "_phantomChildren": { - "@types/json-schema": "7.0.5", - "ajv-keywords": "3.4.1", "big.js": "5.2.2", "emojis-list": "3.0.0", - "fast-deep-equal": "3.1.1", - "fast-json-stable-stringify": "2.1.0", - "json-schema-traverse": "0.4.1", - "json5": "2.1.2", - "uri-js": "4.2.2" + "json5": "2.1.2" }, "_requested": { "type": "version", "registry": true, - "raw": "sass-loader@9.0.3", + "raw": "sass-loader@10.0.1", "name": "sass-loader", "escapedName": "sass-loader", - "rawSpec": "9.0.3", + "rawSpec": "10.0.1", "saveSpec": null, - "fetchSpec": "9.0.3" + "fetchSpec": "10.0.1" }, "_requiredBy": [ "#DEV:/" ], - "_resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-9.0.3.tgz", - "_spec": "9.0.3", + "_resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", + "_spec": "10.0.1", "_where": "/home/henry/Documents/git/Speedtest-tracker-docker/conf/site", "author": { "name": "J. Tangelder" @@ -45,7 +39,7 @@ "url": "https://github.com/webpack-contrib/sass-loader/issues" }, "dependencies": { - "klona": "^1.1.2", + "klona": "^2.0.3", "loader-utils": "^2.0.0", "neo-async": "^2.6.2", "schema-utils": "^2.7.0", @@ -54,35 +48,36 @@ "description": "Sass loader for webpack", "devDependencies": { "@babel/cli": "^7.10.5", - "@babel/core": "^7.11.0", + "@babel/core": "^7.11.4", "@babel/preset-env": "^7.11.0", - "@commitlint/cli": "^9.1.1", - "@commitlint/config-conventional": "^9.1.1", + "@commitlint/cli": "^10.0.0", + "@commitlint/config-conventional": "^10.0.0", "@webpack-contrib/defaults": "^6.3.0", "@webpack-contrib/eslint-config-webpack": "^3.0.0", - "babel-jest": "^26.2.2", - "bootstrap": "^4.5.1", + "babel-jest": "^26.3.0", + "bootstrap": "^4.5.2", "bootstrap-sass": "^3.4.1", "cross-env": "^7.0.2", - "css-loader": "^4.2.0", + "css-loader": "^4.2.2", "del": "^5.1.0", "del-cli": "^3.0.1", - "eslint": "^7.6.0", + "enhanced-resolve": "^4.3.0", + "eslint": "^7.7.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.21.2", "fibers": "^5.0.0", "file-loader": "^6.0.0", "foundation-sites": "^6.6.3", "husky": "^4.2.5", - "jest": "^26.2.2", - "lint-staged": "^10.2.11", + "jest": "^26.4.2", + "lint-staged": "^10.2.12", "material-components-web": "^7.0.0", "memfs": "^3.2.0", "node-sass": "^4.14.1", "npm-run-all": "^4.1.5", - "prettier": "^2.0.5", + "prettier": "^2.1.0", "sass": "^1.26.10", - "standard-version": "^8.0.2", + "standard-version": "^9.0.0", "style-loader": "^1.2.1", "webpack": "^4.44.1" }, @@ -147,5 +142,5 @@ "test:only": "cross-env NODE_ENV=test jest", "test:watch": "npm run test:only -- --watch" }, - "version": "9.0.3" + "version": "10.0.1" } diff --git a/conf/site/vendor/composer/autoload_classmap.php b/conf/site/vendor/composer/autoload_classmap.php index 2a7cac87..8ce94cce 100644 --- a/conf/site/vendor/composer/autoload_classmap.php +++ b/conf/site/vendor/composer/autoload_classmap.php @@ -558,6 +558,7 @@ return array( 'Doctrine\\DBAL\\Driver\\AbstractPostgreSQLDriver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLAnywhereDriver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php', + 'Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver\\PortWithoutHost' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLiteDriver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php', 'Doctrine\\DBAL\\Driver\\Connection' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php', 'Doctrine\\DBAL\\Driver\\DriverException' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php', @@ -568,6 +569,7 @@ return array( 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Driver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php', 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Exception' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Exception.php', 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Statement' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php', + 'Doctrine\\DBAL\\Driver\\IBMDB2\\DataSourceName' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\Driver' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/Driver.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\MysqliConnection' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\MysqliException' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliException.php', @@ -639,6 +641,9 @@ return array( 'Doctrine\\DBAL\\FetchMode' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php', 'Doctrine\\DBAL\\Id\\TableGenerator' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php', 'Doctrine\\DBAL\\Id\\TableGeneratorSchemaVisitor' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGeneratorSchemaVisitor.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderCalculator' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderEdge' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderNode' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderNode.php', 'Doctrine\\DBAL\\LockMode' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/LockMode.php', 'Doctrine\\DBAL\\Logging\\DebugStack' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Logging/DebugStack.php', 'Doctrine\\DBAL\\Logging\\EchoSQLLogger' => $vendorDir . '/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php', @@ -3236,6 +3241,7 @@ return array( 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\TapExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/TapExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\TransExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/TransExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\UrlExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/UrlExtension.php', + 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ValidatorExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ValueExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ValueExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ViewExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ViewExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\HigherOrderTapProxyExtension' => $vendorDir . '/nunomaduro/larastan/src/ReturnTypes/HigherOrderTapProxyExtension.php', diff --git a/conf/site/vendor/composer/autoload_files.php b/conf/site/vendor/composer/autoload_files.php index b80bf711..21f16522 100644 --- a/conf/site/vendor/composer/autoload_files.php +++ b/conf/site/vendor/composer/autoload_files.php @@ -15,8 +15,8 @@ return array( '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '9b38cf48e83f5d8f60375221cd213eee' => $vendorDir . '/phpstan/phpstan/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', diff --git a/conf/site/vendor/composer/autoload_static.php b/conf/site/vendor/composer/autoload_static.php index 582840c2..3506a00f 100644 --- a/conf/site/vendor/composer/autoload_static.php +++ b/conf/site/vendor/composer/autoload_static.php @@ -16,8 +16,8 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8 '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '9b38cf48e83f5d8f60375221cd213eee' => __DIR__ . '/..' . '/phpstan/phpstan/bootstrap.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php', 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', @@ -1183,6 +1183,7 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8 'Doctrine\\DBAL\\Driver\\AbstractPostgreSQLDriver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLAnywhereDriver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php', + 'Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver\\PortWithoutHost' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php', 'Doctrine\\DBAL\\Driver\\AbstractSQLiteDriver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php', 'Doctrine\\DBAL\\Driver\\Connection' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php', 'Doctrine\\DBAL\\Driver\\DriverException' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php', @@ -1193,6 +1194,7 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Driver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php', 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Exception' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Exception.php', 'Doctrine\\DBAL\\Driver\\IBMDB2\\DB2Statement' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php', + 'Doctrine\\DBAL\\Driver\\IBMDB2\\DataSourceName' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\Driver' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/Driver.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\MysqliConnection' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php', 'Doctrine\\DBAL\\Driver\\Mysqli\\MysqliException' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliException.php', @@ -1264,6 +1266,9 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8 'Doctrine\\DBAL\\FetchMode' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php', 'Doctrine\\DBAL\\Id\\TableGenerator' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php', 'Doctrine\\DBAL\\Id\\TableGeneratorSchemaVisitor' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGeneratorSchemaVisitor.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderCalculator' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderEdge' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php', + 'Doctrine\\DBAL\\Internal\\DependencyOrderNode' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderNode.php', 'Doctrine\\DBAL\\LockMode' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/LockMode.php', 'Doctrine\\DBAL\\Logging\\DebugStack' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Logging/DebugStack.php', 'Doctrine\\DBAL\\Logging\\EchoSQLLogger' => __DIR__ . '/..' . '/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php', @@ -3861,6 +3866,7 @@ class ComposerStaticInita54da675f7e63b2b06cffe7d297f5df8 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\TapExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/TapExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\TransExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/TransExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\UrlExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/UrlExtension.php', + 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ValidatorExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ValueExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ValueExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\Helpers\\ViewExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/Helpers/ViewExtension.php', 'NunoMaduro\\Larastan\\ReturnTypes\\HigherOrderTapProxyExtension' => __DIR__ . '/..' . '/nunomaduro/larastan/src/ReturnTypes/HigherOrderTapProxyExtension.php', diff --git a/conf/site/vendor/composer/ca-bundle/res/cacert.pem b/conf/site/vendor/composer/ca-bundle/res/cacert.pem index 651694e8..f9bd706b 100644 --- a/conf/site/vendor/composer/ca-bundle/res/cacert.pem +++ b/conf/site/vendor/composer/ca-bundle/res/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Wed Jan 1 04:12:10 2020 GMT +## Certificate data from Mozilla as of: Wed Jul 22 03:12:14 2020 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -13,8 +13,8 @@ ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## -## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: f3bdcd74612952da8476a9d4147f50b29ad0710b7dd95b4c8690500209986d70 +## Conversion done with mk-ca-bundle.pl version 1.28. +## SHA256: cc6408bd4be7fbfb8699bdb40ccb7f6de5780d681d87785ea362646e4dad5e8e ## @@ -61,30 +61,6 @@ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- @@ -130,30 +106,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- @@ -1126,38 +1078,6 @@ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -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 -66+KAQ== ------END CERTIFICATE----- - Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- @@ -2831,37 +2751,6 @@ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== -----END CERTIFICATE----- -LuxTrust Global Root 2 -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 ============================================= -----BEGIN CERTIFICATE----- @@ -3464,3 +3353,95 @@ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G +TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT kcpG2om3PVODLAgfi49T3f+sHw== -----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- diff --git a/conf/site/vendor/composer/installed.json b/conf/site/vendor/composer/installed.json index e1553741..00add99f 100644 --- a/conf/site/vendor/composer/installed.json +++ b/conf/site/vendor/composer/installed.json @@ -242,17 +242,17 @@ }, { "name": "composer/ca-bundle", - "version": "1.2.7", - "version_normalized": "1.2.7.0", + "version": "1.2.8", + "version_normalized": "1.2.8.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd" + "reference": "8a7ecad675253e4654ea05505233285377405215" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd", - "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215", + "reference": "8a7ecad675253e4654ea05505233285377405215", "shasum": "" }, "require": { @@ -265,7 +265,7 @@ "psr/log": "^1.0", "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" }, - "time": "2020-04-08T08:27:21+00:00", + "time": "2020-08-23T12:54:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -302,6 +302,10 @@ "url": "https://packagist.com", "type": "custom" }, + { + "url": "https://github.com/composer", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" @@ -545,17 +549,17 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.2", - "version_normalized": "1.4.2.0", + "version": "1.4.3", + "version_normalized": "1.4.3.0", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51" + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", - "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", "shasum": "" }, "require": { @@ -565,7 +569,7 @@ "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" }, - "time": "2020-06-04T11:16:35+00:00", + "time": "2020-08-19T10:27:58+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -640,17 +644,17 @@ }, { "name": "doctrine/cache", - "version": "1.10.1", - "version_normalized": "1.10.1.0", + "version": "1.10.2", + "version_normalized": "1.10.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { @@ -669,7 +673,7 @@ "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, - "time": "2020-05-27T16:24:54+00:00", + "time": "2020-07-07T18:54:01+00:00", "type": "library", "extra": { "branch-alias": { @@ -738,17 +742,17 @@ }, { "name": "doctrine/dbal", - "version": "2.10.2", - "version_normalized": "2.10.2.0", + "version": "2.10.3", + "version_normalized": "2.10.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" + "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/03ca23afc2ee062f5d3e32426ad37c34a4770dcf", + "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf", "shasum": "" }, "require": { @@ -758,18 +762,19 @@ "php": "^7.2" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.1", "jetbrains/phpstorm-stubs": "^2019.1", "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.4.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^8.5.5", + "psalm/plugin-phpunit": "^0.10.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.11" + "vimeo/psalm": "^3.14.2" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "time": "2020-04-20T17:19:26+00:00", + "time": "2020-09-02T01:35:42+00:00", "bin": [ "bin/doctrine-dbal" ], @@ -848,21 +853,21 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "version": "1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "629572819973f13486371cb611386eb17851e85c" + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", - "reference": "629572819973f13486371cb611386eb17851e85c", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9@dev" @@ -871,7 +876,7 @@ "doctrine/coding-standard": "^6.0", "phpunit/phpunit": "^7.0" }, - "time": "2019-11-10T09:48:07+00:00", + "time": "2020-05-29T18:28:51+00:00", "type": "library", "extra": { "branch-alias": { @@ -922,6 +927,20 @@ "event manager", "event system", "events" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } ] }, { @@ -2117,17 +2136,17 @@ }, { "name": "laravel/framework", - "version": "v7.26.0", - "version_normalized": "7.26.0.0", + "version": "v7.27.0", + "version_normalized": "7.27.0.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f64299a11dedaaadf1cfff07b2b3220a9b791837" + "reference": "17777a92da9b3cf0026f26462d289d596420e6d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f64299a11dedaaadf1cfff07b2b3220a9b791837", - "reference": "f64299a11dedaaadf1cfff07b2b3220a9b791837", + "url": "https://api.github.com/repos/laravel/framework/zipball/17777a92da9b3cf0026f26462d289d596420e6d0", + "reference": "17777a92da9b3cf0026f26462d289d596420e6d0", "shasum": "" }, "require": { @@ -2241,7 +2260,7 @@ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, - "time": "2020-08-25T13:44:44+00:00", + "time": "2020-09-01T13:41:48+00:00", "type": "library", "extra": { "branch-alias": { @@ -3251,17 +3270,17 @@ }, { "name": "nunomaduro/larastan", - "version": "v0.6.2", - "version_normalized": "0.6.2.0", + "version": "v0.6.4", + "version_normalized": "0.6.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "fd0ab4e585db15618ab6e78b368be456aa8c86ad" + "reference": "a92f9e20f0aa7a62704ffb09f7445b45f1ad91f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/fd0ab4e585db15618ab6e78b368be456aa8c86ad", - "reference": "fd0ab4e585db15618ab6e78b368be456aa8c86ad", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/a92f9e20f0aa7a62704ffb09f7445b45f1ad91f7", + "reference": "a92f9e20f0aa7a62704ffb09f7445b45f1ad91f7", "shasum": "" }, "require": { @@ -3280,13 +3299,13 @@ "symfony/process": "^4.3 || ^5.0" }, "require-dev": { - "orchestra/testbench": "^4.0 || ^5.0", + "orchestra/testbench": "^4.0 || ^5.0 || ^6.0", "phpunit/phpunit": "^7.3 || ^8.2" }, "suggest": { "orchestra/testbench": "^4.0 || ^5.0" }, - "time": "2020-07-30T19:33:12+00:00", + "time": "2020-09-02T14:19:36+00:00", "type": "phpstan-extension", "extra": { "branch-alias": { @@ -3848,17 +3867,17 @@ }, { "name": "phpstan/phpstan", - "version": "0.12.34", - "version_normalized": "0.12.34.0", + "version": "0.12.42", + "version_normalized": "0.12.42.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "ad75388d71fb0b4a954f71a852fd989915a51cb7" + "reference": "7c43b7c2d5ca6554f6231e82e342a710163ac5f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad75388d71fb0b4a954f71a852fd989915a51cb7", - "reference": "ad75388d71fb0b4a954f71a852fd989915a51cb7", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7c43b7c2d5ca6554f6231e82e342a710163ac5f4", + "reference": "7c43b7c2d5ca6554f6231e82e342a710163ac5f4", "shasum": "" }, "require": { @@ -3867,7 +3886,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2020-07-30T15:31:10+00:00", + "time": "2020-09-02T13:14:53+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -5594,17 +5613,17 @@ }, { "name": "seld/jsonlint", - "version": "1.8.0", - "version_normalized": "1.8.0.0", + "version": "1.8.2", + "version_normalized": "1.8.2.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1" + "reference": "590cfec960b77fd55e39b7d9246659e95dd6d337" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", - "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/590cfec960b77fd55e39b7d9246659e95dd6d337", + "reference": "590cfec960b77fd55e39b7d9246659e95dd6d337", "shasum": "" }, "require": { @@ -5613,7 +5632,7 @@ "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, - "time": "2020-04-30T19:05:18+00:00", + "time": "2020-08-25T06:56:57+00:00", "bin": [ "bin/jsonlint" ], @@ -5765,17 +5784,17 @@ }, { "name": "symfony/console", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2226c68009627934b8cfc01260b4d287eab070df" + "reference": "186f395b256065ba9b890c0a4e48a91d598fa2cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2226c68009627934b8cfc01260b4d287eab070df", - "reference": "2226c68009627934b8cfc01260b4d287eab070df", + "url": "https://api.github.com/repos/symfony/console/zipball/186f395b256065ba9b890c0a4e48a91d598fa2cf", + "reference": "186f395b256065ba9b890c0a4e48a91d598fa2cf", "shasum": "" }, "require": { @@ -5811,7 +5830,7 @@ "symfony/lock": "", "symfony/process": "" }, - "time": "2020-07-06T13:23:11+00:00", + "time": "2020-09-02T07:07:40+00:00", "type": "library", "extra": { "branch-alias": { @@ -5860,8 +5879,8 @@ }, { "name": "symfony/css-selector", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -5995,17 +6014,17 @@ }, { "name": "symfony/error-handler", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b" + "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b", - "reference": "4a0d1673a4731c3cb2dea3580c73a676ecb9ed4b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/525636d4b84e06c6ca72d96b6856b5b169416e6a", + "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a", "shasum": "" }, "require": { @@ -6019,7 +6038,7 @@ "symfony/http-kernel": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" }, - "time": "2020-07-23T08:36:24+00:00", + "time": "2020-08-17T10:01:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -6068,17 +6087,17 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7827d55911f91c070fc293ea51a06eec80797d76" + "reference": "94871fc0a69c3c5da57764187724cdce0755899c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7827d55911f91c070fc293ea51a06eec80797d76", - "reference": "7827d55911f91c070fc293ea51a06eec80797d76", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/94871fc0a69c3c5da57764187724cdce0755899c", + "reference": "94871fc0a69c3c5da57764187724cdce0755899c", "shasum": "" }, "require": { @@ -6107,7 +6126,7 @@ "symfony/dependency-injection": "", "symfony/http-kernel": "" }, - "time": "2020-06-18T18:24:02+00:00", + "time": "2020-08-13T14:19:42+00:00", "type": "library", "extra": { "branch-alias": { @@ -6234,24 +6253,24 @@ }, { "name": "symfony/filesystem", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "6e4320f06d5f2cce0d96530162491f4465179157" + "reference": "f7b9ed6142a34252d219801d9767dedbd711da1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", - "reference": "6e4320f06d5f2cce0d96530162491f4465179157", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/f7b9ed6142a34252d219801d9767dedbd711da1a", + "reference": "f7b9ed6142a34252d219801d9767dedbd711da1a", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, - "time": "2020-05-30T20:35:19+00:00", + "time": "2020-08-21T17:19:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -6300,23 +6319,23 @@ }, { "name": "symfony/finder", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" + "reference": "2b765f0cf6612b3636e738c0689b29aa63088d5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", + "url": "https://api.github.com/repos/symfony/finder/zipball/2b765f0cf6612b3636e738c0689b29aa63088d5d", + "reference": "2b765f0cf6612b3636e738c0689b29aa63088d5d", "shasum": "" }, "require": { "php": ">=7.2.5" }, - "time": "2020-05-20T17:43:50+00:00", + "time": "2020-08-17T10:01:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -6365,17 +6384,17 @@ }, { "name": "symfony/http-foundation", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "1f0d6627e680591c61e9176f04a0dc887b4e6702" + "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/1f0d6627e680591c61e9176f04a0dc887b4e6702", - "reference": "1f0d6627e680591c61e9176f04a0dc887b4e6702", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/41a4647f12870e9d41d9a7d72ff0614a27208558", + "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558", "shasum": "" }, "require": { @@ -6393,7 +6412,7 @@ "suggest": { "symfony/mime": "To use the file extension guesser" }, - "time": "2020-07-23T10:04:31+00:00", + "time": "2020-08-17T07:48:54+00:00", "type": "library", "extra": { "branch-alias": { @@ -6442,17 +6461,17 @@ }, { "name": "symfony/http-kernel", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d6dd8f6420e377970ddad0d6317d4ce4186fc6b3" + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d6dd8f6420e377970ddad0d6317d4ce4186fc6b3", - "reference": "d6dd8f6420e377970ddad0d6317d4ce4186fc6b3", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3e32676e6cb5d2081c91a56783471ff8a7f7110b", + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b", "shasum": "" }, "require": { @@ -6508,7 +6527,7 @@ "symfony/console": "", "symfony/dependency-injection": "" }, - "time": "2020-07-24T04:22:56+00:00", + "time": "2020-09-02T08:15:18+00:00", "type": "library", "extra": { "branch-alias": { @@ -6557,17 +6576,17 @@ }, { "name": "symfony/mime", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6" + "reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/149fb0ad35aae3c7637b496b38478797fa6a7ea6", - "reference": "149fb0ad35aae3c7637b496b38478797fa6a7ea6", + "url": "https://api.github.com/repos/symfony/mime/zipball/89a2c9b4cb7b5aa516cf55f5194c384f444c81dc", + "reference": "89a2c9b4cb7b5aa516cf55f5194c384f444c81dc", "shasum": "" }, "require": { @@ -6583,7 +6602,7 @@ "egulias/email-validator": "^2.1.10", "symfony/dependency-injection": "^4.4|^5.0" }, - "time": "2020-07-23T10:04:31+00:00", + "time": "2020-08-17T10:01:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -7576,8 +7595,8 @@ }, { "name": "symfony/process", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -7642,17 +7661,17 @@ }, { "name": "symfony/routing", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "08c9a82f09d12ee048f85e76e0d783f82844eb5d" + "reference": "47b0218344cb6af25c93ca8ee1137fafbee5005d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/08c9a82f09d12ee048f85e76e0d783f82844eb5d", - "reference": "08c9a82f09d12ee048f85e76e0d783f82844eb5d", + "url": "https://api.github.com/repos/symfony/routing/zipball/47b0218344cb6af25c93ca8ee1137fafbee5005d", + "reference": "47b0218344cb6af25c93ca8ee1137fafbee5005d", "shasum": "" }, "require": { @@ -7681,7 +7700,7 @@ "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" }, - "time": "2020-06-18T18:24:02+00:00", + "time": "2020-08-10T08:03:57+00:00", "type": "library", "extra": { "branch-alias": { @@ -7814,17 +7833,17 @@ }, { "name": "symfony/string", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f629ba9b611c76224feb21fe2bcbf0b6f992300b" + "reference": "0de4cc1e18bb596226c06a82e2e7e9bc6001a63a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f629ba9b611c76224feb21fe2bcbf0b6f992300b", - "reference": "f629ba9b611c76224feb21fe2bcbf0b6f992300b", + "url": "https://api.github.com/repos/symfony/string/zipball/0de4cc1e18bb596226c06a82e2e7e9bc6001a63a", + "reference": "0de4cc1e18bb596226c06a82e2e7e9bc6001a63a", "shasum": "" }, "require": { @@ -7841,7 +7860,7 @@ "symfony/translation-contracts": "^1.1|^2", "symfony/var-exporter": "^4.4|^5.0" }, - "time": "2020-07-08T08:27:49+00:00", + "time": "2020-08-17T07:48:54+00:00", "type": "library", "extra": { "branch-alias": { @@ -7901,17 +7920,17 @@ }, { "name": "symfony/translation", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4b9bf719f0fa5b05253c37fc7b335337ec7ec427" + "reference": "917b02cdc5f33e0309b8e9d33ee1480b20687413" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4b9bf719f0fa5b05253c37fc7b335337ec7ec427", - "reference": "4b9bf719f0fa5b05253c37fc7b335337ec7ec427", + "url": "https://api.github.com/repos/symfony/translation/zipball/917b02cdc5f33e0309b8e9d33ee1480b20687413", + "reference": "917b02cdc5f33e0309b8e9d33ee1480b20687413", "shasum": "" }, "require": { @@ -7946,7 +7965,7 @@ "symfony/config": "", "symfony/yaml": "" }, - "time": "2020-06-30T17:42:22+00:00", + "time": "2020-08-17T10:01:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -8072,17 +8091,17 @@ }, { "name": "symfony/var-dumper", - "version": "v5.1.3", - "version_normalized": "5.1.3.0", + "version": "v5.1.5", + "version_normalized": "5.1.5.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2ebe1c7bb52052624d6dc1250f4abe525655d75a" + "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2ebe1c7bb52052624d6dc1250f4abe525655d75a", - "reference": "2ebe1c7bb52052624d6dc1250f4abe525655d75a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b43a3905262bcf97b2510f0621f859ca4f5287be", + "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be", "shasum": "" }, "require": { @@ -8105,7 +8124,7 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "time": "2020-06-24T13:36:18+00:00", + "time": "2020-08-17T07:42:30+00:00", "bin": [ "Resources/bin/var-dump-server" ], diff --git a/conf/site/vendor/composer/xdebug-handler/CHANGELOG.md b/conf/site/vendor/composer/xdebug-handler/CHANGELOG.md index 17dfc3f2..e5807793 100644 --- a/conf/site/vendor/composer/xdebug-handler/CHANGELOG.md +++ b/conf/site/vendor/composer/xdebug-handler/CHANGELOG.md @@ -1,5 +1,8 @@ ## [Unreleased] +## [1.4.3] - 2020-08-19 + * Fixed: restore SIGINT to default handler in restarted process if no other handler exists. + ## [1.4.2] - 2020-06-04 * Fixed: ignore SIGINTs to let the restarted process handle them. @@ -60,7 +63,8 @@ * Break: the following class was renamed: - `Composer\XdebugHandler` -> `Composer\XdebugHandler\XdebugHandler` -[Unreleased]: https://github.com/composer/xdebug-handler/compare/1.4.2...HEAD +[Unreleased]: https://github.com/composer/xdebug-handler/compare/1.4.3...HEAD +[1.4.3]: https://github.com/composer/xdebug-handler/compare/1.4.2...1.4.3 [1.4.2]: https://github.com/composer/xdebug-handler/compare/1.4.1...1.4.2 [1.4.1]: https://github.com/composer/xdebug-handler/compare/1.4.0...1.4.1 [1.4.0]: https://github.com/composer/xdebug-handler/compare/1.3.3...1.4.0 diff --git a/conf/site/vendor/composer/xdebug-handler/README.md b/conf/site/vendor/composer/xdebug-handler/README.md index c23b7a06..57fb9adc 100644 --- a/conf/site/vendor/composer/xdebug-handler/README.md +++ b/conf/site/vendor/composer/xdebug-handler/README.md @@ -69,6 +69,10 @@ A temporary ini file is created from the loaded (and scanned) ini files, with an * The application runs and exits. * The main process exits with the exit code from the restarted process. +#### Signal handling +From PHP 7.1 with the pcntl extension loaded, asynchronous signal handling is automatically enabled. `SIGINT` is set to `SIG_IGN` in the parent +process and restored to `SIG_DFL` in the restarted process (if no other handler has been set). + ### Limitations There are a few things to be aware of when running inside a restarted process. diff --git a/conf/site/vendor/composer/xdebug-handler/src/XdebugHandler.php b/conf/site/vendor/composer/xdebug-handler/src/XdebugHandler.php index cd5776c7..ed5107ef 100644 --- a/conf/site/vendor/composer/xdebug-handler/src/XdebugHandler.php +++ b/conf/site/vendor/composer/xdebug-handler/src/XdebugHandler.php @@ -132,14 +132,13 @@ class XdebugHandler if ($this->prepareRestart()) { $command = $this->getCommand(); - $this->notify(Status::RESTARTING, $command); $this->restart($command); } return; } if (self::RESTART_ID === $envArgs[0] && count($envArgs) === 5) { - // Restarting, so unset environment variable and use saved values + // Restarted, so unset environment variable and use saved values $this->notify(Status::RESTARTED); Process::setEnv($this->envAllowXdebug); @@ -150,6 +149,8 @@ class XdebugHandler self::$skipped = $envArgs[1]; } + $this->tryEnableSignals(); + // Put restart settings in the environment $this->setEnvRestartSettings($envArgs); return; @@ -256,12 +257,8 @@ class XdebugHandler */ private function doRestart($command) { - // Ignore SIGINTs here so the child process can handle them. To replicate this - // on Windows we would need to use proc_open (PHP 7.4+) rather than passthru. - if (function_exists('pcntl_async_signals') && function_exists('pcntl_signal')) { - pcntl_async_signals(true); - pcntl_signal(SIGINT, SIG_IGN); - } + $this->tryEnableSignals(); + $this->notify(Status::RESTARTING, $command); passthru($command, $exitCode); $this->notify(Status::INFO, 'Restarted process exited '.$exitCode); @@ -569,4 +566,32 @@ class XdebugHandler return true; } + + /** + * Enables async signals and control interrupts in the restarted process + * + * Only available on Unix PHP 7.1+ with the pcntl extension. To replicate on + * Windows would require PHP 7.4+ using proc_open rather than passthru. + */ + private function tryEnableSignals() + { + if (!function_exists('pcntl_async_signals')) { + return; + } + + pcntl_async_signals(true); + $message = 'Async signals enabled'; + + if (!self::$inRestart) { + // Restarting, so ignore SIGINT in parent + pcntl_signal(SIGINT, SIG_IGN); + $message .= ' (SIGINT = SIG_IGN)'; + } elseif (is_int(pcntl_signal_get_handler(SIGINT))) { + // Restarted, no handler set so force default action + pcntl_signal(SIGINT, SIG_DFL); + $message .= ' (SIGINT = SIG_DFL)'; + } + + $this->notify(Status::INFO, $message); + } } diff --git a/conf/site/vendor/doctrine/cache/README.md b/conf/site/vendor/doctrine/cache/README.md index 5be2aa2e..c795a058 100644 --- a/conf/site/vendor/doctrine/cache/README.md +++ b/conf/site/vendor/doctrine/cache/README.md @@ -1,8 +1,7 @@ # Doctrine Cache [![Build Status](https://img.shields.io/travis/doctrine/cache/master.svg?style=flat-square)](http://travis-ci.org/doctrine/cache) -[![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/doctrine/cache/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/doctrine/cache/?branch=master) -[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/doctrine/cache/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/doctrine/cache/?branch=master) +[![Code Coverage](https://codecov.io/gh/doctrine/dbal/branch/cache/graph/badge.svg)](https://codecov.io/gh/doctrine/dbal/branch/master) [![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/cache.svg?style=flat-square)](https://packagist.org/packages/doctrine/cache) [![Total Downloads](https://img.shields.io/packagist/dt/doctrine/cache.svg?style=flat-square)](https://packagist.org/packages/doctrine/cache) diff --git a/conf/site/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php b/conf/site/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php index e9762a2c..8f85845c 100644 --- a/conf/site/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php +++ b/conf/site/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ChainCache.php @@ -15,6 +15,9 @@ class ChainCache extends CacheProvider /** @var CacheProvider[] */ private $cacheProviders = []; + /** @var int */ + private $defaultLifeTimeForDownstreamCacheProviders = 0; + /** * @param CacheProvider[] $cacheProviders */ @@ -25,6 +28,11 @@ class ChainCache extends CacheProvider : array_values($cacheProviders); } + public function setDefaultLifeTimeForDownstreamCacheProviders(int $defaultLifeTimeForDownstreamCacheProviders) : void + { + $this->defaultLifeTimeForDownstreamCacheProviders = $defaultLifeTimeForDownstreamCacheProviders; + } + /** * {@inheritDoc} */ @@ -48,7 +56,7 @@ class ChainCache extends CacheProvider // We populate all the previous cache layers (that are assumed to be faster) for ($subKey = $key - 1; $subKey >= 0; $subKey--) { - $this->cacheProviders[$subKey]->doSave($id, $value); + $this->cacheProviders[$subKey]->doSave($id, $value, $this->defaultLifeTimeForDownstreamCacheProviders); } return $value; @@ -74,7 +82,7 @@ class ChainCache extends CacheProvider // We populate all the previous cache layers (that are assumed to be faster) if (count($fetchedValues) === $keysCount) { foreach ($traversedProviders as $previousCacheProvider) { - $previousCacheProvider->doSaveMultiple($fetchedValues); + $previousCacheProvider->doSaveMultiple($fetchedValues, $this->defaultLifeTimeForDownstreamCacheProviders); } return $fetchedValues; diff --git a/conf/site/vendor/doctrine/dbal/README.md b/conf/site/vendor/doctrine/dbal/README.md index 37ffcad5..5a3582b8 100644 --- a/conf/site/vendor/doctrine/dbal/README.md +++ b/conf/site/vendor/doctrine/dbal/README.md @@ -3,10 +3,9 @@ | [Master][Master] | [2.10][2.10] | |:----------------:|:----------:| | [![Build status][Master image]][Master] | [![Build status][2.10 image]][2.10] | -| [![Build Status][ContinuousPHP image]][ContinuousPHP] | [![Build Status][ContinuousPHP 2.10 image]][ContinuousPHP] | -| [![Code Coverage][Coverage image]][Scrutinizer Master] | [![Code Coverage][Coverage 2.10 image]][Scrutinizer 2.10] | -| [![Code Quality][Quality image]][Scrutinizer Master] | [![Code Quality][Quality 2.10 image]][Scrutinizer 2.10] | +| [![GitHub Actions][GA master image]][GA master] | [![GitHub Actions][GA 2.10 image]][GA 2.10] | | [![AppVeyor][AppVeyor master image]][AppVeyor master] | [![AppVeyor][AppVeyor 2.10 image]][AppVeyor 2.10] | +| [![Code Coverage][Coverage image]][CodeCov Master] | [![Code Coverage][Coverage 2.10 image]][CodeCov 2.10] | Powerful database abstraction layer with many features for database schema introspection, schema management and PDO abstraction. @@ -17,20 +16,19 @@ Powerful database abstraction layer with many features for database schema intro * [Issue Tracker](https://github.com/doctrine/dbal/issues) [Master image]: https://img.shields.io/travis/doctrine/dbal/master.svg?style=flat-square - [Coverage image]: https://img.shields.io/scrutinizer/coverage/g/doctrine/dbal/master.svg?style=flat-square - [Quality image]: https://img.shields.io/scrutinizer/g/doctrine/dbal/master.svg?style=flat-square - [ContinuousPHP image]: https://img.shields.io/continuousphp/git-hub/doctrine/dbal/master.svg?style=flat-square + [Coverage image]: https://codecov.io/gh/doctrine/dbal/branch/master/graph/badge.svg [Master]: https://travis-ci.org/doctrine/dbal - [Scrutinizer Master]: https://scrutinizer-ci.com/g/doctrine/dbal/ + [CodeCov Master]: https://codecov.io/gh/doctrine/dbal/branch/master [AppVeyor master]: https://ci.appveyor.com/project/doctrine/dbal/branch/master [AppVeyor master image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/master?svg=true - [ContinuousPHP]: https://continuousphp.com/git-hub/doctrine/dbal + [GA master]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Amaster + [GA master image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg [2.10 image]: https://img.shields.io/travis/doctrine/dbal/2.10.x.svg?style=flat-square - [Coverage 2.10 image]: https://img.shields.io/scrutinizer/coverage/g/doctrine/dbal/2.10.x.svg?style=flat-square - [Quality 2.10 image]: https://img.shields.io/scrutinizer/g/doctrine/dbal/2.10.x.svg?style=flat-square - [ContinuousPHP 2.10 image]: https://img.shields.io/continuousphp/git-hub/doctrine/dbal/2.10.x.svg?style=flat-square + [Coverage 2.10 image]: https://codecov.io/gh/doctrine/dbal/branch/2.10.x/graph/badge.svg [2.10]: https://github.com/doctrine/dbal/tree/2.10.x - [Scrutinizer 2.10]: https://scrutinizer-ci.com/g/doctrine/dbal/?branch=2.10.x + [CodeCov 2.10]: https://codecov.io/gh/doctrine/dbal/branch/2.10.x [AppVeyor 2.10]: https://ci.appveyor.com/project/doctrine/dbal/branch/2.10.x [AppVeyor 2.10 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/2.10.x?svg=true + [GA 2.10]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A2.10.x + [GA 2.10 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=2.10.x diff --git a/conf/site/vendor/doctrine/dbal/ci/github/phpunit.oci8.xml b/conf/site/vendor/doctrine/dbal/ci/github/phpunit.oci8.xml new file mode 100644 index 00000000..e6b927f9 --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/ci/github/phpunit.oci8.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + ../../tests + + + + + + ../../lib + + + + + + performance + + + diff --git a/conf/site/vendor/doctrine/dbal/ci/github/phpunit.pdo-oci.xml b/conf/site/vendor/doctrine/dbal/ci/github/phpunit.pdo-oci.xml new file mode 100644 index 00000000..94fe38c2 --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/ci/github/phpunit.pdo-oci.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + ../../tests + + + + + + ../../lib + + + + + + performance + + + diff --git a/conf/site/vendor/doctrine/dbal/composer.json b/conf/site/vendor/doctrine/dbal/composer.json index f17794bc..0c61fc46 100644 --- a/conf/site/vendor/doctrine/dbal/composer.json +++ b/conf/site/vendor/doctrine/dbal/composer.json @@ -38,13 +38,14 @@ "doctrine/event-manager": "^1.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.1", "jetbrains/phpstorm-stubs": "^2019.1", "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.4.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^8.5.5", + "psalm/plugin-phpunit": "^0.10.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.11" + "vimeo/psalm": "^3.14.2" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php index 5b72e599..ef64e7cc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php @@ -8,6 +8,7 @@ use Doctrine\DBAL\FetchMode; use InvalidArgumentException; use IteratorAggregate; use PDO; + use function array_merge; use function array_values; use function count; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php index 6bb5d1b5..db568081 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php @@ -10,7 +10,7 @@ use Doctrine\DBAL\DBALException; class CacheException extends DBALException { /** - * @return \Doctrine\DBAL\Cache\CacheException + * @return CacheException */ public static function noCacheKey() { @@ -18,7 +18,7 @@ class CacheException extends DBALException } /** - * @return \Doctrine\DBAL\Cache\CacheException + * @return CacheException */ public static function noResultDriverConfigured() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php index 9433f982..b1270846 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Cache; use Doctrine\Common\Cache\Cache; + use function hash; use function serialize; use function sha1; @@ -67,16 +68,16 @@ class QueryCacheProfile /** * Generates the real cache key from query, params, types and connection parameters. * - * @param string $query + * @param string $sql * @param mixed[] $params * @param int[]|string[] $types * @param mixed[] $connectionParams * * @return string[] */ - public function generateCacheKeys($query, $params, $types, array $connectionParams = []) + public function generateCacheKeys($sql, $params, $types, array $connectionParams = []) { - $realCacheKey = 'query=' . $query . + $realCacheKey = 'query=' . $sql . '¶ms=' . serialize($params) . '&types=' . serialize($types) . '&connectionParams=' . hash('sha256', serialize($connectionParams)); @@ -92,7 +93,7 @@ class QueryCacheProfile } /** - * @return \Doctrine\DBAL\Cache\QueryCacheProfile + * @return QueryCacheProfile */ public function setResultCacheDriver(Cache $cache) { @@ -102,7 +103,7 @@ class QueryCacheProfile /** * @param string|null $cacheKey * - * @return \Doctrine\DBAL\Cache\QueryCacheProfile + * @return QueryCacheProfile */ public function setCacheKey($cacheKey) { @@ -112,7 +113,7 @@ class QueryCacheProfile /** * @param int $lifetime * - * @return \Doctrine\DBAL\Cache\QueryCacheProfile + * @return QueryCacheProfile */ public function setLifetime($lifetime) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php index f04c8524..f7a137fd 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php @@ -10,6 +10,7 @@ use Doctrine\DBAL\FetchMode; use InvalidArgumentException; use IteratorAggregate; use PDO; + use function array_merge; use function array_values; use function assert; @@ -86,6 +87,7 @@ class ResultCacheStatement implements IteratorAggregate, ResultStatement if (! $data) { $data = []; } + $data[$this->realKey] = $this->data; $this->resultCache->save($this->cacheKey, $data, $this->lifetime); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php index 872d3ede..c26aac16 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php @@ -25,6 +25,8 @@ final class ColumnCase /** * This class cannot be instantiated. + * + * @codeCoverageIgnore */ private function __construct() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php index 13260cd0..6d2497b6 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL; use Doctrine\Common\Cache\Cache; use Doctrine\DBAL\Logging\SQLLogger; use Doctrine\DBAL\Schema\AbstractAsset; + use function preg_match; /** @@ -80,7 +81,8 @@ class Configuration { $this->_attributes['filterSchemaAssetsExpression'] = $filterExpression; if ($filterExpression) { - $this->_attributes['filterSchemaAssetsExpressionCallable'] = $this->buildSchemaAssetsFilterFromExpression($filterExpression); + $this->_attributes['filterSchemaAssetsExpressionCallable'] + = $this->buildSchemaAssetsFilterFromExpression($filterExpression); } else { $this->_attributes['filterSchemaAssetsExpressionCallable'] = null; } @@ -101,7 +103,7 @@ class Configuration /** * @param string $filterExpression */ - private function buildSchemaAssetsFilterFromExpression($filterExpression) : callable + private function buildSchemaAssetsFilterFromExpression($filterExpression): callable { return static function ($assetName) use ($filterExpression) { if ($assetName instanceof AbstractAsset) { @@ -115,7 +117,7 @@ class Configuration /** * Sets the callable to use to filter schema assets. */ - public function setSchemaAssetsFilter(?callable $callable = null) : ?callable + public function setSchemaAssetsFilter(?callable $callable = null): ?callable { $this->_attributes['filterSchemaAssetsExpression'] = null; @@ -125,7 +127,7 @@ class Configuration /** * Returns the callable to use to filter schema assets. */ - public function getSchemaAssetsFilter() : ?callable + public function getSchemaAssetsFilter(): ?callable { return $this->_attributes['filterSchemaAssetsExpressionCallable'] ?? null; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php index 10da0f98..a233fd10 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php @@ -12,7 +12,6 @@ use Doctrine\DBAL\Driver\Connection as DriverConnection; use Doctrine\DBAL\Driver\PingableConnection; use Doctrine\DBAL\Driver\ResultStatement; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; -use Doctrine\DBAL\Driver\Statement as DriverStatement; use Doctrine\DBAL\Exception\InvalidArgumentException; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Query\Expression\ExpressionBuilder; @@ -21,6 +20,7 @@ use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Types\Type; use Exception; use Throwable; + use function array_key_exists; use function assert; use function func_get_args; @@ -383,7 +383,7 @@ class Connection implements DriverConnection * * @throws DBALException If an invalid platform was specified for this connection. */ - private function detectDatabasePlatform() : void + private function detectDatabasePlatform(): void { $version = $this->getDatabasePlatformVersion(); @@ -542,50 +542,50 @@ class Connection implements DriverConnection * Prepares and executes an SQL query and returns the first row of the result * as an associative array. * - * @param string $statement The SQL query. - * @param mixed[] $params The query parameters. - * @param int[]|string[] $types The query parameter types. + * @param string $sql The query SQL + * @param mixed[] $params The query parameters + * @param int[]|string[] $types The query parameter types * * @return mixed[]|false False is returned if no rows are found. * * @throws DBALException */ - public function fetchAssoc($statement, array $params = [], array $types = []) + public function fetchAssoc($sql, array $params = [], array $types = []) { - return $this->executeQuery($statement, $params, $types)->fetch(FetchMode::ASSOCIATIVE); + return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::ASSOCIATIVE); } /** * Prepares and executes an SQL query and returns the first row of the result * as a numerically indexed array. * - * @param string $statement The SQL query to be executed. - * @param mixed[] $params The prepared statement params. - * @param int[]|string[] $types The query parameter types. + * @param string $sql The query SQL + * @param mixed[] $params The query parameters + * @param int[]|string[] $types The query parameter types * * @return mixed[]|false False is returned if no rows are found. */ - public function fetchArray($statement, array $params = [], array $types = []) + public function fetchArray($sql, array $params = [], array $types = []) { - return $this->executeQuery($statement, $params, $types)->fetch(FetchMode::NUMERIC); + return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::NUMERIC); } /** * Prepares and executes an SQL query and returns the value of a single column * of the first row of the result. * - * @param string $statement The SQL query to be executed. - * @param mixed[] $params The prepared statement params. - * @param int $column The 0-indexed column number to retrieve. - * @param int[]|string[] $types The query parameter types. + * @param string $sql The query SQL + * @param mixed[] $params The query parameters + * @param int $column The 0-indexed column number to retrieve + * @param int[]|string[] $types The query parameter types * * @return mixed|false False is returned if no rows are found. * * @throws DBALException */ - public function fetchColumn($statement, array $params = [], $column = 0, array $types = []) + public function fetchColumn($sql, array $params = [], $column = 0, array $types = []) { - return $this->executeQuery($statement, $params, $types)->fetchColumn($column); + return $this->executeQuery($sql, $params, $types)->fetchColumn($column); } /** @@ -623,7 +623,7 @@ class Connection implements DriverConnection array &$columns, array &$values, array &$conditions - ) : void { + ): void { $platform = $this->getDatabasePlatform(); foreach ($identifier as $columnName => $value) { @@ -643,16 +643,16 @@ class Connection implements DriverConnection * * Table expression and columns are not escaped and are not safe for user-input. * - * @param string $tableExpression The expression of the table on which to delete. - * @param mixed[] $identifier The deletion criteria. An associative array containing column-value pairs. - * @param int[]|string[] $types The types of identifiers. + * @param string $table The expression of the table on which to delete. + * @param mixed[] $identifier The deletion criteria. An associative array containing column-value pairs. + * @param int[]|string[] $types The types of identifiers. * * @return int The number of affected rows. * * @throws DBALException * @throws InvalidArgumentException */ - public function delete($tableExpression, array $identifier, array $types = []) + public function delete($table, array $identifier, array $types = []) { if (empty($identifier)) { throw InvalidArgumentException::fromEmptyCriteria(); @@ -663,7 +663,7 @@ class Connection implements DriverConnection $this->addIdentifierCondition($identifier, $columns, $values, $conditions); return $this->executeUpdate( - 'DELETE FROM ' . $tableExpression . ' WHERE ' . implode(' AND ', $conditions), + 'DELETE FROM ' . $table . ' WHERE ' . implode(' AND ', $conditions), $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types ); @@ -714,16 +714,16 @@ class Connection implements DriverConnection * * Table expression and columns are not escaped and are not safe for user-input. * - * @param string $tableExpression The expression of the table to update quoted or unquoted. - * @param mixed[] $data An associative array containing column-value pairs. - * @param mixed[] $identifier The update criteria. An associative array containing column-value pairs. - * @param int[]|string[] $types Types of the merged $data and $identifier arrays in that order. + * @param string $table The expression of the table to update quoted or unquoted. + * @param mixed[] $data An associative array containing column-value pairs. + * @param mixed[] $identifier The update criteria. An associative array containing column-value pairs. + * @param int[]|string[] $types Types of the merged $data and $identifier arrays in that order. * * @return int The number of affected rows. * * @throws DBALException */ - public function update($tableExpression, array $data, array $identifier, array $types = []) + public function update($table, array $data, array $identifier, array $types = []) { $columns = $values = $conditions = $set = []; @@ -739,7 +739,7 @@ class Connection implements DriverConnection $types = $this->extractTypeValues($columns, $types); } - $sql = 'UPDATE ' . $tableExpression . ' SET ' . implode(', ', $set) + $sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $set) . ' WHERE ' . implode(' AND ', $conditions); return $this->executeUpdate($sql, $values, $types); @@ -750,18 +750,18 @@ class Connection implements DriverConnection * * Table expression and columns are not escaped and are not safe for user-input. * - * @param string $tableExpression The expression of the table to insert data into, quoted or unquoted. - * @param mixed[] $data An associative array containing column-value pairs. - * @param int[]|string[] $types Types of the inserted data. + * @param string $table The expression of the table to insert data into, quoted or unquoted. + * @param mixed[] $data An associative array containing column-value pairs. + * @param int[]|string[] $types Types of the inserted data. * * @return int The number of affected rows. * * @throws DBALException */ - public function insert($tableExpression, array $data, array $types = []) + public function insert($table, array $data, array $types = []) { if (empty($data)) { - return $this->executeUpdate('INSERT INTO ' . $tableExpression . ' () VALUES ()'); + return $this->executeUpdate('INSERT INTO ' . $table . ' () VALUES ()'); } $columns = []; @@ -775,7 +775,7 @@ class Connection implements DriverConnection } return $this->executeUpdate( - 'INSERT INTO ' . $tableExpression . ' (' . implode(', ', $columns) . ')' . + 'INSERT INTO ' . $table . ' (' . implode(', ', $columns) . ')' . ' VALUES (' . implode(', ', $set) . ')', $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types @@ -823,11 +823,11 @@ class Connection implements DriverConnection /** * {@inheritDoc} */ - public function quote($input, $type = ParameterType::STRING) + public function quote($value, $type = ParameterType::STRING) { $connection = $this->getWrappedConnection(); - [$value, $bindingType] = $this->getBindingInfo($input, $type); + [$value, $bindingType] = $this->getBindingInfo($value, $type); return $connection->quote($value, $bindingType); } @@ -849,18 +849,18 @@ class Connection implements DriverConnection /** * Prepares an SQL statement. * - * @param string $statement The SQL statement to prepare. + * @param string $sql The SQL statement to prepare. * - * @return DriverStatement The prepared statement. + * @return Statement The prepared statement. * * @throws DBALException */ - public function prepare($statement) + public function prepare($sql) { try { - $stmt = new Statement($statement, $this); + $stmt = new Statement($sql, $this); } catch (Throwable $ex) { - throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $statement); + throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $sql); } $stmt->setFetchMode($this->defaultFetchMode); @@ -874,7 +874,7 @@ class Connection implements DriverConnection * If the query is parametrized, a prepared statement is used. * If an SQLLogger is configured, the execution is logged. * - * @param string $query The SQL query to execute. + * @param string $sql The SQL query to execute. * @param mixed[] $params The parameters to bind to the query, if any. * @param int[]|string[] $types The types the previous parameters are in. * @param QueryCacheProfile|null $qcp The query cache profile, optional. @@ -883,24 +883,24 @@ class Connection implements DriverConnection * * @throws DBALException */ - public function executeQuery($query, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) + public function executeQuery($sql, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) { if ($qcp !== null) { - return $this->executeCacheQuery($query, $params, $types, $qcp); + return $this->executeCacheQuery($sql, $params, $types, $qcp); } $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { - $logger->startQuery($query, $params, $types); + $logger->startQuery($sql, $params, $types); } try { if ($params) { - [$query, $params, $types] = SQLParserUtils::expandListParameters($query, $params, $types); + [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); - $stmt = $connection->prepare($query); + $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); @@ -908,10 +908,15 @@ class Connection implements DriverConnection $stmt->execute($params); } } else { - $stmt = $connection->query($query); + $stmt = $connection->query($sql); } } catch (Throwable $ex) { - throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types)); + throw DBALException::driverExceptionDuringQuery( + $this->_driver, + $ex, + $sql, + $this->resolveParams($params, $types) + ); } $stmt->setFetchMode($this->defaultFetchMode); @@ -926,7 +931,7 @@ class Connection implements DriverConnection /** * Executes a caching query. * - * @param string $query The SQL query to execute. + * @param string $sql The SQL query to execute. * @param mixed[] $params The parameters to bind to the query, if any. * @param int[]|string[] $types The types the previous parameters are in. * @param QueryCacheProfile $qcp The query cache profile. @@ -935,7 +940,7 @@ class Connection implements DriverConnection * * @throws CacheException */ - public function executeCacheQuery($query, $params, $types, QueryCacheProfile $qcp) + public function executeCacheQuery($sql, $params, $types, QueryCacheProfile $qcp) { $resultCache = $qcp->getResultCacheDriver() ?? $this->_config->getResultCacheImpl(); @@ -946,7 +951,7 @@ class Connection implements DriverConnection $connectionParams = $this->getParams(); unset($connectionParams['platform']); - [$cacheKey, $realKey] = $qcp->generateCacheKeys($query, $params, $types, $connectionParams); + [$cacheKey, $realKey] = $qcp->generateCacheKeys($sql, $params, $types, $connectionParams); // fetch the row pointers entry $data = $resultCache->fetch($cacheKey); @@ -961,7 +966,13 @@ class Connection implements DriverConnection } if (! isset($stmt)) { - $stmt = new ResultCacheStatement($this->executeQuery($query, $params, $types), $resultCache, $cacheKey, $realKey, $qcp->getLifetime()); + $stmt = new ResultCacheStatement( + $this->executeQuery($sql, $params, $types), + $resultCache, + $cacheKey, + $realKey, + $qcp->getLifetime() + ); } $stmt->setFetchMode($this->defaultFetchMode); @@ -973,7 +984,7 @@ class Connection implements DriverConnection * Executes an, optionally parametrized, SQL query and returns the result, * applying a given projection/transformation function on each row of the result. * - * @param string $query The SQL query to execute. + * @param string $sql The SQL query to execute. * @param mixed[] $params The parameters, if any. * @param Closure $function The transformation function that is applied on each row. * The function receives a single parameter, an array, that @@ -981,10 +992,10 @@ class Connection implements DriverConnection * * @return mixed[] The projected result of the query. */ - public function project($query, array $params, Closure $function) + public function project($sql, array $params, Closure $function) { $result = []; - $stmt = $this->executeQuery($query, $params); + $stmt = $this->executeQuery($sql, $params); while ($row = $stmt->fetch()) { $result[] = $function($row); @@ -1034,28 +1045,28 @@ class Connection implements DriverConnection * * This method supports PDO binding types as well as DBAL mapping types. * - * @param string $query The SQL query. - * @param mixed[] $params The query parameters. - * @param int[]|string[] $types The parameter types. + * @param string $sql The SQL query. + * @param array $params The query parameters. + * @param array $types The parameter types. * * @return int The number of affected rows. * * @throws DBALException */ - public function executeUpdate($query, array $params = [], array $types = []) + public function executeUpdate($sql, array $params = [], array $types = []) { $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { - $logger->startQuery($query, $params, $types); + $logger->startQuery($sql, $params, $types); } try { if ($params) { - [$query, $params, $types] = SQLParserUtils::expandListParameters($query, $params, $types); + [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); - $stmt = $connection->prepare($query); + $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); @@ -1063,12 +1074,18 @@ class Connection implements DriverConnection } else { $stmt->execute($params); } + $result = $stmt->rowCount(); } else { - $result = $connection->exec($query); + $result = $connection->exec($sql); } } catch (Throwable $ex) { - throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $query, $this->resolveParams($params, $types)); + throw DBALException::driverExceptionDuringQuery( + $this->_driver, + $ex, + $sql, + $this->resolveParams($params, $types) + ); } if ($logger) { @@ -1081,25 +1098,25 @@ class Connection implements DriverConnection /** * Executes an SQL statement and return the number of affected rows. * - * @param string $statement + * @param string $sql * * @return int The number of affected rows. * * @throws DBALException */ - public function exec($statement) + public function exec($sql) { $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { - $logger->startQuery($statement); + $logger->startQuery($sql); } try { - $result = $connection->exec($statement); + $result = $connection->exec($sql); } catch (Throwable $ex) { - throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $statement); + throw DBALException::driverExceptionDuringQuery($this->_driver, $ex, $sql); } if ($logger) { @@ -1145,13 +1162,13 @@ class Connection implements DriverConnection * because the underlying database may not even support the notion of AUTO_INCREMENT/IDENTITY * columns or sequences. * - * @param string|null $seqName Name of the sequence object from which the ID should be returned. + * @param string|null $name Name of the sequence object from which the ID should be returned. * * @return string A string representation of the last inserted ID. */ - public function lastInsertId($seqName = null) + public function lastInsertId($name = null) { - return $this->getWrappedConnection()->lastInsertId($seqName); + return $this->getWrappedConnection()->lastInsertId($name); } /** @@ -1179,9 +1196,11 @@ class Connection implements DriverConnection return $res; } catch (Exception $e) { $this->rollBack(); + throw $e; } catch (Throwable $e) { $this->rollBack(); + throw $e; } } @@ -1254,6 +1273,7 @@ class Connection implements DriverConnection if ($logger) { $logger->startQuery('"SAVEPOINT"'); } + $this->createSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); @@ -1274,6 +1294,7 @@ class Connection implements DriverConnection if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } + if ($this->isRollbackOnly) { throw ConnectionException::commitFailedRollbackOnly(); } @@ -1298,6 +1319,7 @@ class Connection implements DriverConnection if ($logger) { $logger->startQuery('"RELEASE SAVEPOINT"'); } + $this->releaseSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); @@ -1318,7 +1340,7 @@ class Connection implements DriverConnection /** * Commits all current nesting transactions. */ - private function commitAll() : void + private function commitAll(): void { while ($this->transactionNestingLevel !== 0) { if ($this->autoCommit === false && $this->transactionNestingLevel === 1) { @@ -1354,6 +1376,7 @@ class Connection implements DriverConnection if ($logger) { $logger->startQuery('"ROLLBACK"'); } + $this->transactionNestingLevel = 0; $connection->rollBack(); $this->isRollbackOnly = false; @@ -1368,6 +1391,7 @@ class Connection implements DriverConnection if ($logger) { $logger->startQuery('"ROLLBACK TO SAVEPOINT"'); } + $this->rollbackSavepoint($this->_getNestedTransactionSavePointName()); --$this->transactionNestingLevel; if ($logger) { @@ -1448,6 +1472,8 @@ class Connection implements DriverConnection { $this->connect(); + assert($this->_conn !== null); + return $this->_conn; } @@ -1479,6 +1505,7 @@ class Connection implements DriverConnection if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } + $this->isRollbackOnly = true; } @@ -1555,6 +1582,7 @@ class Connection implements DriverConnection } else { $stmt->bindValue($bindIndex, $value); } + ++$bindIndex; } } else { @@ -1584,6 +1612,7 @@ class Connection implements DriverConnection if (is_string($type)) { $type = Type::getType($type); } + if ($type instanceof Type) { $value = $type->convertToDatabaseValue($value, $this->getDatabasePlatform()); $bindingType = $type->getBindingType(); @@ -1623,6 +1652,7 @@ class Connection implements DriverConnection } else { $resolvedParams[$bindIndex] = $value; } + ++$bindIndex; } } else { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php index 47c6ed9a..f1914f52 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php @@ -8,7 +8,7 @@ namespace Doctrine\DBAL; class ConnectionException extends DBALException { /** - * @return \Doctrine\DBAL\ConnectionException + * @return ConnectionException */ public static function commitFailedRollbackOnly() { @@ -16,7 +16,7 @@ class ConnectionException extends DBALException } /** - * @return \Doctrine\DBAL\ConnectionException + * @return ConnectionException */ public static function noActiveTransaction() { @@ -24,7 +24,7 @@ class ConnectionException extends DBALException } /** - * @return \Doctrine\DBAL\ConnectionException + * @return ConnectionException */ public static function savepointsNotSupported() { @@ -32,7 +32,7 @@ class ConnectionException extends DBALException } /** - * @return \Doctrine\DBAL\ConnectionException + * @return ConnectionException */ public static function mayNotAlterNestedTransactionWithSavepointsInTransaction() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php index 1f8ae27b..2ba37bfa 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php @@ -10,6 +10,7 @@ use Doctrine\DBAL\Driver\Connection as DriverConnection; use Doctrine\DBAL\Event\ConnectionEventArgs; use Doctrine\DBAL\Events; use InvalidArgumentException; + use function array_rand; use function assert; use function count; @@ -64,7 +65,8 @@ use function func_get_args; * ) * )); * - * You can also pass 'driverOptions' and any other documented option to each of this drivers to pass additional information. + * You can also pass 'driverOptions' and any other documented option to each of this drivers + * to pass additional information. */ class MasterSlaveConnection extends Connection { @@ -90,11 +92,16 @@ class MasterSlaveConnection extends Connection * * @throws InvalidArgumentException */ - public function __construct(array $params, Driver $driver, ?Configuration $config = null, ?EventManager $eventManager = null) - { + public function __construct( + array $params, + Driver $driver, + ?Configuration $config = null, + ?EventManager $eventManager = null + ) { if (! isset($params['slaves'], $params['master'])) { throw new InvalidArgumentException('master or slaves configuration missing'); } + if (count($params['slaves']) === 0) { throw new InvalidArgumentException('You have to configure at least one slaves.'); } @@ -221,11 +228,11 @@ class MasterSlaveConnection extends Connection /** * {@inheritDoc} */ - public function executeUpdate($query, array $params = [], array $types = []) + public function executeUpdate($sql, array $params = [], array $types = []) { $this->connect('master'); - return parent::executeUpdate($query, $params, $types); + return parent::executeUpdate($sql, $params, $types); } /** @@ -261,11 +268,11 @@ class MasterSlaveConnection extends Connection /** * {@inheritDoc} */ - public function delete($tableName, array $identifier, array $types = []) + public function delete($table, array $identifier, array $types = []) { $this->connect('master'); - return parent::delete($tableName, $identifier, $types); + return parent::delete($table, $identifier, $types); } /** @@ -284,31 +291,31 @@ class MasterSlaveConnection extends Connection /** * {@inheritDoc} */ - public function update($tableName, array $data, array $identifier, array $types = []) + public function update($table, array $data, array $identifier, array $types = []) { $this->connect('master'); - return parent::update($tableName, $data, $identifier, $types); + return parent::update($table, $data, $identifier, $types); } /** * {@inheritDoc} */ - public function insert($tableName, array $data, array $types = []) + public function insert($table, array $data, array $types = []) { $this->connect('master'); - return parent::insert($tableName, $data, $types); + return parent::insert($table, $data, $types); } /** * {@inheritDoc} */ - public function exec($statement) + public function exec($sql) { $this->connect('master'); - return parent::exec($statement); + return parent::exec($sql); } /** @@ -370,10 +377,10 @@ class MasterSlaveConnection extends Connection /** * {@inheritDoc} */ - public function prepare($statement) + public function prepare($sql) { $this->connect('master'); - return parent::prepare($statement); + return parent::prepare($sql); } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php index b2852e55..e7ae39ce 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; use Exception; use Throwable; + use function array_map; use function bin2hex; use function get_class; @@ -30,14 +31,14 @@ class DBALException extends Exception /** * @param string $method * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function notSupported($method) { return new self(sprintf("Operation '%s' is not supported by platform.", $method)); } - public static function invalidPlatformSpecified() : self + public static function invalidPlatformSpecified(): self { return new self( "Invalid 'platform' option specified, need to give an instance of " . AbstractPlatform::class . '.' @@ -47,7 +48,7 @@ class DBALException extends Exception /** * @param mixed $invalidPlatform */ - public static function invalidPlatformType($invalidPlatform) : self + public static function invalidPlatformType($invalidPlatform): self { if (is_object($invalidPlatform)) { return new self( @@ -89,7 +90,7 @@ class DBALException extends Exception } /** - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function invalidPdoInstance() { @@ -102,7 +103,7 @@ class DBALException extends Exception /** * @param string|null $url The URL that was provided in the connection parameters (if any). * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function driverRequired($url = null) { @@ -124,7 +125,7 @@ class DBALException extends Exception * @param string $unknownDriverName * @param string[] $knownDrivers * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function unknownDriver($unknownDriverName, array $knownDrivers) { @@ -144,6 +145,7 @@ class DBALException extends Exception if ($params) { $msg .= ' with params ' . self::formatParameters($params); } + $msg .= ":\n\n" . $driverEx->getMessage(); return static::wrapException($driver, $driverEx, $msg); @@ -165,6 +167,7 @@ class DBALException extends Exception if ($driverEx instanceof DriverException) { return $driverEx; } + if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DriverExceptionInterface) { return $driver->convertException($msg, $driverEx); } @@ -201,7 +204,7 @@ class DBALException extends Exception /** * @param string $wrapperClass * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function invalidWrapperClass($wrapperClass) { @@ -212,17 +215,19 @@ class DBALException extends Exception /** * @param string $driverClass * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function invalidDriverClass($driverClass) { - return new self("The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.'); + return new self( + "The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.' + ); } /** * @param string $tableName * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function invalidTableName($tableName) { @@ -232,7 +237,7 @@ class DBALException extends Exception /** * @param string $tableName * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function noColumnsSpecifiedForTable($tableName) { @@ -240,7 +245,7 @@ class DBALException extends Exception } /** - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function limitOffsetInvalid() { @@ -250,7 +255,7 @@ class DBALException extends Exception /** * @param string $name * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function typeExists($name) { @@ -260,7 +265,7 @@ class DBALException extends Exception /** * @param string $name * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function unknownColumnType($name) { @@ -276,19 +281,21 @@ class DBALException extends Exception /** * @param string $name * - * @return \Doctrine\DBAL\DBALException + * @return DBALException */ public static function typeNotFound($name) { return new self('Type to be overwritten ' . $name . ' does not exist.'); } - public static function typeNotRegistered(Type $type) : self + public static function typeNotRegistered(Type $type): self { - return new self(sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type))); + return new self( + sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type)) + ); } - public static function typeAlreadyRegistered(Type $type) : self + public static function typeAlreadyRegistered(Type $type): self { return new self( sprintf('Type of the class %s@%s is already registered.', get_class($type), spl_object_hash($type)) diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDB2Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDB2Driver.php index c6e05653..45e29827 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDB2Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDB2Driver.php @@ -8,7 +8,7 @@ use Doctrine\DBAL\Platforms\DB2Platform; use Doctrine\DBAL\Schema\DB2SchemaManager; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for IBM DB2 based drivers. + * Abstract base implementation of the {@link Driver} interface for IBM DB2 based drivers. */ abstract class AbstractDB2Driver implements Driver { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php index c46ddc63..7b454df5 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php @@ -12,28 +12,32 @@ use Doctrine\DBAL\Platforms\MySQL80Platform; use Doctrine\DBAL\Platforms\MySqlPlatform; use Doctrine\DBAL\Schema\MySqlSchemaManager; use Doctrine\DBAL\VersionAwarePlatformDriver; + +use function assert; use function preg_match; use function stripos; use function version_compare; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for MySQL based drivers. + * Abstract base implementation of the {@link Driver} interface for MySQL based drivers. */ abstract class AbstractMySQLDriver implements Driver, ExceptionConverterDriver, VersionAwarePlatformDriver { /** * {@inheritdoc} * - * @link http://dev.mysql.com/doc/refman/5.7/en/error-messages-client.html - * @link http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html + * @link https://dev.mysql.com/doc/refman/8.0/en/client-error-reference.html + * @link https://dev.mysql.com/doc/refman/8.0/en/server-error-reference.html */ public function convertException($message, DriverException $exception) { switch ($exception->getErrorCode()) { case '1213': return new Exception\DeadlockException($message, $exception); + case '1205': return new Exception\LockWaitTimeoutException($message, $exception); + case '1050': return new Exception\TableExistsException($message, $exception); @@ -123,6 +127,7 @@ abstract class AbstractMySQLDriver implements Driver, ExceptionConverterDriver, if (version_compare($oracleMysqlVersion, '8', '>=')) { return new MySQL80Platform(); } + if (version_compare($oracleMysqlVersion, '5.7.9', '>=')) { return new MySQL57Platform(); } @@ -139,18 +144,21 @@ abstract class AbstractMySQLDriver implements Driver, ExceptionConverterDriver, * * @throws DBALException */ - private function getOracleMysqlVersionNumber(string $versionString) : string + private function getOracleMysqlVersionNumber(string $versionString): string { - if (! preg_match( - '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/', - $versionString, - $versionParts - )) { + if ( + ! preg_match( + '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/', + $versionString, + $versionParts + ) + ) { throw DBALException::invalidPlatformVersionSpecified( $versionString, '..' ); } + $majorVersion = $versionParts['major']; $minorVersion = $versionParts['minor'] ?? 0; $patchVersion = $versionParts['patch'] ?? null; @@ -170,13 +178,15 @@ abstract class AbstractMySQLDriver implements Driver, ExceptionConverterDriver, * * @throws DBALException */ - private function getMariaDbMysqlVersionNumber(string $versionString) : string + private function getMariaDbMysqlVersionNumber(string $versionString): string { - if (! preg_match( - '/^(?:5\.5\.5-)?(mariadb-)?(?P\d+)\.(?P\d+)\.(?P\d+)/i', - $versionString, - $versionParts - )) { + if ( + ! preg_match( + '/^(?:5\.5\.5-)?(mariadb-)?(?P\d+)\.(?P\d+)\.(?P\d+)/i', + $versionString, + $versionParts + ) + ) { throw DBALException::invalidPlatformVersionSpecified( $versionString, '^(?:5\.5\.5-)?(mariadb-)?..' @@ -193,7 +203,15 @@ abstract class AbstractMySQLDriver implements Driver, ExceptionConverterDriver, { $params = $conn->getParams(); - return $params['dbname'] ?? $conn->query('SELECT DATABASE()')->fetchColumn(); + if (isset($params['dbname'])) { + return $params['dbname']; + } + + $database = $conn->query('SELECT DATABASE()')->fetchColumn(); + + assert($database !== false); + + return $database; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver.php index dcbaaf09..f0429fcb 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver.php @@ -10,7 +10,7 @@ use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Schema\OracleSchemaManager; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for Oracle based drivers. + * Abstract base implementation of the {@link Driver} interface for Oracle based drivers. */ abstract class AbstractOracleDriver implements Driver, ExceptionConverterDriver { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver/EasyConnectString.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver/EasyConnectString.php index 01f648b3..ba439744 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver/EasyConnectString.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractOracleDriver/EasyConnectString.php @@ -23,7 +23,7 @@ final class EasyConnectString $this->string = $string; } - public function __toString() : string + public function __toString(): string { return $this->string; } @@ -33,7 +33,7 @@ final class EasyConnectString * * @param mixed[] $params */ - public static function fromArray(array $params) : self + public static function fromArray(array $params): self { return new self(self::renderParams($params)); } @@ -43,7 +43,7 @@ final class EasyConnectString * * @param mixed[] $params */ - public static function fromConnectionParameters(array $params) : self + public static function fromConnectionParameters(array $params): self { if (! empty($params['connectstring'])) { return new self($params['connectstring']); @@ -90,7 +90,7 @@ final class EasyConnectString /** * @param mixed[] $params */ - private static function renderParams(array $params) : string + private static function renderParams(array $params): string { $chunks = []; @@ -110,7 +110,7 @@ final class EasyConnectString /** * @param mixed $value */ - private static function renderValue($value) : string + private static function renderValue($value): string { if (is_array($value)) { return self::renderParams($value); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php index 916d9249..9e293298 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php @@ -13,12 +13,14 @@ use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use Doctrine\DBAL\Schema\PostgreSqlSchemaManager; use Doctrine\DBAL\VersionAwarePlatformDriver; + +use function assert; use function preg_match; use function strpos; use function version_compare; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for PostgreSQL based drivers. + * Abstract base implementation of the {@link Driver} interface for PostgreSQL based drivers. */ abstract class AbstractPostgreSQLDriver implements Driver, ExceptionConverterDriver, VersionAwarePlatformDriver { @@ -33,6 +35,7 @@ abstract class AbstractPostgreSQLDriver implements Driver, ExceptionConverterDri case '40001': case '40P01': return new Exception\DeadlockException($message, $exception); + case '0A000': // Foreign key constraint violations during a TRUNCATE operation // are considered "feature not supported" in PostgreSQL. @@ -41,6 +44,7 @@ abstract class AbstractPostgreSQLDriver implements Driver, ExceptionConverterDri } break; + case '23502': return new Exception\NotNullConstraintViolationException($message, $exception); @@ -117,7 +121,15 @@ abstract class AbstractPostgreSQLDriver implements Driver, ExceptionConverterDri { $params = $conn->getParams(); - return $params['dbname'] ?? $conn->query('SELECT CURRENT_DATABASE()')->fetchColumn(); + if (isset($params['dbname'])) { + return $params['dbname']; + } + + $database = $conn->query('SELECT CURRENT_DATABASE()')->fetchColumn(); + + assert($database !== false); + + return $database; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php index 88f26ce7..5637f6bb 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLAnywhereDriver.php @@ -12,11 +12,13 @@ use Doctrine\DBAL\Platforms\SQLAnywhere16Platform; use Doctrine\DBAL\Platforms\SQLAnywherePlatform; use Doctrine\DBAL\Schema\SQLAnywhereSchemaManager; use Doctrine\DBAL\VersionAwarePlatformDriver; + +use function assert; use function preg_match; use function version_compare; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for SAP Sybase SQL Anywhere based drivers. + * Abstract base implementation of the {@link Driver} interface for SAP Sybase SQL Anywhere based drivers. */ abstract class AbstractSQLAnywhereDriver implements Driver, ExceptionConverterDriver, VersionAwarePlatformDriver { @@ -32,31 +34,41 @@ abstract class AbstractSQLAnywhereDriver implements Driver, ExceptionConverterDr case '-307': case '-684': return new Exception\DeadlockException($message, $exception); + case '-210': case '-1175': case '-1281': return new Exception\LockWaitTimeoutException($message, $exception); + case '-100': case '-103': case '-832': return new Exception\ConnectionException($message, $exception); + case '-143': return new Exception\InvalidFieldNameException($message, $exception); + case '-193': case '-196': return new Exception\UniqueConstraintViolationException($message, $exception); + case '-194': case '-198': return new Exception\ForeignKeyConstraintViolationException($message, $exception); + case '-144': return new Exception\NonUniqueFieldNameException($message, $exception); + case '-184': case '-195': return new Exception\NotNullConstraintViolationException($message, $exception); + case '-131': return new Exception\SyntaxErrorException($message, $exception); + case '-110': return new Exception\TableExistsException($message, $exception); + case '-141': case '-1041': return new Exception\TableNotFoundException($message, $exception); @@ -70,11 +82,13 @@ abstract class AbstractSQLAnywhereDriver implements Driver, ExceptionConverterDr */ public function createDatabasePlatformForVersion($version) { - if (! preg_match( - '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?)?/', - $version, - $versionParts - )) { + if ( + ! preg_match( + '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?)?/', + $version, + $versionParts + ) + ) { throw DBALException::invalidPlatformVersionSpecified( $version, '...' @@ -90,10 +104,13 @@ abstract class AbstractSQLAnywhereDriver implements Driver, ExceptionConverterDr switch (true) { case version_compare($version, '16', '>='): return new SQLAnywhere16Platform(); + case version_compare($version, '12', '>='): return new SQLAnywhere12Platform(); + case version_compare($version, '11', '>='): return new SQLAnywhere11Platform(); + default: return new SQLAnywherePlatform(); } @@ -106,7 +123,15 @@ abstract class AbstractSQLAnywhereDriver implements Driver, ExceptionConverterDr { $params = $conn->getParams(); - return $params['dbname'] ?? $conn->query('SELECT DB_NAME()')->fetchColumn(); + if (isset($params['dbname'])) { + return $params['dbname']; + } + + $database = $conn->query('SELECT DB_NAME()')->fetchColumn(); + + assert($database !== false); + + return $database; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php index 421d82b3..ef8c4a56 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver.php @@ -11,11 +11,13 @@ use Doctrine\DBAL\Platforms\SQLServer2012Platform; use Doctrine\DBAL\Platforms\SQLServerPlatform; use Doctrine\DBAL\Schema\SQLServerSchemaManager; use Doctrine\DBAL\VersionAwarePlatformDriver; + +use function assert; use function preg_match; use function version_compare; /** - * Abstract base implementation of the {@link Doctrine\DBAL\Driver} interface for Microsoft SQL Server based drivers. + * Abstract base implementation of the {@link Driver} interface for Microsoft SQL Server based drivers. */ abstract class AbstractSQLServerDriver implements Driver, VersionAwarePlatformDriver { @@ -24,11 +26,13 @@ abstract class AbstractSQLServerDriver implements Driver, VersionAwarePlatformDr */ public function createDatabasePlatformForVersion($version) { - if (! preg_match( - '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?)?/', - $version, - $versionParts - )) { + if ( + ! preg_match( + '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?)?/', + $version, + $versionParts + ) + ) { throw DBALException::invalidPlatformVersionSpecified( $version, '...' @@ -60,7 +64,15 @@ abstract class AbstractSQLServerDriver implements Driver, VersionAwarePlatformDr { $params = $conn->getParams(); - return $params['dbname'] ?? $conn->query('SELECT DB_NAME()')->fetchColumn(); + if (isset($params['dbname'])) { + return $params['dbname']; + } + + $database = $conn->query('SELECT DB_NAME()')->fetchColumn(); + + assert($database !== false); + + return $database; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php new file mode 100644 index 00000000..e968421f --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/PortWithoutHost.php @@ -0,0 +1,20 @@ +getMessage(), 'must be unique') !== false || + if ( + strpos($exception->getMessage(), 'must be unique') !== false || strpos($exception->getMessage(), 'is not unique') !== false || strpos($exception->getMessage(), 'are not unique') !== false || strpos($exception->getMessage(), 'UNIQUE constraint failed') !== false @@ -33,7 +35,8 @@ abstract class AbstractSQLiteDriver implements Driver, ExceptionConverterDriver return new Exception\UniqueConstraintViolationException($message, $exception); } - if (strpos($exception->getMessage(), 'may not be NULL') !== false || + if ( + strpos($exception->getMessage(), 'may not be NULL') !== false || strpos($exception->getMessage(), 'NOT NULL constraint failed') !== false ) { return new Exception\NotNullConstraintViolationException($message, $exception); @@ -67,6 +70,10 @@ abstract class AbstractSQLiteDriver implements Driver, ExceptionConverterDriver return new Exception\ConnectionException($message, $exception); } + if (strpos($exception->getMessage(), 'FOREIGN KEY constraint failed') !== false) { + return new Exception\ForeignKeyConstraintViolationException($message, $exception); + } + return new Exception\DriverException($message, $exception); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php index 1574581c..cb4444dc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php @@ -15,11 +15,11 @@ interface Connection /** * Prepares a statement for execution and returns a Statement object. * - * @param string $prepareString + * @param string $sql * * @return Statement */ - public function prepare($prepareString); + public function prepare($sql); /** * Executes an SQL statement, returning a result set as a Statement object. @@ -31,21 +31,21 @@ interface Connection /** * Quotes a string for use in a query. * - * @param mixed $input + * @param mixed $value * @param int $type * * @return mixed */ - public function quote($input, $type = ParameterType::STRING); + public function quote($value, $type = ParameterType::STRING); /** * Executes an SQL statement and return the number of affected rows. * - * @param string $statement + * @param string $sql * * @return int */ - public function exec($statement); + public function exec($sql); /** * Returns the ID of the last inserted row or sequence value. diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php index 14cd5186..a7f4008e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php @@ -24,13 +24,6 @@ interface DriverException extends Throwable */ public function getErrorCode(); - /** - * Returns the driver error message. - * - * @return string - */ - public function getMessage(); - /** * Returns the SQLSTATE the driver was in at the time the error occurred. * diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DrizzlePDOMySql/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DrizzlePDOMySql/Driver.php index dbf34281..c1b2110e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DrizzlePDOMySql/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/DrizzlePDOMySql/Driver.php @@ -33,6 +33,8 @@ class Driver extends \Doctrine\DBAL\Driver\PDOMySql\Driver /** * {@inheritdoc} + * + * @return DrizzlePlatform */ public function getDatabasePlatform() { @@ -41,6 +43,8 @@ class Driver extends \Doctrine\DBAL\Driver\PDOMySql\Driver /** * {@inheritdoc} + * + * @return DrizzleSchemaManager */ public function getSchemaManager(\Doctrine\DBAL\Connection $conn) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php index 9b79e240..998e1606 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php @@ -11,7 +11,7 @@ interface ExceptionConverterDriver * Converts a given DBAL driver exception into a standardized DBAL driver exception. * * It evaluates the vendor specific error code and SQLSTATE and transforms - * it into a unified {@link Doctrine\DBAL\Exception\DriverException} subclass. + * it into a unified {@link DriverException} subclass. * * @param string $message The DBAL exception message to use. * @param DriverException $exception The DBAL driver exception to convert. diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php index f03fa6a2..a866d939 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Connection.php @@ -6,8 +6,7 @@ use Doctrine\DBAL\Driver\Connection; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; use Doctrine\DBAL\ParameterType; use stdClass; -use const DB2_AUTOCOMMIT_OFF; -use const DB2_AUTOCOMMIT_ON; + use function assert; use function db2_autocommit; use function db2_commit; @@ -26,6 +25,9 @@ use function db2_stmt_errormsg; use function func_get_args; use function is_bool; +use const DB2_AUTOCOMMIT_OFF; +use const DB2_AUTOCOMMIT_ON; + class DB2Connection implements Connection, ServerInfoAwareConnection { /** @var resource */ @@ -61,8 +63,8 @@ class DB2Connection implements Connection, ServerInfoAwareConnection */ public function getServerVersion() { - /** @var stdClass $serverInfo */ $serverInfo = db2_server_info($this->conn); + assert($serverInfo instanceof stdClass); return $serverInfo->DBMS_VER; } @@ -104,23 +106,23 @@ class DB2Connection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function quote($input, $type = ParameterType::STRING) + public function quote($value, $type = ParameterType::STRING) { - $input = db2_escape_string($input); + $value = db2_escape_string($value); if ($type === ParameterType::INTEGER) { - return $input; + return $value; } - return "'" . $input . "'"; + return "'" . $value . "'"; } /** * {@inheritdoc} */ - public function exec($statement) + public function exec($sql) { - $stmt = @db2_exec($this->conn, $statement); + $stmt = @db2_exec($this->conn, $sql); if ($stmt === false) { throw new DB2Exception(db2_stmt_errormsg()); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php index fe79fe6b..650d75ce 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Driver.php @@ -14,27 +14,16 @@ class DB2Driver extends AbstractDB2Driver */ public function connect(array $params, $username = null, $password = null, array $driverOptions = []) { - if (! isset($params['protocol'])) { - $params['protocol'] = 'TCPIP'; - } + $params['user'] = $username; + $params['password'] = $password; + $params['dbname'] = DataSourceName::fromConnectionParameters($params)->toString(); - if ($params['host'] !== 'localhost' && $params['host'] !== '127.0.0.1') { - // if the host isn't localhost, use extended connection params - $params['dbname'] = 'DRIVER={IBM DB2 ODBC DRIVER}' . - ';DATABASE=' . $params['dbname'] . - ';HOSTNAME=' . $params['host'] . - ';PROTOCOL=' . $params['protocol'] . - ';UID=' . $username . - ';PWD=' . $password . ';'; - if (isset($params['port'])) { - $params['dbname'] .= 'PORT=' . $params['port']; - } - - $username = null; - $password = null; - } - - return new DB2Connection($params, (string) $username, (string) $password, $driverOptions); + return new DB2Connection( + $params, + (string) $username, + (string) $password, + $driverOptions + ); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php index af6e852b..ac9212e1 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DB2Statement.php @@ -12,13 +12,9 @@ use ReflectionClass; use ReflectionObject; use ReflectionProperty; use stdClass; -use const CASE_LOWER; -use const DB2_BINARY; -use const DB2_CHAR; -use const DB2_LONG; -use const DB2_PARAM_FILE; -use const DB2_PARAM_IN; + use function array_change_key_case; +use function assert; use function db2_bind_param; use function db2_execute; use function db2_fetch_array; @@ -36,6 +32,7 @@ use function func_get_args; use function func_num_args; use function fwrite; use function gettype; +use function is_int; use function is_object; use function is_resource; use function is_string; @@ -46,6 +43,13 @@ use function stream_get_meta_data; use function strtolower; use function tmpfile; +use const CASE_LOWER; +use const DB2_BINARY; +use const DB2_CHAR; +use const DB2_LONG; +use const DB2_PARAM_FILE; +use const DB2_PARAM_IN; + class DB2Statement implements IteratorAggregate, Statement { /** @var resource */ @@ -91,35 +95,39 @@ class DB2Statement implements IteratorAggregate, Statement */ public function bindValue($param, $value, $type = ParameterType::STRING) { + assert(is_int($param)); + return $this->bindParam($param, $value, $type); } /** * {@inheritdoc} */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { + assert(is_int($param)); + switch ($type) { case ParameterType::INTEGER: - $this->bind($column, $variable, DB2_PARAM_IN, DB2_LONG); + $this->bind($param, $variable, DB2_PARAM_IN, DB2_LONG); break; case ParameterType::LARGE_OBJECT: - if (isset($this->lobs[$column])) { - [, $handle] = $this->lobs[$column]; + if (isset($this->lobs[$param])) { + [, $handle] = $this->lobs[$param]; fclose($handle); } $handle = $this->createTemporaryFile(); $path = stream_get_meta_data($handle)['uri']; - $this->bind($column, $path, DB2_PARAM_FILE, DB2_BINARY); + $this->bind($param, $path, DB2_PARAM_FILE, DB2_BINARY); - $this->lobs[$column] = [&$variable, $handle]; + $this->lobs[$param] = [&$variable, $handle]; break; default: - $this->bind($column, $variable, DB2_PARAM_IN, DB2_CHAR); + $this->bind($param, $variable, DB2_PARAM_IN, DB2_CHAR); break; } @@ -132,7 +140,7 @@ class DB2Statement implements IteratorAggregate, Statement * * @throws DB2Exception */ - private function bind($position, &$variable, int $parameterType, int $dataType) : void + private function bind($position, &$variable, int $parameterType, int $dataType): void { $this->bindParam[$position] =& $variable; @@ -309,12 +317,16 @@ class DB2Statement implements IteratorAggregate, Statement while (($row = $this->fetch(...func_get_args())) !== false) { $rows[] = $row; } + break; + case FetchMode::COLUMN: while (($row = $this->fetchColumn()) !== false) { $rows[] = $row; } + break; + default: while (($row = $this->fetch($fetchMode)) !== false) { $rows[] = $row; @@ -433,7 +445,7 @@ class DB2Statement implements IteratorAggregate, Statement * * @throws DB2Exception */ - private function copyStreamToStream($source, $target) : void + private function copyStreamToStream($source, $target): void { if (@stream_copy_to_stream($source, $target) === false) { throw new DB2Exception('Could not copy source stream to temporary file: ' . error_get_last()['message']); @@ -445,7 +457,7 @@ class DB2Statement implements IteratorAggregate, Statement * * @throws DB2Exception */ - private function writeStringToStream(string $string, $target) : void + private function writeStringToStream(string $string, $target): void { if (@fwrite($target, $string) === false) { throw new DB2Exception('Could not write string to temporary file: ' . error_get_last()['message']); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php new file mode 100644 index 00000000..e1ec42f2 --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/IBMDB2/DataSourceName.php @@ -0,0 +1,77 @@ +string = $string; + } + + public function toString(): string + { + return $this->string; + } + + /** + * Creates the object from an array representation + * + * @param array $params + */ + public static function fromArray(array $params): self + { + $chunks = []; + + foreach ($params as $key => $value) { + $chunks[] = sprintf('%s=%s', $key, $value); + } + + return new self(implode(';', $chunks)); + } + + /** + * Creates the object from the given DBAL connection parameters. + * + * @param array $params + */ + public static function fromConnectionParameters(array $params): self + { + if (isset($params['dbname']) && strpos($params['dbname'], '=') !== false) { + return new self($params['dbname']); + } + + $dsnParams = []; + + foreach ( + [ + 'host' => 'HOSTNAME', + 'port' => 'PORT', + 'protocol' => 'PROTOCOL', + 'dbname' => 'DATABASE', + 'user' => 'UID', + 'password' => 'PWD', + ] as $dbalParam => $dsnParam + ) { + if (! isset($params[$dbalParam])) { + continue; + } + + $dsnParams[$dsnParam] = $params[$dbalParam]; + } + + return self::fromArray($dsnParams); + } +} diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php index 68096ba8..d5b61bc0 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliConnection.php @@ -7,12 +7,7 @@ use Doctrine\DBAL\Driver\PingableConnection; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; use Doctrine\DBAL\ParameterType; use mysqli; -use const MYSQLI_INIT_COMMAND; -use const MYSQLI_OPT_CONNECT_TIMEOUT; -use const MYSQLI_OPT_LOCAL_INFILE; -use const MYSQLI_READ_DEFAULT_FILE; -use const MYSQLI_READ_DEFAULT_GROUP; -use const MYSQLI_SERVER_PUBLIC_KEY; + use function defined; use function floor; use function func_get_args; @@ -27,6 +22,13 @@ use function set_error_handler; use function sprintf; use function stripos; +use const MYSQLI_INIT_COMMAND; +use const MYSQLI_OPT_CONNECT_TIMEOUT; +use const MYSQLI_OPT_LOCAL_INFILE; +use const MYSQLI_READ_DEFAULT_FILE; +use const MYSQLI_READ_DEFAULT_GROUP; +use const MYSQLI_SERVER_PUBLIC_KEY; + class MysqliConnection implements Connection, PingableConnection, ServerInfoAwareConnection { /** @@ -68,7 +70,11 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar }); try { if (! $this->conn->real_connect($params['host'], $username, $password, $dbname, $port, $socket, $flags)) { - throw new MysqliException($this->conn->connect_error, $this->conn->sqlstate ?? 'HY000', $this->conn->connect_errno); + throw new MysqliException( + $this->conn->connect_error, + $this->conn->sqlstate ?? 'HY000', + $this->conn->connect_errno + ); } } finally { restore_error_handler(); @@ -126,9 +132,9 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar /** * {@inheritdoc} */ - public function prepare($prepareString) + public function prepare($sql) { - return new MysqliStatement($this->conn, $prepareString); + return new MysqliStatement($this->conn, $sql); } /** @@ -147,17 +153,17 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar /** * {@inheritdoc} */ - public function quote($input, $type = ParameterType::STRING) + public function quote($value, $type = ParameterType::STRING) { - return "'" . $this->conn->escape_string($input) . "'"; + return "'" . $this->conn->escape_string($value) . "'"; } /** * {@inheritdoc} */ - public function exec($statement) + public function exec($sql) { - if ($this->conn->query($statement) === false) { + if ($this->conn->query($sql) === false) { throw new MysqliException($this->conn->error, $this->conn->sqlstate, $this->conn->errno); } @@ -200,6 +206,8 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar /** * {@inheritdoc} + * + * @return int */ public function errorCode() { @@ -208,6 +216,8 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar /** * {@inheritdoc} + * + * @return string */ public function errorInfo() { @@ -222,7 +232,7 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar * @throws MysqliException When one of of the options is not supported. * @throws MysqliException When applying doesn't work - e.g. due to incorrect value. */ - private function setDriverOptions(array $driverOptions = []) : void + private function setDriverOptions(array $driverOptions = []): void { $supportedDriverOptions = [ MYSQLI_OPT_CONNECT_TIMEOUT, @@ -281,9 +291,10 @@ class MysqliConnection implements Connection, PingableConnection, ServerInfoAwar * * @throws MysqliException */ - private function setSecureConnection(array $params) : void + private function setSecureConnection(array $params): void { - if (! isset($params['ssl_key']) && + if ( + ! isset($params['ssl_key']) && ! isset($params['ssl_cert']) && ! isset($params['ssl_ca']) && ! isset($params['ssl_capath']) && diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php index b1edcf4e..65da9403 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Mysqli/MysqliStatement.php @@ -11,6 +11,7 @@ use IteratorAggregate; use mysqli; use mysqli_stmt; use PDO; + use function array_combine; use function array_fill; use function assert; @@ -100,16 +101,16 @@ class MysqliStatement implements IteratorAggregate, Statement /** * {@inheritdoc} */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { - assert(is_int($column)); + assert(is_int($param)); if (! isset(self::$_paramTypeMap[$type])) { throw new MysqliException(sprintf("Unknown type: '%s'", $type)); } - $this->_bindedValues[$column] =& $variable; - $this->types[$column - 1] = self::$_paramTypeMap[$type]; + $this->_bindedValues[$param] =& $variable; + $this->types[$param - 1] = self::$_paramTypeMap[$type]; return true; } @@ -178,7 +179,7 @@ class MysqliStatement implements IteratorAggregate, Statement // Bind row values _after_ storing the result. Otherwise, if mysqli is compiled with libmysql, // it will have to allocate as much memory as it may be needed for the given column type - // (e.g. for a LONGBLOB field it's 4 gigabytes) + // (e.g. for a LONGBLOB column it's 4 gigabytes) // @link https://bugs.php.net/bug.php?id=51386#1270673122 // // Make sure that the values are bound after each execution. Otherwise, if closeCursor() has been @@ -207,7 +208,7 @@ class MysqliStatement implements IteratorAggregate, Statement /** * Binds parameters with known types previously bound to the statement */ - private function bindTypedParameters() : void + private function bindTypedParameters(): void { $streams = $values = []; $types = $this->types; @@ -222,8 +223,11 @@ class MysqliStatement implements IteratorAggregate, Statement if ($types[$parameter - 1] === static::$_paramTypeMap[ParameterType::LARGE_OBJECT]) { if (is_resource($value)) { if (get_resource_type($value) !== 'stream') { - throw new InvalidArgumentException('Resources passed with the LARGE_OBJECT parameter type must be stream resources.'); + throw new InvalidArgumentException( + 'Resources passed with the LARGE_OBJECT parameter type must be stream resources.' + ); } + $streams[$parameter] = $value; $values[$parameter] = null; continue; @@ -249,7 +253,7 @@ class MysqliStatement implements IteratorAggregate, Statement * * @throws MysqliException */ - private function sendLongData(array $streams) : void + private function sendLongData(array $streams): void { foreach ($streams as $paramNr => $stream) { while (! feof($stream)) { @@ -400,6 +404,8 @@ class MysqliStatement implements IteratorAggregate, Statement /** * {@inheritdoc} + * + * @return string */ public function errorInfo() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/Driver.php index edda32d6..b7491548 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/Driver.php @@ -4,7 +4,8 @@ namespace Doctrine\DBAL\Driver\OCI8; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Driver\AbstractOracleDriver; -use const OCI_DEFAULT; + +use const OCI_NO_AUTO_COMMIT; /** * A Doctrine DBAL driver for the Oracle OCI8 PHP extensions. @@ -22,7 +23,7 @@ class Driver extends AbstractOracleDriver (string) $password, $this->_constructDsn($params), $params['charset'] ?? '', - $params['sessionMode'] ?? OCI_DEFAULT, + $params['sessionMode'] ?? OCI_NO_AUTO_COMMIT, $params['persistent'] ?? false ); } catch (OCI8Exception $e) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php index c1857936..bacaa372 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php @@ -6,9 +6,7 @@ use Doctrine\DBAL\Driver\Connection; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; use Doctrine\DBAL\ParameterType; use UnexpectedValueException; -use const OCI_COMMIT_ON_SUCCESS; -use const OCI_DEFAULT; -use const OCI_NO_AUTO_COMMIT; + use function addcslashes; use function func_get_args; use function is_float; @@ -23,6 +21,9 @@ use function preg_match; use function sprintf; use function str_replace; +use const OCI_COMMIT_ON_SUCCESS; +use const OCI_NO_AUTO_COMMIT; + /** * OCI8 implementation of the Connection interface. */ @@ -51,7 +52,7 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection $password, $db, $charset = '', - $sessionMode = OCI_DEFAULT, + $sessionMode = OCI_NO_AUTO_COMMIT, $persistent = false ) { $dbh = $persistent @@ -103,9 +104,9 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function prepare($prepareString) + public function prepare($sql) { - return new OCI8Statement($this->dbh, $prepareString, $this); + return new OCI8Statement($this->dbh, $sql, $this); } /** @@ -130,6 +131,7 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection if (is_int($value) || is_float($value)) { return $value; } + $value = str_replace("'", "''", $value); return "'" . addcslashes($value, "\000\n\r\\\032") . "'"; @@ -138,9 +140,9 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function exec($statement) + public function exec($sql) { - $stmt = $this->prepare($statement); + $stmt = $this->prepare($sql); $stmt->execute(); return $stmt->rowCount(); @@ -148,6 +150,8 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} + * + * @return int|false */ public function lastInsertId($name = null) { @@ -194,6 +198,7 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection if (! oci_commit($this->dbh)) { throw OCI8Exception::fromErrorInfo($this->errorInfo()); } + $this->executeMode = OCI_COMMIT_ON_SUCCESS; return true; @@ -207,6 +212,7 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection if (! oci_rollback($this->dbh)) { throw OCI8Exception::fromErrorInfo($this->errorInfo()); } + $this->executeMode = OCI_COMMIT_ON_SUCCESS; return true; @@ -218,11 +224,12 @@ class OCI8Connection implements Connection, ServerInfoAwareConnection public function errorCode() { $error = oci_error($this->dbh); + if ($error !== false) { - $error = $error['code']; + return $error['code']; } - return $error; + return null; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php index 42283e08..83b07809 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Exception.php @@ -12,7 +12,7 @@ class OCI8Exception extends AbstractDriverException /** * @param mixed[]|false $error * - * @return \Doctrine\DBAL\Driver\OCI8\OCI8Exception + * @return OCI8Exception */ public static function fromErrorInfo($error) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php index 2f8b9323..7237e763 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Statement.php @@ -9,19 +9,7 @@ use Doctrine\DBAL\ParameterType; use InvalidArgumentException; use IteratorAggregate; use PDO; -use const OCI_ASSOC; -use const OCI_B_BIN; -use const OCI_B_BLOB; -use const OCI_BOTH; -use const OCI_D_LOB; -use const OCI_FETCHSTATEMENT_BY_COLUMN; -use const OCI_FETCHSTATEMENT_BY_ROW; -use const OCI_NUM; -use const OCI_RETURN_LOBS; -use const OCI_RETURN_NULLS; -use const OCI_TEMP_BLOB; -use const PREG_OFFSET_CAPTURE; -use const SQLT_CHR; + use function array_key_exists; use function assert; use function count; @@ -44,6 +32,20 @@ use function preg_quote; use function sprintf; use function substr; +use const OCI_ASSOC; +use const OCI_B_BIN; +use const OCI_B_BLOB; +use const OCI_BOTH; +use const OCI_D_LOB; +use const OCI_FETCHSTATEMENT_BY_COLUMN; +use const OCI_FETCHSTATEMENT_BY_ROW; +use const OCI_NUM; +use const OCI_RETURN_LOBS; +use const OCI_RETURN_NULLS; +use const OCI_TEMP_BLOB; +use const PREG_OFFSET_CAPTURE; +use const SQLT_CHR; + /** * The OCI8 implementation of the Statement interface. */ @@ -175,10 +177,12 @@ class OCI8Statement implements IteratorAggregate, Statement * @param string $statement The SQL statement to parse * @param string $tokenOffset The offset to start searching from * @param int $fragmentOffset The offset to build the next fragment from - * @param string[] $fragments Fragments of the original statement not containing placeholders + * @param string[] $fragments Fragments of the original statement + * not containing placeholders * @param string|null $currentLiteralDelimiter The delimiter of the current string literal * or NULL if not currently in a literal - * @param array $paramMap Mapping of the original parameter positions to their named replacements + * @param array $paramMap Mapping of the original parameter positions + * to their named replacements * * @return bool Whether the token was found */ @@ -280,7 +284,9 @@ class OCI8Statement implements IteratorAggregate, Statement { if (is_int($param)) { if (! isset($this->_paramMap[$param])) { - throw new OCI8Exception(sprintf('Could not find variable mapping with index %d, in the SQL statement', $param)); + throw new OCI8Exception( + sprintf('Could not find variable mapping with index %d, in the SQL statement', $param) + ); } $param = $this->_paramMap[$param]; @@ -311,7 +317,7 @@ class OCI8Statement implements IteratorAggregate, Statement /** * Converts DBAL parameter type to oci8 parameter type */ - private function convertParameterType(int $type) : int + private function convertParameterType(int $type): int { switch ($type) { case ParameterType::BINARY: diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php index ffd80d74..453e5053 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php @@ -2,8 +2,8 @@ namespace Doctrine\DBAL\Driver; -use Doctrine\DBAL\ParameterType; use PDO; + use function assert; use function func_get_args; @@ -35,10 +35,13 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function exec($statement) + public function exec($sql) { try { - return parent::exec($statement); + $result = parent::exec($sql); + assert($result !== false); + + return $result; } catch (\PDOException $exception) { throw new PDOException($exception); } @@ -53,15 +56,18 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection } /** - * @param string $prepareString + * @param string $sql * @param array $driverOptions * - * @return Statement + * @return \PDOStatement */ - public function prepare($prepareString, $driverOptions = []) + public function prepare($sql, $driverOptions = []) { try { - return parent::prepare($prepareString, $driverOptions); + $statement = parent::prepare($sql, $driverOptions); + assert($statement instanceof \PDOStatement); + + return $statement; } catch (\PDOException $exception) { throw new PDOException($exception); } @@ -69,6 +75,8 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} + * + * @return \PDOStatement */ public function query() { @@ -84,14 +92,6 @@ class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection } } - /** - * {@inheritdoc} - */ - public function quote($input, $type = ParameterType::STRING) - { - return parent::quote($input, $type); - } - /** * {@inheritdoc} */ diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php index 12fb14ef..7ea26d4d 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOIbm/Driver.php @@ -36,9 +36,11 @@ class Driver extends AbstractDB2Driver if (isset($params['host'])) { $dsn .= 'HOSTNAME=' . $params['host'] . ';'; } + if (isset($params['port'])) { $dsn .= 'PORT=' . $params['port'] . ';'; } + $dsn .= 'PROTOCOL=TCPIP;'; if (isset($params['dbname'])) { $dsn .= 'DATABASE=' . $params['dbname'] . ';'; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php index dcd4ff51..3058febd 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php @@ -44,15 +44,19 @@ class Driver extends AbstractMySQLDriver if (isset($params['host']) && $params['host'] !== '') { $dsn .= 'host=' . $params['host'] . ';'; } + if (isset($params['port'])) { $dsn .= 'port=' . $params['port'] . ';'; } + if (isset($params['dbname'])) { $dsn .= 'dbname=' . $params['dbname'] . ';'; } + if (isset($params['unix_socket'])) { $dsn .= 'unix_socket=' . $params['unix_socket'] . ';'; } + if (isset($params['charset'])) { $dsn .= 'charset=' . $params['charset'] . ';'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php index f25cd5cd..43f06cb7 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOPgSql/Driver.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Driver\AbstractPostgreSQLDriver; use Doctrine\DBAL\Driver\PDOConnection; use PDO; use PDOException; + use function defined; /** @@ -27,7 +28,8 @@ class Driver extends AbstractPostgreSQLDriver $driverOptions ); - if (defined('PDO::PGSQL_ATTR_DISABLE_PREPARES') + if ( + defined('PDO::PGSQL_ATTR_DISABLE_PREPARES') && (! isset($driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES]) || $driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES] === true ) diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php index d08c6a2c..4566f649 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlite/Driver.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Driver\AbstractSQLiteDriver; use Doctrine\DBAL\Driver\PDOConnection; use Doctrine\DBAL\Platforms\SqlitePlatform; use PDOException; + use function array_merge; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php index bd389447..4790db62 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Connection.php @@ -3,10 +3,7 @@ namespace Doctrine\DBAL\Driver\PDOSqlsrv; use Doctrine\DBAL\Driver\PDOConnection; -use Doctrine\DBAL\ParameterType; use PDO; -use function strpos; -use function substr; /** * Sqlsrv Connection implementation. @@ -36,19 +33,4 @@ class Connection extends PDOConnection return $stmt->fetchColumn(); } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - $val = parent::quote($value, $type); - - // Fix for a driver version terminating all values with null byte - if (strpos($val, "\0") !== false) { - $val = substr($val, 0, -1); - } - - return $val; - } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Driver.php index 6d6c4844..880f1263 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Driver.php @@ -3,6 +3,8 @@ namespace Doctrine\DBAL\Driver\PDOSqlsrv; use Doctrine\DBAL\Driver\AbstractSQLServerDriver; +use Doctrine\DBAL\Driver\AbstractSQLServerDriver\PortWithoutHost; + use function is_int; use function sprintf; @@ -48,10 +50,12 @@ class Driver extends AbstractSQLServerDriver if (isset($params['host'])) { $dsn .= $params['host']; - } - if (isset($params['port']) && ! empty($params['port'])) { - $dsn .= ',' . $params['port']; + if (isset($params['port'])) { + $dsn .= ',' . $params['port']; + } + } elseif (isset($params['port'])) { + throw PortWithoutHost::new(); } if (isset($params['dbname'])) { @@ -70,7 +74,7 @@ class Driver extends AbstractSQLServerDriver * * @param string[] $connectionOptions */ - private function getConnectionOptionsDsn(array $connectionOptions) : string + private function getConnectionOptionsDsn(array $connectionOptions): string { $connectionOptionsDsn = ''; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Statement.php index 6803bb14..fe58c752 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOSqlsrv/Statement.php @@ -14,15 +14,16 @@ class Statement extends PDOStatement /** * {@inheritdoc} */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null, $driverOptions = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null, $driverOptions = null) { - if (($type === ParameterType::LARGE_OBJECT || $type === ParameterType::BINARY) + if ( + ($type === ParameterType::LARGE_OBJECT || $type === ParameterType::BINARY) && $driverOptions === null ) { $driverOptions = PDO::SQLSRV_ENCODING_BINARY; } - return parent::bindParam($column, $variable, $type, $length, $driverOptions); + return parent::bindParam($param, $variable, $type, $length, $driverOptions); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php index 26f0f2e7..158f7c92 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php @@ -5,7 +5,7 @@ namespace Doctrine\DBAL\Driver; use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\ParameterType; use PDO; -use const E_USER_DEPRECATED; + use function array_slice; use function assert; use function func_get_args; @@ -13,6 +13,8 @@ use function is_array; use function sprintf; use function trigger_error; +use const E_USER_DEPRECATED; + /** * The PDO implementation of the Statement interface. * Used by all PDO-based drivers. @@ -85,7 +87,7 @@ class PDOStatement extends \PDOStatement implements Statement } /** - * @param mixed $column + * @param mixed $param * @param mixed $variable * @param int $type * @param int|null $length @@ -93,12 +95,12 @@ class PDOStatement extends \PDOStatement implements Statement * * @return bool */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null, $driverOptions = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null, $driverOptions = null) { $type = $this->convertParamType($type); try { - return parent::bindParam($column, $variable, $type, ...array_slice(func_get_args(), 3)); + return parent::bindParam($param, $variable, $type, ...array_slice(func_get_args(), 3)); } catch (\PDOException $exception) { throw new PDOException($exception); } @@ -196,7 +198,7 @@ class PDOStatement extends \PDOStatement implements Statement * * @param int $type Parameter type */ - private function convertParamType(int $type) : int + private function convertParamType(int $type): int { if (! isset(self::PARAM_TYPE_MAP[$type])) { // TODO: next major: throw an exception @@ -216,7 +218,7 @@ class PDOStatement extends \PDOStatement implements Statement * * @param int $fetchMode Fetch mode */ - private function convertFetchMode(int $fetchMode) : int + private function convertFetchMode(int $fetchMode): int { if (! isset(self::FETCH_MODE_MAP[$fetchMode])) { // TODO: next major: throw an exception diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php index 1e6df026..68c7e278 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php @@ -29,7 +29,7 @@ interface ResultStatement extends Traversable /** * Sets the fetch mode to use while iterating this statement. * - * @param int $fetchMode The fetch mode must be one of the {@link \Doctrine\DBAL\FetchMode} constants. + * @param int $fetchMode The fetch mode must be one of the {@link FetchMode} constants. * @param mixed $arg2 * @param mixed $arg3 * @@ -41,8 +41,8 @@ interface ResultStatement extends Traversable * Returns the next row of a result set. * * @param int|null $fetchMode Controls how the next row will be returned to the caller. - * The value must be one of the {@link \Doctrine\DBAL\FetchMode} constants, - * defaulting to {@link \Doctrine\DBAL\FetchMode::MIXED}. + * The value must be one of the {@link FetchMode} constants, + * defaulting to {@link FetchMode::MIXED}. * @param int $cursorOrientation For a ResultStatement object representing a scrollable cursor, * this value determines which row will be returned to the caller. * This value must be one of the \PDO::FETCH_ORI_* constants, @@ -68,19 +68,21 @@ interface ResultStatement extends Traversable * Returns an array containing all of the result set rows. * * @param int|null $fetchMode Controls how the next row will be returned to the caller. - * The value must be one of the {@link \Doctrine\DBAL\FetchMode} constants, - * defaulting to {@link \Doctrine\DBAL\FetchMode::MIXED}. - * @param int|null $fetchArgument This argument has a different meaning depending on the value of the $fetchMode parameter: - * * {@link \Doctrine\DBAL\FetchMode::COLUMN}: + * The value must be one of the {@link FetchMode} constants, + * defaulting to {@link FetchMode::MIXED}. + * @param int|null $fetchArgument This argument has a different meaning depending on the value + * of the $fetchMode parameter: + * * {@link FetchMode::COLUMN}: * Returns the indicated 0-indexed column. - * * {@link \Doctrine\DBAL\FetchMode::CUSTOM_OBJECT}: + * * {@link FetchMode::CUSTOM_OBJECT}: * Returns instances of the specified class, mapping the columns of each row * to named properties in the class. - * * \PDO::FETCH_FUNC: Returns the results of calling the specified function, using each row's + * * {@link PDO::FETCH_FUNC}: Returns the results of calling + * the specified function, using each row's * columns as parameters in the call. * @param mixed[]|null $ctorArgs Controls how the next row will be returned to the caller. - * The value must be one of the {@link \Doctrine\DBAL\FetchMode} constants, - * defaulting to {@link \Doctrine\DBAL\FetchMode::MIXED}. + * The value must be one of the {@link FetchMode} constants, + * defaulting to {@link FetchMode::MIXED}. * * @return mixed[] */ diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/Driver.php index 9564dc29..bc29466e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/Driver.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Driver\SQLAnywhere; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Driver\AbstractSQLAnywhereDriver; + use function array_keys; use function array_map; use function implode; @@ -63,8 +64,15 @@ class Driver extends AbstractSQLAnywhereDriver * * @return string */ - private function buildDsn($host, $port, $server, $dbname, $username = null, $password = null, array $driverOptions = []) - { + private function buildDsn( + $host, + $port, + $server, + $dbname, + $username = null, + $password = null, + array $driverOptions = [] + ) { $host = $host ?: 'localhost'; $port = $port ?: 2638; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php index d4778200..cd464b01 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereConnection.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL\Driver\SQLAnywhere; use Doctrine\DBAL\Driver\Connection; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; use Doctrine\DBAL\ParameterType; + use function assert; use function func_get_args; use function is_float; @@ -107,9 +108,9 @@ class SQLAnywhereConnection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function exec($statement) + public function exec($sql) { - if (sasql_real_query($this->connection, $statement) === false) { + if (sasql_real_query($this->connection, $sql) === false) { throw SQLAnywhereException::fromSQLAnywhereError($this->connection); } @@ -143,9 +144,9 @@ class SQLAnywhereConnection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function prepare($prepareString) + public function prepare($sql) { - return new SQLAnywhereStatement($this->connection, $prepareString); + return new SQLAnywhereStatement($this->connection, $sql); } /** @@ -164,13 +165,13 @@ class SQLAnywhereConnection implements Connection, ServerInfoAwareConnection /** * {@inheritdoc} */ - public function quote($input, $type = ParameterType::STRING) + public function quote($value, $type = ParameterType::STRING) { - if (is_int($input) || is_float($input)) { - return $input; + if (is_int($value) || is_float($value)) { + return $value; } - return "'" . sasql_escape_string($this->connection, $input) . "'"; + return "'" . sasql_escape_string($this->connection, $value) . "'"; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereException.php index 022cfe2d..5446a3b1 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereException.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Driver\SQLAnywhere; use Doctrine\DBAL\Driver\AbstractDriverException; use InvalidArgumentException; + use function sasql_error; use function sasql_errorcode; use function sasql_sqlstate; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php index ff1759ab..fe96fe25 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLAnywhere/SQLAnywhereStatement.php @@ -11,8 +11,9 @@ use PDO; use ReflectionClass; use ReflectionObject; use stdClass; -use const SASQL_BOTH; + use function array_key_exists; +use function assert; use function func_get_args; use function func_num_args; use function gettype; @@ -36,6 +37,8 @@ use function sasql_stmt_reset; use function sasql_stmt_result_metadata; use function sprintf; +use const SASQL_BOTH; + /** * SAP SQL Anywhere implementation of the Statement interface. */ @@ -89,8 +92,10 @@ class SQLAnywhereStatement implements IteratorAggregate, Statement * * @throws SQLAnywhereException */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { + assert(is_int($param)); + switch ($type) { case ParameterType::INTEGER: case ParameterType::BOOLEAN: @@ -111,9 +116,9 @@ class SQLAnywhereStatement implements IteratorAggregate, Statement throw new SQLAnywhereException('Unknown type: ' . $type); } - $this->boundValues[$column] =& $variable; + $this->boundValues[$param] =& $variable; - if (! sasql_stmt_bind_param_ex($this->stmt, $column - 1, $variable, $type, $variable === null)) { + if (! sasql_stmt_bind_param_ex($this->stmt, $param - 1, $variable, $type, $variable === null)) { throw SQLAnywhereException::fromSQLAnywhereError($this->conn, $this->stmt); } @@ -125,6 +130,8 @@ class SQLAnywhereStatement implements IteratorAggregate, Statement */ public function bindValue($param, $value, $type = ParameterType::STRING) { + assert(is_int($param)); + return $this->bindParam($param, $value, $type); } @@ -258,12 +265,14 @@ class SQLAnywhereStatement implements IteratorAggregate, Statement while (($row = $this->fetch(...func_get_args())) !== false) { $rows[] = $row; } + break; case FetchMode::COLUMN: while (($row = $this->fetchColumn()) !== false) { $rows[] = $row; } + break; default: diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/Driver.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/Driver.php index 848ab5ee..72cbff5c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/Driver.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/Driver.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Driver\SQLSrv; use Doctrine\DBAL\Driver\AbstractSQLServerDriver; +use Doctrine\DBAL\Driver\AbstractSQLServerDriver\PortWithoutHost; /** * Driver for ext/sqlsrv. @@ -14,13 +15,16 @@ class Driver extends AbstractSQLServerDriver */ public function connect(array $params, $username = null, $password = null, array $driverOptions = []) { - if (! isset($params['host'])) { - throw new SQLSrvException("Missing 'host' in configuration for sqlsrv driver."); - } + $serverName = ''; - $serverName = $params['host']; - if (isset($params['port'])) { - $serverName .= ', ' . $params['port']; + if (isset($params['host'])) { + $serverName = $params['host']; + + if (isset($params['port'])) { + $serverName .= ',' . $params['port']; + } + } elseif (isset($params['port'])) { + throw PortWithoutHost::new(); } if (isset($params['dbname'])) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php index 71b450d9..e3fef63f 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvConnection.php @@ -5,7 +5,7 @@ namespace Doctrine\DBAL\Driver\SQLSrv; use Doctrine\DBAL\Driver\Connection; use Doctrine\DBAL\Driver\ServerInfoAwareConnection; use Doctrine\DBAL\ParameterType; -use const SQLSRV_ERR_ERRORS; + use function func_get_args; use function is_float; use function is_int; @@ -21,6 +21,8 @@ use function sqlsrv_rows_affected; use function sqlsrv_server_info; use function str_replace; +use const SQLSRV_ERR_ERRORS; + /** * SQL Server implementation for the Connection interface. */ @@ -112,9 +114,9 @@ class SQLSrvConnection implements Connection, ServerInfoAwareConnection /** * {@inheritDoc} */ - public function exec($statement) + public function exec($sql) { - $stmt = sqlsrv_query($this->conn, $statement); + $stmt = sqlsrv_query($this->conn, $sql); if ($stmt === false) { throw SQLSrvException::fromSqlSrvErrors(); @@ -190,7 +192,7 @@ class SQLSrvConnection implements Connection, ServerInfoAwareConnection return $errors[0]['code']; } - return false; + return null; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvException.php index 5618ed73..af70c685 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvException.php @@ -3,10 +3,12 @@ namespace Doctrine\DBAL\Driver\SQLSrv; use Doctrine\DBAL\Driver\AbstractDriverException; -use const SQLSRV_ERR_ERRORS; + use function rtrim; use function sqlsrv_errors; +use const SQLSRV_ERR_ERRORS; + /** * @psalm-immutable */ @@ -15,7 +17,7 @@ class SQLSrvException extends AbstractDriverException /** * Helper method to turn sql server errors into exception. * - * @return \Doctrine\DBAL\Driver\SQLSrv\SQLSrvException + * @return SQLSrvException */ public static function fromSqlSrvErrors() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php index 1e1c0a2a..ed30f9ad 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/SQLSrv/SQLSrvStatement.php @@ -8,12 +8,7 @@ use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\ParameterType; use IteratorAggregate; use PDO; -use const SQLSRV_ENC_BINARY; -use const SQLSRV_ERR_ERRORS; -use const SQLSRV_FETCH_ASSOC; -use const SQLSRV_FETCH_BOTH; -use const SQLSRV_FETCH_NUMERIC; -use const SQLSRV_PARAM_IN; + use function array_key_exists; use function count; use function func_get_args; @@ -35,6 +30,13 @@ use function sqlsrv_rows_affected; use function SQLSRV_SQLTYPE_VARBINARY; use function stripos; +use const SQLSRV_ENC_BINARY; +use const SQLSRV_ERR_ERRORS; +use const SQLSRV_FETCH_ASSOC; +use const SQLSRV_FETCH_BOTH; +use const SQLSRV_FETCH_NUMERIC; +use const SQLSRV_PARAM_IN; + /** * SQL Server Statement. */ @@ -165,14 +167,16 @@ class SQLSrvStatement implements IteratorAggregate, Statement /** * {@inheritdoc} */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { - if (! is_numeric($column)) { - throw new SQLSrvException('sqlsrv does not support named parameters to queries, use question mark (?) placeholders instead.'); + if (! is_numeric($param)) { + throw new SQLSrvException( + 'sqlsrv does not support named parameters to queries, use question mark (?) placeholders instead.' + ); } - $this->variables[$column] =& $variable; - $this->types[$column] = $type; + $this->variables[$param] =& $variable; + $this->types[$param] = $type; // unset the statement resource if it exists as the new one will need to be bound to the new variable $this->stmt = null; @@ -387,12 +391,14 @@ class SQLSrvStatement implements IteratorAggregate, Statement while (($row = $this->fetch(...func_get_args())) !== false) { $rows[] = $row; } + break; case FetchMode::COLUMN: while (($row = $this->fetchColumn()) !== false) { $rows[] = $row; } + break; default: diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php index 388983e4..be2e5d31 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php @@ -19,12 +19,12 @@ interface Statement extends ResultStatement * As mentioned above, the named parameters are not natively supported by the mysqli driver, use executeQuery(), * fetchAll(), fetchArray(), fetchColumn(), fetchAssoc() methods to have the named parameter emulated by doctrine. * - * @param mixed $param Parameter identifier. For a prepared statement using named placeholders, - * this will be a parameter name of the form :name. For a prepared statement - * using question mark placeholders, this will be the 1-indexed position of the parameter. - * @param mixed $value The value to bind to the parameter. - * @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType} - * constants. + * @param int|string $param Parameter identifier. For a prepared statement using named placeholders, + * this will be a parameter name of the form :name. For a prepared statement + * using question mark placeholders, this will be the 1-indexed position of the parameter. + * @param mixed $value The value to bind to the parameter. + * @param int $type Explicit data type for the parameter using the {@link ParameterType} + * constants. * * @return bool TRUE on success or FALSE on failure. */ @@ -44,19 +44,19 @@ interface Statement extends ResultStatement * of stored procedures that return data as output parameters, and some also as input/output * parameters that both send in data and are updated to receive it. * - * @param mixed $column Parameter identifier. For a prepared statement using named placeholders, - * this will be a parameter name of the form :name. For a prepared statement using - * question mark placeholders, this will be the 1-indexed position of the parameter. - * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. - * @param int $type Explicit data type for the parameter using the {@link \Doctrine\DBAL\ParameterType} - * constants. To return an INOUT parameter from a stored procedure, use the bitwise - * OR operator to set the PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter. - * @param int|null $length You must specify maxlength when using an OUT bind - * so that PHP allocates enough memory to hold the returned value. + * @param int|string $param Parameter identifier. For a prepared statement using named placeholders, + * this will be a parameter name of the form :name. For a prepared statement using + * question mark placeholders, this will be the 1-indexed position of the parameter. + * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. + * @param int $type Explicit data type for the parameter using the {@link ParameterType} + * constants. To return an INOUT parameter from a stored procedure, use the bitwise + * OR operator to set the PDO::PARAM_INPUT_OUTPUT bits for the data_type parameter. + * @param int|null $length You must specify maxlength when using an OUT bind + * so that PHP allocates enough memory to hold the returned value. * * @return bool TRUE on success or FALSE on failure. */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null); + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null); /** * Fetches the SQLSTATE associated with the last operation on the statement handle. diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php index 31fc8ea1..abd275c9 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php @@ -15,6 +15,7 @@ use Doctrine\DBAL\Driver\PDOSqlsrv\Driver as PDOSQLSrvDriver; use Doctrine\DBAL\Driver\SQLAnywhere\Driver as SQLAnywhereDriver; use Doctrine\DBAL\Driver\SQLSrv\Driver as SQLSrvDriver; use PDO; + use function array_keys; use function array_map; use function array_merge; @@ -76,6 +77,8 @@ final class DriverManager /** * Private constructor. This class cannot be instantiated. + * + * @codeCoverageIgnore */ private function __construct() { @@ -115,21 +118,26 @@ final class DriverManager * driverClass: * The driver class to use. * - * @param mixed[] $params The parameters. - * @param Configuration|null $config The configuration to use. - * @param EventManager|null $eventManager The event manager to use. + * @param array{wrapperClass?: class-string} $params + * @param Configuration|null $config The configuration to use. + * @param EventManager|null $eventManager The event manager to use. * * @throws DBALException + * + * @phpstan-param mixed[] $params + * @psalm-return ($params is array{wrapperClass:mixed} ? T : Connection) + * @template T of Connection */ public static function getConnection( array $params, ?Configuration $config = null, ?EventManager $eventManager = null - ) : Connection { + ): Connection { // create default config and event manager, if not set if (! $config) { $config = new Configuration(); } + if (! $eventManager) { $eventManager = new EventManager(); } @@ -191,7 +199,7 @@ final class DriverManager * * @return string[] */ - public static function getAvailableDrivers() : array + public static function getAvailableDrivers(): array { return array_keys(self::$_driverMap); } @@ -203,7 +211,7 @@ final class DriverManager * * @throws DBALException */ - private static function _checkParams(array $params) : void + private static function _checkParams(array $params): void { // check existence of mandatory parameters @@ -219,7 +227,10 @@ final class DriverManager throw DBALException::unknownDriver($params['driver'], array_keys(self::$_driverMap)); } - if (isset($params['driverClass']) && ! in_array(Driver::class, class_implements($params['driverClass'], true))) { + if ( + isset($params['driverClass']) + && ! in_array(Driver::class, class_implements($params['driverClass'], true)) + ) { throw DBALException::invalidDriverClass($params['driverClass']); } } @@ -229,7 +240,7 @@ final class DriverManager * * @return string The normalized connection URL path */ - private static function normalizeDatabaseUrlPath(string $urlPath) : string + private static function normalizeDatabaseUrlPath(string $urlPath): string { // Trim leading slash from URL path. return substr($urlPath, 1); @@ -246,7 +257,7 @@ final class DriverManager * * @throws DBALException */ - private static function parseDatabaseUrl(array $params) : array + private static function parseDatabaseUrl(array $params): array { if (! isset($params['url'])) { return $params; @@ -273,12 +284,15 @@ final class DriverManager if (isset($url['host'])) { $params['host'] = $url['host']; } + if (isset($url['port'])) { $params['port'] = $url['port']; } + if (isset($url['user'])) { $params['user'] = $url['user']; } + if (isset($url['pass'])) { $params['password'] = $url['pass']; } @@ -302,7 +316,7 @@ final class DriverManager * * @return mixed[] The resolved connection parameters. */ - private static function parseDatabaseUrlPath(array $url, array $params) : array + private static function parseDatabaseUrlPath(array $url, array $params): array { if (! isset($url['path'])) { return $params; @@ -331,7 +345,7 @@ final class DriverManager * * @return mixed[] The resolved connection parameters. */ - private static function parseDatabaseUrlQuery(array $url, array $params) : array + private static function parseDatabaseUrlQuery(array $url, array $params): array { if (! isset($url['query'])) { return $params; @@ -356,7 +370,7 @@ final class DriverManager * * @return mixed[] The resolved connection parameters. */ - private static function parseRegularDatabaseUrlPath(array $url, array $params) : array + private static function parseRegularDatabaseUrlPath(array $url, array $params): array { $params['dbname'] = $url['path']; @@ -375,7 +389,7 @@ final class DriverManager * * @return mixed[] The resolved connection parameters. */ - private static function parseSqliteDatabaseUrlPath(array $url, array $params) : array + private static function parseSqliteDatabaseUrlPath(array $url, array $params): array { if ($url['path'] === ':memory:') { $params['memory'] = true; @@ -398,7 +412,7 @@ final class DriverManager * * @throws DBALException If parsing failed or resolution is not possible. */ - private static function parseDatabaseUrlScheme(array $url, array $params) : array + private static function parseDatabaseUrlScheme(array $url, array $params): array { if (isset($url['scheme'])) { // The requested driver from the URL scheme takes precedence diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php index 5c71992c..0b6ffbb9 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/ConnectionEventArgs.php @@ -9,7 +9,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\AbstractSchemaManager; /** - * Event Arguments used when a Driver connection is established inside Doctrine\DBAL\Connection. + * Event Arguments used when a Driver connection is established inside {@link Connection}. */ class ConnectionEventArgs extends EventArgs { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php index 9e374856..3e382f72 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/OracleSessionInit.php @@ -5,12 +5,14 @@ namespace Doctrine\DBAL\Event\Listeners; use Doctrine\Common\EventSubscriber; use Doctrine\DBAL\Event\ConnectionEventArgs; use Doctrine\DBAL\Events; -use const CASE_UPPER; + use function array_change_key_case; use function array_merge; use function count; use function implode; +use const CASE_UPPER; + /** * Should be used when Oracle Server default environment does not match the Doctrine requirements. * @@ -57,6 +59,7 @@ class OracleSessionInit implements EventSubscriber $vars[] = $option . " = '" . $value . "'"; } } + $sql = 'ALTER SESSION SET ' . implode(' ', $vars); $args->getConnection()->executeUpdate($sql); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableAddColumnEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableAddColumnEventArgs.php index ff86a93d..30a1a9ca 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableAddColumnEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableAddColumnEventArgs.php @@ -5,12 +5,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\TableDiff; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for adding table columns are generated inside Doctrine\DBAL\Platform\*Platform. + * Event Arguments used when SQL queries for adding table columns are generated inside {@link AbstractPlatform}. */ class SchemaAlterTableAddColumnEventArgs extends SchemaEventArgs { @@ -62,7 +63,7 @@ class SchemaAlterTableAddColumnEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaAlterTableAddColumnEventArgs + * @return SchemaAlterTableAddColumnEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableChangeColumnEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableChangeColumnEventArgs.php index 354eb68b..e9ebb66c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableChangeColumnEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableChangeColumnEventArgs.php @@ -5,12 +5,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\ColumnDiff; use Doctrine\DBAL\Schema\TableDiff; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for changing table columns are generated inside Doctrine\DBAL\Platform\*Platform. + * Event Arguments used when SQL queries for changing table columns are generated inside {@link AbstractPlatform}. */ class SchemaAlterTableChangeColumnEventArgs extends SchemaEventArgs { @@ -62,7 +63,7 @@ class SchemaAlterTableChangeColumnEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaAlterTableChangeColumnEventArgs + * @return SchemaAlterTableChangeColumnEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableEventArgs.php index b10bc7a6..9c2b9b31 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableEventArgs.php @@ -4,12 +4,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\TableDiff; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for creating tables are generated inside Doctrine\DBAL\Platform\*Platform. + * Event Arguments used when SQL queries for creating tables are generated inside {@link AbstractPlatform}. */ class SchemaAlterTableEventArgs extends SchemaEventArgs { @@ -49,7 +50,7 @@ class SchemaAlterTableEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaAlterTableEventArgs + * @return SchemaAlterTableEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRemoveColumnEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRemoveColumnEventArgs.php index 6e3d6a75..d32af597 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRemoveColumnEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRemoveColumnEventArgs.php @@ -5,12 +5,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\TableDiff; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for removing table columns are generated inside Doctrine\DBAL\Platform\*Platform. + * Event Arguments used when SQL queries for removing table columns are generated inside {@link AbstractPlatform}. */ class SchemaAlterTableRemoveColumnEventArgs extends SchemaEventArgs { @@ -62,7 +63,7 @@ class SchemaAlterTableRemoveColumnEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaAlterTableRemoveColumnEventArgs + * @return SchemaAlterTableRemoveColumnEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRenameColumnEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRenameColumnEventArgs.php index 27e28253..6d52b6c0 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRenameColumnEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaAlterTableRenameColumnEventArgs.php @@ -5,12 +5,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\TableDiff; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for renaming table columns are generated inside Doctrine\DBAL\Platform\*Platform. + * Event Arguments used when SQL queries for renaming table columns are generated inside {@link AbstractPlatform}. */ class SchemaAlterTableRenameColumnEventArgs extends SchemaEventArgs { @@ -77,7 +78,7 @@ class SchemaAlterTableRenameColumnEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaAlterTableRenameColumnEventArgs + * @return SchemaAlterTableRenameColumnEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaColumnDefinitionEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaColumnDefinitionEventArgs.php index 80d9abe7..2be445e3 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaColumnDefinitionEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaColumnDefinitionEventArgs.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Column; /** - * Event Arguments used when the portable column definition is generated inside Doctrine\DBAL\Schema\AbstractSchemaManager. + * Event Arguments used when the portable column definition is generated inside {@link AbstractPlatform}. */ class SchemaColumnDefinitionEventArgs extends SchemaEventArgs { @@ -47,7 +47,7 @@ class SchemaColumnDefinitionEventArgs extends SchemaEventArgs * Allows to clear the column which means the column will be excluded from * tables column list. * - * @return \Doctrine\DBAL\Event\SchemaColumnDefinitionEventArgs + * @return SchemaColumnDefinitionEventArgs */ public function setColumn(?Column $column = null) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableColumnEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableColumnEventArgs.php index 6d78aae5..246d2de0 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableColumnEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableColumnEventArgs.php @@ -5,12 +5,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\Table; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for creating table columns are generated inside Doctrine\DBAL\Platform\AbstractPlatform. + * Event Arguments used when SQL queries for creating table columns are generated inside {@link AbstractPlatform}. */ class SchemaCreateTableColumnEventArgs extends SchemaEventArgs { @@ -62,7 +63,7 @@ class SchemaCreateTableColumnEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaCreateTableColumnEventArgs + * @return SchemaCreateTableColumnEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableEventArgs.php index 927a4e4e..e9829a64 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaCreateTableEventArgs.php @@ -4,12 +4,13 @@ namespace Doctrine\DBAL\Event; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Table; + use function array_merge; use function func_get_args; use function is_array; /** - * Event Arguments used when SQL queries for creating tables are generated inside Doctrine\DBAL\Platform\AbstractPlatform. + * Event Arguments used when SQL queries for creating tables are generated inside {@link AbstractPlatform}. */ class SchemaCreateTableEventArgs extends SchemaEventArgs { @@ -77,7 +78,7 @@ class SchemaCreateTableEventArgs extends SchemaEventArgs * * @param string|string[] $sql * - * @return \Doctrine\DBAL\Event\SchemaCreateTableEventArgs + * @return SchemaCreateTableEventArgs */ public function addSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaDropTableEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaDropTableEventArgs.php index 38704979..1236de40 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaDropTableEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaDropTableEventArgs.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\Schema\Table; use InvalidArgumentException; /** - * Event Arguments used when the SQL query for dropping tables are generated inside Doctrine\DBAL\Platform\AbstractPlatform. + * Event Arguments used when the SQL query for dropping tables are generated inside {@link AbstractPlatform}. */ class SchemaDropTableEventArgs extends SchemaEventArgs { @@ -50,7 +50,7 @@ class SchemaDropTableEventArgs extends SchemaEventArgs /** * @param string $sql * - * @return \Doctrine\DBAL\Event\SchemaDropTableEventArgs + * @return SchemaDropTableEventArgs */ public function setSql($sql) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaEventArgs.php index 0db0689c..df2bdae0 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaEventArgs.php @@ -13,7 +13,7 @@ class SchemaEventArgs extends EventArgs private $preventDefault = false; /** - * @return \Doctrine\DBAL\Event\SchemaEventArgs + * @return SchemaEventArgs */ public function preventDefault() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaIndexDefinitionEventArgs.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaIndexDefinitionEventArgs.php index 317f352b..ca6bbf81 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaIndexDefinitionEventArgs.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Event/SchemaIndexDefinitionEventArgs.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Index; /** - * Event Arguments used when the portable index definition is generated inside Doctrine\DBAL\Schema\AbstractSchemaManager. + * Event Arguments used when the portable index definition is generated inside {@link AbstractSchemaManager}. */ class SchemaIndexDefinitionEventArgs extends SchemaEventArgs { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Events.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Events.php index 5398d0f8..de30815c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Events.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Events.php @@ -11,6 +11,8 @@ final class Events { /** * Private constructor. This class cannot be instantiated. + * + * @codeCoverageIgnore */ private function __construct() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php index e1ccd02f..79e32519 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php @@ -2,9 +2,13 @@ namespace Doctrine\DBAL\Exception; +use Throwable; + /** * Marker interface for all exceptions where retrying the transaction makes sense. + * + * @psalm-immutable */ -interface RetryableException +interface RetryableException extends Throwable { } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php index b3fe42f4..4c20e05b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php @@ -64,6 +64,8 @@ final class FetchMode /** * This class cannot be instantiated. + * + * @codeCoverageIgnore */ private function __construct() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php index 62ad0d35..01a131bd 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php @@ -8,11 +8,13 @@ use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\LockMode; use Throwable; -use const CASE_LOWER; + use function array_change_key_case; use function assert; use function is_int; +use const CASE_LOWER; + /** * Table ID Generator for those poor languages that are missing sequences. * @@ -72,26 +74,28 @@ class TableGenerator if ($params['driver'] === 'pdo_sqlite') { throw new DBALException('Cannot use TableGenerator with SQLite.'); } - $this->conn = DriverManager::getConnection($params, $conn->getConfiguration(), $conn->getEventManager()); + + $this->conn = DriverManager::getConnection($params, $conn->getConfiguration(), $conn->getEventManager()); + $this->generatorTableName = $generatorTableName; } /** * Generates the next unused value for the given sequence name. * - * @param string $sequenceName + * @param string $sequence * * @return int * * @throws DBALException */ - public function nextValue($sequenceName) + public function nextValue($sequence) { - if (isset($this->sequences[$sequenceName])) { - $value = $this->sequences[$sequenceName]['value']; - $this->sequences[$sequenceName]['value']++; - if ($this->sequences[$sequenceName]['value'] >= $this->sequences[$sequenceName]['max']) { - unset($this->sequences[$sequenceName]); + if (isset($this->sequences[$sequence])) { + $value = $this->sequences[$sequence]['value']; + $this->sequences[$sequence]['value']++; + if ($this->sequences[$sequence]['value'] >= $this->sequences[$sequence]['max']) { + unset($this->sequences[$sequence]); } return $value; @@ -104,7 +108,7 @@ class TableGenerator $sql = 'SELECT sequence_value, sequence_increment_by' . ' FROM ' . $platform->appendLockHint($this->generatorTableName, LockMode::PESSIMISTIC_WRITE) . ' WHERE sequence_name = ? ' . $platform->getWriteLockSQL(); - $stmt = $this->conn->executeQuery($sql, [$sequenceName]); + $stmt = $this->conn->executeQuery($sql, [$sequence]); $row = $stmt->fetch(FetchMode::ASSOCIATIVE); if ($row !== false) { @@ -116,7 +120,7 @@ class TableGenerator assert(is_int($value)); if ($row['sequence_increment_by'] > 1) { - $this->sequences[$sequenceName] = [ + $this->sequences[$sequence] = [ 'value' => $value, 'max' => $row['sequence_value'] + $row['sequence_increment_by'], ]; @@ -125,7 +129,7 @@ class TableGenerator $sql = 'UPDATE ' . $this->generatorTableName . ' ' . 'SET sequence_value = sequence_value + sequence_increment_by ' . 'WHERE sequence_name = ? AND sequence_value = ?'; - $rows = $this->conn->executeUpdate($sql, [$sequenceName, $row['sequence_value']]); + $rows = $this->conn->executeUpdate($sql, [$sequence, $row['sequence_value']]); if ($rows !== 1) { throw new DBALException('Race-condition detected while updating sequence. Aborting generation'); @@ -133,7 +137,7 @@ class TableGenerator } else { $this->conn->insert( $this->generatorTableName, - ['sequence_name' => $sequenceName, 'sequence_value' => 1, 'sequence_increment_by' => 1] + ['sequence_name' => $sequence, 'sequence_value' => 1, 'sequence_increment_by' => 1] ); $value = 1; } @@ -141,7 +145,12 @@ class TableGenerator $this->conn->commit(); } catch (Throwable $e) { $this->conn->rollBack(); - throw new DBALException('Error occurred while generating ID with TableGenerator, aborted generation: ' . $e->getMessage(), 0, $e); + + throw new DBALException( + 'Error occurred while generating ID with TableGenerator, aborted generation: ' . $e->getMessage(), + 0, + $e + ); } return $value; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php new file mode 100644 index 00000000..55b70c19 --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderCalculator.php @@ -0,0 +1,131 @@ + + */ + private $nodeList = []; + + /** + * Volatile variable holding calculated nodes during sorting process. + * + * @var array + */ + private $sortedNodeList = []; + + /** + * Checks for node (vertex) existence in graph. + */ + public function hasNode(string $hash): bool + { + return isset($this->nodeList[$hash]); + } + + /** + * Adds a new node (vertex) to the graph, assigning its hash and value. + * + * @param object $node + */ + public function addNode(string $hash, $node): void + { + $vertex = new DependencyOrderNode(); + + $vertex->hash = $hash; + $vertex->state = self::NOT_VISITED; + $vertex->value = $node; + + $this->nodeList[$hash] = $vertex; + } + + /** + * Adds a new dependency (edge) to the graph using their hashes. + */ + public function addDependency(string $fromHash, string $toHash): void + { + $vertex = $this->nodeList[$fromHash]; + $edge = new DependencyOrderEdge(); + + $edge->from = $fromHash; + $edge->to = $toHash; + + $vertex->dependencyList[$toHash] = $edge; + } + + /** + * Return a valid order list of all current nodes. + * The desired topological sorting is the reverse post order of these searches. + * + * {@internal Highly performance-sensitive method.} + * + * @return array + */ + public function sort(): array + { + foreach ($this->nodeList as $vertex) { + if ($vertex->state !== self::NOT_VISITED) { + continue; + } + + $this->visit($vertex); + } + + $sortedList = $this->sortedNodeList; + + $this->nodeList = []; + $this->sortedNodeList = []; + + return array_reverse($sortedList); + } + + /** + * Visit a given node definition for reordering. + * + * {@internal Highly performance-sensitive method.} + */ + private function visit(DependencyOrderNode $vertex): void + { + $vertex->state = self::IN_PROGRESS; + + foreach ($vertex->dependencyList as $edge) { + $adjacentVertex = $this->nodeList[$edge->to]; + + switch ($adjacentVertex->state) { + case self::VISITED: + case self::IN_PROGRESS: + // Do nothing, since node was already visited or is + // currently visited + break; + + case self::NOT_VISITED: + $this->visit($adjacentVertex); + } + } + + if ($vertex->state === self::VISITED) { + return; + } + + $vertex->state = self::VISITED; + + $this->sortedNodeList[] = $vertex->value; + } +} diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php new file mode 100644 index 00000000..fa1a0453 --- /dev/null +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Internal/DependencyOrderEdge.php @@ -0,0 +1,12 @@ +start = microtime(true); - $this->queries[++$this->currentQuery] = ['sql' => $sql, 'params' => $params, 'types' => $types, 'executionMS' => 0]; + $this->start = microtime(true); + + $this->queries[++$this->currentQuery] = [ + 'sql' => $sql, + 'params' => $params, + 'types' => $types, + 'executionMS' => 0, + ]; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php index 657abb4d..a3228d3d 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php @@ -2,9 +2,10 @@ namespace Doctrine\DBAL\Logging; -use const PHP_EOL; use function var_dump; +use const PHP_EOL; + /** * A SQL logger that logs to the standard output using echo/var_dump. */ diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php index 2e94611b..3cb885af 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php @@ -10,9 +10,9 @@ interface SQLLogger /** * Logs a SQL statement somewhere. * - * @param string $sql The SQL to be executed. - * @param mixed[]|null $params The SQL parameters. - * @param int[]|string[]|null $types The SQL parameter types. + * @param string $sql The SQL to be executed. + * @param mixed[]|null $params The SQL parameters. + * @param array $types The SQL parameter types. * * @return void */ diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php index 422fee89..564adfce 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php @@ -51,6 +51,8 @@ final class ParameterType /** * This class cannot be instantiated. + * + * @codeCoverageIgnore */ private function __construct() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php index f805b3d8..91475d46 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php @@ -28,7 +28,7 @@ use Doctrine\DBAL\Types; use Doctrine\DBAL\Types\Type; use InvalidArgumentException; use UnexpectedValueException; -use const E_USER_DEPRECATED; + use function addcslashes; use function array_map; use function array_merge; @@ -56,6 +56,8 @@ use function strtolower; use function strtoupper; use function trigger_error; +use const E_USER_DEPRECATED; + /** * Base class for all DatabasePlatforms. The DatabasePlatforms are the central * point of abstraction of platform-specific behaviors, features and SQL dialects. @@ -177,47 +179,47 @@ abstract class AbstractPlatform /** * Returns the SQL snippet that declares a boolean column. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - abstract public function getBooleanTypeDeclarationSQL(array $columnDef); + abstract public function getBooleanTypeDeclarationSQL(array $column); /** * Returns the SQL snippet that declares a 4 byte integer column. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - abstract public function getIntegerTypeDeclarationSQL(array $columnDef); + abstract public function getIntegerTypeDeclarationSQL(array $column); /** * Returns the SQL snippet that declares an 8 byte integer column. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - abstract public function getBigIntTypeDeclarationSQL(array $columnDef); + abstract public function getBigIntTypeDeclarationSQL(array $column); /** * Returns the SQL snippet that declares a 2 byte integer column. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - abstract public function getSmallIntTypeDeclarationSQL(array $columnDef); + abstract public function getSmallIntTypeDeclarationSQL(array $column); /** * Returns the SQL snippet that declares common properties of an integer column. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - abstract protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef); + abstract protected function _getCommonIntegerTypeDeclarationSQL(array $column); /** * Lazy load Doctrine Type Mappings. @@ -246,92 +248,93 @@ abstract class AbstractPlatform /** * Returns the SQL snippet used to declare a VARCHAR column type. * - * @param mixed[] $field + * @param mixed[] $column * * @return string */ - public function getVarcharTypeDeclarationSQL(array $field) + public function getVarcharTypeDeclarationSQL(array $column) { - if (! isset($field['length'])) { - $field['length'] = $this->getVarcharDefaultLength(); + if (! isset($column['length'])) { + $column['length'] = $this->getVarcharDefaultLength(); } - $fixed = $field['fixed'] ?? false; + $fixed = $column['fixed'] ?? false; $maxLength = $fixed ? $this->getCharMaxLength() : $this->getVarcharMaxLength(); - if ($field['length'] > $maxLength) { - return $this->getClobTypeDeclarationSQL($field); + if ($column['length'] > $maxLength) { + return $this->getClobTypeDeclarationSQL($column); } - return $this->getVarcharTypeDeclarationSQLSnippet($field['length'], $fixed); + return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed); } /** * Returns the SQL snippet used to declare a BINARY/VARBINARY column type. * - * @param mixed[] $field The column definition. + * @param mixed[] $column The column definition. * * @return string */ - public function getBinaryTypeDeclarationSQL(array $field) + public function getBinaryTypeDeclarationSQL(array $column) { - if (! isset($field['length'])) { - $field['length'] = $this->getBinaryDefaultLength(); + if (! isset($column['length'])) { + $column['length'] = $this->getBinaryDefaultLength(); } - $fixed = $field['fixed'] ?? false; + $fixed = $column['fixed'] ?? false; $maxLength = $this->getBinaryMaxLength(); - if ($field['length'] > $maxLength) { + if ($column['length'] > $maxLength) { if ($maxLength > 0) { @trigger_error(sprintf( - 'Binary field length %d is greater than supported by the platform (%d). Reduce the field length or use a BLOB field instead.', - $field['length'], + 'Binary column length %d is greater than supported by the platform (%d).' + . ' Reduce the column length or use a BLOB column instead.', + $column['length'], $maxLength ), E_USER_DEPRECATED); } - return $this->getBlobTypeDeclarationSQL($field); + return $this->getBlobTypeDeclarationSQL($column); } - return $this->getBinaryTypeDeclarationSQLSnippet($field['length'], $fixed); + return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed); } /** - * Returns the SQL snippet to declare a GUID/UUID field. + * Returns the SQL snippet to declare a GUID/UUID column. * * By default this maps directly to a CHAR(36) and only maps to more * special datatypes when the underlying databases support this datatype. * - * @param mixed[] $field + * @param mixed[] $column * * @return string */ - public function getGuidTypeDeclarationSQL(array $field) + public function getGuidTypeDeclarationSQL(array $column) { - $field['length'] = 36; - $field['fixed'] = true; + $column['length'] = 36; + $column['fixed'] = true; - return $this->getVarcharTypeDeclarationSQL($field); + return $this->getVarcharTypeDeclarationSQL($column); } /** - * Returns the SQL snippet to declare a JSON field. + * Returns the SQL snippet to declare a JSON column. * * By default this maps directly to a CLOB and only maps to more * special datatypes when the underlying databases support this datatype. * - * @param mixed[] $field + * @param mixed[] $column * * @return string */ - public function getJsonTypeDeclarationSQL(array $field) + public function getJsonTypeDeclarationSQL(array $column) { - return $this->getClobTypeDeclarationSQL($field); + return $this->getClobTypeDeclarationSQL($column); } /** @@ -365,20 +368,20 @@ abstract class AbstractPlatform /** * Returns the SQL snippet used to declare a CLOB column type. * - * @param mixed[] $field + * @param mixed[] $column * * @return string */ - abstract public function getClobTypeDeclarationSQL(array $field); + abstract public function getClobTypeDeclarationSQL(array $column); /** * Returns the SQL Snippet used to declare a BLOB column type. * - * @param mixed[] $field + * @param mixed[] $column * * @return string */ - abstract public function getBlobTypeDeclarationSQL(array $field); + abstract public function getBlobTypeDeclarationSQL(array $column); /** * Gets the name of the platform. @@ -437,7 +440,9 @@ abstract class AbstractPlatform $dbType = strtolower($dbType); if (! isset($this->doctrineTypeMapping[$dbType])) { - throw new DBALException('Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.'); + throw new DBALException( + 'Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.' + ); } return $this->doctrineTypeMapping[$dbType]; @@ -572,15 +577,15 @@ abstract class AbstractPlatform } /** - * Gets the maximum length of a char field. + * Gets the maximum length of a char column. */ - public function getCharMaxLength() : int + public function getCharMaxLength(): int { return $this->getVarcharMaxLength(); } /** - * Gets the maximum length of a varchar field. + * Gets the maximum length of a varchar column. * * @return int */ @@ -590,7 +595,7 @@ abstract class AbstractPlatform } /** - * Gets the default length of a varchar field. + * Gets the default length of a varchar column. * * @return int */ @@ -600,7 +605,7 @@ abstract class AbstractPlatform } /** - * Gets the maximum length of a binary field. + * Gets the maximum length of a binary column. * * @return int */ @@ -610,7 +615,7 @@ abstract class AbstractPlatform } /** - * Gets the default length of a binary field. + * Gets the default length of a binary column. * * @return int */ @@ -720,7 +725,7 @@ abstract class AbstractPlatform // scalar functions /** - * Returns the SQL snippet to get the md5 sum of a field. + * Returns the SQL snippet to get the md5 sum of a column. * * Note: Not SQL92, but common functionality. * @@ -734,7 +739,7 @@ abstract class AbstractPlatform } /** - * Returns the SQL snippet to get the length of a text field. + * Returns the SQL snippet to get the length of a text column. * * @param string $column * @@ -758,7 +763,7 @@ abstract class AbstractPlatform } /** - * Returns the SQL snippet to round a numeric field to the number of decimals specified. + * Returns the SQL snippet to round a numeric column to the number of decimals specified. * * @param string $column * @param int $decimals @@ -904,19 +909,19 @@ abstract class AbstractPlatform * * SQLite only supports the 2 parameter variant of this function. * - * @param string $value An sql string literal or column name/alias. - * @param int $from Where to start the substring portion. + * @param string $string An sql string literal or column name/alias. + * @param int $start Where to start the substring portion. * @param int|null $length The substring portion length. * * @return string */ - public function getSubstringExpression($value, $from, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { - return 'SUBSTRING(' . $value . ' FROM ' . $from . ')'; + return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; } - return 'SUBSTRING(' . $value . ' FROM ' . $from . ' FOR ' . $length . ')'; + return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; } /** @@ -1353,7 +1358,8 @@ abstract class AbstractPlatform } /** - * Honors that some SQL vendors such as MsSql use table hints for locking instead of the ANSI SQL FOR UPDATE specification. + * Honors that some SQL vendors such as MsSql use table hints for locking instead of the + * ANSI SQL FOR UPDATE specification. * * @param string $fromClause The FROM clause to append the hint for the given lock mode to. * @param int|null $lockMode One of the Doctrine\DBAL\LockMode::* constants. If null is given, nothing will @@ -1421,7 +1427,9 @@ abstract class AbstractPlatform } if (! is_string($table)) { - throw new InvalidArgumentException('getDropTableSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.' + ); } if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaDropTable)) { @@ -1469,7 +1477,9 @@ abstract class AbstractPlatform if ($index instanceof Index) { $index = $index->getQuotedName($this); } elseif (! is_string($index)) { - throw new InvalidArgumentException('AbstractPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.' + ); } return 'DROP INDEX ' . $index; @@ -1537,7 +1547,9 @@ abstract class AbstractPlatform public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDEXES) { if (! is_int($createFlags)) { - throw new InvalidArgumentException('Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.'); + throw new InvalidArgumentException( + 'Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.' + ); } if (count($table->getColumns()) === 0) { @@ -1550,9 +1562,8 @@ abstract class AbstractPlatform $options['indexes'] = []; $options['primary'] = []; - if (($createFlags&self::CREATE_INDEXES) > 0) { + if (($createFlags & self::CREATE_INDEXES) > 0) { foreach ($table->getIndexes() as $index) { - /** @var $index Index */ if ($index->isPrimary()) { $options['primary'] = $index->getQuotedColumns($this); $options['primary_index'] = $index; @@ -1566,7 +1577,10 @@ abstract class AbstractPlatform $columns = []; foreach ($table->getColumns() as $column) { - if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn)) { + if ( + $this->_eventManager !== null + && $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn) + ) { $eventArgs = new SchemaCreateTableColumnEventArgs($column, $table, $this); $this->_eventManager->dispatchEvent(Events::onSchemaCreateTableColumn, $eventArgs); @@ -1577,10 +1591,11 @@ abstract class AbstractPlatform } } - $columnData = $column->toArray(); - $columnData['name'] = $column->getQuotedName($this); - $columnData['version'] = $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : false; - $columnData['comment'] = $this->getColumnComment($column); + $columnData = array_merge($column->toArray(), [ + 'name' => $column->getQuotedName($this), + 'version' => $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : false, + 'comment' => $this->getColumnComment($column), + ]); if ($columnData['type'] instanceof Types\StringType && $columnData['length'] === null) { $columnData['length'] = 255; @@ -1593,7 +1608,7 @@ abstract class AbstractPlatform $columns[$columnData['name']] = $columnData; } - if (($createFlags&self::CREATE_FOREIGNKEYS) > 0) { + if (($createFlags & self::CREATE_FOREIGNKEYS) > 0) { $options['foreignKeys'] = []; foreach ($table->getForeignKeys() as $fkConstraint) { $options['foreignKeys'][] = $fkConstraint; @@ -1614,6 +1629,7 @@ abstract class AbstractPlatform if ($table->hasOption('comment')) { $sql[] = $this->getCommentOnTableSQL($tableName, $table->getOption('comment')); } + foreach ($table->getColumns() as $column) { $comment = $this->getColumnComment($column); @@ -1628,7 +1644,7 @@ abstract class AbstractPlatform return array_merge($sql, $columnSql); } - protected function getCommentOnTableSQL(string $tableName, ?string $comment) : string + protected function getCommentOnTableSQL(string $tableName, ?string $comment): string { $tableName = new Identifier($tableName); @@ -1680,19 +1696,19 @@ abstract class AbstractPlatform /** * Returns the SQL used to create a table. * - * @param string $tableName + * @param string $name * @param mixed[][] $columns * @param mixed[] $options * * @return string[] */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $columnListSql = $this->getColumnDeclarationListSQL($columns); if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $name => $definition) { - $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($name, $definition); + foreach ($options['uniqueConstraints'] as $index => $definition) { + $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($index, $definition); } } @@ -1706,19 +1722,20 @@ abstract class AbstractPlatform } } - $query = 'CREATE TABLE ' . $tableName . ' (' . $columnListSql; + $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; $check = $this->getCheckDeclarationSQL($columns); if (! empty($check)) { $query .= ', ' . $check; } + $query .= ')'; $sql[] = $query; if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $tableName); + $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } @@ -1793,6 +1810,7 @@ abstract class AbstractPlatform $referencesClause = ' REFERENCES ' . $constraint->getQuotedForeignTableName($this) . ' (' . implode(', ', $constraint->getQuotedForeignColumns($this)) . ')'; } + $query .= ' ' . $columnList . $referencesClause; return $query; @@ -1812,6 +1830,7 @@ abstract class AbstractPlatform if ($table instanceof Table) { $table = $table->getQuotedName($this); } + $name = $index->getQuotedName($this); $columns = $index->getColumns(); @@ -2080,6 +2099,7 @@ abstract class AbstractPlatform foreach ($diff->removedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } + foreach ($diff->changedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } @@ -2088,6 +2108,7 @@ abstract class AbstractPlatform foreach ($diff->removedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } + foreach ($diff->changedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } @@ -2164,73 +2185,76 @@ abstract class AbstractPlatform */ protected function _getAlterTableIndexForeignKeySQL(TableDiff $diff) { - return array_merge($this->getPreAlterTableIndexForeignKeySQL($diff), $this->getPostAlterTableIndexForeignKeySQL($diff)); + return array_merge( + $this->getPreAlterTableIndexForeignKeySQL($diff), + $this->getPostAlterTableIndexForeignKeySQL($diff) + ); } /** - * Gets declaration of a number of fields in bulk. + * Gets declaration of a number of columns in bulk. * - * @param mixed[][] $fields A multidimensional associative array. - * The first dimension determines the field name, while the second - * dimension is keyed with the name of the properties - * of the field being declared as array indexes. Currently, the types - * of supported field properties are as follows: + * @param mixed[][] $columns A multidimensional associative array. + * The first dimension determines the column name, while the second + * dimension is keyed with the name of the properties + * of the column being declared as array indexes. Currently, the types + * of supported column properties are as follows: * * length * Integer value that determines the maximum length of the text - * field. If this argument is missing the field should be + * column. If this argument is missing the column should be * declared to have the longest length allowed by the DBMS. * * default - * Text value to be used as default for this field. + * Text value to be used as default for this column. * * notnull - * Boolean flag that indicates whether this field is constrained + * Boolean flag that indicates whether this column is constrained * to not be set to null. * charset - * Text value with the default CHARACTER SET for this field. + * Text value with the default CHARACTER SET for this column. * collation - * Text value with the default COLLATION for this field. + * Text value with the default COLLATION for this column. * unique * unique constraint * * @return string */ - public function getColumnDeclarationListSQL(array $fields) + public function getColumnDeclarationListSQL(array $columns) { - $queryFields = []; + $declarations = []; - foreach ($fields as $fieldName => $field) { - $queryFields[] = $this->getColumnDeclarationSQL($fieldName, $field); + foreach ($columns as $name => $column) { + $declarations[] = $this->getColumnDeclarationSQL($name, $column); } - return implode(', ', $queryFields); + return implode(', ', $declarations); } /** * Obtains DBMS specific SQL code portion needed to declare a generic type - * field to be used in statements like CREATE TABLE. + * column to be used in statements like CREATE TABLE. * - * @param string $name The name the field to be declared. - * @param mixed[] $field An associative array with the name of the properties - * of the field being declared as array indexes. Currently, the types - * of supported field properties are as follows: + * @param string $name The name the column to be declared. + * @param mixed[] $column An associative array with the name of the properties + * of the column being declared as array indexes. Currently, the types + * of supported column properties are as follows: * * length * Integer value that determines the maximum length of the text - * field. If this argument is missing the field should be + * column. If this argument is missing the column should be * declared to have the longest length allowed by the DBMS. * * default - * Text value to be used as default for this field. + * Text value to be used as default for this column. * * notnull - * Boolean flag that indicates whether this field is constrained + * Boolean flag that indicates whether this column is constrained * to not be set to null. * charset - * Text value with the default CHARACTER SET for this field. + * Text value with the default CHARACTER SET for this column. * collation - * Text value with the default COLLATION for this field. + * Text value with the default COLLATION for this column. * unique * unique constraint * check @@ -2240,76 +2264,76 @@ abstract class AbstractPlatform * * @return string DBMS specific SQL code portion that should be used to declare the column. */ - public function getColumnDeclarationSQL($name, array $field) + public function getColumnDeclarationSQL($name, array $column) { - if (isset($field['columnDefinition'])) { - $columnDef = $this->getCustomTypeDeclarationSQL($field); + if (isset($column['columnDefinition'])) { + $declaration = $this->getCustomTypeDeclarationSQL($column); } else { - $default = $this->getDefaultValueDeclarationSQL($field); + $default = $this->getDefaultValueDeclarationSQL($column); - $charset = isset($field['charset']) && $field['charset'] ? - ' ' . $this->getColumnCharsetDeclarationSQL($field['charset']) : ''; + $charset = isset($column['charset']) && $column['charset'] ? + ' ' . $this->getColumnCharsetDeclarationSQL($column['charset']) : ''; - $collation = isset($field['collation']) && $field['collation'] ? - ' ' . $this->getColumnCollationDeclarationSQL($field['collation']) : ''; + $collation = isset($column['collation']) && $column['collation'] ? + ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; - $notnull = isset($field['notnull']) && $field['notnull'] ? ' NOT NULL' : ''; + $notnull = isset($column['notnull']) && $column['notnull'] ? ' NOT NULL' : ''; - $unique = isset($field['unique']) && $field['unique'] ? + $unique = isset($column['unique']) && $column['unique'] ? ' ' . $this->getUniqueFieldDeclarationSQL() : ''; - $check = isset($field['check']) && $field['check'] ? - ' ' . $field['check'] : ''; + $check = isset($column['check']) && $column['check'] ? + ' ' . $column['check'] : ''; - $typeDecl = $field['type']->getSQLDeclaration($field, $this); - $columnDef = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; + $typeDecl = $column['type']->getSQLDeclaration($column, $this); + $declaration = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; - if ($this->supportsInlineColumnComments() && isset($field['comment']) && $field['comment'] !== '') { - $columnDef .= ' ' . $this->getInlineColumnCommentSQL($field['comment']); + if ($this->supportsInlineColumnComments() && isset($column['comment']) && $column['comment'] !== '') { + $declaration .= ' ' . $this->getInlineColumnCommentSQL($column['comment']); } } - return $name . ' ' . $columnDef; + return $name . ' ' . $declaration; } /** * Returns the SQL snippet that declares a floating point column of arbitrary precision. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - public function getDecimalTypeDeclarationSQL(array $columnDef) + public function getDecimalTypeDeclarationSQL(array $column) { - $columnDef['precision'] = ! isset($columnDef['precision']) || empty($columnDef['precision']) - ? 10 : $columnDef['precision']; - $columnDef['scale'] = ! isset($columnDef['scale']) || empty($columnDef['scale']) - ? 0 : $columnDef['scale']; + $column['precision'] = ! isset($column['precision']) || empty($column['precision']) + ? 10 : $column['precision']; + $column['scale'] = ! isset($column['scale']) || empty($column['scale']) + ? 0 : $column['scale']; - return 'NUMERIC(' . $columnDef['precision'] . ', ' . $columnDef['scale'] . ')'; + return 'NUMERIC(' . $column['precision'] . ', ' . $column['scale'] . ')'; } /** * Obtains DBMS specific SQL code portion needed to set a default value * declaration to be used in statements like CREATE TABLE. * - * @param mixed[] $field The field definition array. + * @param mixed[] $column The column definition array. * * @return string DBMS specific SQL code portion needed to set a default value. */ - public function getDefaultValueDeclarationSQL($field) + public function getDefaultValueDeclarationSQL($column) { - if (! isset($field['default'])) { - return empty($field['notnull']) ? ' DEFAULT NULL' : ''; + if (! isset($column['default'])) { + return empty($column['notnull']) ? ' DEFAULT NULL' : ''; } - $default = $field['default']; + $default = $column['default']; - if (! isset($field['type'])) { + if (! isset($column['type'])) { return " DEFAULT '" . $default . "'"; } - $type = $field['type']; + $type = $column['type']; if ($type instanceof Types\PhpIntegerMappingType) { return ' DEFAULT ' . $default; @@ -2345,16 +2369,16 @@ abstract class AbstractPlatform public function getCheckDeclarationSQL(array $definition) { $constraints = []; - foreach ($definition as $field => $def) { + foreach ($definition as $column => $def) { if (is_string($def)) { $constraints[] = 'CHECK (' . $def . ')'; } else { if (isset($def['min'])) { - $constraints[] = 'CHECK (' . $field . ' >= ' . $def['min'] . ')'; + $constraints[] = 'CHECK (' . $column . ' >= ' . $def['min'] . ')'; } if (isset($def['max'])) { - $constraints[] = 'CHECK (' . $field . ' <= ' . $def['max'] . ')'; + $constraints[] = 'CHECK (' . $column . ' <= ' . $def['max'] . ')'; } } } @@ -2414,16 +2438,16 @@ abstract class AbstractPlatform /** * Obtains SQL code portion needed to create a custom column, - * e.g. when a field has the "columnDefinition" keyword. + * e.g. when a column has the "columnDefinition" keyword. * Only "AUTOINCREMENT" and "PRIMARY KEY" are added if appropriate. * - * @param mixed[] $columnDef + * @param mixed[] $column * * @return string */ - public function getCustomTypeDeclarationSQL(array $columnDef) + public function getCustomTypeDeclarationSQL(array $column) { - return $columnDef['columnDefinition']; + return $column['columnDefinition']; } /** @@ -2432,7 +2456,7 @@ abstract class AbstractPlatform * * @param mixed[]|Index $columnsOrIndex array declaration is deprecated, prefer passing Index to this method */ - public function getIndexFieldDeclarationListSQL($columnsOrIndex) : string + public function getIndexFieldDeclarationListSQL($columnsOrIndex): string { if ($columnsOrIndex instanceof Index) { return implode(', ', $columnsOrIndex->getQuotedColumns($this)); @@ -2488,10 +2512,10 @@ abstract class AbstractPlatform /** * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @return string DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a field declaration. + * of a column declaration. */ public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) { @@ -2515,6 +2539,7 @@ abstract class AbstractPlatform if ($this->supportsForeignKeyOnUpdate() && $foreignKey->hasOption('onUpdate')) { $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate')); } + if ($foreignKey->hasOption('onDelete')) { $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete')); } @@ -2541,6 +2566,7 @@ abstract class AbstractPlatform case 'RESTRICT': case 'SET DEFAULT': return $upper; + default: throw new InvalidArgumentException('Invalid foreign key action: ' . $upper); } @@ -2548,7 +2574,7 @@ abstract class AbstractPlatform /** * Obtains DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @return string * @@ -2560,14 +2586,17 @@ abstract class AbstractPlatform if (strlen($foreignKey->getName())) { $sql .= 'CONSTRAINT ' . $foreignKey->getQuotedName($this) . ' '; } + $sql .= 'FOREIGN KEY ('; if (count($foreignKey->getLocalColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'local' required."); } + if (count($foreignKey->getForeignColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreign' required."); } + if (strlen($foreignKey->getForeignTableName()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreignTable' required."); } @@ -2580,10 +2609,10 @@ abstract class AbstractPlatform /** * Obtains DBMS specific SQL code portion needed to set the UNIQUE constraint - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @return string DBMS specific SQL code portion needed to set the UNIQUE constraint - * of a field declaration. + * of a column declaration. */ public function getUniqueFieldDeclarationSQL() { @@ -2592,12 +2621,12 @@ abstract class AbstractPlatform /** * Obtains DBMS specific SQL code portion needed to set the CHARACTER SET - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @param string $charset The name of the charset. * * @return string DBMS specific SQL code portion needed to set the CHARACTER SET - * of a field declaration. + * of a column declaration. */ public function getColumnCharsetDeclarationSQL($charset) { @@ -2606,12 +2635,12 @@ abstract class AbstractPlatform /** * Obtains DBMS specific SQL code portion needed to set the COLLATION - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @param string $collation The name of the collation. * * @return string DBMS specific SQL code portion needed to set the COLLATION - * of a field declaration. + * of a column declaration. */ public function getColumnCollationDeclarationSQL($collation) { @@ -2682,7 +2711,7 @@ abstract class AbstractPlatform */ public function convertFromBoolean($item) { - return $item === null ? null: (bool) $item; + return $item === null ? null : (bool) $item; } /** @@ -2744,12 +2773,16 @@ abstract class AbstractPlatform switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return 'READ UNCOMMITTED'; + case TransactionIsolationLevel::READ_COMMITTED: return 'READ COMMITTED'; + case TransactionIsolationLevel::REPEATABLE_READ: return 'REPEATABLE READ'; + case TransactionIsolationLevel::SERIALIZABLE: return 'SERIALIZABLE'; + default: throw new InvalidArgumentException('Invalid isolation level:' . $level); } @@ -2802,8 +2835,8 @@ abstract class AbstractPlatform } /** - * @param string $table - * @param string|null $database + * @param string $table + * @param string $database * * @return string * @@ -2859,13 +2892,13 @@ abstract class AbstractPlatform * requests may be impossible. * * @param string $table - * @param string $currentDatabase + * @param string $database * * @return string * * @throws DBALException If not supported on this platform. */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { throw DBALException::notSupported(__METHOD__); } @@ -2922,13 +2955,13 @@ abstract class AbstractPlatform } /** - * @param string $sequenceName + * @param string $sequence * * @return string * * @throws DBALException If not supported on this platform. */ - public function getSequenceNextValSQL($sequenceName) + public function getSequenceNextValSQL($sequence) { throw DBALException::notSupported(__METHOD__); } @@ -2962,68 +2995,68 @@ abstract class AbstractPlatform } /** - * Obtains DBMS specific SQL to be used to create datetime fields in + * Obtains DBMS specific SQL to be used to create datetime columns in * statements like CREATE TABLE. * - * @param mixed[] $fieldDeclaration + * @param mixed[] $column * * @return string * * @throws DBALException If not supported on this platform. */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { throw DBALException::notSupported(__METHOD__); } /** - * Obtains DBMS specific SQL to be used to create datetime with timezone offset fields. + * Obtains DBMS specific SQL to be used to create datetime with timezone offset columns. * - * @param mixed[] $fieldDeclaration + * @param mixed[] $column * * @return string */ - public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTzTypeDeclarationSQL(array $column) { - return $this->getDateTimeTypeDeclarationSQL($fieldDeclaration); + return $this->getDateTimeTypeDeclarationSQL($column); } /** - * Obtains DBMS specific SQL to be used to create date fields in statements + * Obtains DBMS specific SQL to be used to create date columns in statements * like CREATE TABLE. * - * @param mixed[] $fieldDeclaration + * @param mixed[] $column * * @return string * * @throws DBALException If not supported on this platform. */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { throw DBALException::notSupported(__METHOD__); } /** - * Obtains DBMS specific SQL to be used to create time fields in statements + * Obtains DBMS specific SQL to be used to create time columns in statements * like CREATE TABLE. * - * @param mixed[] $fieldDeclaration + * @param mixed[] $column * * @return string * * @throws DBALException If not supported on this platform. */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { throw DBALException::notSupported(__METHOD__); } /** - * @param mixed[] $fieldDeclaration + * @param mixed[] $column * * @return string */ - public function getFloatDeclarationSQL(array $fieldDeclaration) + public function getFloatDeclarationSQL(array $column) { return 'DOUBLE PRECISION'; } @@ -3119,7 +3152,7 @@ abstract class AbstractPlatform /** * Whether the platform supports indexes with column length definitions. */ - public function supportsColumnLengthIndexes() : bool + public function supportsColumnLengthIndexes(): bool { return false; } @@ -3184,6 +3217,16 @@ abstract class AbstractPlatform return true; } + /** + * Whether foreign key constraints can be dropped. + * + * If false, then getDropForeignKeySQL() throws exception. + */ + public function supportsCreateDropForeignKeyConstraints(): bool + { + return true; + } + /** * Whether this platform supports onUpdate in foreign key constraints. * @@ -3208,8 +3251,7 @@ abstract class AbstractPlatform * Whether this platform can emulate schemas. * * Platforms that either support or emulate schemas don't automatically - * filter a schema for the namespaced elements in {@link - * AbstractManager#createSchema}. + * filter a schema for the namespaced elements in {@link AbstractManager::createSchema()}. * * @return bool */ @@ -3474,14 +3516,14 @@ abstract class AbstractPlatform /** * Returns the insert SQL for an empty insert statement. * - * @param string $tableName - * @param string $identifierColumnName + * @param string $quotedTableName + * @param string $quotedIdentifierColumnName * * @return string */ - public function getEmptyIdentityInsertSQL($tableName, $identifierColumnName) + public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) { - return 'INSERT INTO ' . $tableName . ' (' . $identifierColumnName . ') VALUES (null)'; + return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (null)'; } /** @@ -3623,7 +3665,7 @@ abstract class AbstractPlatform * @param string $escapeChar should be reused by the caller in the LIKE * expression. */ - final public function escapeStringForLike(string $inputString, string $escapeChar) : string + final public function escapeStringForLike(string $inputString, string $escapeChar): string { return preg_replace( '~([' . preg_quote($this->getLikeWildcardCharacters() . $escapeChar, '~') . '])~u', @@ -3632,7 +3674,7 @@ abstract class AbstractPlatform ); } - protected function getLikeWildcardCharacters() : string + protected function getLikeWildcardCharacters(): string { return '%_'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DB2Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DB2Platform.php index 2dbf7f5d..877273bc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DB2Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DB2Platform.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Types; + use function array_merge; use function count; use function current; @@ -22,10 +23,7 @@ use function strtoupper; class DB2Platform extends AbstractPlatform { - /** - * {@inheritdoc} - */ - public function getCharMaxLength() : int + public function getCharMaxLength(): int { return 254; } @@ -49,22 +47,22 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getVarcharTypeDeclarationSQL(array $field) + public function getVarcharTypeDeclarationSQL(array $column) { // for IBM DB2, the CHAR max length is less than VARCHAR default length - if (! isset($field['length']) && ! empty($field['fixed'])) { - $field['length'] = $this->getCharMaxLength(); + if (! isset($column['length']) && ! empty($column['fixed'])) { + $column['length'] = $this->getCharMaxLength(); } - return parent::getVarcharTypeDeclarationSQL($field); + return parent::getVarcharTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { - // todo blob(n) with $field['length']; + // todo blob(n) with $column['length']; return 'BLOB(1M)'; } @@ -126,9 +124,9 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { - // todo clob(n) with $field['length']; + // todo clob(n) with $column['length']; return 'CLOB(1M)'; } @@ -143,7 +141,7 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $columnDef) + public function getBooleanTypeDeclarationSQL(array $column) { return 'SMALLINT'; } @@ -151,34 +149,34 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $columnDef) + public function getIntegerTypeDeclarationSQL(array $column) { - return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $columnDef) + public function getBigIntTypeDeclarationSQL(array $column) { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $columnDef) + public function getSmallIntTypeDeclarationSQL(array $column) { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { $autoinc = ''; - if (! empty($columnDef['autoincrement'])) { + if (! empty($column['autoincrement'])) { $autoinc = ' GENERATED BY DEFAULT AS IDENTITY'; } @@ -232,9 +230,9 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { - if (isset($fieldDeclaration['version']) && $fieldDeclaration['version'] === true) { + if (isset($column['version']) && $column['version'] === true) { return 'TIMESTAMP(0) WITH DEFAULT'; } @@ -244,7 +242,7 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -252,7 +250,7 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME'; } @@ -342,7 +340,7 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { $table = $this->quoteStringLiteral($table); @@ -489,18 +487,19 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $indexes = []; if (isset($options['indexes'])) { $indexes = $options['indexes']; } + $options['indexes'] = []; - $sqls = parent::_getCreateTableSQL($tableName, $columns, $options); + $sqls = parent::_getCreateTableSQL($name, $columns, $options); foreach ($indexes as $definition) { - $sqls[] = $this->getCreateIndexSQL($definition, $tableName); + $sqls[] = $this->getCreateIndexSQL($definition, $name); } return $sqls; @@ -525,7 +524,8 @@ class DB2Platform extends AbstractPlatform $queryPart = 'ADD COLUMN ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef); // Adding non-nullable columns to a table requires a default value to be specified. - if (! empty($columnDef['notnull']) && + if ( + ! empty($columnDef['notnull']) && ! isset($columnDef['default']) && empty($columnDef['autoincrement']) ) { @@ -628,8 +628,12 @@ class DB2Platform extends AbstractPlatform * @param string[] $sql The sequence of table alteration statements to fill. * @param mixed[] $queryParts The sequence of column alteration clauses to fill. */ - private function gatherAlterColumnSQL(Identifier $table, ColumnDiff $columnDiff, array &$sql, array &$queryParts) : void - { + private function gatherAlterColumnSQL( + Identifier $table, + ColumnDiff $columnDiff, + array &$sql, + array &$queryParts + ): void { $alterColumnClauses = $this->getAlterColumnClausesSQL($columnDiff); if (empty($alterColumnClauses)) { @@ -670,7 +674,8 @@ class DB2Platform extends AbstractPlatform $clauses = []; - if ($columnDiff->hasChanged('type') || + if ( + $columnDiff->hasChanged('type') || $columnDiff->hasChanged('length') || $columnDiff->hasChanged('precision') || $columnDiff->hasChanged('scale') || @@ -708,21 +713,23 @@ class DB2Platform extends AbstractPlatform foreach ($diff->removedIndexes as $remKey => $remIndex) { foreach ($diff->addedIndexes as $addKey => $addIndex) { - if ($remIndex->getColumns() === $addIndex->getColumns()) { - if ($remIndex->isPrimary()) { - $sql[] = 'ALTER TABLE ' . $table . ' DROP PRIMARY KEY'; - } elseif ($remIndex->isUnique()) { - $sql[] = 'ALTER TABLE ' . $table . ' DROP UNIQUE ' . $remIndex->getQuotedName($this); - } else { - $sql[] = $this->getDropIndexSQL($remIndex, $table); - } - - $sql[] = $this->getCreateIndexSQL($addIndex, $table); - - unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]); - - break; + if ($remIndex->getColumns() !== $addIndex->getColumns()) { + continue; } + + if ($remIndex->isPrimary()) { + $sql[] = 'ALTER TABLE ' . $table . ' DROP PRIMARY KEY'; + } elseif ($remIndex->isUnique()) { + $sql[] = 'ALTER TABLE ' . $table . ' DROP UNIQUE ' . $remIndex->getQuotedName($this); + } else { + $sql[] = $this->getDropIndexSQL($remIndex, $table); + } + + $sql[] = $this->getCreateIndexSQL($addIndex, $table); + + unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]); + + break; } } @@ -747,27 +754,27 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDefaultValueDeclarationSQL($field) + public function getDefaultValueDeclarationSQL($column) { - if (! empty($field['autoincrement'])) { + if (! empty($column['autoincrement'])) { return ''; } - if (isset($field['version']) && $field['version']) { - if ((string) $field['type'] !== 'DateTime') { - $field['default'] = '1'; + if (isset($column['version']) && $column['version']) { + if ((string) $column['type'] !== 'DateTime') { + $column['default'] = '1'; } } - return parent::getDefaultValueDeclarationSQL($field); + return parent::getDefaultValueDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getEmptyIdentityInsertSQL($tableName, $identifierColumnName) + public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) { - return 'INSERT INTO ' . $tableName . ' (' . $identifierColumnName . ') VALUES (DEFAULT)'; + return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (DEFAULT)'; } /** @@ -828,13 +835,13 @@ class DB2Platform extends AbstractPlatform /** * {@inheritDoc} */ - public function getSubstringExpression($value, $from, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { - return 'SUBSTR(' . $value . ', ' . $from . ')'; + return 'SUBSTR(' . $string . ', ' . $start . ')'; } - return 'SUBSTR(' . $value . ', ' . $from . ', ' . $length . ')'; + return 'SUBSTR(' . $string . ', ' . $start . ', ' . $length . ')'; } /** @@ -901,7 +908,7 @@ class DB2Platform extends AbstractPlatform return Keywords\DB2Keywords::class; } - public function getListTableCommentsSQL(string $table) : string + public function getListTableCommentsSQL(string $table): string { return sprintf( <<<'SQL' diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php index ec97d0ef..c1f3ca59 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php @@ -22,6 +22,9 @@ final class DateIntervalUnit public const YEAR = 'YEAR'; + /** + * @codeCoverageIgnore + */ private function __construct() { } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DrizzlePlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DrizzlePlatform.php index 60aef82c..199a14a2 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DrizzlePlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DrizzlePlatform.php @@ -8,6 +8,7 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\Types\BinaryType; use InvalidArgumentException; + use function array_merge; use function array_unique; use function array_values; @@ -71,7 +72,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'BOOLEAN'; } @@ -79,18 +80,18 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { $autoinc = ''; - if (! empty($columnDef['autoincrement'])) { + if (! empty($column['autoincrement'])) { $autoinc = ' AUTO_INCREMENT'; } @@ -100,17 +101,17 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** @@ -154,7 +155,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'TEXT'; } @@ -162,7 +163,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'BLOB'; } @@ -186,7 +187,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $queryFields = $this->getColumnDeclarationListSQL($columns); @@ -215,7 +216,7 @@ class DrizzlePlatform extends AbstractPlatform $query .= 'TEMPORARY '; } - $query .= 'TABLE ' . $tableName . ' (' . $queryFields . ') '; + $query .= 'TABLE ' . $name . ' (' . $queryFields . ') '; $query .= $this->buildTableOptions($options); $query .= $this->buildPartitionOptions($options); @@ -223,7 +224,7 @@ class DrizzlePlatform extends AbstractPlatform if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $tableName); + $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } @@ -328,8 +329,8 @@ class DrizzlePlatform extends AbstractPlatform $databaseSQL = 'DATABASE()'; } - return 'SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT, IS_NULLABLE, IS_AUTO_INCREMENT, CHARACTER_MAXIMUM_LENGTH, COLUMN_DEFAULT,' . - ' NUMERIC_PRECISION, NUMERIC_SCALE, COLLATION_NAME' . + return 'SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT, IS_NULLABLE, IS_AUTO_INCREMENT,' . + ' CHARACTER_MAXIMUM_LENGTH, COLUMN_DEFAULT, NUMERIC_PRECISION, NUMERIC_SCALE, COLLATION_NAME' . ' FROM DATA_DICTIONARY.COLUMNS' . ' WHERE TABLE_SCHEMA=' . $databaseSQL . ' AND TABLE_NAME = ' . $this->quoteStringLiteral($table); } @@ -348,9 +349,11 @@ class DrizzlePlatform extends AbstractPlatform $databaseSQL = 'DATABASE()'; } - return 'SELECT CONSTRAINT_NAME, CONSTRAINT_COLUMNS, REFERENCED_TABLE_NAME, REFERENCED_TABLE_COLUMNS, UPDATE_RULE, DELETE_RULE' . - ' FROM DATA_DICTIONARY.FOREIGN_KEYS' . - ' WHERE CONSTRAINT_SCHEMA=' . $databaseSQL . ' AND CONSTRAINT_TABLE=' . $this->quoteStringLiteral($table); + return 'SELECT CONSTRAINT_NAME, CONSTRAINT_COLUMNS, REFERENCED_TABLE_NAME, REFERENCED_TABLE_COLUMNS,' + . ' UPDATE_RULE, DELETE_RULE' + . ' FROM DATA_DICTIONARY.FOREIGN_KEYS' + . ' WHERE CONSTRAINT_SCHEMA=' . $databaseSQL + . ' AND CONSTRAINT_TABLE=' . $this->quoteStringLiteral($table); } /** @@ -364,9 +367,12 @@ class DrizzlePlatform extends AbstractPlatform $databaseSQL = 'DATABASE()'; } - return "SELECT INDEX_NAME AS 'key_name', COLUMN_NAME AS 'column_name', IS_USED_IN_PRIMARY AS 'primary', IS_UNIQUE=0 AS 'non_unique'" . - ' FROM DATA_DICTIONARY.INDEX_PARTS' . - ' WHERE TABLE_SCHEMA=' . $databaseSQL . ' AND TABLE_NAME=' . $this->quoteStringLiteral($table); + return "SELECT INDEX_NAME AS 'key_name'," + . " COLUMN_NAME AS 'column_name'," + . " IS_USED_IN_PRIMARY AS 'primary'," + . " IS_UNIQUE=0 AS 'non_unique'" + . ' FROM DATA_DICTIONARY.INDEX_PARTS' + . ' WHERE TABLE_SCHEMA=' . $databaseSQL . ' AND TABLE_NAME=' . $this->quoteStringLiteral($table); } /** @@ -419,13 +425,17 @@ class DrizzlePlatform extends AbstractPlatform } elseif (is_string($index)) { $indexName = $index; } else { - throw new InvalidArgumentException('DrizzlePlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.' + ); } if ($table instanceof Table) { $table = $table->getQuotedName($this); } elseif (! is_string($table)) { - throw new InvalidArgumentException('DrizzlePlatform::getDropIndexSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.' + ); } if ($index instanceof Index && $index->isPrimary()) { @@ -450,9 +460,9 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { - if (isset($fieldDeclaration['version']) && $fieldDeclaration['version'] === true) { + if (isset($column['version']) && $column['version'] === true) { return 'TIMESTAMP'; } @@ -462,7 +472,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME'; } @@ -470,7 +480,7 @@ class DrizzlePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -494,9 +504,11 @@ class DrizzlePlatform extends AbstractPlatform continue; } - $columnArray = $column->toArray(); - $columnArray['comment'] = $this->getColumnComment($column); - $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray); + $columnArray = array_merge($column->toArray(), [ + 'comment' => $this->getColumnComment($column), + ]); + + $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray); } foreach ($diff->removedColumns as $column) { @@ -518,7 +530,8 @@ class DrizzlePlatform extends AbstractPlatform // Do not generate column alteration clause if type is binary and only fixed property has changed. // Drizzle only supports binary type columns with variable length. // Avoids unnecessary table alteration statements. - if ($columnArray['type'] instanceof BinaryType && + if ( + $columnArray['type'] instanceof BinaryType && $columnDiff->hasChanged('fixed') && count($columnDiff->changedProperties) === 1 ) { @@ -548,8 +561,10 @@ class DrizzlePlatform extends AbstractPlatform if (! $this->onSchemaAlterTable($diff, $tableSql)) { if (count($queryParts) > 0) { - $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . implode(', ', $queryParts); + $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) + . ' ' . implode(', ', $queryParts); } + $sql = array_merge( $this->getPreAlterTableIndexForeignKeySQL($diff), $sql, @@ -568,7 +583,9 @@ class DrizzlePlatform extends AbstractPlatform if ($table instanceof Table) { $table = $table->getQuotedName($this); } elseif (! is_string($table)) { - throw new InvalidArgumentException('getDropTableSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.' + ); } return 'DROP TEMPORARY TABLE ' . $table; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php index 1b31c768..8cb2befe 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php @@ -9,10 +9,7 @@ namespace Doctrine\DBAL\Platforms\Keywords; */ final class MariaDb102Keywords extends MySQLKeywords { - /** - * {@inheritdoc} - */ - public function getName() : string + public function getName(): string { return 'MariaDb102'; } @@ -20,7 +17,7 @@ final class MariaDb102Keywords extends MySQLKeywords /** * {@inheritdoc} */ - protected function getKeywords() : array + protected function getKeywords(): array { return [ 'ACCESSIBLE', diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/PostgreSQL100Keywords.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/PostgreSQL100Keywords.php index 3402db19..dad68ead 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/PostgreSQL100Keywords.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/PostgreSQL100Keywords.php @@ -9,10 +9,7 @@ namespace Doctrine\DBAL\Platforms\Keywords; */ class PostgreSQL100Keywords extends PostgreSQL94Keywords { - /** - * {@inheritdoc} - */ - public function getName() : string + public function getName(): string { return 'PostgreSQL100'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php index 68cdf3d1..c9053125 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Sequence; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Visitor\Visitor; + use function implode; use function str_replace; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php index 6c57082c..32a7c065 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php @@ -16,23 +16,17 @@ final class MariaDb1027Platform extends MySqlPlatform * * @link https://mariadb.com/kb/en/library/json-data-type/ */ - public function getJsonTypeDeclarationSQL(array $field) : string + public function getJsonTypeDeclarationSQL(array $column): string { return 'LONGTEXT'; } - /** - * {@inheritdoc} - */ - protected function getReservedKeywordsClass() : string + protected function getReservedKeywordsClass(): string { return Keywords\MariaDb102Keywords::class; } - /** - * {@inheritdoc} - */ - protected function initializeDoctrineTypeMappings() : void + protected function initializeDoctrineTypeMappings(): void { parent::initializeDoctrineTypeMappings(); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php index 1db7d668..5ef44b2e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php @@ -22,7 +22,7 @@ class MySQL57Platform extends MySqlPlatform /** * {@inheritdoc} */ - public function getJsonTypeDeclarationSQL(array $field) + public function getJsonTypeDeclarationSQL(array $column) { return 'JSON'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php index 409f6eef..8d338c84 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php @@ -11,6 +11,7 @@ use Doctrine\DBAL\TransactionIsolationLevel; use Doctrine\DBAL\Types\BlobType; use Doctrine\DBAL\Types\TextType; use InvalidArgumentException; + use function array_diff_key; use function array_merge; use function array_unique; @@ -148,16 +149,16 @@ class MySqlPlatform extends AbstractPlatform * Two approaches to listing the table indexes. The information_schema is * preferred, because it doesn't cause problems with SQL keywords such as "order" or "table". */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { - if ($currentDatabase) { - $currentDatabase = $this->quoteStringLiteral($currentDatabase); - $table = $this->quoteStringLiteral($table); + if ($database) { + $database = $this->quoteStringLiteral($database); + $table = $this->quoteStringLiteral($table); return 'SELECT NON_UNIQUE AS Non_Unique, INDEX_NAME AS Key_name, COLUMN_NAME AS Column_Name,' . ' SUB_PART AS Sub_Part, INDEX_TYPE AS Index_Type' . ' FROM information_schema.STATISTICS WHERE TABLE_NAME = ' . $table . - ' AND TABLE_SCHEMA = ' . $currentDatabase . + ' AND TABLE_SCHEMA = ' . $database . ' ORDER BY SEQ_IN_INDEX ASC'; } @@ -197,10 +198,9 @@ class MySqlPlatform extends AbstractPlatform $databaseNameSql = $database ?? 'DATABASE()'; - $sql .= ' AND k.table_schema = ' . $databaseNameSql . ' /*!50116 AND c.constraint_schema = ' . $databaseNameSql . ' */'; - $sql .= ' AND k.`REFERENCED_COLUMN_NAME` is not NULL'; - - return $sql; + return $sql . ' AND k.table_schema = ' . $databaseNameSql + . ' /*!50116 AND c.constraint_schema = ' . $databaseNameSql . ' */' + . ' AND k.`REFERENCED_COLUMN_NAME` is not NULL'; } /** @@ -245,10 +245,10 @@ class MySqlPlatform extends AbstractPlatform * * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { - if (! empty($field['length']) && is_numeric($field['length'])) { - $length = $field['length']; + if (! empty($column['length']) && is_numeric($column['length'])) { + $length = $column['length']; if ($length <= static::LENGTH_LIMIT_TINYTEXT) { return 'TINYTEXT'; @@ -269,9 +269,9 @@ class MySqlPlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { - if (isset($fieldDeclaration['version']) && $fieldDeclaration['version'] === true) { + if (isset($column['version']) && $column['version'] === true) { return 'TIMESTAMP'; } @@ -281,7 +281,7 @@ class MySqlPlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -289,7 +289,7 @@ class MySqlPlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME'; } @@ -297,21 +297,21 @@ class MySqlPlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'TINYINT(1)'; } /** * Obtain DBMS specific SQL code portion needed to set the COLLATION - * of a field declaration to be used in statements like CREATE TABLE. + * of a column declaration to be used in statements like CREATE TABLE. * * @deprecated Deprecated since version 2.5, Use {@link self::getColumnCollationDeclarationSQL()} instead. * * @param string $collation name of the collation * * @return string DBMS specific SQL code portion needed to set the COLLATION - * of a field declaration. + * of a column declaration. */ public function getCollationFieldDeclaration($collation) { @@ -383,7 +383,7 @@ class MySqlPlatform extends AbstractPlatform ' ORDER BY ORDINAL_POSITION ASC'; } - public function getListTableMetadataSQL(string $table, ?string $database = null) : string + public function getListTableMetadataSQL(string $table, ?string $database = null): string { return sprintf( <<<'SQL' @@ -416,7 +416,7 @@ SQL /** * {@inheritDoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $queryFields = $this->getColumnDeclarationListSQL($columns); @@ -445,7 +445,7 @@ SQL $query .= 'TEMPORARY '; } - $query .= 'TABLE ' . $tableName . ' (' . $queryFields . ') '; + $query .= 'TABLE ' . $name . ' (' . $queryFields . ') '; $query .= $this->buildTableOptions($options); $query .= $this->buildPartitionOptions($options); @@ -459,7 +459,7 @@ SQL // Propagate foreign key constraints only for InnoDB. if (isset($options['foreignKeys']) && $engine === 'INNODB') { foreach ((array) $options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $tableName); + $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } @@ -469,14 +469,14 @@ SQL /** * {@inheritdoc} */ - public function getDefaultValueDeclarationSQL($field) + public function getDefaultValueDeclarationSQL($column) { - // Unset the default value if the given field definition does not allow default values. - if ($field['type'] instanceof TextType || $field['type'] instanceof BlobType) { - $field['default'] = null; + // Unset the default value if the given column definition does not allow default values. + if ($column['type'] instanceof TextType || $column['type'] instanceof BlobType) { + $column['default'] = null; } - return parent::getDefaultValueDeclarationSQL($field); + return parent::getDefaultValueDeclarationSQL($column); } /** @@ -565,9 +565,11 @@ SQL continue; } - $columnArray = $column->toArray(); - $columnArray['comment'] = $this->getColumnComment($column); - $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray); + $columnArray = array_merge($column->toArray(), [ + 'comment' => $this->getColumnComment($column), + ]); + + $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnArray); } foreach ($diff->removedColumns as $column) { @@ -587,7 +589,8 @@ SQL $columnArray = $column->toArray(); // Don't propagate default value changes for unsupported column types. - if ($columnDiff->hasChanged('default') && + if ( + $columnDiff->hasChanged('default') && count($columnDiff->changedProperties) === 1 && ($columnArray['type'] instanceof TextType || $columnArray['type'] instanceof BlobType) ) { @@ -633,8 +636,10 @@ SQL if (! $this->onSchemaAlterTable($diff, $tableSql)) { if (count($queryParts) > 0) { - $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . implode(', ', $queryParts); + $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' + . implode(', ', $queryParts); } + $sql = array_merge( $this->getPreAlterTableIndexForeignKeySQL($diff), $sql, @@ -661,25 +666,27 @@ SQL $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $remIndex)); foreach ($diff->addedIndexes as $addKey => $addIndex) { - if ($remIndex->getColumns() === $addIndex->getColumns()) { - $indexClause = 'INDEX ' . $addIndex->getName(); - - if ($addIndex->isPrimary()) { - $indexClause = 'PRIMARY KEY'; - } elseif ($addIndex->isUnique()) { - $indexClause = 'UNIQUE INDEX ' . $addIndex->getName(); - } - - $query = 'ALTER TABLE ' . $table . ' DROP INDEX ' . $remIndex->getName() . ', '; - $query .= 'ADD ' . $indexClause; - $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addIndex) . ')'; - - $sql[] = $query; - - unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]); - - break; + if ($remIndex->getColumns() !== $addIndex->getColumns()) { + continue; } + + $indexClause = 'INDEX ' . $addIndex->getName(); + + if ($addIndex->isPrimary()) { + $indexClause = 'PRIMARY KEY'; + } elseif ($addIndex->isUnique()) { + $indexClause = 'UNIQUE INDEX ' . $addIndex->getName(); + } + + $query = 'ALTER TABLE ' . $table . ' DROP INDEX ' . $remIndex->getName() . ', '; + $query .= 'ADD ' . $indexClause; + $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addIndex) . ')'; + + $sql[] = $query; + + unset($diff->removedIndexes[$remKey], $diff->addedIndexes[$addKey]); + + break; } } @@ -898,41 +905,41 @@ SQL /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritdoc} */ - public function getFloatDeclarationSQL(array $field) + public function getFloatDeclarationSQL(array $column) { - return 'DOUBLE PRECISION' . $this->getUnsignedDeclaration($field); + return 'DOUBLE PRECISION' . $this->getUnsignedDeclaration($column); } /** * {@inheritdoc} */ - public function getDecimalTypeDeclarationSQL(array $columnDef) + public function getDecimalTypeDeclarationSQL(array $column) { - return parent::getDecimalTypeDeclarationSQL($columnDef) . $this->getUnsignedDeclaration($columnDef); + return parent::getDecimalTypeDeclarationSQL($column) . $this->getUnsignedDeclaration($column); } /** @@ -950,14 +957,14 @@ SQL /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { $autoinc = ''; - if (! empty($columnDef['autoincrement'])) { + if (! empty($column['autoincrement'])) { $autoinc = ' AUTO_INCREMENT'; } - return $this->getUnsignedDeclaration($columnDef) . $autoinc; + return $this->getUnsignedDeclaration($column) . $autoinc; } /** @@ -985,6 +992,7 @@ SQL if ($foreignKey->hasOption('match')) { $query .= ' MATCH ' . $foreignKey->getOption('match'); } + $query .= parent::getAdvancedForeignKeyOptionsSQL($foreignKey); return $query; @@ -1000,13 +1008,17 @@ SQL } elseif (is_string($index)) { $indexName = $index; } else { - throw new InvalidArgumentException('MysqlPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.' + ); } if ($table instanceof Table) { $table = $table->getQuotedName($this); } elseif (! is_string($table)) { - throw new InvalidArgumentException('MysqlPlatform::getDropIndexSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.' + ); } if ($index instanceof Index && $index->isPrimary()) { @@ -1126,7 +1138,9 @@ SQL if ($table instanceof Table) { $table = $table->getQuotedName($this); } elseif (! is_string($table)) { - throw new InvalidArgumentException('getDropTemporaryTableSQL() expects $table parameter to be string or \Doctrine\DBAL\Schema\Table.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.' + ); } return 'DROP TEMPORARY TABLE ' . $table; @@ -1141,10 +1155,10 @@ SQL * * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { - if (! empty($field['length']) && is_numeric($field['length'])) { - $length = $field['length']; + if (! empty($column['length']) && is_numeric($column['length'])) { + $length = $column['length']; if ($length <= static::LENGTH_LIMIT_TINYBLOB) { return 'TINYBLOB'; @@ -1180,10 +1194,7 @@ SQL return TransactionIsolationLevel::REPEATABLE_READ; } - /** - * {@inheritdoc} - */ - public function supportsColumnLengthIndexes() : bool + public function supportsColumnLengthIndexes(): bool { return true; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/OraclePlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/OraclePlatform.php index a4bf28c9..2a0ceb9e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/OraclePlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/OraclePlatform.php @@ -12,6 +12,7 @@ use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\TransactionIsolationLevel; use Doctrine\DBAL\Types\BinaryType; use InvalidArgumentException; + use function array_merge; use function count; use function explode; @@ -51,13 +52,13 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getSubstringExpression($value, $position, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length !== null) { - return sprintf('SUBSTR(%s, %d, %d)', $value, $position, $length); + return sprintf('SUBSTR(%s, %d, %d)', $string, $start, $length); } - return sprintf('SUBSTR(%s, %d)', $value, $position); + return sprintf('SUBSTR(%s, %d)', $string, $start); } /** @@ -221,9 +222,9 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getSequenceNextValSQL($sequenceName) + public function getSequenceNextValSQL($sequence) { - return 'SELECT ' . $sequenceName . '.nextval FROM DUAL'; + return 'SELECT ' . $sequence . '.nextval FROM DUAL'; } /** @@ -242,11 +243,14 @@ class OraclePlatform extends AbstractPlatform switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return 'READ UNCOMMITTED'; + case TransactionIsolationLevel::READ_COMMITTED: return 'READ COMMITTED'; + case TransactionIsolationLevel::REPEATABLE_READ: case TransactionIsolationLevel::SERIALIZABLE: return 'SERIALIZABLE'; + default: return parent::_getTransactionIsolationLevelSQL($level); } @@ -255,7 +259,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'NUMBER(1)'; } @@ -263,7 +267,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { return 'NUMBER(10)'; } @@ -271,7 +275,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { return 'NUMBER(20)'; } @@ -279,7 +283,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { return 'NUMBER(5)'; } @@ -287,7 +291,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { return 'TIMESTAMP(0)'; } @@ -295,7 +299,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTzTypeDeclarationSQL(array $column) { return 'TIMESTAMP(0) WITH TIME ZONE'; } @@ -303,7 +307,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -311,7 +315,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -319,7 +323,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { return ''; } @@ -352,7 +356,7 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'CLOB'; } @@ -380,28 +384,30 @@ class OraclePlatform extends AbstractPlatform /** * {@inheritDoc} */ - protected function _getCreateTableSQL($table, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $indexes = $options['indexes'] ?? []; $options['indexes'] = []; - $sql = parent::_getCreateTableSQL($table, $columns, $options); + $sql = parent::_getCreateTableSQL($name, $columns, $options); - foreach ($columns as $name => $column) { + foreach ($columns as $columnName => $column) { if (isset($column['sequence'])) { $sql[] = $this->getCreateSequenceSQL($column['sequence']); } - if (! isset($column['autoincrement']) || ! $column['autoincrement'] && - (! isset($column['autoinc']) || ! $column['autoinc'])) { + if ( + ! isset($column['autoincrement']) || ! $column['autoincrement'] && + (! isset($column['autoinc']) || ! $column['autoinc']) + ) { continue; } - $sql = array_merge($sql, $this->getCreateAutoincrementSql($name, $table)); + $sql = array_merge($sql, $this->getCreateAutoincrementSql($columnName, $name)); } if (isset($indexes) && ! empty($indexes)) { foreach ($indexes as $index) { - $sql[] = $this->getCreateIndexSQL($index, $table); + $sql[] = $this->getCreateIndexSQL($index, $name); } } @@ -413,7 +419,7 @@ class OraclePlatform extends AbstractPlatform * * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { $table = $this->normalizeIdentifier($table); $table = $this->quoteStringLiteral($table->getName()); @@ -502,14 +508,15 @@ class OraclePlatform extends AbstractPlatform $idx = new Index($autoincrementIdentifierName, [$quotedName], true, true); - $sql[] = 'DECLARE + $sql[] = "DECLARE constraints_Count NUMBER; BEGIN - SELECT COUNT(CONSTRAINT_NAME) INTO constraints_Count FROM USER_CONSTRAINTS WHERE TABLE_NAME = \'' . $unquotedTableName . '\' AND CONSTRAINT_TYPE = \'P\'; - IF constraints_Count = 0 OR constraints_Count = \'\' THEN - EXECUTE IMMEDIATE \'' . $this->getCreateConstraintSQL($idx, $quotedTableName) . '\'; + SELECT COUNT(CONSTRAINT_NAME) INTO constraints_Count FROM USER_CONSTRAINTS WHERE TABLE_NAME = '" . $unquotedTableName + . "' AND CONSTRAINT_TYPE = 'P'; + IF constraints_Count = 0 OR constraints_Count = '' THEN + EXECUTE IMMEDIATE '" . $this->getCreateConstraintSQL($idx, $quotedTableName) . "'; END IF; -END;'; +END;"; $sequenceName = $this->getIdentitySequenceName( $tableIdentifier->isQuoted() ? $quotedTableName : $unquotedTableName, @@ -583,6 +590,22 @@ END;'; return $identifier->isQuoted() ? $identifier : new Identifier(strtoupper($name)); } + /** + * Adds suffix to identifier, + * + * if the new string exceeds max identifier length, + * keeps $suffix, cuts from $identifier as much as the part exceeding. + */ + private function addSuffix(string $identifier, string $suffix): string + { + $maxPossibleLengthWithoutSuffix = $this->getMaxIdentifierLength() - strlen($suffix); + if (strlen($identifier) > $maxPossibleLengthWithoutSuffix) { + $identifier = substr($identifier, 0, $maxPossibleLengthWithoutSuffix); + } + + return $identifier . $suffix; + } + /** * Returns the autoincrement primary key identifier name for the given table identifier. * @@ -595,7 +618,7 @@ END;'; */ private function getAutoincrementIdentifierName(Identifier $table) { - $identifierName = $table->getName() . '_AI_PK'; + $identifierName = $this->addSuffix($table->getName(), '_AI_PK'); return $table->isQuoted() ? $this->quoteSingleIdentifier($identifierName) @@ -797,7 +820,8 @@ SQL } if (count($fields)) { - $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ADD (' . implode(', ', $fields) . ')'; + $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) + . ' ADD (' . implode(', ', $fields) . ')'; } $fields = []; @@ -811,7 +835,8 @@ SQL // Do not generate column alteration clause if type is binary and only fixed property has changed. // Oracle only supports binary type columns with variable length. // Avoids unnecessary table alteration statements. - if ($column->getType() instanceof BinaryType && + if ( + $column->getType() instanceof BinaryType && $columnDiff->hasChanged('fixed') && count($columnDiff->changedProperties) === 1 ) { @@ -845,7 +870,8 @@ SQL } if (count($fields)) { - $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' MODIFY (' . implode(', ', $fields) . ')'; + $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) + . ' MODIFY (' . implode(', ', $fields) . ')'; } foreach ($diff->renamedColumns as $oldColumnName => $column) { @@ -869,7 +895,8 @@ SQL } if (count($fields)) { - $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' DROP (' . implode(', ', $fields) . ')'; + $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) + . ' DROP (' . implode(', ', $fields) . ')'; } $tableSql = []; @@ -900,26 +927,26 @@ SQL /** * {@inheritdoc} */ - public function getColumnDeclarationSQL($name, array $field) + public function getColumnDeclarationSQL($name, array $column) { - if (isset($field['columnDefinition'])) { - $columnDef = $this->getCustomTypeDeclarationSQL($field); + if (isset($column['columnDefinition'])) { + $columnDef = $this->getCustomTypeDeclarationSQL($column); } else { - $default = $this->getDefaultValueDeclarationSQL($field); + $default = $this->getDefaultValueDeclarationSQL($column); $notnull = ''; - if (isset($field['notnull'])) { - $notnull = $field['notnull'] ? ' NOT NULL' : ' NULL'; + if (isset($column['notnull'])) { + $notnull = $column['notnull'] ? ' NOT NULL' : ' NULL'; } - $unique = isset($field['unique']) && $field['unique'] ? + $unique = isset($column['unique']) && $column['unique'] ? ' ' . $this->getUniqueFieldDeclarationSQL() : ''; - $check = isset($field['check']) && $field['check'] ? - ' ' . $field['check'] : ''; + $check = isset($column['check']) && $column['check'] ? + ' ' . $column['check'] : ''; - $typeDecl = $field['type']->getSQLDeclaration($field, $this); + $typeDecl = $column['type']->getSQLDeclaration($column, $this); $columnDef = $typeDecl . $default . $notnull . $unique . $check; } @@ -963,7 +990,7 @@ SQL $table = new Identifier($tableName); // No usage of column name to preserve BC compatibility with <2.5 - $identitySequenceName = $table->getName() . '_SEQ'; + $identitySequenceName = $this->addSuffix($table->getName(), '_SEQ'); if ($table->isQuoted()) { $identitySequenceName = '"' . $identitySequenceName . '"'; @@ -1182,19 +1209,21 @@ SQL /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'BLOB'; } - public function getListTableCommentsSQL(string $table, ?string $database = null) : string + public function getListTableCommentsSQL(string $table, ?string $database = null): string { $tableCommentsName = 'user_tab_comments'; $ownerCondition = ''; if ($database !== null && $database !== '/') { $tableCommentsName = 'all_tab_comments'; - $ownerCondition = ' AND owner = ' . $this->quoteStringLiteral($this->normalizeIdentifier($database)->getName()); + $ownerCondition = ' AND owner = ' . $this->quoteStringLiteral( + $this->normalizeIdentifier($database)->getName() + ); } return sprintf( diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL100Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL100Platform.php index cfb079f9..f5610056 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL100Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL100Platform.php @@ -11,15 +11,15 @@ use Doctrine\DBAL\Platforms\Keywords\PostgreSQL100Keywords; */ class PostgreSQL100Platform extends PostgreSQL94Platform { - /** - * {@inheritdoc} - */ - protected function getReservedKeywordsClass() : string + protected function getReservedKeywordsClass(): string { return PostgreSQL100Keywords::class; } - public function getListSequencesSQL($database) : string + /** + * {@inheritDoc} + */ + public function getListSequencesSQL($database): string { return 'SELECT sequence_name AS relname, sequence_schema AS schemaname, diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL91Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL91Platform.php index f5584098..f1e299f7 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL91Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL91Platform.php @@ -41,6 +41,8 @@ class PostgreSQL91Platform extends PostgreSqlPlatform $sql = parent::getListTableColumnsSQL($table, $database); $parts = explode('AS complete_type,', $sql, 2); - return $parts[0] . 'AS complete_type, (SELECT tc.collcollate FROM pg_catalog.pg_collation tc WHERE tc.oid = a.attcollation) AS collation,' . $parts[1]; + return $parts[0] . 'AS complete_type, ' + . '(SELECT tc.collcollate FROM pg_catalog.pg_collation tc WHERE tc.oid = a.attcollation) AS collation,' + . $parts[1]; } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL92Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL92Platform.php index 17030561..e886c938 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL92Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL92Platform.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Platforms; use Doctrine\DBAL\Types\Types; + use function sprintf; /** @@ -13,7 +14,7 @@ class PostgreSQL92Platform extends PostgreSQL91Platform /** * {@inheritdoc} */ - public function getJsonTypeDeclarationSQL(array $field) + public function getJsonTypeDeclarationSQL(array $column) { return 'JSON'; } @@ -21,13 +22,13 @@ class PostgreSQL92Platform extends PostgreSQL91Platform /** * {@inheritdoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { - if (! empty($field['autoincrement'])) { + if (! empty($column['autoincrement'])) { return 'SMALLSERIAL'; } - return parent::getSmallIntTypeDeclarationSQL($field); + return parent::getSmallIntTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL94Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL94Platform.php index fb559dea..c17020f7 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL94Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSQL94Platform.php @@ -12,9 +12,9 @@ class PostgreSQL94Platform extends PostgreSQL92Platform /** * {@inheritdoc} */ - public function getJsonTypeDeclarationSQL(array $field) + public function getJsonTypeDeclarationSQL(array $column) { - if (! empty($field['jsonb'])) { + if (! empty($column['jsonb'])) { return 'JSONB'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php index 6237898e..0473d148 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/PostgreSqlPlatform.php @@ -15,6 +15,7 @@ use Doctrine\DBAL\Types\BlobType; use Doctrine\DBAL\Types\IntegerType; use Doctrine\DBAL\Types\Type; use UnexpectedValueException; + use function array_diff; use function array_merge; use function array_unique; @@ -80,13 +81,13 @@ class PostgreSqlPlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getSubstringExpression($value, $from, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { - return 'SUBSTRING(' . $value . ' FROM ' . $from . ')'; + return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; } - return 'SUBSTRING(' . $value . ' FROM ' . $from . ' FOR ' . $length . ')'; + return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; } /** @@ -113,7 +114,8 @@ class PostgreSqlPlatform extends AbstractPlatform if ($startPos !== false) { $str = $this->getSubstringExpression($str, $startPos); - return 'CASE WHEN (POSITION(' . $substr . ' IN ' . $str . ') = 0) THEN 0 ELSE (POSITION(' . $substr . ' IN ' . $str . ') + ' . ($startPos-1) . ') END'; + return 'CASE WHEN (POSITION(' . $substr . ' IN ' . $str . ') = 0) THEN 0' + . ' ELSE (POSITION(' . $substr . ' IN ' . $str . ') + ' . ($startPos - 1) . ') END'; } return 'POSITION(' . $substr . ' IN ' . $str . ')'; @@ -345,7 +347,7 @@ SQL * * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { return 'SELECT quote_ident(relname) as relname, pg_index.indisunique, pg_index.indisprimary, pg_index.indkey, pg_index.indrelid, @@ -354,7 +356,8 @@ SQL WHERE oid IN ( SELECT indexrelid FROM pg_index si, pg_class sc, pg_namespace sn - WHERE ' . $this->getTableWhereClause($table, 'sc', 'sn') . ' AND sc.oid=si.indrelid AND sc.relnamespace = sn.oid + WHERE ' . $this->getTableWhereClause($table, 'sc', 'sn') . ' + AND sc.oid=si.indrelid AND sc.relnamespace = sn.oid ) AND pg_index.indexrelid = oid'; } @@ -480,7 +483,8 @@ SQL $query .= ' NOT DEFERRABLE'; } - if (($foreignKey->hasOption('feferred') && $foreignKey->getOption('feferred') !== false) + if ( + ($foreignKey->hasOption('feferred') && $foreignKey->getOption('feferred') !== false) || ($foreignKey->hasOption('deferred') && $foreignKey->getOption('deferred') !== false) ) { $query .= ' INITIALLY DEFERRED'; @@ -531,7 +535,6 @@ SQL } foreach ($diff->changedColumns as $columnDiff) { - /** @var $columnDiff \Doctrine\DBAL\Schema\ColumnDiff */ if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { continue; } @@ -543,7 +546,12 @@ SQL $oldColumnName = $columnDiff->getOldColumnName()->getQuotedName($this); $column = $columnDiff->column; - if ($columnDiff->hasChanged('type') || $columnDiff->hasChanged('precision') || $columnDiff->hasChanged('scale') || $columnDiff->hasChanged('fixed')) { + if ( + $columnDiff->hasChanged('type') + || $columnDiff->hasChanged('precision') + || $columnDiff->hasChanged('scale') + || $columnDiff->hasChanged('fixed') + ) { $type = $column->getType(); // SERIAL/BIGSERIAL are not "real" types and we can't alter a column to that type @@ -574,7 +582,8 @@ SQL $seqName = $this->getIdentitySequenceName($diff->name, $oldColumnName); $sql[] = 'CREATE SEQUENCE ' . $seqName; - $sql[] = "SELECT setval('" . $seqName . "', (SELECT MAX(" . $oldColumnName . ') FROM ' . $diff->getName($this)->getQuotedName($this) . '))'; + $sql[] = "SELECT setval('" . $seqName . "', (SELECT MAX(" . $oldColumnName . ') FROM ' + . $diff->getName($this)->getQuotedName($this) . '))'; $query = 'ALTER ' . $oldColumnName . " SET DEFAULT nextval('" . $seqName . "')"; $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query; } else { @@ -587,7 +596,10 @@ SQL $newComment = $this->getColumnComment($column); $oldComment = $this->getOldColumnComment($columnDiff); - if ($columnDiff->hasChanged('comment') || ($columnDiff->fromColumn !== null && $oldComment !== $newComment)) { + if ( + $columnDiff->hasChanged('comment') + || ($columnDiff->fromColumn !== null && $oldComment !== $newComment) + ) { $commentsSQL[] = $this->getCommentOnColumnSQL( $diff->getName($this)->getQuotedName($this), $column->getQuotedName($this), @@ -599,7 +611,8 @@ SQL continue; } - $query = 'ALTER ' . $oldColumnName . ' TYPE ' . $column->getType()->getSQLDeclaration($column->toArray(), $this); + $query = 'ALTER ' . $oldColumnName . ' TYPE ' + . $column->getType()->getSQLDeclaration($column->toArray(), $this); $sql[] = 'ALTER TABLE ' . $diff->getName($this)->getQuotedName($this) . ' ' . $query; } @@ -643,9 +656,8 @@ SQL * Checks whether a given column diff is a logically unchanged binary type column. * * Used to determine whether a column alteration for a binary type column can be skipped. - * Doctrine's {@link \Doctrine\DBAL\Types\BinaryType} and {@link \Doctrine\DBAL\Types\BlobType} - * are mapped to the same database column type on this platform as this platform - * does not have a native VARBINARY/BINARY column type. Therefore the {@link \Doctrine\DBAL\Schema\Comparator} + * Doctrine's {@link BinaryType} and {@link BlobType} are mapped to the same database column type on this platform + * as this platform does not have a native VARBINARY/BINARY column type. Therefore the comparator * might detect differences for binary type columns which do not have to be propagated * to database as there actually is no difference at database level. * @@ -777,7 +789,7 @@ SQL /** * {@inheritDoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $queryFields = $this->getColumnDeclarationListSQL($columns); @@ -786,19 +798,19 @@ SQL $queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')'; } - $query = 'CREATE TABLE ' . $tableName . ' (' . $queryFields . ')'; + $query = 'CREATE TABLE ' . $name . ' (' . $queryFields . ')'; $sql = [$query]; if (isset($options['indexes']) && ! empty($options['indexes'])) { foreach ($options['indexes'] as $index) { - $sql[] = $this->getCreateIndexSQL($index, $tableName); + $sql[] = $this->getCreateIndexSQL($index, $name); } } if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $tableName); + $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } @@ -927,9 +939,9 @@ SQL /** * {@inheritDoc} */ - public function getSequenceNextValSQL($sequenceName) + public function getSequenceNextValSQL($sequence) { - return "SELECT NEXTVAL('" . $sequenceName . "')"; + return "SELECT NEXTVAL('" . $sequence . "')"; } /** @@ -944,7 +956,7 @@ SQL /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'BOOLEAN'; } @@ -952,9 +964,9 @@ SQL /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { - if (! empty($field['autoincrement'])) { + if (! empty($column['autoincrement'])) { return 'SERIAL'; } @@ -964,9 +976,9 @@ SQL /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { - if (! empty($field['autoincrement'])) { + if (! empty($column['autoincrement'])) { return 'BIGSERIAL'; } @@ -976,7 +988,7 @@ SQL /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { return 'SMALLINT'; } @@ -984,7 +996,7 @@ SQL /** * {@inheritDoc} */ - public function getGuidTypeDeclarationSQL(array $field) + public function getGuidTypeDeclarationSQL(array $column) { return 'UUID'; } @@ -992,7 +1004,7 @@ SQL /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { return 'TIMESTAMP(0) WITHOUT TIME ZONE'; } @@ -1000,7 +1012,7 @@ SQL /** * {@inheritDoc} */ - public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTzTypeDeclarationSQL(array $column) { return 'TIMESTAMP(0) WITH TIME ZONE'; } @@ -1008,7 +1020,7 @@ SQL /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -1016,7 +1028,7 @@ SQL /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME(0) WITHOUT TIME ZONE'; } @@ -1034,7 +1046,7 @@ SQL /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { return ''; } @@ -1059,7 +1071,7 @@ SQL /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'TEXT'; } @@ -1204,7 +1216,7 @@ SQL /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'BYTEA'; } @@ -1212,29 +1224,29 @@ SQL /** * {@inheritdoc} */ - public function getDefaultValueDeclarationSQL($field) + public function getDefaultValueDeclarationSQL($column) { - if ($this->isSerialField($field)) { + if ($this->isSerialColumn($column)) { return ''; } - return parent::getDefaultValueDeclarationSQL($field); + return parent::getDefaultValueDeclarationSQL($column); } /** - * @param mixed[] $field + * @param mixed[] $column */ - private function isSerialField(array $field) : bool + private function isSerialColumn(array $column): bool { - return isset($field['type'], $field['autoincrement']) - && $field['autoincrement'] === true - && $this->isNumericType($field['type']); + return isset($column['type'], $column['autoincrement']) + && $column['autoincrement'] === true + && $this->isNumericType($column['type']); } /** * Check whether the type of a column is changed in a way that invalidates the default value for the column */ - private function typeChangeBreaksDefaultValue(ColumnDiff $columnDiff) : bool + private function typeChangeBreaksDefaultValue(ColumnDiff $columnDiff): bool { if (! $columnDiff->fromColumn) { return $columnDiff->hasChanged('type'); @@ -1248,17 +1260,17 @@ SQL && ! ($oldTypeIsNumeric && $newTypeIsNumeric && $columnDiff->column->getAutoincrement()); } - private function isNumericType(Type $type) : bool + private function isNumericType(Type $type): bool { return $type instanceof IntegerType || $type instanceof BigIntType; } - private function getOldColumnComment(ColumnDiff $columnDiff) : ?string + private function getOldColumnComment(ColumnDiff $columnDiff): ?string { return $columnDiff->fromColumn ? $this->getColumnComment($columnDiff->fromColumn) : null; } - public function getListTableMetadataSQL(string $table, ?string $schema = null) : string + public function getListTableMetadataSQL(string $table, ?string $schema = null): string { if ($schema !== null) { $table = $schema . '.' . $table; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywhere12Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywhere12Platform.php index dd73ef73..63563582 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywhere12Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywhere12Platform.php @@ -42,7 +42,7 @@ class SQLAnywhere12Platform extends SQLAnywhere11Platform /** * {@inheritdoc} */ - public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTzTypeDeclarationSQL(array $column) { return 'TIMESTAMP WITH TIME ZONE'; } @@ -70,9 +70,9 @@ class SQLAnywhere12Platform extends SQLAnywhere11Platform /** * {@inheritdoc} */ - public function getSequenceNextValSQL($sequenceName) + public function getSequenceNextValSQL($sequence) { - return 'SELECT ' . $sequenceName . '.NEXTVAL'; + return 'SELECT ' . $sequence . '.NEXTVAL'; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywherePlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywherePlatform.php index 21850d2b..ee6b2865 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywherePlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLAnywherePlatform.php @@ -14,9 +14,11 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\TransactionIsolationLevel; use InvalidArgumentException; + use function array_merge; use function array_unique; use function array_values; +use function assert; use function count; use function explode; use function func_get_args; @@ -296,11 +298,11 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getBigIntTypeDeclarationSQL(array $columnDef) + public function getBigIntTypeDeclarationSQL(array $column) { - $columnDef['integer_type'] = 'BIGINT'; + $column['integer_type'] = 'BIGINT'; - return $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return $this->_getCommonIntegerTypeDeclarationSQL($column); } /** @@ -322,7 +324,7 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'LONG BINARY'; } @@ -335,9 +337,9 @@ class SQLAnywherePlatform extends AbstractPlatform * Otherwise by just omitting the NOT NULL clause, * SQL Anywhere will declare them NOT NULL nonetheless. */ - public function getBooleanTypeDeclarationSQL(array $columnDef) + public function getBooleanTypeDeclarationSQL(array $column) { - $nullClause = isset($columnDef['notnull']) && (bool) $columnDef['notnull'] === false ? ' NULL' : ''; + $nullClause = isset($column['notnull']) && (bool) $column['notnull'] === false ? ' NULL' : ''; return 'BIT' . $nullClause; } @@ -345,7 +347,7 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'TEXT'; } @@ -497,7 +499,7 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { return 'DATETIME'; } @@ -513,7 +515,7 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -547,7 +549,7 @@ class SQLAnywherePlatform extends AbstractPlatform if (! is_string($index)) { throw new InvalidArgumentException( - 'SQLAnywherePlatform::getDropIndexSQL() expects $index parameter to be string or ' . Index::class . '.' + __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.' ); } @@ -561,7 +563,7 @@ class SQLAnywherePlatform extends AbstractPlatform if (! is_string($table)) { throw new InvalidArgumentException( - 'SQLAnywherePlatform::getDropIndexSQL() expects $table parameter to be string or ' . Index::class . '.' + __METHOD__ . '() expects $table parameter to be string or ' . Index::class . '.' ); } @@ -636,6 +638,7 @@ class SQLAnywherePlatform extends AbstractPlatform case self::FOREIGN_KEY_MATCH_FULL_UNIQUE: return 'UNIQUE FULL'; + default: throw new InvalidArgumentException('Invalid foreign key match type: ' . $type); } @@ -675,7 +678,7 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getGuidTypeDeclarationSQL(array $field) + public function getGuidTypeDeclarationSQL(array $column) { return 'UNIQUEIDENTIFIER'; } @@ -692,11 +695,11 @@ class SQLAnywherePlatform extends AbstractPlatform /** * {@inheritdoc} */ - public function getIntegerTypeDeclarationSQL(array $columnDef) + public function getIntegerTypeDeclarationSQL(array $column) { - $columnDef['integer_type'] = 'INT'; + $column['integer_type'] = 'INT'; - return $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return $this->_getCommonIntegerTypeDeclarationSQL($column); } /** @@ -871,7 +874,7 @@ SQL /** * {@inheritdoc} */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { $user = ''; @@ -1036,11 +1039,11 @@ SQL /** * {@inheritdoc} */ - public function getSmallIntTypeDeclarationSQL(array $columnDef) + public function getSmallIntTypeDeclarationSQL(array $column) { - $columnDef['integer_type'] = 'SMALLINT'; + $column['integer_type'] = 'SMALLINT'; - return $this->_getCommonIntegerTypeDeclarationSQL($columnDef); + return $this->_getCommonIntegerTypeDeclarationSQL($column); } /** @@ -1085,13 +1088,13 @@ SQL /** * {@inheritdoc} */ - public function getSubstringExpression($value, $from, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { - return 'SUBSTRING(' . $value . ', ' . $from . ')'; + return 'SUBSTRING(' . $string . ', ' . $start . ')'; } - return 'SUBSTRING(' . $value . ', ' . $from . ', ' . $length . ')'; + return 'SUBSTRING(' . $string . ', ' . $start . ', ' . $length . ')'; } /** @@ -1113,7 +1116,7 @@ SQL /** * {@inheritdoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME'; } @@ -1121,14 +1124,16 @@ SQL /** * {@inheritdoc} */ - public function getTrimExpression($str, $pos = TrimMode::UNSPECIFIED, $char = false) + public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = false) { if (! $char) { - switch ($pos) { + switch ($mode) { case TrimMode::LEADING: return $this->getLtrimExpression($str); + case TrimMode::TRAILING: return $this->getRtrimExpression($str); + default: return 'TRIM(' . $str . ')'; } @@ -1136,14 +1141,17 @@ SQL $pattern = "'%[^' + " . $char . " + ']%'"; - switch ($pos) { + switch ($mode) { case TrimMode::LEADING: return 'SUBSTR(' . $str . ', PATINDEX(' . $pattern . ', ' . $str . '))'; + case TrimMode::TRAILING: return 'REVERSE(SUBSTR(REVERSE(' . $str . '), PATINDEX(' . $pattern . ', REVERSE(' . $str . '))))'; + default: return 'REVERSE(SUBSTR(REVERSE(SUBSTR(' . $str . ', PATINDEX(' . $pattern . ', ' . $str . '))), ' . - 'PATINDEX(' . $pattern . ', REVERSE(SUBSTR(' . $str . ', PATINDEX(' . $pattern . ', ' . $str . '))))))'; + 'PATINDEX(' . $pattern . ', ' . + 'REVERSE(SUBSTR(' . $str . ', PATINDEX(' . $pattern . ', ' . $str . '))))))'; } } @@ -1229,18 +1237,18 @@ SQL /** * {@inheritdoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { - $unsigned = ! empty($columnDef['unsigned']) ? 'UNSIGNED ' : ''; - $autoincrement = ! empty($columnDef['autoincrement']) ? ' IDENTITY' : ''; + $unsigned = ! empty($column['unsigned']) ? 'UNSIGNED ' : ''; + $autoincrement = ! empty($column['autoincrement']) ? ' IDENTITY' : ''; - return $unsigned . $columnDef['integer_type'] . $autoincrement; + return $unsigned . $column['integer_type'] . $autoincrement; } /** * {@inheritdoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $columnListSql = $this->getColumnDeclarationListSQL($columns); $indexSql = []; @@ -1252,9 +1260,9 @@ SQL } if (! empty($options['indexes'])) { - /** @var Index $index */ foreach ((array) $options['indexes'] as $index) { - $indexSql[] = $this->getCreateIndexSQL($index, $tableName); + assert($index instanceof Index); + $indexSql[] = $this->getCreateIndexSQL($index, $name); } } @@ -1265,7 +1273,8 @@ SQL $flags = ' CLUSTERED '; } - $columnListSql .= ', PRIMARY KEY' . $flags . ' (' . implode(', ', array_unique(array_values((array) $options['primary']))) . ')'; + $columnListSql .= ', PRIMARY KEY' . $flags + . ' (' . implode(', ', array_unique(array_values((array) $options['primary']))) . ')'; } if (! empty($options['foreignKeys'])) { @@ -1274,7 +1283,7 @@ SQL } } - $query = 'CREATE TABLE ' . $tableName . ' (' . $columnListSql; + $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; $check = $this->getCheckDeclarationSQL($columns); if (! empty($check)) { @@ -1294,12 +1303,16 @@ SQL switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return '0'; + case TransactionIsolationLevel::READ_COMMITTED: return '1'; + case TransactionIsolationLevel::REPEATABLE_READ: return '2'; + case TransactionIsolationLevel::SERIALIZABLE: return '3'; + default: throw new InvalidArgumentException('Invalid isolation level:' . $level); } @@ -1323,7 +1336,7 @@ SQL return $matches[1] . $limitOffsetClause . ' ' . $matches[3]; } - private function getTopClauseSQL(?int $limit, ?int $offset) : string + private function getTopClauseSQL(?int $limit, ?int $offset): string { if ($offset > 0) { return sprintf('TOP %s START AT %d', $limit ?? 'ALL', $offset + 1); @@ -1383,8 +1396,8 @@ SQL if (! $constraint->isPrimary() && ! $constraint->isUnique()) { throw new InvalidArgumentException( - 'Can only create primary, unique or foreign key constraint declarations, no common index declarations ' . - 'with getTableConstraintDeclarationSQL().' + 'Can only create primary, unique or foreign key constraint declarations, no common index declarations' + . ' with getTableConstraintDeclarationSQL().' ); } @@ -1407,7 +1420,8 @@ SQL } if ($constraint->isPrimary()) { - return $sql . 'PRIMARY KEY ' . $flags . '(' . $this->getIndexFieldDeclarationListSQL($constraintColumns) . ')'; + return $sql . 'PRIMARY KEY ' . $flags + . '(' . $this->getIndexFieldDeclarationListSQL($constraintColumns) . ')'; } return $sql . 'UNIQUE ' . $flags . '(' . $this->getIndexFieldDeclarationListSQL($constraintColumns) . ')'; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2005Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2005Platform.php index 1026a934..4b2c11bc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2005Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2005Platform.php @@ -29,7 +29,7 @@ class SQLServer2005Platform extends SQLServerPlatform /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'VARCHAR(MAX)'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2008Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2008Platform.php index c2e36f34..d5275b92 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2008Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2008Platform.php @@ -17,13 +17,14 @@ class SQLServer2008Platform extends SQLServer2005Platform { // "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams // Category 2 must be ignored as it is "MS SQL Server 'pseudo-system' object[s]" for replication - return "SELECT name, SCHEMA_NAME (uid) AS schema_name FROM sysobjects WHERE type = 'U' AND name != 'sysdiagrams' AND category != 2 ORDER BY name"; + return 'SELECT name, SCHEMA_NAME (uid) AS schema_name FROM sysobjects' + . " WHERE type = 'U' AND name != 'sysdiagrams' AND category != 2 ORDER BY name"; } /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { // 3 - microseconds precision length // http://msdn.microsoft.com/en-us/library/ms187819.aspx @@ -33,7 +34,7 @@ class SQLServer2008Platform extends SQLServer2005Platform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -41,7 +42,7 @@ class SQLServer2008Platform extends SQLServer2005Platform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME(0)'; } @@ -49,7 +50,7 @@ class SQLServer2008Platform extends SQLServer2005Platform /** * {@inheritDoc} */ - public function getDateTimeTzTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTzTypeDeclarationSQL(array $column) { return 'DATETIMEOFFSET(6)'; } @@ -110,7 +111,7 @@ class SQLServer2008Platform extends SQLServer2005Platform return Keywords\SQLServer2008Keywords::class; } - protected function getLikeWildcardCharacters() : string + protected function getLikeWildcardCharacters(): string { return parent::getLikeWildcardCharacters() . '[]^'; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2012Platform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2012Platform.php index 009a37d3..337d0f1e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2012Platform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServer2012Platform.php @@ -3,11 +3,13 @@ namespace Doctrine\DBAL\Platforms; use Doctrine\DBAL\Schema\Sequence; -use const PREG_OFFSET_CAPTURE; + use function preg_match; use function preg_match_all; use function substr_count; +use const PREG_OFFSET_CAPTURE; + /** * Platform to ensure compatibility of Doctrine with Microsoft SQL Server 2012 version. * @@ -66,9 +68,9 @@ class SQLServer2012Platform extends SQLServer2008Platform /** * {@inheritdoc} */ - public function getSequenceNextValSQL($sequenceName) + public function getSequenceNextValSQL($sequence) { - return 'SELECT NEXT VALUE FOR ' . $sequenceName; + return 'SELECT NEXT VALUE FOR ' . $sequence; } /** @@ -105,10 +107,11 @@ class SQLServer2012Platform extends SQLServer2008Platform $matchesCount = preg_match_all('/[\\s]+order\\s+by\\s/im', $query, $matches, PREG_OFFSET_CAPTURE); $orderByPos = false; if ($matchesCount > 0) { - $orderByPos = $matches[0][($matchesCount - 1)][1]; + $orderByPos = $matches[0][$matchesCount - 1][1]; } - if ($orderByPos === false + if ( + $orderByPos === false || substr_count($query, '(', $orderByPos) - substr_count($query, ')', $orderByPos) ) { if (preg_match('/^SELECT\s+DISTINCT/im', $query)) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php index 6a7130bd..cf48dc7e 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SQLServerPlatform.php @@ -11,6 +11,7 @@ use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\TableDiff; use InvalidArgumentException; + use function array_merge; use function array_unique; use function array_values; @@ -212,7 +213,9 @@ class SQLServerPlatform extends AbstractPlatform if ($index instanceof Index) { $index = $index->getQuotedName($this); } elseif (! is_string($index)) { - throw new InvalidArgumentException('AbstractPlatform::getDropIndexSQL() expects $index parameter to be string or \Doctrine\DBAL\Schema\Index.'); + throw new InvalidArgumentException( + __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.' + ); } if (! isset($table)) { @@ -242,14 +245,14 @@ SQL /** * {@inheritDoc} */ - protected function _getCreateTableSQL($tableName, array $columns, array $options = []) + protected function _getCreateTableSQL($name, array $columns, array $options = []) { $defaultConstraintsSql = []; $commentsSql = []; $tableComment = $options['comment'] ?? null; if ($tableComment !== null) { - $commentsSql[] = $this->getCommentOnTableSQL($tableName, $tableComment); + $commentsSql[] = $this->getCommentOnTableSQL($name, $tableComment); } // @todo does other code breaks because of this? @@ -261,15 +264,15 @@ SQL // Build default constraints SQL statements. if (isset($column['default'])) { - $defaultConstraintsSql[] = 'ALTER TABLE ' . $tableName . - ' ADD' . $this->getDefaultConstraintDeclarationSQL($tableName, $column); + $defaultConstraintsSql[] = 'ALTER TABLE ' . $name . + ' ADD' . $this->getDefaultConstraintDeclarationSQL($name, $column); } if (empty($column['comment']) && ! is_numeric($column['comment'])) { continue; } - $commentsSql[] = $this->getCreateColumnCommentSQL($tableName, $column['name'], $column['comment']); + $commentsSql[] = $this->getCreateColumnCommentSQL($name, $column['name'], $column['comment']); } $columnListSql = $this->getColumnDeclarationListSQL($columns); @@ -285,28 +288,31 @@ SQL if (isset($options['primary_index']) && $options['primary_index']->hasFlag('nonclustered')) { $flags = ' NONCLUSTERED'; } - $columnListSql .= ', PRIMARY KEY' . $flags . ' (' . implode(', ', array_unique(array_values($options['primary']))) . ')'; + + $columnListSql .= ', PRIMARY KEY' . $flags + . ' (' . implode(', ', array_unique(array_values($options['primary']))) . ')'; } - $query = 'CREATE TABLE ' . $tableName . ' (' . $columnListSql; + $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; $check = $this->getCheckDeclarationSQL($columns); if (! empty($check)) { $query .= ', ' . $check; } + $query .= ')'; $sql = [$query]; if (isset($options['indexes']) && ! empty($options['indexes'])) { foreach ($options['indexes'] as $index) { - $sql[] = $this->getCreateIndexSQL($index, $tableName); + $sql[] = $this->getCreateIndexSQL($index, $name); } } if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $tableName); + $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } @@ -549,10 +555,12 @@ SQL $columnDef = $column->toArray(); - $queryParts[] = 'ALTER COLUMN ' . - $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef); + $queryParts[] = 'ALTER COLUMN ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef); - if (! isset($columnDef['default']) || (! $requireDropDefaultConstraint && ! $columnDiff->hasChanged('default'))) { + if ( + ! isset($columnDef['default']) + || (! $requireDropDefaultConstraint && ! $columnDiff->hasChanged('default')) + ) { continue; } @@ -566,7 +574,7 @@ SQL $oldColumnName = new Identifier($oldColumnName); - $sql[] = "sp_RENAME '" . + $sql[] = "sp_rename '" . $diff->getName($this)->getQuotedName($this) . '.' . $oldColumnName->getQuotedName($this) . "', '" . $column->getQuotedName($this) . "', 'COLUMN'"; @@ -597,7 +605,7 @@ SQL $newName = $diff->getNewName(); if ($newName !== false) { - $sql[] = "sp_RENAME '" . $diff->getName($this)->getQuotedName($this) . "', '" . $newName->getName() . "'"; + $sql[] = "sp_rename '" . $diff->getName($this)->getQuotedName($this) . "', '" . $newName->getName() . "'"; /** * Rename table's default constraints names @@ -776,7 +784,7 @@ SQL protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { return [sprintf( - "EXEC sp_RENAME N'%s.%s', N'%s', N'INDEX'", + "EXEC sp_rename N'%s.%s', N'%s', N'INDEX'", $tableName, $oldIndexName, $index->getQuotedName($this) @@ -960,7 +968,7 @@ SQL /** * {@inheritDoc} */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { return "SELECT idx.name AS key_name, col.name AS column_name, @@ -1060,10 +1068,10 @@ SQL /** * {@inheritDoc} */ - public function getTrimExpression($str, $pos = TrimMode::UNSPECIFIED, $char = false) + public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = false) { if (! $char) { - switch ($pos) { + switch ($mode) { case TrimMode::LEADING: $trimFn = 'LTRIM'; break; @@ -1079,26 +1087,20 @@ SQL return $trimFn . '(' . $str . ')'; } - /** Original query used to get those expressions - declare @c varchar(100) = 'xxxBarxxx', @trim_char char(1) = 'x'; - declare @pat varchar(10) = '%[^' + @trim_char + ']%'; - select @c as string - , @trim_char as trim_char - , stuff(@c, 1, patindex(@pat, @c) - 1, null) as trim_leading - , reverse(stuff(reverse(@c), 1, patindex(@pat, reverse(@c)) - 1, null)) as trim_trailing - , reverse(stuff(reverse(stuff(@c, 1, patindex(@pat, @c) - 1, null)), 1, patindex(@pat, reverse(stuff(@c, 1, patindex(@pat, @c) - 1, null))) - 1, null)) as trim_both; - */ $pattern = "'%[^' + " . $char . " + ']%'"; - if ($pos === TrimMode::LEADING) { + if ($mode === TrimMode::LEADING) { return 'stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null)'; } - if ($pos === TrimMode::TRAILING) { - return 'reverse(stuff(reverse(' . $str . '), 1, patindex(' . $pattern . ', reverse(' . $str . ')) - 1, null))'; + if ($mode === TrimMode::TRAILING) { + return 'reverse(stuff(reverse(' . $str . '), 1, ' + . 'patindex(' . $pattern . ', reverse(' . $str . ')) - 1, null))'; } - return 'reverse(stuff(reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null)), 1, patindex(' . $pattern . ', reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null))) - 1, null))'; + return 'reverse(stuff(reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null)), 1, ' + . 'patindex(' . $pattern . ', reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str + . ') - 1, null))) - 1, null))'; } /** @@ -1130,13 +1132,13 @@ SQL /** * {@inheritDoc} */ - public function getSubstringExpression($value, $from, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length !== null) { - return 'SUBSTRING(' . $value . ', ' . $from . ', ' . $length . ')'; + return 'SUBSTRING(' . $string . ', ' . $start . ', ' . $length . ')'; } - return 'SUBSTRING(' . $value . ', ' . $from . ', LEN(' . $value . ') - ' . $from . ' + 1)'; + return 'SUBSTRING(' . $string . ', ' . $start . ', LEN(' . $string . ') - ' . $start . ' + 1)'; } /** @@ -1158,31 +1160,31 @@ SQL /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getGuidTypeDeclarationSQL(array $field) + public function getGuidTypeDeclarationSQL(array $column) { return 'UNIQUEIDENTIFIER'; } @@ -1192,7 +1194,9 @@ SQL */ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) { - return $fixed ? ($length ? 'NCHAR(' . $length . ')' : 'CHAR(255)') : ($length ? 'NVARCHAR(' . $length . ')' : 'NVARCHAR(255)'); + return $fixed + ? ($length ? 'NCHAR(' . $length . ')' : 'CHAR(255)') + : ($length ? 'NVARCHAR(' . $length . ')' : 'NVARCHAR(255)'); } /** @@ -1214,7 +1218,7 @@ SQL /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'VARCHAR(MAX)'; } @@ -1222,15 +1226,15 @@ SQL /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { - return ! empty($columnDef['autoincrement']) ? ' IDENTITY' : ''; + return ! empty($column['autoincrement']) ? ' IDENTITY' : ''; } /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { return 'DATETIME'; } @@ -1238,7 +1242,7 @@ SQL /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATETIME'; } @@ -1246,7 +1250,7 @@ SQL /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'DATETIME'; } @@ -1254,7 +1258,7 @@ SQL /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'BIT'; } @@ -1604,7 +1608,7 @@ SQL /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'VARBINARY(MAX)'; } @@ -1614,23 +1618,23 @@ SQL * * Modifies column declaration order as it differs in Microsoft SQL Server. */ - public function getColumnDeclarationSQL($name, array $field) + public function getColumnDeclarationSQL($name, array $column) { - if (isset($field['columnDefinition'])) { - $columnDef = $this->getCustomTypeDeclarationSQL($field); + if (isset($column['columnDefinition'])) { + $columnDef = $this->getCustomTypeDeclarationSQL($column); } else { - $collation = isset($field['collation']) && $field['collation'] ? - ' ' . $this->getColumnCollationDeclarationSQL($field['collation']) : ''; + $collation = isset($column['collation']) && $column['collation'] ? + ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; - $notnull = isset($field['notnull']) && $field['notnull'] ? ' NOT NULL' : ''; + $notnull = isset($column['notnull']) && $column['notnull'] ? ' NOT NULL' : ''; - $unique = isset($field['unique']) && $field['unique'] ? + $unique = isset($column['unique']) && $column['unique'] ? ' ' . $this->getUniqueFieldDeclarationSQL() : ''; - $check = isset($field['check']) && $field['check'] ? - ' ' . $field['check'] : ''; + $check = isset($column['check']) && $column['check'] ? + ' ' . $column['check'] : ''; - $typeDecl = $field['type']->getSQLDeclaration($field, $this); + $typeDecl = $column['type']->getSQLDeclaration($column, $this); $columnDef = $typeDecl . $collation . $notnull . $unique . $check; } @@ -1665,12 +1669,12 @@ SQL return strtoupper(dechex(crc32($identifier->getName()))); } - protected function getCommentOnTableSQL(string $tableName, ?string $comment) : string + protected function getCommentOnTableSQL(string $tableName, ?string $comment): string { return sprintf( <<<'SQL' -EXEC sys.sp_addextendedproperty @name=N'MS_Description', - @value=N%s, @level0type=N'SCHEMA', @level0name=N'dbo', +EXEC sys.sp_addextendedproperty @name=N'MS_Description', + @value=N%s, @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N%s SQL , @@ -1679,7 +1683,7 @@ SQL ); } - public function getListTableMetadataSQL(string $table) : string + public function getListTableMetadataSQL(string $table): string { return sprintf( <<<'SQL' diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php index 4eff83e8..1f3a099a 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/SqlitePlatform.php @@ -12,6 +12,7 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\TransactionIsolationLevel; use Doctrine\DBAL\Types; + use function array_merge; use function array_unique; use function array_values; @@ -64,8 +65,10 @@ class SqlitePlatform extends AbstractPlatform switch ($type) { case 'time': return 'time(\'now\')'; + case 'date': return 'date(\'now\')'; + case 'timestamp': default: return 'datetime(\'now\')'; @@ -75,11 +78,11 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTrimExpression($str, $pos = TrimMode::UNSPECIFIED, $char = false) + public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = false) { - $trimChar = $char !== false ? (', ' . $char) : ''; + $trimChar = $char !== false ? ', ' . $char : ''; - switch ($pos) { + switch ($mode) { case TrimMode::LEADING: $trimFn = 'LTRIM'; break; @@ -100,13 +103,13 @@ class SqlitePlatform extends AbstractPlatform * * SQLite only supports the 2 parameter variant of this function */ - public function getSubstringExpression($value, $position, $length = null) + public function getSubstringExpression($string, $start, $length = null) { if ($length !== null) { - return 'SUBSTR(' . $value . ', ' . $position . ', ' . $length . ')'; + return 'SUBSTR(' . $string . ', ' . $start . ', ' . $length . ')'; } - return 'SUBSTR(' . $value . ', ' . $position . ', LENGTH(' . $value . '))'; + return 'SUBSTR(' . $string . ', ' . $start . ', LENGTH(' . $string . '))'; } /** @@ -131,26 +134,25 @@ class SqlitePlatform extends AbstractPlatform case DateIntervalUnit::MINUTE: case DateIntervalUnit::HOUR: return 'DATETIME(' . $date . ",'" . $operator . $interval . ' ' . $unit . "')"; - - default: - switch ($unit) { - case DateIntervalUnit::WEEK: - $interval *= 7; - $unit = DateIntervalUnit::DAY; - break; - - case DateIntervalUnit::QUARTER: - $interval *= 3; - $unit = DateIntervalUnit::MONTH; - break; - } - - if (! is_numeric($interval)) { - $interval = "' || " . $interval . " || '"; - } - - return 'DATE(' . $date . ",'" . $operator . $interval . ' ' . $unit . "')"; } + + switch ($unit) { + case DateIntervalUnit::WEEK: + $interval *= 7; + $unit = DateIntervalUnit::DAY; + break; + + case DateIntervalUnit::QUARTER: + $interval *= 3; + $unit = DateIntervalUnit::MONTH; + break; + } + + if (! is_numeric($interval)) { + $interval = "' || " . $interval . " || '"; + } + + return 'DATE(' . $date . ",'" . $operator . $interval . ' ' . $unit . "')"; } /** @@ -169,10 +171,12 @@ class SqlitePlatform extends AbstractPlatform switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return '0'; + case TransactionIsolationLevel::READ_COMMITTED: case TransactionIsolationLevel::REPEATABLE_READ: case TransactionIsolationLevel::SERIALIZABLE: return '1'; + default: return parent::_getTransactionIsolationLevelSQL($level); } @@ -197,7 +201,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBooleanTypeDeclarationSQL(array $field) + public function getBooleanTypeDeclarationSQL(array $column) { return 'BOOLEAN'; } @@ -205,71 +209,71 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getIntegerTypeDeclarationSQL(array $field) + public function getIntegerTypeDeclarationSQL(array $column) { - return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getBigIntTypeDeclarationSQL(array $field) + public function getBigIntTypeDeclarationSQL(array $column) { - // SQLite autoincrement is implicit for INTEGER PKs, but not for BIGINT fields. - if (! empty($field['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($field); + // SQLite autoincrement is implicit for INTEGER PKs, but not for BIGINT columns + if (! empty($column['autoincrement'])) { + return $this->getIntegerTypeDeclarationSQL($column); } - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** - * @param array $field + * @param array $column * * @return string */ - public function getTinyIntTypeDeclarationSql(array $field) + public function getTinyIntTypeDeclarationSql(array $column) { - // SQLite autoincrement is implicit for INTEGER PKs, but not for TINYINT fields. - if (! empty($field['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($field); + // SQLite autoincrement is implicit for INTEGER PKs, but not for TINYINT columns + if (! empty($column['autoincrement'])) { + return $this->getIntegerTypeDeclarationSQL($column); } - return 'TINYINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'TINYINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getSmallIntTypeDeclarationSQL(array $field) + public function getSmallIntTypeDeclarationSQL(array $column) { - // SQLite autoincrement is implicit for INTEGER PKs, but not for SMALLINT fields. - if (! empty($field['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($field); + // SQLite autoincrement is implicit for INTEGER PKs, but not for SMALLINT columns + if (! empty($column['autoincrement'])) { + return $this->getIntegerTypeDeclarationSQL($column); } - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** - * @param array $field + * @param array $column * * @return string */ - public function getMediumIntTypeDeclarationSql(array $field) + public function getMediumIntTypeDeclarationSql(array $column) { - // SQLite autoincrement is implicit for INTEGER PKs, but not for MEDIUMINT fields. - if (! empty($field['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($field); + // SQLite autoincrement is implicit for INTEGER PKs, but not for MEDIUMINT columns + if (! empty($column['autoincrement'])) { + return $this->getIntegerTypeDeclarationSQL($column); } - return 'MEDIUMINT' . $this->_getCommonIntegerTypeDeclarationSQL($field); + return 'MEDIUMINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); } /** * {@inheritDoc} */ - public function getDateTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTimeTypeDeclarationSQL(array $column) { return 'DATETIME'; } @@ -277,7 +281,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getDateTypeDeclarationSQL(array $fieldDeclaration) + public function getDateTypeDeclarationSQL(array $column) { return 'DATE'; } @@ -285,7 +289,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getTimeTypeDeclarationSQL(array $fieldDeclaration) + public function getTimeTypeDeclarationSQL(array $column) { return 'TIME'; } @@ -293,14 +297,14 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - protected function _getCommonIntegerTypeDeclarationSQL(array $columnDef) + protected function _getCommonIntegerTypeDeclarationSQL(array $column) { // sqlite autoincrement is only possible for the primary key - if (! empty($columnDef['autoincrement'])) { + if (! empty($column['autoincrement'])) { return ' PRIMARY KEY AUTOINCREMENT'; } - return ! empty($columnDef['unsigned']) ? ' UNSIGNED' : ''; + return ! empty($column['unsigned']) ? ' UNSIGNED' : ''; } /** @@ -373,7 +377,7 @@ class SqlitePlatform extends AbstractPlatform * @param mixed[][] $columns * @param mixed[] $options */ - private function getNonAutoincrementPrimaryKeyDefinition(array $columns, array $options) : string + private function getNonAutoincrementPrimaryKeyDefinition(array $columns, array $options): string { if (empty($options['primary'])) { return ''; @@ -426,7 +430,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getClobTypeDeclarationSQL(array $field) + public function getClobTypeDeclarationSQL(array $column) { return 'CLOB'; } @@ -447,7 +451,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getListTableColumnsSQL($table, $currentDatabase = null) + public function getListTableColumnsSQL($table, $database = null) { $table = str_replace('.', '__', $table); @@ -457,7 +461,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getListTableIndexesSQL($table, $currentDatabase = null) + public function getListTableIndexesSQL($table, $database = null) { $table = str_replace('.', '__', $table); @@ -469,9 +473,13 @@ class SqlitePlatform extends AbstractPlatform */ public function getListTablesSQL() { - return "SELECT name FROM sqlite_master WHERE type = 'table' AND name != 'sqlite_sequence' AND name != 'geometry_columns' AND name != 'spatial_ref_sys' " - . 'UNION ALL SELECT name FROM sqlite_temp_master ' - . "WHERE type = 'table' ORDER BY name"; + return 'SELECT name FROM sqlite_master' + . " WHERE type = 'table'" + . " AND name != 'sqlite_sequence'" + . " AND name != 'geometry_columns'" + . " AND name != 'spatial_ref_sys'" + . ' UNION ALL SELECT name FROM sqlite_temp_master' + . " WHERE type = 'table' ORDER BY name"; } /** @@ -505,8 +513,18 @@ class SqlitePlatform extends AbstractPlatform { $query = parent::getAdvancedForeignKeyOptionsSQL($foreignKey); - $query .= ($foreignKey->hasOption('deferrable') && $foreignKey->getOption('deferrable') !== false ? ' ' : ' NOT ') . 'DEFERRABLE'; - $query .= ' INITIALLY ' . ($foreignKey->hasOption('deferred') && $foreignKey->getOption('deferred') !== false ? 'DEFERRED' : 'IMMEDIATE'); + if (! $foreignKey->hasOption('deferrable') || $foreignKey->getOption('deferrable') === false) { + $query .= ' NOT'; + } + + $query .= ' DEFERRABLE'; + $query .= ' INITIALLY'; + + if ($foreignKey->hasOption('deferred') && $foreignKey->getOption('deferred') !== false) { + $query .= ' DEFERRED'; + } else { + $query .= ' IMMEDIATE'; + } return $query; } @@ -619,7 +637,7 @@ class SqlitePlatform extends AbstractPlatform return '--' . str_replace("\n", "\n--", $comment) . "\n"; } - private function getInlineTableCommentSQL(string $comment) : string + private function getInlineTableCommentSQL(string $comment): string { return $this->getInlineColumnCommentSQL($comment); } @@ -679,7 +697,9 @@ class SqlitePlatform extends AbstractPlatform protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) { if (! $diff->fromTable instanceof Table) { - throw new DBALException('Sqlite platform requires for alter table the table diff with reference to original table schema'); + throw new DBALException( + 'Sqlite platform requires for alter table the table diff with reference to original table schema' + ); } $sql = []; @@ -700,7 +720,9 @@ class SqlitePlatform extends AbstractPlatform protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) { if (! $diff->fromTable instanceof Table) { - throw new DBALException('Sqlite platform requires for alter table the table diff with reference to original table schema'); + throw new DBALException( + 'Sqlite platform requires for alter table the table diff with reference to original table schema' + ); } $sql = []; @@ -736,7 +758,7 @@ class SqlitePlatform extends AbstractPlatform /** * {@inheritDoc} */ - public function getBlobTypeDeclarationSQL(array $field) + public function getBlobTypeDeclarationSQL(array $column) { return 'BLOB'; } @@ -769,6 +791,11 @@ class SqlitePlatform extends AbstractPlatform * {@inheritDoc} */ public function supportsForeignKeyConstraints() + { + return true; + } + + public function supportsCreateDropForeignKeyConstraints(): bool { return false; } @@ -786,7 +813,10 @@ class SqlitePlatform extends AbstractPlatform */ public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) { - throw new DBALException('Sqlite platform does not support alter foreign key.'); + throw new DBALException( + 'Sqlite platform does not support alter foreign key, ' + . 'the table must be fully recreated using getAlterTableSQL.' + ); } /** @@ -794,7 +824,10 @@ class SqlitePlatform extends AbstractPlatform */ public function getDropForeignKeySQL($foreignKey, $table) { - throw new DBALException('Sqlite platform does not support alter foreign key.'); + throw new DBALException( + 'Sqlite platform does not support alter foreign key, ' + . 'the table must be fully recreated using getAlterTableSQL.' + ); } /** @@ -842,7 +875,9 @@ class SqlitePlatform extends AbstractPlatform $fromTable = $diff->fromTable; if (! $fromTable instanceof Table) { - throw new DBALException('Sqlite platform requires for alter table the table diff with reference to original table schema'); + throw new DBALException( + 'Sqlite platform requires for alter table the table diff with reference to original table schema' + ); } $table = clone $fromTable; @@ -925,16 +960,34 @@ class SqlitePlatform extends AbstractPlatform if (! $this->onSchemaAlterTable($diff, $tableSql)) { $dataTable = new Table('__temp__' . $table->getName()); - $newTable = new Table($table->getQuotedName($this), $columns, $this->getPrimaryIndexInAlteredTable($diff), $this->getForeignKeysInAlteredTable($diff), 0, $table->getOptions()); + $newTable = new Table( + $table->getQuotedName($this), + $columns, + $this->getPrimaryIndexInAlteredTable($diff), + $this->getForeignKeysInAlteredTable($diff), + 0, + $table->getOptions() + ); $newTable->addOption('alter', true); $sql = $this->getPreAlterTableIndexForeignKeySQL($diff); - //$sql = array_merge($sql, $this->getCreateTableSQL($dataTable, 0)); - $sql[] = sprintf('CREATE TEMPORARY TABLE %s AS SELECT %s FROM %s', $dataTable->getQuotedName($this), implode(', ', $oldColumnNames), $table->getQuotedName($this)); + + $sql[] = sprintf( + 'CREATE TEMPORARY TABLE %s AS SELECT %s FROM %s', + $dataTable->getQuotedName($this), + implode(', ', $oldColumnNames), + $table->getQuotedName($this) + ); $sql[] = $this->getDropTableSQL($fromTable); $sql = array_merge($sql, $this->getCreateTableSQL($newTable)); - $sql[] = sprintf('INSERT INTO %s (%s) SELECT %s FROM %s', $newTable->getQuotedName($this), implode(', ', $newColumnNames), implode(', ', $oldColumnNames), $dataTable->getQuotedName($this)); + $sql[] = sprintf( + 'INSERT INTO %s (%s) SELECT %s FROM %s', + $newTable->getQuotedName($this), + implode(', ', $newColumnNames), + implode(', ', $oldColumnNames), + $dataTable->getQuotedName($this) + ); $sql[] = $this->getDropTableSQL($dataTable); $newName = $diff->getNewName(); @@ -960,7 +1013,8 @@ class SqlitePlatform extends AbstractPlatform { // Suppress changes on integer type autoincrement columns. foreach ($diff->changedColumns as $oldColumnName => $columnDiff) { - if (! $columnDiff->fromColumn instanceof Column || + if ( + ! $columnDiff->fromColumn instanceof Column || ! $columnDiff->column instanceof Column || ! $columnDiff->column->getAutoincrement() || ! $columnDiff->column->getType() instanceof Types\IntegerType @@ -983,10 +1037,17 @@ class SqlitePlatform extends AbstractPlatform unset($diff->changedColumns[$oldColumnName]); } - if (! empty($diff->renamedColumns) || ! empty($diff->addedForeignKeys) || ! empty($diff->addedIndexes) - || ! empty($diff->changedColumns) || ! empty($diff->changedForeignKeys) || ! empty($diff->changedIndexes) - || ! empty($diff->removedColumns) || ! empty($diff->removedForeignKeys) || ! empty($diff->removedIndexes) - || ! empty($diff->renamedIndexes) + if ( + ! empty($diff->renamedColumns) + || ! empty($diff->addedForeignKeys) + || ! empty($diff->addedIndexes) + || ! empty($diff->changedColumns) + || ! empty($diff->changedForeignKeys) + || ! empty($diff->changedIndexes) + || ! empty($diff->removedColumns) + || ! empty($diff->removedForeignKeys) + || ! empty($diff->removedIndexes) + || ! empty($diff->renamedIndexes) ) { return false; } @@ -1002,28 +1063,37 @@ class SqlitePlatform extends AbstractPlatform continue; } - $field = array_merge(['unique' => null, 'autoincrement' => null, 'default' => null], $column->toArray()); - $type = $field['type']; + $definition = array_merge([ + 'unique' => null, + 'autoincrement' => null, + 'default' => null, + ], $column->toArray()); + + $type = $definition['type']; + switch (true) { - case isset($field['columnDefinition']) || $field['autoincrement'] || $field['unique']: - case $type instanceof Types\DateTimeType && $field['default'] === $this->getCurrentTimestampSQL(): - case $type instanceof Types\DateType && $field['default'] === $this->getCurrentDateSQL(): - case $type instanceof Types\TimeType && $field['default'] === $this->getCurrentTimeSQL(): + case isset($definition['columnDefinition']) || $definition['autoincrement'] || $definition['unique']: + case $type instanceof Types\DateTimeType && $definition['default'] === $this->getCurrentTimestampSQL(): + case $type instanceof Types\DateType && $definition['default'] === $this->getCurrentDateSQL(): + case $type instanceof Types\TimeType && $definition['default'] === $this->getCurrentTimeSQL(): return false; } - $field['name'] = $column->getQuotedName($this); - if ($type instanceof Types\StringType && $field['length'] === null) { - $field['length'] = 255; + $definition['name'] = $column->getQuotedName($this); + if ($type instanceof Types\StringType && $definition['length'] === null) { + $definition['length'] = 255; } - $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' ADD COLUMN ' . $this->getColumnDeclarationSQL($field['name'], $field); + $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' ADD COLUMN ' + . $this->getColumnDeclarationSQL($definition['name'], $definition); } if (! $this->onSchemaAlterTable($diff, $tableSql)) { if ($diff->newName !== false) { $newTable = new Identifier($diff->newName); - $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' RENAME TO ' . $newTable->getQuotedName($this); + + $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' RENAME TO ' + . $newTable->getQuotedName($this); } } @@ -1108,7 +1178,13 @@ class SqlitePlatform extends AbstractPlatform continue; } - $indexes[$key] = new Index($index->getName(), $indexColumns, $index->isUnique(), $index->isPrimary(), $index->getFlags()); + $indexes[$key] = new Index( + $index->getName(), + $indexColumns, + $index->isUnique(), + $index->isPrimary(), + $index->getFlags() + ); } foreach ($diff->removedIndexes as $index) { @@ -1162,7 +1238,13 @@ class SqlitePlatform extends AbstractPlatform continue; } - $foreignKeys[$key] = new ForeignKeyConstraint($localColumns, $constraint->getForeignTableName(), $constraint->getForeignColumns(), $constraint->getName(), $constraint->getOptions()); + $foreignKeys[$key] = new ForeignKeyConstraint( + $localColumns, + $constraint->getForeignTableName(), + $constraint->getForeignColumns(), + $constraint->getName(), + $constraint->getOptions() + ); } foreach ($diff->removedForeignKeys as $constraint) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php index 0a4b6ea8..eb499ee4 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php @@ -14,6 +14,9 @@ final class TrimMode public const BOTH = 3; + /** + * @codeCoverageIgnore + */ private function __construct() { } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php index 7b4af8a8..96f8190f 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php @@ -6,9 +6,11 @@ use Doctrine\DBAL\Cache\QueryCacheProfile; use Doctrine\DBAL\ColumnCase; use Doctrine\DBAL\Driver\PDOConnection; use PDO; + +use function func_get_args; + use const CASE_LOWER; use const CASE_UPPER; -use function func_get_args; /** * Portability wrapper for a Connection. @@ -62,6 +64,7 @@ class Connection extends \Doctrine\DBAL\Connection } else { $params['portability'] &= self::PORTABILITY_OTHERVENDORS; } + $this->portability = $params['portability']; } @@ -97,9 +100,9 @@ class Connection extends \Doctrine\DBAL\Connection /** * {@inheritdoc} */ - public function executeQuery($query, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) + public function executeQuery($sql, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) { - $stmt = new Statement(parent::executeQuery($query, $params, $types, $qcp), $this); + $stmt = new Statement(parent::executeQuery($sql, $params, $types, $qcp), $this); $stmt->setFetchMode($this->defaultFetchMode); return $stmt; @@ -107,10 +110,12 @@ class Connection extends \Doctrine\DBAL\Connection /** * {@inheritdoc} + * + * @return Statement */ - public function prepare($statement) + public function prepare($sql) { - $stmt = new Statement(parent::prepare($statement), $this); + $stmt = new Statement(parent::prepare($sql), $this); $stmt->setFetchMode($this->defaultFetchMode); return $stmt; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php index 514b3be2..fe2fb0bd 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\ParameterType; use IteratorAggregate; use PDO; + use function array_change_key_case; use function assert; use function is_string; @@ -46,11 +47,11 @@ class Statement implements IteratorAggregate, DriverStatement /** * {@inheritdoc} */ - public function bindParam($column, &$variable, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { assert($this->stmt instanceof DriverStatement); - return $this->stmt->bindParam($column, $variable, $type, $length); + return $this->stmt->bindParam($param, $variable, $type, $length); } /** @@ -112,11 +113,11 @@ class Statement implements IteratorAggregate, DriverStatement /** * {@inheritdoc} */ - public function setFetchMode($fetchMode, $arg1 = null, $arg2 = null) + public function setFetchMode($fetchMode, $arg2 = null, $arg3 = null) { $this->defaultFetchMode = $fetchMode; - return $this->stmt->setFetchMode($fetchMode, $arg1, $arg2); + return $this->stmt->setFetchMode($fetchMode, $arg2, $arg3); } /** @@ -136,7 +137,7 @@ class Statement implements IteratorAggregate, DriverStatement $row = $this->stmt->fetch($fetchMode); - $iterateRow = $this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL|Connection::PORTABILITY_RTRIM); + $iterateRow = $this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM); $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && ($this->portability & Connection::PORTABILITY_FIX_CASE); @@ -159,7 +160,7 @@ class Statement implements IteratorAggregate, DriverStatement $rows = $this->stmt->fetchAll($fetchMode); } - $iterateRow = $this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL|Connection::PORTABILITY_RTRIM); + $iterateRow = $this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM); $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && ($this->portability & Connection::PORTABILITY_FIX_CASE); @@ -224,7 +225,7 @@ class Statement implements IteratorAggregate, DriverStatement { $value = $this->stmt->fetchColumn($columnIndex); - if ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL|Connection::PORTABILITY_RTRIM)) { + if ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) { if (($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL) && $value === '') { $value = null; } elseif (($this->portability & Connection::PORTABILITY_RTRIM) && is_string($value)) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php index 443d71bc..234b61b6 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Query\Expression; use Countable; + use function count; use function implode; @@ -51,7 +52,7 @@ class CompositeExpression implements Countable * * @param self[]|string[] $parts * - * @return \Doctrine\DBAL\Query\Expression\CompositeExpression + * @return CompositeExpression */ public function addMultiple(array $parts = []) { @@ -67,7 +68,7 @@ class CompositeExpression implements Countable * * @param mixed $part * - * @return \Doctrine\DBAL\Query\Expression\CompositeExpression + * @return CompositeExpression */ public function add($part) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php index dfcc31ec..1b0c1df9 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Query\Expression; use Doctrine\DBAL\Connection; + use function func_get_arg; use function func_get_args; use function func_num_args; @@ -208,7 +209,7 @@ class ExpressionBuilder /** * Creates an IS NULL expression with the given arguments. * - * @param string $x The field in string format to be restricted by IS NULL. + * @param string $x The expression to be restricted by IS NULL. * * @return string */ @@ -220,7 +221,7 @@ class ExpressionBuilder /** * Creates an IS NOT NULL expression with the given arguments. * - * @param string $x The field in string format to be restricted by IS NOT NULL. + * @param string $x The expression to be restricted by IS NOT NULL. * * @return string */ @@ -273,7 +274,7 @@ class ExpressionBuilder /** * Creates a NOT IN () comparison expression with the given arguments. * - * @param string $x The field in string format to be inspected by NOT IN() comparison. + * @param string $x The expression to be inspected by NOT IN() comparison. * @param string|string[] $y The placeholder or the array of values to be used by NOT IN() comparison. * * @return string diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php index e76ca0e0..8c1c8ad3 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Driver\ResultStatement; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Query\Expression\CompositeExpression; use Doctrine\DBAL\Query\Expression\ExpressionBuilder; + use function array_key_exists; use function array_keys; use function array_unshift; @@ -231,6 +232,7 @@ class QueryBuilder case self::INSERT: $sql = $this->getSQLForInsert(); break; + case self::DELETE: $sql = $this->getSQLForDelete(); break; @@ -264,7 +266,7 @@ class QueryBuilder * * @param string|int $key The parameter position or name. * @param mixed $value The parameter value. - * @param string|int|null $type One of the {@link \Doctrine\DBAL\ParameterType} constants. + * @param string|int|null $type One of the {@link ParameterType} constants. * * @return $this This QueryBuilder instance. */ @@ -394,7 +396,7 @@ class QueryBuilder * Gets the maximum number of results the query object was set to retrieve (the "limit"). * Returns NULL if all results will be returned. * - * @return int The maximum number of results. + * @return int|null The maximum number of results. */ public function getMaxResults() { @@ -425,7 +427,12 @@ class QueryBuilder $this->state = self::STATE_DIRTY; if ($append) { - if ($sqlPartName === 'orderBy' || $sqlPartName === 'groupBy' || $sqlPartName === 'select' || $sqlPartName === 'set') { + if ( + $sqlPartName === 'orderBy' + || $sqlPartName === 'groupBy' + || $sqlPartName === 'select' + || $sqlPartName === 'set' + ) { foreach ($sqlPart as $part) { $this->sqlParts[$sqlPartName][] = $part; } @@ -486,7 +493,7 @@ class QueryBuilder * * @return $this This QueryBuilder instance. */ - public function distinct() : self + public function distinct(): self { $this->sqlParts['distinct'] = true; @@ -1174,7 +1181,7 @@ class QueryBuilder * * @throws QueryException */ - private function verifyAllAliasesAreKnown(array $knownAliases) : void + private function verifyAllAliasesAreKnown(array $knownAliases): void { foreach ($this->sqlParts['join'] as $fromAlias => $joins) { if (! isset($knownAliases[$fromAlias])) { @@ -1210,7 +1217,8 @@ class QueryBuilder */ private function getSQLForUpdate() { - $table = $this->sqlParts['from']['table'] . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); + $table = $this->sqlParts['from']['table'] + . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); return 'UPDATE ' . $table . ' SET ' . implode(', ', $this->sqlParts['set']) @@ -1224,9 +1232,11 @@ class QueryBuilder */ private function getSQLForDelete() { - $table = $this->sqlParts['from']['table'] . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); + $table = $this->sqlParts['from']['table'] + . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); - return 'DELETE FROM ' . $table . ($this->sqlParts['where'] !== null ? ' WHERE ' . ((string) $this->sqlParts['where']) : ''); + return 'DELETE FROM ' . $table + . ($this->sqlParts['where'] !== null ? ' WHERE ' . ((string) $this->sqlParts['where']) : ''); } /** @@ -1274,6 +1284,7 @@ class QueryBuilder $this->boundCounter++; $placeHolder = ':dcValue' . $this->boundCounter; } + $this->setParameter(substr($placeHolder, 1), $value, $type); return $placeHolder; @@ -1326,11 +1337,13 @@ class QueryBuilder if (array_key_exists($join['joinAlias'], $knownAliases)) { throw QueryException::nonUniqueAlias($join['joinAlias'], array_keys($knownAliases)); } + $sql .= ' ' . strtoupper($join['joinType']) . ' JOIN ' . $join['joinTable'] . ' ' . $join['joinAlias']; if ($join['joinCondition'] !== null) { $sql .= ' ON ' . $join['joinCondition']; } + $knownAliases[$join['joinAlias']] = true; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php index 604bcb75..76bb9ba7 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Query; use Doctrine\DBAL\DBALException; + use function implode; /** @@ -14,7 +15,7 @@ class QueryException extends DBALException * @param string $alias * @param string[] $registeredAliases * - * @return \Doctrine\DBAL\Query\QueryException + * @return QueryException */ public static function unknownAlias($alias, $registeredAliases) { @@ -27,7 +28,7 @@ class QueryException extends DBALException * @param string $alias * @param string[] $registeredAliases * - * @return \Doctrine\DBAL\Query\QueryException + * @return QueryException */ public static function nonUniqueAlias($alias, $registeredAliases) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php index 6329a84e..b469741c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php @@ -2,7 +2,6 @@ namespace Doctrine\DBAL; -use const PREG_OFFSET_CAPTURE; use function array_fill; use function array_fill_keys; use function array_key_exists; @@ -21,6 +20,8 @@ use function strlen; use function strpos; use function substr; +use const PREG_OFFSET_CAPTURE; + /** * Utility class that parses sql statements with regard to types and parameters. */ @@ -65,13 +66,13 @@ class SQLParserUtils * * @return int[] */ - private static function getPositionalPlaceholderPositions(string $statement) : array + private static function getPositionalPlaceholderPositions(string $statement): array { return self::collectPlaceholders( $statement, '?', self::POSITIONAL_TOKEN, - static function (string $_, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { + static function (string $_, int $placeholderPosition, int $fragmentPosition, array &$carry): void { $carry[] = $placeholderPosition + $fragmentPosition; } ); @@ -82,13 +83,18 @@ class SQLParserUtils * * @return string[] */ - private static function getNamedPlaceholderPositions(string $statement) : array + private static function getNamedPlaceholderPositions(string $statement): array { return self::collectPlaceholders( $statement, ':', self::NAMED_TOKEN, - static function (string $placeholder, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { + static function ( + string $placeholder, + int $placeholderPosition, + int $fragmentPosition, + array &$carry + ): void { $carry[$placeholderPosition + $fragmentPosition] = substr($placeholder, 1); } ); @@ -97,8 +103,12 @@ class SQLParserUtils /** * @return mixed[] */ - private static function collectPlaceholders(string $statement, string $match, string $token, callable $collector) : array - { + private static function collectPlaceholders( + string $statement, + string $match, + string $token, + callable $collector + ): array { if (strpos($statement, $match) === false) { return []; } @@ -118,9 +128,9 @@ class SQLParserUtils /** * For a positional query this method can rewrite the sql statement with regard to array parameters. * - * @param string $query The SQL query to execute. - * @param mixed[] $params The parameters to bind to the query. - * @param int[]|string[] $types The types the previous parameters are in. + * @param string $query The SQL query to execute. + * @param mixed[] $params The parameters to bind to the query. + * @param array $types The types the previous parameters are in. * * @return mixed[] * @@ -186,7 +196,7 @@ class SQLParserUtils array_slice($types, 0, $needle), $count ? // array needles are at {@link \Doctrine\DBAL\ParameterType} constants - // + {@link Doctrine\DBAL\Connection::ARRAY_PARAM_OFFSET} + // + {@link \Doctrine\DBAL\Connection::ARRAY_PARAM_OFFSET} array_fill(0, $count, $types[$needle] - Connection::ARRAY_PARAM_OFFSET) : [], array_slice($types, $needle + 1) @@ -195,8 +205,8 @@ class SQLParserUtils $expandStr = $count ? implode(', ', array_fill(0, $count, '?')) : 'NULL'; $query = substr($query, 0, $needlePos) . $expandStr . substr($query, $needlePos + 1); - $paramOffset += ($count - 1); // Grows larger by number of parameters minus the replaced needle. - $queryOffset += (strlen($expandStr) - 1); + $paramOffset += $count - 1; // Grows larger by number of parameters minus the replaced needle. + $queryOffset += strlen($expandStr) - 1; } return [$query, $params, $types]; @@ -214,10 +224,10 @@ class SQLParserUtils if (! isset($arrayPositions[$paramName]) && ! isset($arrayPositions[':' . $paramName])) { $pos += $queryOffset; - $queryOffset -= ($paramLen - 1); + $queryOffset -= $paramLen - 1; $paramsOrd[] = $value; $typesOrd[] = static::extractParam($paramName, $types, false, ParameterType::STRING); - $query = substr($query, 0, $pos) . '?' . substr($query, ($pos + $paramLen)); + $query = substr($query, 0, $pos) . '?' . substr($query, $pos + $paramLen); continue; } @@ -231,8 +241,8 @@ class SQLParserUtils } $pos += $queryOffset; - $queryOffset += (strlen($expandStr) - $paramLen); - $query = substr($query, 0, $pos) . $expandStr . substr($query, ($pos + $paramLen)); + $queryOffset += strlen($expandStr) - $paramLen; + $query = substr($query, 0, $pos) . $expandStr . substr($query, $pos + $paramLen); } return [$query, $paramsOrd, $typesOrd]; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php index 0857fce8..99cdb8d4 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php @@ -14,20 +14,24 @@ class SQLParserUtilsException extends DBALException /** * @param string $paramName * - * @return \Doctrine\DBAL\SQLParserUtilsException + * @return SQLParserUtilsException */ public static function missingParam($paramName) { - return new self(sprintf('Value for :%1$s not found in params array. Params array key should be "%1$s"', $paramName)); + return new self( + sprintf('Value for :%1$s not found in params array. Params array key should be "%1$s"', $paramName) + ); } /** * @param string $typeName * - * @return \Doctrine\DBAL\SQLParserUtilsException + * @return SQLParserUtilsException */ public static function missingType($typeName) { - return new self(sprintf('Value for :%1$s not found in types array. Types array key should be "%1$s"', $typeName)); + return new self( + sprintf('Value for :%1$s not found in types array. Types array key should be "%1$s"', $typeName) + ); } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php index 45af02f5..3424b17c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractAsset.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function array_map; use function crc32; use function dechex; @@ -48,11 +49,13 @@ abstract class AbstractAsset $this->_quoted = true; $name = $this->trimQuotes($name); } + if (strpos($name, '.') !== false) { $parts = explode('.', $name); $this->_namespace = $parts[0]; $name = $parts[1]; } + $this->_name = $name; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php index 8e4ffa5f..352ce58f 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php @@ -10,6 +10,7 @@ use Doctrine\DBAL\Event\SchemaIndexDefinitionEventArgs; use Doctrine\DBAL\Events; use Doctrine\DBAL\Platforms\AbstractPlatform; use Throwable; + use function array_filter; use function array_intersect; use function array_map; @@ -132,6 +133,7 @@ abstract class AbstractSchemaManager if ($database === null) { $database = $this->_conn->getDatabase(); } + $sql = $this->_platform->getListSequencesSQL($database); $sequences = $this->_conn->fetchAll($sql); @@ -143,7 +145,7 @@ abstract class AbstractSchemaManager * Lists the columns for a given table. * * In contrast to other libraries and to the old version of Doctrine, - * this column definition does try to contain the 'primary' field for + * this column definition does try to contain the 'primary' column for * the reason that it is not portable across different RDBMS. Use * {@see listTableIndexes($tableName)} to retrieve the primary key * of a table. Where a RDBMS specifies more details, these are held @@ -190,15 +192,15 @@ abstract class AbstractSchemaManager * * The usage of a string $tableNames is deprecated. Pass a one-element array instead. * - * @param string|string[] $tableNames + * @param string|string[] $names * * @return bool */ - public function tablesExist($tableNames) + public function tablesExist($names) { - $tableNames = array_map('strtolower', (array) $tableNames); + $names = array_map('strtolower', (array) $names); - return count($tableNames) === count(array_intersect($tableNames, array_map('strtolower', $this->listTableNames()))); + return count($names) === count(array_intersect($names, array_map('strtolower', $this->listTableNames()))); } /** @@ -262,20 +264,21 @@ abstract class AbstractSchemaManager } /** - * @param string $tableName + * @param string $name * * @return Table */ - public function listTableDetails($tableName) + public function listTableDetails($name) { - $columns = $this->listTableColumns($tableName); + $columns = $this->listTableColumns($name); $foreignKeys = []; if ($this->_platform->supportsForeignKeyConstraints()) { - $foreignKeys = $this->listTableForeignKeys($tableName); + $foreignKeys = $this->listTableForeignKeys($name); } - $indexes = $this->listTableIndexes($tableName); - return new Table($tableName, $columns, $indexes, $foreignKeys); + $indexes = $this->listTableIndexes($name); + + return new Table($name, $columns, $indexes, $foreignKeys); } /** @@ -305,6 +308,7 @@ abstract class AbstractSchemaManager if ($database === null) { $database = $this->_conn->getDatabase(); } + $sql = $this->_platform->getListTableForeignKeysSQL($table, $database); $tableForeignKeys = $this->_conn->fetchAll($sql); @@ -330,13 +334,13 @@ abstract class AbstractSchemaManager /** * Drops the given table. * - * @param string $tableName The name of the table to drop. + * @param string $name The name of the table to drop. * * @return void */ - public function dropTable($tableName) + public function dropTable($name) { - $this->_execSql($this->_platform->getDropTableSQL($tableName)); + $this->_execSql($this->_platform->getDropTableSQL($name)); } /** @@ -426,7 +430,7 @@ abstract class AbstractSchemaManager */ public function createTable(Table $table) { - $createFlags = AbstractPlatform::CREATE_INDEXES|AbstractPlatform::CREATE_FOREIGNKEYS; + $createFlags = AbstractPlatform::CREATE_INDEXES | AbstractPlatform::CREATE_FOREIGNKEYS; $this->_execSql($this->_platform->getCreateTableSQL($table, $createFlags)); } @@ -525,7 +529,8 @@ abstract class AbstractSchemaManager /** * Drops and creates a new foreign key. * - * @param ForeignKeyConstraint $foreignKey An associative array that defines properties of the foreign key to be created. + * @param ForeignKeyConstraint $foreignKey An associative array that defines properties + * of the foreign key to be created. * @param Table|string $table The name of the table on which the foreign key is to be created. * * @return void @@ -833,19 +838,20 @@ abstract class AbstractSchemaManager /** * Aggregates and groups the index results according to the required data result. * - * @param mixed[][] $tableIndexRows + * @param mixed[][] $tableIndexes * @param string|null $tableName * * @return Index[] */ - protected function _getPortableTableIndexesList($tableIndexRows, $tableName = null) + protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { $result = []; - foreach ($tableIndexRows as $tableIndex) { + foreach ($tableIndexes as $tableIndex) { $indexName = $keyName = $tableIndex['key_name']; if ($tableIndex['primary']) { $keyName = 'primary'; } + $keyName = strtolower($keyName); if (! isset($result[$keyName])) { @@ -887,7 +893,14 @@ abstract class AbstractSchemaManager } if (! $defaultPrevented) { - $index = new Index($data['name'], $data['columns'], $data['unique'], $data['primary'], $data['flags'], $data['options']); + $index = new Index( + $data['name'], + $data['columns'], + $data['unique'], + $data['primary'], + $data['flags'], + $data['options'] + ); } if (! $index) { @@ -1075,9 +1088,11 @@ abstract class AbstractSchemaManager if (! isset($params['defaultTableOptions'])) { $params['defaultTableOptions'] = []; } + if (! isset($params['defaultTableOptions']['charset']) && isset($params['charset'])) { $params['defaultTableOptions']['charset'] = $params['charset']; } + $schemaConfig->setDefaultTableOptions($params['defaultTableOptions']); return $schemaConfig; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Column.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Column.php index 50724fda..e33f2851 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Column.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Column.php @@ -3,13 +3,15 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Types\Type; -use const E_USER_DEPRECATED; + use function array_merge; use function is_numeric; use function method_exists; use function sprintf; use function trigger_error; +use const E_USER_DEPRECATED; + /** * Object representation of a database column. */ @@ -57,12 +59,12 @@ class Column extends AbstractAsset /** * Creates a new Column. * - * @param string $columnName + * @param string $name * @param mixed[] $options */ - public function __construct($columnName, Type $type, array $options = []) + public function __construct($name, Type $type, array $options = []) { - $this->_setName($columnName); + $this->_setName($name); $this->setType($type); $this->setOptions($options); } @@ -86,6 +88,7 @@ class Column extends AbstractAsset continue; } + $this->$method($value); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ColumnDiff.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ColumnDiff.php index 1589f98d..2f6ae652 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ColumnDiff.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ColumnDiff.php @@ -25,8 +25,12 @@ class ColumnDiff * @param string $oldColumnName * @param string[] $changedProperties */ - public function __construct($oldColumnName, Column $column, array $changedProperties = [], ?Column $fromColumn = null) - { + public function __construct( + $oldColumnName, + Column $column, + array $changedProperties = [], + ?Column $fromColumn = null + ) { $this->oldColumnName = $oldColumnName; $this->column = $column; $this->changedProperties = $changedProperties; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Comparator.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Comparator.php index 9ccaa9a1..20f5ea7b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Comparator.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Comparator.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Types; + use function array_intersect_key; use function array_key_exists; use function array_keys; @@ -67,7 +68,11 @@ class Comparator if (! $fromSchema->hasTable($tableName)) { $diff->newTables[$tableName] = $toSchema->getTable($tableName); } else { - $tableDifferences = $this->diffTable($fromSchema->getTable($tableName), $toSchema->getTable($tableName)); + $tableDifferences = $this->diffTable( + $fromSchema->getTable($tableName), + $toSchema->getTable($tableName) + ); + if ($tableDifferences !== false) { $diff->changedTables[$tableName] = $tableDifferences; } @@ -89,6 +94,7 @@ class Comparator if (! isset($foreignKeysToTable[$foreignTable])) { $foreignKeysToTable[$foreignTable] = []; } + $foreignKeysToTable[$foreignTable][] = $foreignKey; } } @@ -116,6 +122,7 @@ class Comparator if ($tableName !== strtolower($removedForeignKey->getForeignTableName())) { continue; } + unset($diff->changedTables[$localTableName]->removedForeignKeys[$key]); } } @@ -196,7 +203,7 @@ class Comparator $table1Columns = $table1->getColumns(); $table2Columns = $table2->getColumns(); - /* See if all the fields in table 1 exist in table 2 */ + /* See if all the columns in table 1 exist in table 2 */ foreach ($table2Columns as $columnName => $column) { if ($table1->hasColumn($columnName)) { continue; @@ -205,7 +212,8 @@ class Comparator $tableDifferences->addedColumns[$columnName] = $column; $changes++; } - /* See if there are any removed fields in table 2 */ + + /* See if there are any removed columns in table 2 */ foreach ($table1Columns as $columnName => $column) { // See if column is removed in table 2. if (! $table2->hasColumn($columnName)) { @@ -221,7 +229,8 @@ class Comparator continue; } - $columnDiff = new ColumnDiff($column->getName(), $table2->getColumn($columnName), $changedProperties); + $columnDiff = new ColumnDiff($column->getName(), $table2->getColumn($columnName), $changedProperties); + $columnDiff->fromColumn = $column; $tableDifferences->changedColumns[$column->getName()] = $columnDiff; $changes++; @@ -241,10 +250,12 @@ class Comparator $tableDifferences->addedIndexes[$indexName] = $index; $changes++; } + /* See if there are any removed indexes in table 2 */ foreach ($table1Indexes as $indexName => $index) { // See if index is removed in table 2. - if (($index->isPrimary() && ! $table2->hasPrimaryKey()) || + if ( + ($index->isPrimary() && ! $table2->hasPrimaryKey()) || ! $index->isPrimary() && ! $table2->hasIndex($indexName) ) { $tableDifferences->removedIndexes[$indexName] = $index; @@ -388,11 +399,17 @@ class Comparator */ public function diffForeignKey(ForeignKeyConstraint $key1, ForeignKeyConstraint $key2) { - if (array_map('strtolower', $key1->getUnquotedLocalColumns()) !== array_map('strtolower', $key2->getUnquotedLocalColumns())) { + if ( + array_map('strtolower', $key1->getUnquotedLocalColumns()) + !== array_map('strtolower', $key2->getUnquotedLocalColumns()) + ) { return true; } - if (array_map('strtolower', $key1->getUnquotedForeignColumns()) !== array_map('strtolower', $key2->getUnquotedForeignColumns())) { + if ( + array_map('strtolower', $key1->getUnquotedForeignColumns()) + !== array_map('strtolower', $key2->getUnquotedForeignColumns()) + ) { return true; } @@ -408,7 +425,7 @@ class Comparator } /** - * Returns the difference between the fields $field1 and $field2. + * Returns the difference between the columns * * If there are differences this method returns $field2, otherwise the * boolean false. @@ -434,7 +451,8 @@ class Comparator $changedProperties[] = $property; } - // This is a very nasty hack to make comparator work with the legacy json_array type, which should be killed in v3 + // This is a very nasty hack to make comparator work with the legacy json_array type, + // which should be killed in v3 if ($this->isALegacyJsonComparison($properties1['type'], $properties2['type'])) { array_shift($changedProperties); @@ -443,12 +461,15 @@ class Comparator // Null values need to be checked additionally as they tell whether to create or drop a default value. // null != 0, null != false, null != '' etc. This affects platform's table alteration SQL generation. - if (($properties1['default'] === null) !== ($properties2['default'] === null) - || $properties1['default'] != $properties2['default']) { + if ( + ($properties1['default'] === null) !== ($properties2['default'] === null) + || $properties1['default'] != $properties2['default'] + ) { $changedProperties[] = 'default'; } - if (($properties1['type'] instanceof Types\StringType && ! $properties1['type'] instanceof Types\GuidType) || + if ( + ($properties1['type'] instanceof Types\StringType && ! $properties1['type'] instanceof Types\GuidType) || $properties1['type'] instanceof Types\BinaryType ) { // check if value of length is set at all, default value assumed otherwise. @@ -465,13 +486,15 @@ class Comparator if (($properties1['precision'] ?: 10) !== ($properties2['precision'] ?: 10)) { $changedProperties[] = 'precision'; } + if ($properties1['scale'] !== $properties2['scale']) { $changedProperties[] = 'scale'; } } // A null value and an empty string are actually equal for a comment so they should not trigger a change. - if ($properties1['comment'] !== $properties2['comment'] && + if ( + $properties1['comment'] !== $properties2['comment'] && ! ($properties1['comment'] === null && $properties2['comment'] === '') && ! ($properties2['comment'] === null && $properties1['comment'] === '') ) { @@ -508,14 +531,14 @@ class Comparator * * @deprecated */ - private function isALegacyJsonComparison(Types\Type $one, Types\Type $other) : bool + private function isALegacyJsonComparison(Types\Type $one, Types\Type $other): bool { if (! $one instanceof Types\JsonType || ! $other instanceof Types\JsonType) { return false; } - return ( ! $one instanceof Types\JsonArrayType && $other instanceof Types\JsonArrayType) - || ( ! $other instanceof Types\JsonArrayType && $one instanceof Types\JsonArrayType); + return (! $one instanceof Types\JsonArrayType && $other instanceof Types\JsonArrayType) + || (! $other instanceof Types\JsonArrayType && $one instanceof Types\JsonArrayType); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php index ae2af864..d270b585 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DB2SchemaManager.php @@ -4,8 +4,9 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\DB2Platform; use Doctrine\DBAL\Types\Type; -use const CASE_LOWER; + use function array_change_key_case; +use function assert; use function is_resource; use function preg_match; use function str_replace; @@ -13,6 +14,8 @@ use function strpos; use function strtolower; use function substr; +use const CASE_LOWER; + /** * IBM Db2 Schema Manager. */ @@ -68,13 +71,16 @@ class DB2SchemaManager extends AbstractSchemaManager $length = $tableColumn['length']; $fixed = false; break; + case 'character': $length = $tableColumn['length']; $fixed = true; break; + case 'clob': $length = $tableColumn['length']; break; + case 'decimal': case 'double': case 'real': @@ -123,14 +129,14 @@ class DB2SchemaManager extends AbstractSchemaManager /** * {@inheritdoc} */ - protected function _getPortableTableIndexesList($tableIndexRows, $tableName = null) + protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { - foreach ($tableIndexRows as &$tableIndexRow) { + foreach ($tableIndexes as &$tableIndexRow) { $tableIndexRow = array_change_key_case($tableIndexRow, CASE_LOWER); $tableIndexRow['primary'] = (bool) $tableIndexRow['primary']; } - return parent::_getPortableTableIndexesList($tableIndexRows, $tableName); + return parent::_getPortableTableIndexesList($tableIndexes, $tableName); } /** @@ -205,7 +211,7 @@ class DB2SchemaManager extends AbstractSchemaManager //$view['text'] = (is_resource($view['text']) ? stream_get_contents($view['text']) : $view['text']); if (! is_resource($view['text'])) { $pos = strpos($view['text'], ' AS '); - $sql = substr($view['text'], $pos+4); + $sql = substr($view['text'], $pos + 4); } else { $sql = ''; } @@ -213,13 +219,16 @@ class DB2SchemaManager extends AbstractSchemaManager return new View($view['name'], $sql); } - public function listTableDetails($tableName) : Table + /** + * {@inheritdoc} + */ + public function listTableDetails($name): Table { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - /** @var DB2Platform $platform */ $platform = $this->_platform; - $sql = $platform->getListTableCommentsSQL($tableName); + assert($platform instanceof DB2Platform); + $sql = $platform->getListTableCommentsSQL($name); $tableOptions = $this->_conn->fetchAssoc($sql); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DrizzleSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DrizzleSchemaManager.php index c334db27..47a2e2f0 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DrizzleSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/DrizzleSchemaManager.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Types\Type; + use function explode; use function strtolower; use function trim; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php index 3611b77d..6cb7ce05 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/ForeignKeyConstraint.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function array_keys; use function array_map; use function in_array; @@ -62,8 +63,13 @@ class ForeignKeyConstraint extends AbstractAsset implements Constraint * @param string|null $name Name of the foreign key constraint. * @param mixed[] $options Options associated with the foreign key constraint. */ - public function __construct(array $localColumnNames, $foreignTableName, array $foreignColumnNames, $name = null, array $options = []) - { + public function __construct( + array $localColumnNames, + $foreignTableName, + array $foreignColumnNames, + $name = null, + array $options = [] + ) { if ($name !== null) { $this->_setName($name); } @@ -85,7 +91,7 @@ class ForeignKeyConstraint extends AbstractAsset implements Constraint * * @return Identifier[] */ - private function createIdentifierMap(array $names) : array + private function createIdentifierMap(array $names): array { $identifiers = []; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Index.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Index.php index 7a31c782..4880da71 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Index.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Index.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\AbstractPlatform; use InvalidArgumentException; + use function array_filter; use function array_keys; use function array_map; @@ -46,18 +47,24 @@ class Index extends AbstractAsset implements Constraint private $options = []; /** - * @param string $indexName + * @param string $name * @param string[] $columns * @param bool $isUnique * @param bool $isPrimary * @param string[] $flags * @param mixed[] $options */ - public function __construct($indexName, array $columns, $isUnique = false, $isPrimary = false, array $flags = [], array $options = []) - { + public function __construct( + $name, + array $columns, + $isUnique = false, + $isPrimary = false, + array $flags = [], + array $options = [] + ) { $isUnique = $isUnique || $isPrimary; - $this->_setName($indexName); + $this->_setName($name); $this->_isUnique = $isUnique; $this->_isPrimary = $isPrimary; $this->options = $options; @@ -65,6 +72,7 @@ class Index extends AbstractAsset implements Constraint foreach ($columns as $column) { $this->_addColumn($column); } + foreach ($flags as $flag) { $this->addFlag($flag); } @@ -154,17 +162,17 @@ class Index extends AbstractAsset implements Constraint } /** - * @param string $columnName + * @param string $name * @param int $pos * * @return bool */ - public function hasColumnAtPosition($columnName, $pos = 0) + public function hasColumnAtPosition($name, $pos = 0) { - $columnName = $this->trimQuotes(strtolower($columnName)); + $name = $this->trimQuotes(strtolower($name)); $indexColumns = array_map('strtolower', $this->getUnquotedColumns()); - return array_search($columnName, $indexColumns) === $pos; + return array_search($name, $indexColumns) === $pos; } /** @@ -181,7 +189,10 @@ class Index extends AbstractAsset implements Constraint $sameColumns = true; for ($i = 0; $i < $numberOfColumns; $i++) { - if (isset($columnNames[$i]) && $this->trimQuotes(strtolower($columns[$i])) === $this->trimQuotes(strtolower($columnNames[$i]))) { + if ( + isset($columnNames[$i]) + && $this->trimQuotes(strtolower($columns[$i])) === $this->trimQuotes(strtolower($columnNames[$i])) + ) { continue; } @@ -249,7 +260,9 @@ class Index extends AbstractAsset implements Constraint return false; } - return $this->spansColumns($other->getColumns()) && ($this->isPrimary() || $this->isUnique()) && $this->samePartialIndex($other); + return $this->spansColumns($other->getColumns()) + && ($this->isPrimary() || $this->isUnique()) + && $this->samePartialIndex($other); } /** @@ -337,7 +350,11 @@ class Index extends AbstractAsset implements Constraint */ private function samePartialIndex(Index $other) { - if ($this->hasOption('where') && $other->hasOption('where') && $this->getOption('where') === $other->getOption('where')) { + if ( + $this->hasOption('where') + && $other->hasOption('where') + && $this->getOption('where') === $other->getOption('where') + ) { return true; } @@ -347,9 +364,9 @@ class Index extends AbstractAsset implements Constraint /** * Returns whether the index has the same column lengths as the other */ - private function hasSameColumnLengths(self $other) : bool + private function hasSameColumnLengths(self $other): bool { - $filter = static function (?int $length) : bool { + $filter = static function (?int $length): bool { return $length !== null; }; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php index 9522faf6..edcba52c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php @@ -5,7 +5,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\MariaDb1027Platform; use Doctrine\DBAL\Platforms\MySqlPlatform; use Doctrine\DBAL\Types\Type; -use const CASE_LOWER; + use function array_change_key_case; use function array_shift; use function array_values; @@ -18,6 +18,8 @@ use function strtok; use function strtolower; use function strtr; +use const CASE_LOWER; + /** * Schema manager for the MySql RDBMS. */ @@ -82,11 +84,13 @@ class MySqlSchemaManager extends AbstractSchemaManager } else { $v['primary'] = false; } + if (strpos($v['index_type'], 'FULLTEXT') !== false) { $v['flags'] = ['FULLTEXT']; } elseif (strpos($v['index_type'], 'SPATIAL') !== false) { $v['flags'] = ['SPATIAL']; } + $v['length'] = isset($v['sub_part']) ? (int) $v['sub_part'] : null; $tableIndexes[$k] = $v; @@ -138,6 +142,7 @@ class MySqlSchemaManager extends AbstractSchemaManager case 'binary': $fixed = true; break; + case 'float': case 'double': case 'real': @@ -148,25 +153,33 @@ class MySqlSchemaManager extends AbstractSchemaManager $scale = $match[2]; $length = null; } + break; + case 'tinytext': $length = MySqlPlatform::LENGTH_LIMIT_TINYTEXT; break; + case 'text': $length = MySqlPlatform::LENGTH_LIMIT_TEXT; break; + case 'mediumtext': $length = MySqlPlatform::LENGTH_LIMIT_MEDIUMTEXT; break; + case 'tinyblob': $length = MySqlPlatform::LENGTH_LIMIT_TINYBLOB; break; + case 'blob': $length = MySqlPlatform::LENGTH_LIMIT_BLOB; break; + case 'mediumblob': $length = MySqlPlatform::LENGTH_LIMIT_MEDIUMBLOB; break; + case 'tinyint': case 'smallint': case 'mediumint': @@ -208,6 +221,7 @@ class MySqlSchemaManager extends AbstractSchemaManager if (isset($tableColumn['characterset'])) { $column->setPlatformOption('charset', $tableColumn['characterset']); } + if (isset($tableColumn['collation'])) { $column->setPlatformOption('collation', $tableColumn['collation']); } @@ -231,7 +245,7 @@ class MySqlSchemaManager extends AbstractSchemaManager * * @param string|null $columnDefault default value as stored in information_schema for MariaDB >= 10.2.7 */ - private function getMariaDb1027ColumnDefault(MariaDb1027Platform $platform, ?string $columnDefault) : ?string + private function getMariaDb1027ColumnDefault(MariaDb1027Platform $platform, ?string $columnDefault): ?string { if ($columnDefault === 'NULL' || $columnDefault === null) { return null; @@ -244,8 +258,10 @@ class MySqlSchemaManager extends AbstractSchemaManager switch ($columnDefault) { case 'current_timestamp()': return $platform->getCurrentTimestampSQL(); + case 'curdate()': return $platform->getCurrentDateSQL(); + case 'curtime()': return $platform->getCurrentTimeSQL(); } @@ -265,6 +281,7 @@ class MySqlSchemaManager extends AbstractSchemaManager if (! isset($value['delete_rule']) || $value['delete_rule'] === 'RESTRICT') { $value['delete_rule'] = null; } + if (! isset($value['update_rule']) || $value['update_rule'] === 'RESTRICT') { $value['update_rule'] = null; } @@ -278,6 +295,7 @@ class MySqlSchemaManager extends AbstractSchemaManager 'onUpdate' => $value['update_rule'], ]; } + $list[$value['constraint_name']]['local'][] = $value['column_name']; $list[$value['constraint_name']]['foreign'][] = $value['referenced_column_name']; } @@ -299,13 +317,16 @@ class MySqlSchemaManager extends AbstractSchemaManager return $result; } - public function listTableDetails($tableName) + /** + * {@inheritdoc} + */ + public function listTableDetails($name) { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - /** @var MySqlPlatform $platform */ $platform = $this->_platform; - $sql = $platform->getListTableMetadataSQL($tableName); + assert($platform instanceof MySqlPlatform); + $sql = $platform->getListTableMetadataSQL($name); $tableOptions = $this->_conn->fetchAssoc($sql); @@ -332,7 +353,7 @@ class MySqlSchemaManager extends AbstractSchemaManager /** * @return string[]|true[] */ - private function parseCreateOptions(?string $string) : array + private function parseCreateOptions(?string $string): array { $options = []; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php index dd10cd0f..997d3937 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/OracleSchemaManager.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\Driver\DriverException; use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Types\Type; use Throwable; -use const CASE_LOWER; + use function array_change_key_case; use function array_values; use function assert; @@ -19,6 +19,8 @@ use function strtolower; use function strtoupper; use function trim; +use const CASE_LOWER; + /** * Oracle Schema Manager. */ @@ -107,6 +109,7 @@ class OracleSchemaManager extends AbstractSchemaManager $buffer['primary'] = false; $buffer['non_unique'] = ! $tableIndex['is_unique']; } + $buffer['key_name'] = $keyName; $buffer['column_name'] = $this->getQuotedIdentifierName($tableIndex['column_name']); $indexBuffer[] = $buffer; @@ -176,12 +179,14 @@ class OracleSchemaManager extends AbstractSchemaManager } break; + case 'varchar': case 'varchar2': case 'nvarchar2': $length = $tableColumn['char_length']; $fixed = false; break; + case 'char': case 'nchar': $length = $tableColumn['char_length']; @@ -392,13 +397,16 @@ SQL; } } - public function listTableDetails($tableName) : Table + /** + * {@inheritdoc} + */ + public function listTableDetails($name): Table { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - /** @var OraclePlatform $platform */ $platform = $this->_platform; - $sql = $platform->getListTableCommentsSQL($tableName); + assert($platform instanceof OraclePlatform); + $sql = $platform->getListTableCommentsSQL($name); $tableOptions = $this->_conn->fetchAssoc($sql); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php index ffc7c87d..4894fd70 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Types; -use const CASE_LOWER; + use function array_change_key_case; use function array_filter; use function array_keys; @@ -26,6 +26,8 @@ use function strpos; use function strtolower; use function trim; +use const CASE_LOWER; + /** * PostgreSQL Schema Manager. */ @@ -41,7 +43,9 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager */ public function getSchemaNames() { - $statement = $this->_conn->executeQuery("SELECT nspname FROM pg_namespace WHERE nspname !~ '^pg_.*' AND nspname != 'information_schema'"); + $statement = $this->_conn->executeQuery( + "SELECT nspname FROM pg_namespace WHERE nspname !~ '^pg_.*' AND nspname != 'information_schema'" + ); return $statement->fetchAll(FetchMode::COLUMN); } @@ -141,6 +145,7 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager if (preg_match('(ON UPDATE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))', $tableForeignKey['condef'], $match)) { $onUpdate = $match[1]; } + if (preg_match('(ON DELETE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))', $tableForeignKey['condef'], $match)) { $onDelete = $match[1]; } @@ -299,7 +304,9 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager if (! isset($sequence['increment_by'], $sequence['min_value'])) { /** @var string[] $data */ - $data = $this->_conn->fetchAssoc('SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName)); + $data = $this->_conn->fetchAssoc( + 'SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName) + ); $sequence += $data; } @@ -339,9 +346,11 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager if ($length === '-1' && isset($tableColumn['atttypmod'])) { $length = $tableColumn['atttypmod'] - 4; } + if ((int) $length <= 0) { $length = null; } + $fixed = null; if (! isset($tableColumn['name'])) { @@ -353,7 +362,10 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager $jsonb = null; $dbType = strtolower($tableColumn['type']); - if (strlen($tableColumn['domain_type']) && ! $this->_platform->hasDoctrineTypeMappingFor($tableColumn['type'])) { + if ( + strlen($tableColumn['domain_type']) + && ! $this->_platform->hasDoctrineTypeMappingFor($tableColumn['type']) + ) { $dbType = strtolower($tableColumn['domain_type']); $tableColumn['complete_type'] = $tableColumn['domain_complete_type']; } @@ -368,17 +380,20 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); $length = null; break; + case 'int': case 'int4': case 'integer': $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); $length = null; break; + case 'bigint': case 'int8': $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); $length = null; break; + case 'bool': case 'boolean': if ($tableColumn['default'] === 'true') { @@ -391,6 +406,7 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager $length = null; break; + case 'text': case '_varchar': case 'varchar': @@ -400,10 +416,12 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager case 'interval': $fixed = false; break; + case 'char': case 'bpchar': $fixed = true; break; + case 'float': case 'float4': case 'float8': @@ -420,7 +438,9 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager $scale = $match[2]; $length = null; } + break; + case 'year': $length = null; break; @@ -481,7 +501,7 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager /** * Parses a default value expression as given by PostgreSQL */ - private function parseDefaultExpression(?string $default) : ?string + private function parseDefaultExpression(?string $default): ?string { if ($default === null) { return $default; @@ -490,13 +510,16 @@ class PostgreSqlSchemaManager extends AbstractSchemaManager return str_replace("''", "'", $default); } - public function listTableDetails($tableName) : Table + /** + * {@inheritdoc} + */ + public function listTableDetails($name): Table { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - /** @var PostgreSqlPlatform $platform */ $platform = $this->_platform; - $sql = $platform->getListTableMetadataSQL($tableName); + assert($platform instanceof PostgreSqlPlatform); + $sql = $platform->getListTableMetadataSQL($name); $tableOptions = $this->_conn->fetchAssoc($sql); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLAnywhereSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLAnywhereSchemaManager.php index 13cdcb09..c909c7e5 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLAnywhereSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLAnywhereSchemaManager.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Platforms\SQLAnywherePlatform; use Doctrine\DBAL\Types\Type; + use function assert; use function is_string; use function preg_replace; @@ -112,6 +113,7 @@ class SQLAnywhereSchemaManager extends AbstractSchemaManager case 'char': case 'nchar': $fixed = true; + break; } switch ($type) { @@ -119,6 +121,7 @@ class SQLAnywhereSchemaManager extends AbstractSchemaManager case 'float': $precision = $tableColumn['length']; $scale = $tableColumn['scale']; + break; } return new Column( @@ -198,9 +201,9 @@ class SQLAnywhereSchemaManager extends AbstractSchemaManager /** * {@inheritdoc} */ - protected function _getPortableTableIndexesList($tableIndexRows, $tableName = null) + protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { - foreach ($tableIndexRows as &$tableIndex) { + foreach ($tableIndexes as &$tableIndex) { $tableIndex['primary'] = (bool) $tableIndex['primary']; $tableIndex['flags'] = []; @@ -219,7 +222,7 @@ class SQLAnywhereSchemaManager extends AbstractSchemaManager $tableIndex['flags'][] = 'for_olap_workload'; } - return parent::_getPortableTableIndexesList($tableIndexRows, $tableName); + return parent::_getPortableTableIndexesList($tableIndexes, $tableName); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLServerSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLServerSchemaManager.php index 35cdc450..d06f1b1d 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLServerSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SQLServerSchemaManager.php @@ -8,6 +8,7 @@ use Doctrine\DBAL\Platforms\SQLServerPlatform; use Doctrine\DBAL\Types\Type; use PDOException; use Throwable; + use function assert; use function count; use function in_array; @@ -87,11 +88,13 @@ class SQLServerSchemaManager extends AbstractSchemaManager // Unicode data requires 2 bytes per character $length /= 2; break; + case 'varchar': // TEXT type is returned as VARCHAR(MAX) with a length of -1 if ($length === -1) { $dbType = 'text'; } + break; } @@ -124,7 +127,7 @@ class SQLServerSchemaManager extends AbstractSchemaManager return $column; } - private function parseDefaultExpression(string $value) : ?string + private function parseDefaultExpression(string $value): ?string { while (preg_match('/^\((.*)\)$/s', $value, $matches)) { $value = $matches[1]; @@ -153,20 +156,22 @@ class SQLServerSchemaManager extends AbstractSchemaManager $foreignKeys = []; foreach ($tableForeignKeys as $tableForeignKey) { - if (! isset($foreignKeys[$tableForeignKey['ForeignKey']])) { - $foreignKeys[$tableForeignKey['ForeignKey']] = [ + $name = $tableForeignKey['ForeignKey']; + + if (! isset($foreignKeys[$name])) { + $foreignKeys[$name] = [ 'local_columns' => [$tableForeignKey['ColumnName']], 'foreign_table' => $tableForeignKey['ReferenceTableName'], 'foreign_columns' => [$tableForeignKey['ReferenceColumnName']], - 'name' => $tableForeignKey['ForeignKey'], + 'name' => $name, 'options' => [ 'onUpdate' => str_replace('_', ' ', $tableForeignKey['update_referential_action_desc']), 'onDelete' => str_replace('_', ' ', $tableForeignKey['delete_referential_action_desc']), ], ]; } else { - $foreignKeys[$tableForeignKey['ForeignKey']]['local_columns'][] = $tableForeignKey['ColumnName']; - $foreignKeys[$tableForeignKey['ForeignKey']]['foreign_columns'][] = $tableForeignKey['ReferenceColumnName']; + $foreignKeys[$name]['local_columns'][] = $tableForeignKey['ColumnName']; + $foreignKeys[$name]['foreign_columns'][] = $tableForeignKey['ReferenceColumnName']; } } @@ -176,15 +181,15 @@ class SQLServerSchemaManager extends AbstractSchemaManager /** * {@inheritdoc} */ - protected function _getPortableTableIndexesList($tableIndexRows, $tableName = null) + protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { - foreach ($tableIndexRows as &$tableIndex) { + foreach ($tableIndexes as &$tableIndex) { $tableIndex['non_unique'] = (bool) $tableIndex['non_unique']; $tableIndex['primary'] = (bool) $tableIndex['primary']; $tableIndex['flags'] = $tableIndex['flags'] ? [$tableIndex['flags']] : null; } - return parent::_getPortableTableIndexesList($tableIndexRows, $tableName); + return parent::_getPortableTableIndexesList($tableIndexes, $tableName); } /** @@ -297,11 +302,11 @@ class SQLServerSchemaManager extends AbstractSchemaManager */ private function getColumnConstraintSQL($table, $column) { - return "SELECT SysObjects.[Name] - FROM SysObjects INNER JOIN (SELECT [Name],[ID] FROM SysObjects WHERE XType = 'U') AS Tab - ON Tab.[ID] = Sysobjects.[Parent_Obj] - INNER JOIN sys.default_constraints DefCons ON DefCons.[object_id] = Sysobjects.[ID] - INNER JOIN SysColumns Col ON Col.[ColID] = DefCons.[parent_column_id] AND Col.[ID] = Tab.[ID] + return "SELECT sysobjects.[Name] + FROM sysobjects INNER JOIN (SELECT [Name],[ID] FROM sysobjects WHERE XType = 'U') AS Tab + ON Tab.[ID] = sysobjects.[Parent_Obj] + INNER JOIN sys.default_constraints DefCons ON DefCons.[object_id] = sysobjects.[ID] + INNER JOIN syscolumns Col ON Col.[ColID] = DefCons.[parent_column_id] AND Col.[ID] = Tab.[ID] WHERE Col.[Name] = " . $this->_conn->quote($column) . ' AND Tab.[Name] = ' . $this->_conn->quote($table) . ' ORDER BY Col.[Name]'; } @@ -328,15 +333,15 @@ class SQLServerSchemaManager extends AbstractSchemaManager } /** - * @param string $tableName + * @param string $name */ - public function listTableDetails($tableName) : Table + public function listTableDetails($name): Table { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - /** @var SQLServerPlatform $platform */ $platform = $this->_platform; - $sql = $platform->getListTableMetadataSQL($tableName); + assert($platform instanceof SQLServerPlatform); + $sql = $platform->getListTableMetadataSQL($name); $tableOptions = $this->_conn->fetchAssoc($sql); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Schema.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Schema.php index 5d746654..6ea5fd0c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Schema.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Schema.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Schema\Visitor\CreateSchemaSqlCollector; use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector; use Doctrine\DBAL\Schema\Visitor\NamespaceVisitor; use Doctrine\DBAL\Schema\Visitor\Visitor; + use function array_keys; use function strpos; use function strtolower; @@ -67,6 +68,7 @@ class Schema extends AbstractAsset if ($schemaConfig === null) { $schemaConfig = new SchemaConfig(); } + $this->_schemaConfig = $schemaConfig; $this->_setName($schemaConfig->getName() ?: 'public'); @@ -105,9 +107,11 @@ class Schema extends AbstractAsset throw SchemaException::tableAlreadyExists($tableName); } - if ($namespaceName !== null + if ( + $namespaceName !== null && ! $table->isInDefaultNamespace($this->getName()) - && ! $this->hasNamespace($namespaceName)) { + && ! $this->hasNamespace($namespaceName) + ) { $this->createNamespace($namespaceName); } @@ -129,9 +133,11 @@ class Schema extends AbstractAsset throw SchemaException::sequenceAlreadyExists($seqName); } - if ($namespaceName !== null + if ( + $namespaceName !== null && ! $sequence->isInDefaultNamespace($this->getName()) - && ! $this->hasNamespace($namespaceName)) { + && ! $this->hasNamespace($namespaceName) + ) { $this->createNamespace($namespaceName); } @@ -159,20 +165,20 @@ class Schema extends AbstractAsset } /** - * @param string $tableName + * @param string $name * * @return Table * * @throws SchemaException */ - public function getTable($tableName) + public function getTable($name) { - $tableName = $this->getFullQualifiedAssetName($tableName); - if (! isset($this->_tables[$tableName])) { - throw SchemaException::tableDoesNotExist($tableName); + $name = $this->getFullQualifiedAssetName($name); + if (! isset($this->_tables[$name])) { + throw SchemaException::tableDoesNotExist($name); } - return $this->_tables[$tableName]; + return $this->_tables[$name]; } /** @@ -210,29 +216,29 @@ class Schema extends AbstractAsset /** * Does this schema have a namespace with the given name? * - * @param string $namespaceName + * @param string $name * * @return bool */ - public function hasNamespace($namespaceName) + public function hasNamespace($name) { - $namespaceName = strtolower($this->getUnquotedAssetName($namespaceName)); + $name = strtolower($this->getUnquotedAssetName($name)); - return isset($this->namespaces[$namespaceName]); + return isset($this->namespaces[$name]); } /** * Does this schema have a table with the given name? * - * @param string $tableName + * @param string $name * * @return bool */ - public function hasTable($tableName) + public function hasTable($name) { - $tableName = $this->getFullQualifiedAssetName($tableName); + $name = $this->getFullQualifiedAssetName($name); - return isset($this->_tables[$tableName]); + return isset($this->_tables[$name]); } /** @@ -246,32 +252,32 @@ class Schema extends AbstractAsset } /** - * @param string $sequenceName + * @param string $name * * @return bool */ - public function hasSequence($sequenceName) + public function hasSequence($name) { - $sequenceName = $this->getFullQualifiedAssetName($sequenceName); + $name = $this->getFullQualifiedAssetName($name); - return isset($this->_sequences[$sequenceName]); + return isset($this->_sequences[$name]); } /** - * @param string $sequenceName + * @param string $name * * @return Sequence * * @throws SchemaException */ - public function getSequence($sequenceName) + public function getSequence($name) { - $sequenceName = $this->getFullQualifiedAssetName($sequenceName); - if (! $this->hasSequence($sequenceName)) { - throw SchemaException::sequenceDoesNotExist($sequenceName); + $name = $this->getFullQualifiedAssetName($name); + if (! $this->hasSequence($name)) { + throw SchemaException::sequenceDoesNotExist($name); } - return $this->_sequences[$sequenceName]; + return $this->_sequences[$name]; } /** @@ -285,21 +291,21 @@ class Schema extends AbstractAsset /** * Creates a new namespace. * - * @param string $namespaceName The name of the namespace to create. + * @param string $name The name of the namespace to create. * - * @return \Doctrine\DBAL\Schema\Schema This schema instance. + * @return Schema This schema instance. * * @throws SchemaException */ - public function createNamespace($namespaceName) + public function createNamespace($name) { - $unquotedNamespaceName = strtolower($this->getUnquotedAssetName($namespaceName)); + $unquotedName = strtolower($this->getUnquotedAssetName($name)); - if (isset($this->namespaces[$unquotedNamespaceName])) { - throw SchemaException::namespaceAlreadyExists($unquotedNamespaceName); + if (isset($this->namespaces[$unquotedName])) { + throw SchemaException::namespaceAlreadyExists($unquotedName); } - $this->namespaces[$unquotedNamespaceName] = $namespaceName; + $this->namespaces[$unquotedName] = $name; return $this; } @@ -307,17 +313,17 @@ class Schema extends AbstractAsset /** * Creates a new table. * - * @param string $tableName + * @param string $name * * @return Table */ - public function createTable($tableName) + public function createTable($name) { - $table = new Table($tableName); + $table = new Table($name); $this->_addTable($table); - foreach ($this->_schemaConfig->getDefaultTableOptions() as $name => $value) { - $table->addOption($name, $value); + foreach ($this->_schemaConfig->getDefaultTableOptions() as $option => $value) { + $table->addOption($option, $value); } return $table; @@ -326,17 +332,17 @@ class Schema extends AbstractAsset /** * Renames a table. * - * @param string $oldTableName - * @param string $newTableName + * @param string $oldName + * @param string $newName * - * @return \Doctrine\DBAL\Schema\Schema + * @return Schema */ - public function renameTable($oldTableName, $newTableName) + public function renameTable($oldName, $newName) { - $table = $this->getTable($oldTableName); - $table->_setName($newTableName); + $table = $this->getTable($oldName); + $table->_setName($newName); - $this->dropTable($oldTableName); + $this->dropTable($oldName); $this->_addTable($table); return $this; @@ -345,15 +351,15 @@ class Schema extends AbstractAsset /** * Drops a table from the schema. * - * @param string $tableName + * @param string $name * - * @return \Doctrine\DBAL\Schema\Schema + * @return Schema */ - public function dropTable($tableName) + public function dropTable($name) { - $tableName = $this->getFullQualifiedAssetName($tableName); - $this->getTable($tableName); - unset($this->_tables[$tableName]); + $name = $this->getFullQualifiedAssetName($name); + $this->getTable($name); + unset($this->_tables[$name]); return $this; } @@ -361,29 +367,29 @@ class Schema extends AbstractAsset /** * Creates a new sequence. * - * @param string $sequenceName + * @param string $name * @param int $allocationSize * @param int $initialValue * * @return Sequence */ - public function createSequence($sequenceName, $allocationSize = 1, $initialValue = 1) + public function createSequence($name, $allocationSize = 1, $initialValue = 1) { - $seq = new Sequence($sequenceName, $allocationSize, $initialValue); + $seq = new Sequence($name, $allocationSize, $initialValue); $this->_addSequence($seq); return $seq; } /** - * @param string $sequenceName + * @param string $name * - * @return \Doctrine\DBAL\Schema\Schema + * @return Schema */ - public function dropSequence($sequenceName) + public function dropSequence($name) { - $sequenceName = $this->getFullQualifiedAssetName($sequenceName); - unset($this->_sequences[$sequenceName]); + $name = $this->getFullQualifiedAssetName($name); + unset($this->_sequences[$name]); return $this; } @@ -468,6 +474,7 @@ class Schema extends AbstractAsset foreach ($this->_tables as $k => $table) { $this->_tables[$k] = clone $table; } + foreach ($this->_sequences as $k => $sequence) { $this->_sequences[$k] = clone $sequence; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php index 69bf125a..fa643aec 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php @@ -2,7 +2,9 @@ namespace Doctrine\DBAL\Schema; +use Doctrine\DBAL\Internal\DependencyOrderCalculator; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function array_merge; /** @@ -137,13 +139,16 @@ class SchemaDiff } $foreignKeySql = []; - foreach ($this->newTables as $table) { - $sql = array_merge( - $sql, - $platform->getCreateTableSQL($table, AbstractPlatform::CREATE_INDEXES) - ); + $createFlags = AbstractPlatform::CREATE_INDEXES; - if (! $platform->supportsForeignKeyConstraints()) { + if (! $platform->supportsCreateDropForeignKeyConstraints()) { + $createFlags |= AbstractPlatform::CREATE_FOREIGNKEYS; + } + + foreach ($this->getNewTablesSortedByDependencies() as $table) { + $sql = array_merge($sql, $platform->getCreateTableSQL($table, $createFlags)); + + if (! $platform->supportsCreateDropForeignKeyConstraints()) { continue; } @@ -151,6 +156,7 @@ class SchemaDiff $foreignKeySql[] = $platform->getCreateForeignKeySQL($foreignKey, $table); } } + $sql = array_merge($sql, $foreignKeySql); if ($saveMode === false) { @@ -165,4 +171,37 @@ class SchemaDiff return $sql; } + + /** + * Sorts tables by dependencies so that they are created in the right order. + * + * This is necessary when one table depends on another while creating foreign key + * constraints directly during CREATE TABLE. + * + * @return array + */ + private function getNewTablesSortedByDependencies() + { + $calculator = new DependencyOrderCalculator(); + $newTables = []; + + foreach ($this->newTables as $table) { + $newTables[$table->getName()] = true; + $calculator->addNode($table->getName(), $table); + } + + foreach ($this->newTables as $table) { + foreach ($table->getForeignKeys() as $foreignKey) { + $foreignTableName = $foreignKey->getForeignTableName(); + + if (! isset($newTables[$foreignTableName])) { + continue; + } + + $calculator->addDependency($foreignTableName, $table->getName()); + } + } + + return $calculator->sort(); + } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php index 68d778f5..6317679d 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\DBALException; + use function implode; use function sprintf; @@ -26,7 +27,7 @@ class SchemaException extends DBALException /** * @param string $tableName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function tableDoesNotExist($tableName) { @@ -36,7 +37,7 @@ class SchemaException extends DBALException /** * @param string $indexName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function indexNameInvalid($indexName) { @@ -50,7 +51,7 @@ class SchemaException extends DBALException * @param string $indexName * @param string $table * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function indexDoesNotExist($indexName, $table) { @@ -64,7 +65,7 @@ class SchemaException extends DBALException * @param string $indexName * @param string $table * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function indexAlreadyExists($indexName, $table) { @@ -78,7 +79,7 @@ class SchemaException extends DBALException * @param string $columnName * @param string $table * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function columnDoesNotExist($columnName, $table) { @@ -91,7 +92,7 @@ class SchemaException extends DBALException /** * @param string $namespaceName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function namespaceAlreadyExists($namespaceName) { @@ -104,7 +105,7 @@ class SchemaException extends DBALException /** * @param string $tableName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function tableAlreadyExists($tableName) { @@ -115,7 +116,7 @@ class SchemaException extends DBALException * @param string $tableName * @param string $columnName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function columnAlreadyExists($tableName, $columnName) { @@ -126,30 +127,30 @@ class SchemaException extends DBALException } /** - * @param string $sequenceName + * @param string $name * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ - public static function sequenceAlreadyExists($sequenceName) + public static function sequenceAlreadyExists($name) { - return new self("The sequence '" . $sequenceName . "' already exists.", self::SEQUENCE_ALREADY_EXISTS); + return new self("The sequence '" . $name . "' already exists.", self::SEQUENCE_ALREADY_EXISTS); } /** - * @param string $sequenceName + * @param string $name * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ - public static function sequenceDoesNotExist($sequenceName) + public static function sequenceDoesNotExist($name) { - return new self("There exists no sequence with the name '" . $sequenceName . "'.", self::SEQUENCE_DOENST_EXIST); + return new self("There exists no sequence with the name '" . $name . "'.", self::SEQUENCE_DOENST_EXIST); } /** * @param string $fkName * @param string $table * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function foreignKeyDoesNotExist($fkName, $table) { @@ -160,22 +161,22 @@ class SchemaException extends DBALException } /** - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function namedForeignKeyRequired(Table $localTable, ForeignKeyConstraint $foreignKey) { return new self( 'The performed schema operation on ' . $localTable->getName() . ' requires a named foreign key, ' . 'but the given foreign key from (' . implode(', ', $foreignKey->getColumns()) . ') onto foreign table ' . - "'" . $foreignKey->getForeignTableName() . "' (" . implode(', ', $foreignKey->getForeignColumns()) . ') is currently ' . - 'unnamed.' + "'" . $foreignKey->getForeignTableName() . "' (" . implode(', ', $foreignKey->getForeignColumns()) . ')' . + ' is currently unnamed.' ); } /** * @param string $changeName * - * @return \Doctrine\DBAL\Schema\SchemaException + * @return SchemaException */ public static function alterTableChangeNotSupported($changeName) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Sequence.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Sequence.php index 88891019..19dec9cd 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Sequence.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Sequence.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\Schema\Visitor\Visitor; + use function count; use function sprintf; @@ -61,7 +62,7 @@ class Sequence extends AbstractAsset /** * @param int $allocationSize * - * @return \Doctrine\DBAL\Schema\Sequence + * @return Sequence */ public function setAllocationSize($allocationSize) { @@ -73,7 +74,7 @@ class Sequence extends AbstractAsset /** * @param int $initialValue * - * @return \Doctrine\DBAL\Schema\Sequence + * @return Sequence */ public function setInitialValue($initialValue) { @@ -85,7 +86,7 @@ class Sequence extends AbstractAsset /** * @param int $cache * - * @return \Doctrine\DBAL\Schema\Sequence + * @return Sequence */ public function setCache($cache) { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php index 3de11178..17cb5efa 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SqliteSchemaManager.php @@ -8,9 +8,10 @@ use Doctrine\DBAL\FetchMode; use Doctrine\DBAL\Types\StringType; use Doctrine\DBAL\Types\TextType; use Doctrine\DBAL\Types\Type; -use const CASE_LOWER; + use function array_change_key_case; use function array_map; +use function array_merge; use function array_reverse; use function array_values; use function explode; @@ -28,6 +29,8 @@ use function trim; use function unlink; use function usort; +use const CASE_LOWER; + /** * Sqlite SchemaManager. */ @@ -113,14 +116,16 @@ class SqliteSchemaManager extends AbstractSchemaManager if ($database === null) { $database = $this->_conn->getDatabase(); } + $sql = $this->_platform->getListTableForeignKeysSQL($table, $database); $tableForeignKeys = $this->_conn->fetchAll($sql); if (! empty($tableForeignKeys)) { $createSql = $this->getCreateTableSQL($table); - if ($createSql !== null && preg_match_all( - '# + if ( + $createSql !== null && preg_match_all( + '# (?:CONSTRAINT\s+([^\s]+)\s+)? (?:FOREIGN\s+KEY[^\)]+\)\s*)? REFERENCES\s+[^\s]+\s+(?:\([^\)]+\))? @@ -129,9 +134,10 @@ class SqliteSchemaManager extends AbstractSchemaManager (NOT\s+DEFERRABLE|DEFERRABLE) (?:\s+INITIALLY\s+(DEFERRED|IMMEDIATE))? )?#isx', - $createSql, - $match - )) { + $createSql, + $match + ) + ) { $names = array_reverse($match[1]); $deferrable = array_reverse($match[2]); $deferred = array_reverse($match[3]); @@ -140,10 +146,13 @@ class SqliteSchemaManager extends AbstractSchemaManager } foreach ($tableForeignKeys as $key => $value) { - $id = $value['id']; - $tableForeignKeys[$key]['constraint_name'] = isset($names[$id]) && $names[$id] !== '' ? $names[$id] : $id; - $tableForeignKeys[$key]['deferrable'] = isset($deferrable[$id]) && strtolower($deferrable[$id]) === 'deferrable'; - $tableForeignKeys[$key]['deferred'] = isset($deferred[$id]) && strtolower($deferred[$id]) === 'deferred'; + $id = $value['id']; + + $tableForeignKeys[$key] = array_merge($tableForeignKeys[$key], [ + 'constraint_name' => isset($names[$id]) && $names[$id] !== '' ? $names[$id] : $id, + 'deferrable' => isset($deferrable[$id]) && strtolower($deferrable[$id]) === 'deferrable', + 'deferred' => isset($deferred[$id]) && strtolower($deferred[$id]) === 'deferred', + ]); } } @@ -278,7 +287,10 @@ class SqliteSchemaManager extends AbstractSchemaManager $type = $column->getType(); if ($type instanceof StringType || $type instanceof TextType) { - $column->setPlatformOption('collation', $this->parseColumnCollationFromSQL($columnName, $createSql) ?: 'BINARY'); + $column->setPlatformOption( + 'collation', + $this->parseColumnCollationFromSQL($columnName, $createSql) ?: 'BINARY' + ); } $comment = $this->parseColumnCommentFromSQL($columnName, $createSql); @@ -358,8 +370,10 @@ class SqliteSchemaManager extends AbstractSchemaManager if (strpos($tableColumn['length'], ',') === false) { $tableColumn['length'] .= ',0'; } + [$precision, $scale] = array_map('trim', explode(',', $tableColumn['length'])); } + $length = null; break; } @@ -399,6 +413,7 @@ class SqliteSchemaManager extends AbstractSchemaManager if (! isset($value['on_delete']) || $value['on_delete'] === 'RESTRICT') { $value['on_delete'] = null; } + if (! isset($value['on_update']) || $value['on_update'] === 'RESTRICT') { $value['on_update'] = null; } @@ -411,9 +426,10 @@ class SqliteSchemaManager extends AbstractSchemaManager 'onDelete' => $value['on_delete'], 'onUpdate' => $value['on_update'], 'deferrable' => $value['deferrable'], - 'deferred'=> $value['deferred'], + 'deferred' => $value['deferred'], ]; } + $list[$name]['local'][] = $value['from']; $list[$name]['foreign'][] = $value['to']; } @@ -429,7 +445,7 @@ class SqliteSchemaManager extends AbstractSchemaManager 'onDelete' => $constraint['onDelete'], 'onUpdate' => $constraint['onUpdate'], 'deferrable' => $constraint['deferrable'], - 'deferred'=> $constraint['deferred'], + 'deferred' => $constraint['deferred'], ] ); } @@ -450,7 +466,9 @@ class SqliteSchemaManager extends AbstractSchemaManager $tableDetails = $this->tryMethod('listTableDetails', $table); if ($tableDetails === false) { - throw new DBALException(sprintf('Sqlite schema manager requires to modify foreign keys table definition "%s".', $table)); + throw new DBALException( + sprintf('Sqlite schema manager requires to modify foreign keys table definition "%s".', $table) + ); } $table = $tableDetails; @@ -462,9 +480,10 @@ class SqliteSchemaManager extends AbstractSchemaManager return $tableDiff; } - private function parseColumnCollationFromSQL(string $column, string $sql) : ?string + private function parseColumnCollationFromSQL(string $column, string $sql): ?string { - $pattern = '{(?:\W' . preg_quote($column) . '\W|\W' . preg_quote($this->_platform->quoteSingleIdentifier($column)) + $pattern = '{(?:\W' . preg_quote($column) . '\W|\W' + . preg_quote($this->_platform->quoteSingleIdentifier($column)) . '\W)[^,(]+(?:\([^()]+\)[^,]*)?(?:(?:DEFAULT|CHECK)\s*(?:\(.*?\))?[^,]*)*COLLATE\s+["\']?([^\s,"\')]+)}is'; if (preg_match($pattern, $sql, $match) !== 1) { @@ -474,7 +493,7 @@ class SqliteSchemaManager extends AbstractSchemaManager return $match[1]; } - private function parseTableCommentFromSQL(string $table, string $sql) : ?string + private function parseTableCommentFromSQL(string $table, string $sql): ?string { $pattern = '/\s* # Allow whitespace characters at start of line CREATE\sTABLE # Match "CREATE TABLE" @@ -493,10 +512,10 @@ CREATE\sTABLE # Match "CREATE TABLE" return $comment === '' ? null : $comment; } - private function parseColumnCommentFromSQL(string $column, string $sql) : ?string + private function parseColumnCommentFromSQL(string $column, string $sql): ?string { - $pattern = '{[\s(,](?:\W' . preg_quote($this->_platform->quoteSingleIdentifier($column)) . '\W|\W' . preg_quote($column) - . '\W)(?:\([^)]*?\)|[^,(])*?,?((?:(?!\n))(?:\s*--[^\n]*\n?)+)}i'; + $pattern = '{[\s(,](?:\W' . preg_quote($this->_platform->quoteSingleIdentifier($column)) + . '\W|\W' . preg_quote($column) . '\W)(?:\([^)]*?\)|[^,(])*?,?((?:(?!\n))(?:\s*--[^\n]*\n?)+)}i'; if (preg_match($pattern, $sql, $match) !== 1) { return null; @@ -507,7 +526,7 @@ CREATE\sTABLE # Match "CREATE TABLE" return $comment === '' ? null : $comment; } - private function getCreateTableSQL(string $table) : ?string + private function getCreateTableSQL(string $table): ?string { return $this->_conn->fetchColumn( <<<'SQL' @@ -528,15 +547,15 @@ SQL } /** - * @param string $tableName + * @param string $name */ - public function listTableDetails($tableName) : Table + public function listTableDetails($name): Table { - $table = parent::listTableDetails($tableName); + $table = parent::listTableDetails($name); - $tableCreateSql = $this->getCreateTableSQL($tableName) ?? ''; + $tableCreateSql = $this->getCreateTableSQL($name) ?? ''; - $comment = $this->parseTableCommentFromSQL($tableName, $tableCreateSql); + $comment = $this->parseTableCommentFromSQL($name, $tableCreateSql); if ($comment !== null) { $table->addOption('comment', $comment); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Synchronizer/SingleDatabaseSynchronizer.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Synchronizer/SingleDatabaseSynchronizer.php index dd4b1ca5..43c0fc6a 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Synchronizer/SingleDatabaseSynchronizer.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Synchronizer/SingleDatabaseSynchronizer.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\Comparator; use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector; + use function count; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Table.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Table.php index 842d1fcc..4d8b362a 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Table.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Table.php @@ -5,7 +5,7 @@ namespace Doctrine\DBAL\Schema; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\Schema\Visitor\Visitor; use Doctrine\DBAL\Types\Type; -use const ARRAY_FILTER_USE_KEY; + use function array_filter; use function array_merge; use function in_array; @@ -13,6 +13,8 @@ use function preg_match; use function strlen; use function strtolower; +use const ARRAY_FILTER_USE_KEY; + /** * Object Representation of a table. */ @@ -42,7 +44,7 @@ class Table extends AbstractAsset protected $_schemaConfig = null; /** - * @param string $tableName + * @param string $name * @param Column[] $columns * @param Index[] $indexes * @param ForeignKeyConstraint[] $fkConstraints @@ -51,13 +53,19 @@ class Table extends AbstractAsset * * @throws DBALException */ - public function __construct($tableName, array $columns = [], array $indexes = [], array $fkConstraints = [], $idGeneratorType = 0, array $options = []) - { - if (strlen($tableName) === 0) { - throw DBALException::invalidTableName($tableName); + public function __construct( + $name, + array $columns = [], + array $indexes = [], + array $fkConstraints = [], + $idGeneratorType = 0, + array $options = [] + ) { + if (strlen($name) === 0) { + throw DBALException::invalidTableName($name); } - $this->_setName($tableName); + $this->_setName($name); foreach ($columns as $column) { $this->_addColumn($column); @@ -149,19 +157,20 @@ class Table extends AbstractAsset /** * Drops an index from this table. * - * @param string $indexName The index name. + * @param string $name The index name. * * @return void * * @throws SchemaException If the index does not exist. */ - public function dropIndex($indexName) + public function dropIndex($name) { - $indexName = $this->normalizeIdentifier($indexName); - if (! $this->hasIndex($indexName)) { - throw SchemaException::indexDoesNotExist($indexName, $this->_name); + $name = $this->normalizeIdentifier($name); + if (! $this->hasIndex($name)) { + throw SchemaException::indexDoesNotExist($name, $this->_name); } - unset($this->_indexes[$indexName]); + + unset($this->_indexes[$name]); } /** @@ -187,8 +196,8 @@ class Table extends AbstractAsset /** * Renames an index. * - * @param string $oldIndexName The name of the index to rename from. - * @param string|null $newIndexName The name of the index to rename to. + * @param string $oldName The name of the index to rename from. + * @param string|null $newName The name of the index to rename to. * If null is given, the index name will be auto-generated. * * @return self This table instance. @@ -196,38 +205,38 @@ class Table extends AbstractAsset * @throws SchemaException If no index exists for the given current name * or if an index with the given new name already exists on this table. */ - public function renameIndex($oldIndexName, $newIndexName = null) + public function renameIndex($oldName, $newName = null) { - $oldIndexName = $this->normalizeIdentifier($oldIndexName); - $normalizedNewIndexName = $this->normalizeIdentifier($newIndexName); + $oldName = $this->normalizeIdentifier($oldName); + $normalizedNewName = $this->normalizeIdentifier($newName); - if ($oldIndexName === $normalizedNewIndexName) { + if ($oldName === $normalizedNewName) { return $this; } - if (! $this->hasIndex($oldIndexName)) { - throw SchemaException::indexDoesNotExist($oldIndexName, $this->_name); + if (! $this->hasIndex($oldName)) { + throw SchemaException::indexDoesNotExist($oldName, $this->_name); } - if ($this->hasIndex($normalizedNewIndexName)) { - throw SchemaException::indexAlreadyExists($normalizedNewIndexName, $this->_name); + if ($this->hasIndex($normalizedNewName)) { + throw SchemaException::indexAlreadyExists($normalizedNewName, $this->_name); } - $oldIndex = $this->_indexes[$oldIndexName]; + $oldIndex = $this->_indexes[$oldName]; if ($oldIndex->isPrimary()) { $this->dropPrimaryKey(); - return $this->setPrimaryKey($oldIndex->getColumns(), $newIndexName ?? false); + return $this->setPrimaryKey($oldIndex->getColumns(), $newName ?? false); } - unset($this->_indexes[$oldIndexName]); + unset($this->_indexes[$oldName]); if ($oldIndex->isUnique()) { - return $this->addUniqueIndex($oldIndex->getColumns(), $newIndexName, $oldIndex->getOptions()); + return $this->addUniqueIndex($oldIndex->getColumns(), $newName, $oldIndex->getOptions()); } - return $this->addIndex($oldIndex->getColumns(), $newIndexName, $oldIndex->getFlags(), $oldIndex->getOptions()); + return $this->addIndex($oldIndex->getColumns(), $newName, $oldIndex->getFlags(), $oldIndex->getOptions()); } /** @@ -240,7 +249,6 @@ class Table extends AbstractAsset public function columnsAreIndexed(array $columnNames) { foreach ($this->getIndexes() as $index) { - /** @var $index Index */ if ($index->spansColumns($columnNames)) { return true; } @@ -261,8 +269,14 @@ class Table extends AbstractAsset * * @throws SchemaException */ - private function _createIndex(array $columnNames, $indexName, $isUnique, $isPrimary, array $flags = [], array $options = []) - { + private function _createIndex( + array $columnNames, + $indexName, + $isUnique, + $isPrimary, + array $flags = [], + array $options = [] + ) { if (preg_match('(([^a-zA-Z0-9_]+))', $this->normalizeIdentifier($indexName))) { throw SchemaException::indexNameInvalid($indexName); } @@ -277,15 +291,15 @@ class Table extends AbstractAsset } /** - * @param string $columnName + * @param string $name * @param string $typeName * @param mixed[] $options * * @return Column */ - public function addColumn($columnName, $typeName, array $options = []) + public function addColumn($name, $typeName, array $options = []) { - $column = new Column($columnName, Type::getType($typeName), $options); + $column = new Column($name, Type::getType($typeName), $options); $this->_addColumn($column); @@ -297,14 +311,14 @@ class Table extends AbstractAsset * * @deprecated * - * @param string $oldColumnName - * @param string $newColumnName + * @param string $oldName + * @param string $name * * @return void * * @throws DBALException */ - public function renameColumn($oldColumnName, $newColumnName) + public function renameColumn($oldName, $name) { throw new DBALException('Table#renameColumn() was removed, because it drops and recreates ' . 'the column instead. There is no fix available, because a schema diff cannot reliably detect if a ' . @@ -314,14 +328,14 @@ class Table extends AbstractAsset /** * Change Column Details. * - * @param string $columnName + * @param string $name * @param mixed[] $options * * @return self */ - public function changeColumn($columnName, array $options) + public function changeColumn($name, array $options) { - $column = $this->getColumn($columnName); + $column = $this->getColumn($name); $column->setOptions($options); return $this; @@ -330,14 +344,14 @@ class Table extends AbstractAsset /** * Drops a Column from the Table. * - * @param string $columnName + * @param string $name * * @return self */ - public function dropColumn($columnName) + public function dropColumn($name) { - $columnName = $this->normalizeIdentifier($columnName); - unset($this->_columns[$columnName]); + $name = $this->normalizeIdentifier($name); + unset($this->_columns[$name]); return $this; } @@ -355,11 +369,26 @@ class Table extends AbstractAsset * * @return self */ - public function addForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options = [], $constraintName = null) - { - $constraintName = $constraintName ?: $this->_generateIdentifierName(array_merge((array) $this->getName(), $localColumnNames), 'fk', $this->_getMaxIdentifierLength()); + public function addForeignKeyConstraint( + $foreignTable, + array $localColumnNames, + array $foreignColumnNames, + array $options = [], + $constraintName = null + ) { + $constraintName = $constraintName ?: $this->_generateIdentifierName( + array_merge((array) $this->getName(), $localColumnNames), + 'fk', + $this->_getMaxIdentifierLength() + ); - return $this->addNamedForeignKeyConstraint($constraintName, $foreignTable, $localColumnNames, $foreignColumnNames, $options); + return $this->addNamedForeignKeyConstraint( + $constraintName, + $foreignTable, + $localColumnNames, + $foreignColumnNames, + $options + ); } /** @@ -376,8 +405,12 @@ class Table extends AbstractAsset * * @return self */ - public function addUnnamedForeignKeyConstraint($foreignTable, array $localColumnNames, array $foreignColumnNames, array $options = []) - { + public function addUnnamedForeignKeyConstraint( + $foreignTable, + array $localColumnNames, + array $foreignColumnNames, + array $options = [] + ) { return $this->addForeignKeyConstraint($foreignTable, $localColumnNames, $foreignColumnNames, $options); } @@ -396,8 +429,13 @@ class Table extends AbstractAsset * * @throws SchemaException */ - public function addNamedForeignKeyConstraint($name, $foreignTable, array $localColumnNames, array $foreignColumnNames, array $options = []) - { + public function addNamedForeignKeyConstraint( + $name, + $foreignTable, + array $localColumnNames, + array $foreignColumnNames, + array $options = [] + ) { if ($foreignTable instanceof Table) { foreach ($foreignColumnNames as $columnName) { if (! $foreignTable->hasColumn($columnName)) { @@ -475,7 +513,8 @@ class Table extends AbstractAsset $replacedImplicitIndexes[] = $name; } - if ((isset($this->_indexes[$indexName]) && ! in_array($indexName, $replacedImplicitIndexes, true)) || + if ( + (isset($this->_indexes[$indexName]) && ! in_array($indexName, $replacedImplicitIndexes, true)) || ($this->_primaryKeyName !== false && $indexCandidate->isPrimary()) ) { throw SchemaException::indexAlreadyExists($indexName, $this->_name); @@ -510,18 +549,22 @@ class Table extends AbstractAsset $this->_getMaxIdentifierLength() ); } + $name = $this->normalizeIdentifier($name); $this->_fkConstraints[$name] = $constraint; - // add an explicit index on the foreign key columns. If there is already an index that fulfils this requirements drop the request. - // In the case of __construct calling this method during hydration from schema-details all the explicitly added indexes - // lead to duplicates. This creates computation overhead in this case, however no duplicate indexes are ever added (based on columns). - $indexName = $this->_generateIdentifierName( + // Add an explicit index on the foreign key columns. + // If there is already an index that fulfils this requirements drop the request. + // In the case of __construct calling this method during hydration from schema-details + // all the explicitly added indexes lead to duplicates. This creates computation overhead in this case, + // however no duplicate indexes are ever added (based on columns). + $indexName = $this->_generateIdentifierName( array_merge([$this->getName()], $constraint->getColumns()), 'idx', $this->_getMaxIdentifierLength() ); + $indexCandidate = $this->_createIndex($constraint->getColumns(), $indexName, false, false); foreach ($this->_indexes as $existingIndex) { @@ -537,53 +580,53 @@ class Table extends AbstractAsset /** * Returns whether this table has a foreign key constraint with the given name. * - * @param string $constraintName + * @param string $name * * @return bool */ - public function hasForeignKey($constraintName) + public function hasForeignKey($name) { - $constraintName = $this->normalizeIdentifier($constraintName); + $name = $this->normalizeIdentifier($name); - return isset($this->_fkConstraints[$constraintName]); + return isset($this->_fkConstraints[$name]); } /** * Returns the foreign key constraint with the given name. * - * @param string $constraintName The constraint name. + * @param string $name The constraint name. * * @return ForeignKeyConstraint * * @throws SchemaException If the foreign key does not exist. */ - public function getForeignKey($constraintName) + public function getForeignKey($name) { - $constraintName = $this->normalizeIdentifier($constraintName); - if (! $this->hasForeignKey($constraintName)) { - throw SchemaException::foreignKeyDoesNotExist($constraintName, $this->_name); + $name = $this->normalizeIdentifier($name); + if (! $this->hasForeignKey($name)) { + throw SchemaException::foreignKeyDoesNotExist($name, $this->_name); } - return $this->_fkConstraints[$constraintName]; + return $this->_fkConstraints[$name]; } /** * Removes the foreign key constraint with the given name. * - * @param string $constraintName The constraint name. + * @param string $name The constraint name. * * @return void * * @throws SchemaException */ - public function removeForeignKey($constraintName) + public function removeForeignKey($name) { - $constraintName = $this->normalizeIdentifier($constraintName); - if (! $this->hasForeignKey($constraintName)) { - throw SchemaException::foreignKeyDoesNotExist($constraintName, $this->_name); + $name = $this->normalizeIdentifier($name); + if (! $this->hasForeignKey($name)) { + throw SchemaException::foreignKeyDoesNotExist($name, $this->_name); } - unset($this->_fkConstraints[$constraintName]); + unset($this->_fkConstraints[$name]); } /** @@ -635,34 +678,34 @@ class Table extends AbstractAsset /** * Returns whether this table has a Column with the given name. * - * @param string $columnName The column name. + * @param string $name The column name. * * @return bool */ - public function hasColumn($columnName) + public function hasColumn($name) { - $columnName = $this->normalizeIdentifier($columnName); + $name = $this->normalizeIdentifier($name); - return isset($this->_columns[$columnName]); + return isset($this->_columns[$name]); } /** * Returns the Column with the given name. * - * @param string $columnName The column name. + * @param string $name The column name. * * @return Column * * @throws SchemaException If the column does not exist. */ - public function getColumn($columnName) + public function getColumn($name) { - $columnName = $this->normalizeIdentifier($columnName); - if (! $this->hasColumn($columnName)) { - throw SchemaException::columnDoesNotExist($columnName, $this->_name); + $name = $this->normalizeIdentifier($name); + if (! $this->hasColumn($name)) { + throw SchemaException::columnDoesNotExist($name, $this->_name); } - return $this->_columns[$columnName]; + return $this->_columns[$name]; } /** @@ -710,34 +753,34 @@ class Table extends AbstractAsset /** * Returns whether this table has an Index with the given name. * - * @param string $indexName The index name. + * @param string $name The index name. * * @return bool */ - public function hasIndex($indexName) + public function hasIndex($name) { - $indexName = $this->normalizeIdentifier($indexName); + $name = $this->normalizeIdentifier($name); - return isset($this->_indexes[$indexName]); + return isset($this->_indexes[$name]); } /** * Returns the Index with the given name. * - * @param string $indexName The index name. + * @param string $name The index name. * * @return Index * * @throws SchemaException If the index does not exist. */ - public function getIndex($indexName) + public function getIndex($name) { - $indexName = $this->normalizeIdentifier($indexName); - if (! $this->hasIndex($indexName)) { - throw SchemaException::indexDoesNotExist($indexName, $this->_name); + $name = $this->normalizeIdentifier($name); + if (! $this->hasIndex($name)) { + throw SchemaException::indexDoesNotExist($name, $this->_name); } - return $this->_indexes[$indexName]; + return $this->_indexes[$name]; } /** @@ -816,9 +859,11 @@ class Table extends AbstractAsset foreach ($this->_columns as $k => $column) { $this->_columns[$k] = clone $column; } + foreach ($this->_indexes as $k => $index) { $this->_indexes[$k] = clone $index; } + foreach ($this->_fkConstraints as $k => $fk) { $this->_fkConstraints[$k] = clone $fk; $this->_fkConstraints[$k]->setLocalTable($this); @@ -843,7 +888,7 @@ class Table extends AbstractAsset return $this->trimQuotes(strtolower($identifier)); } - public function setComment(?string $comment) : self + public function setComment(?string $comment): self { // For keeping backward compatibility with MySQL in previous releases, table comments are stored as options. $this->addOption('comment', $comment); @@ -851,7 +896,7 @@ class Table extends AbstractAsset return $this; } - public function getComment() : ?string + public function getComment(): ?string { return $this->_options['comment'] ?? null; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/TableDiff.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/TableDiff.php index 1ff2c0ad..dcaeb200 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/TableDiff.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/TableDiff.php @@ -16,21 +16,21 @@ class TableDiff public $newName = false; /** - * All added fields. + * All added columns * * @var Column[] */ public $addedColumns; /** - * All changed fields. + * All changed columns * * @var ColumnDiff[] */ public $changedColumns = []; /** - * All removed fields. + * All removed columns * * @var Column[] */ diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php index cc15bc0f..c3428ce5 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/CreateSchemaSqlCollector.php @@ -6,6 +6,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Schema\ForeignKeyConstraint; use Doctrine\DBAL\Schema\Sequence; use Doctrine\DBAL\Schema\Table; + use function array_merge; class CreateSchemaSqlCollector extends AbstractVisitor @@ -55,7 +56,7 @@ class CreateSchemaSqlCollector extends AbstractVisitor */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { - if (! $this->platform->supportsForeignKeyConstraints()) { + if (! $this->platform->supportsCreateDropForeignKeyConstraints()) { return; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php index 81e20231..a2355ac7 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/DropSchemaSqlCollector.php @@ -8,6 +8,8 @@ use Doctrine\DBAL\Schema\SchemaException; use Doctrine\DBAL\Schema\Sequence; use Doctrine\DBAL\Schema\Table; use SplObjectStorage; + +use function assert; use function strlen; /** @@ -46,6 +48,10 @@ class DropSchemaSqlCollector extends AbstractVisitor */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { + if (! $this->platform->supportsCreateDropForeignKeyConstraints()) { + return; + } + if (strlen($fkConstraint->getName()) === 0) { throw SchemaException::namedForeignKeyRequired($localTable, $fkConstraint); } @@ -78,19 +84,19 @@ class DropSchemaSqlCollector extends AbstractVisitor { $sql = []; - /** @var ForeignKeyConstraint $fkConstraint */ foreach ($this->constraints as $fkConstraint) { + assert($fkConstraint instanceof ForeignKeyConstraint); $localTable = $this->constraints[$fkConstraint]; $sql[] = $this->platform->getDropForeignKeySQL($fkConstraint, $localTable); } - /** @var Sequence $sequence */ foreach ($this->sequences as $sequence) { + assert($sequence instanceof Sequence); $sql[] = $this->platform->getDropSequenceSQL($sequence); } - /** @var Table $table */ foreach ($this->tables as $table) { + assert($table instanceof Table); $sql[] = $this->platform->getDropTableSQL($table); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/Graphviz.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/Graphviz.php index d5e94cf6..841b7cbc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/Graphviz.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Visitor/Graphviz.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL\Schema\Visitor; use Doctrine\DBAL\Schema\ForeignKeyConstraint; use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Table; + use function current; use function file_put_contents; use function in_array; @@ -70,23 +71,28 @@ class Graphviz extends AbstractVisitor $label = '<
'; // The title - $label .= ''; + $label .= ''; // The attributes block foreach ($table->getColumns() as $column) { $columnLabel = $column->getName(); - $label .= ''; - $label .= ''; - $label .= '' + . '' + . '' + . ''; } @@ -108,6 +114,7 @@ class Graphviz extends AbstractVisitor foreach ($options as $key => $value) { $node .= $key . '=' . $value . ' '; } + $node .= "]\n"; return $node; @@ -126,6 +133,7 @@ class Graphviz extends AbstractVisitor foreach ($options as $key => $value) { $relation .= $key . '=' . $value . ' '; } + $relation .= "]\n"; return $relation; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/PoolingShardConnection.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/PoolingShardConnection.php index 8d813412..e16b8d46 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/PoolingShardConnection.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/PoolingShardConnection.php @@ -11,6 +11,7 @@ use Doctrine\DBAL\Event\ConnectionEventArgs; use Doctrine\DBAL\Events; use Doctrine\DBAL\Sharding\ShardChoser\ShardChoser; use InvalidArgumentException; + use function array_merge; use function is_numeric; use function is_string; @@ -64,8 +65,12 @@ class PoolingShardConnection extends Connection * * @throws InvalidArgumentException */ - public function __construct(array $params, Driver $driver, ?Configuration $config = null, ?EventManager $eventManager = null) - { + public function __construct( + array $params, + Driver $driver, + ?Configuration $config = null, + ?EventManager $eventManager = null + ) { if (! isset($params['global'], $params['shards'])) { throw new InvalidArgumentException("Connection Parameters require 'global' and 'shards' configurations."); } @@ -79,14 +84,18 @@ class PoolingShardConnection extends Connection } if (! ($params['shardChoser'] instanceof ShardChoser)) { - throw new InvalidArgumentException("The 'shardChoser' configuration is not a valid instance of Doctrine\DBAL\Sharding\ShardChoser\ShardChoser"); + throw new InvalidArgumentException( + "The 'shardChoser' configuration is not a valid instance of " . ShardChoser::class + ); } $this->connectionParameters[0] = array_merge($params, $params['global']); foreach ($params['shards'] as $shard) { if (! isset($shard['id'])) { - throw new InvalidArgumentException("Missing 'id' for one configured shard. Please specify a unique shard-id."); + throw new InvalidArgumentException( + "Missing 'id' for one configured shard. Please specify a unique shard-id." + ); } if (! is_numeric($shard['id']) || $shard['id'] < 1) { @@ -118,7 +127,9 @@ class PoolingShardConnection extends Connection */ public function getParams() { - return $this->activeShardId ? $this->connectionParameters[$this->activeShardId] : $this->connectionParameters[0]; + return $this->activeShardId + ? $this->connectionParameters[$this->activeShardId] + : $this->connectionParameters[0]; } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureFederationsSynchronizer.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureFederationsSynchronizer.php index 417f674a..b204ea68 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureFederationsSynchronizer.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureFederationsSynchronizer.php @@ -11,6 +11,7 @@ use Doctrine\DBAL\Schema\Synchronizer\SingleDatabaseSynchronizer; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Types\Types; use RuntimeException; + use function array_merge; /** @@ -61,7 +62,9 @@ class SQLAzureFederationsSynchronizer extends AbstractSchemaSynchronizer $defaultValue = $this->getFederationTypeDefaultValue(); $sql[] = $this->getCreateFederationStatement(); - $sql[] = 'USE FEDERATION ' . $this->shardManager->getFederationName() . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $defaultValue . ') WITH RESET, FILTERING = OFF;'; + $sql[] = 'USE FEDERATION ' . $this->shardManager->getFederationName() + . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $defaultValue . ')' + . ' WITH RESET, FILTERING = OFF;'; $sql = array_merge($sql, $federationSql); } @@ -135,7 +138,9 @@ class SQLAzureFederationsSynchronizer extends AbstractSchemaSynchronizer } $sql[] = '-- Work on Federation ID ' . $shard['id'] . "\n" . - 'USE FEDERATION ' . $this->shardManager->getFederationName() . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $shard['rangeLow'] . ') WITH RESET, FILTERING = OFF;'; + 'USE FEDERATION ' . $this->shardManager->getFederationName() + . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $shard['rangeLow'] . ')' + . ' WITH RESET, FILTERING = OFF;'; $sql = array_merge($sql, $federationSql); } @@ -225,8 +230,10 @@ class SQLAzureFederationsSynchronizer extends AbstractSchemaSynchronizer continue; } - $sql[] = '-- Work on Federation ID ' . $shard['id'] . "\n" . - 'USE FEDERATION ' . $this->shardManager->getFederationName() . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $shard['rangeLow'] . ') WITH RESET, FILTERING = OFF;'; + $sql[] = '-- Work on Federation ID ' . $shard['id'] . "\n" + . 'USE FEDERATION ' . $this->shardManager->getFederationName() + . ' (' . $this->shardManager->getDistributionKey() . ' = ' . $shard['rangeLow'] . ')' + . ' WITH RESET, FILTERING = OFF;'; $sql = array_merge($sql, $federationSql); } @@ -265,7 +272,9 @@ class SQLAzureFederationsSynchronizer extends AbstractSchemaSynchronizer $federationType = Type::getType($this->shardManager->getDistributionType()); $federationTypeSql = $federationType->getSQLDeclaration([], $this->conn->getDatabasePlatform()); - return "--Create Federation\n" . - 'CREATE FEDERATION ' . $this->shardManager->getFederationName() . ' (' . $this->shardManager->getDistributionKey() . ' ' . $federationTypeSql . ' RANGE)'; + return "--Create Federation\n" + . 'CREATE FEDERATION ' . $this->shardManager->getFederationName() + . ' (' . $this->shardManager->getDistributionKey() + . ' ' . $federationTypeSql . ' RANGE)'; } } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureShardManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureShardManager.php index d8178ee0..ce092c6b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureShardManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/SQLAzureShardManager.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Sharding\ShardingException; use Doctrine\DBAL\Sharding\ShardManager; use Doctrine\DBAL\Types\Type; use RuntimeException; + use function sprintf; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/Schema/MultiTenantVisitor.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/Schema/MultiTenantVisitor.php index a83b401c..658927eb 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/Schema/MultiTenantVisitor.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/SQLAzure/Schema/MultiTenantVisitor.php @@ -10,6 +10,7 @@ use Doctrine\DBAL\Schema\Sequence; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Visitor\Visitor; use RuntimeException; + use function in_array; /** @@ -108,6 +109,7 @@ class MultiTenantVisitor implements Visitor return $index; } } + throw new RuntimeException('No clustered index found on table ' . $table->getName()); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardManager.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardManager.php index 7b37bb2c..e988fdcf 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardManager.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardManager.php @@ -62,7 +62,7 @@ interface ShardManager * Queries all shards in undefined order and return the results appended to * each other. Restore the previous distribution value after execution. * - * Using {@link \Doctrine\DBAL\Connection::fetchAll} to retrieve rows internally. + * Using {@link Connection::fetchAll()} to retrieve rows internally. * * @param string $sql * @param mixed[] $params diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardingException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardingException.php index 4d9f41a3..f760dc7b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardingException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Sharding/ShardingException.php @@ -12,7 +12,7 @@ use Doctrine\DBAL\DBALException; class ShardingException extends DBALException { /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function notImplemented() { @@ -20,7 +20,7 @@ class ShardingException extends DBALException } /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function missingDefaultFederationName() { @@ -28,7 +28,7 @@ class ShardingException extends DBALException } /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function missingDefaultDistributionKey() { @@ -36,7 +36,7 @@ class ShardingException extends DBALException } /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function activeTransaction() { @@ -44,7 +44,7 @@ class ShardingException extends DBALException } /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function noShardDistributionValue() { @@ -52,7 +52,7 @@ class ShardingException extends DBALException } /** - * @return \Doctrine\DBAL\Sharding\ShardingException + * @return ShardingException */ public static function missingDistributionType() { diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php index 13140a6a..2a1069bc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php @@ -8,6 +8,7 @@ use Doctrine\DBAL\Types\Type; use IteratorAggregate; use PDO; use Throwable; + use function is_array; use function is_string; @@ -81,20 +82,21 @@ class Statement implements IteratorAggregate, DriverStatement * type and the value undergoes the conversion routines of the mapping type before * being bound. * - * @param string|int $name The name or position of the parameter. + * @param string|int $param The name or position of the parameter. * @param mixed $value The value of the parameter. * @param mixed $type Either a PDO binding type or a DBAL mapping type name or instance. * * @return bool TRUE on success, FALSE on failure. */ - public function bindValue($name, $value, $type = ParameterType::STRING) + public function bindValue($param, $value, $type = ParameterType::STRING) { - $this->params[$name] = $value; - $this->types[$name] = $type; + $this->params[$param] = $value; + $this->types[$param] = $type; if ($type !== null) { if (is_string($type)) { $type = Type::getType($type); } + if ($type instanceof Type) { $value = $type->convertToDatabaseValue($value, $this->platform); $bindingType = $type->getBindingType(); @@ -102,10 +104,10 @@ class Statement implements IteratorAggregate, DriverStatement $bindingType = $type; } - return $this->stmt->bindValue($name, $value, $bindingType); + return $this->stmt->bindValue($param, $value, $bindingType); } - return $this->stmt->bindValue($name, $value); + return $this->stmt->bindValue($param, $value); } /** @@ -113,20 +115,20 @@ class Statement implements IteratorAggregate, DriverStatement * * Binding a parameter by reference does not support DBAL mapping types. * - * @param string|int $name The name or position of the parameter. - * @param mixed $var The reference to the variable to bind. - * @param int $type The PDO binding type. - * @param int|null $length Must be specified when using an OUT bind - * so that PHP allocates enough memory to hold the returned value. + * @param string|int $param The name or position of the parameter. + * @param mixed $variable The reference to the variable to bind. + * @param int $type The PDO binding type. + * @param int|null $length Must be specified when using an OUT bind + * so that PHP allocates enough memory to hold the returned value. * * @return bool TRUE on success, FALSE on failure. */ - public function bindParam($name, &$var, $type = ParameterType::STRING, $length = null) + public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { - $this->params[$name] = $var; - $this->types[$name] = $type; + $this->params[$param] = $variable; + $this->types[$param] = $type; - return $this->stmt->bindParam($name, $var, $type, $length); + return $this->stmt->bindParam($param, $variable, $type, $length); } /** @@ -155,6 +157,7 @@ class Statement implements IteratorAggregate, DriverStatement if ($logger) { $logger->stopQuery(); } + throw DBALException::driverExceptionDuringQuery( $this->conn->getDriver(), $ex, @@ -166,8 +169,6 @@ class Statement implements IteratorAggregate, DriverStatement if ($logger) { $logger->stopQuery(); } - $this->params = []; - $this->types = []; return $stmt; } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php index c142accf..c53c9ccf 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ImportCommand.php @@ -11,7 +11,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use const PHP_EOL; + use function assert; use function error_get_last; use function file_exists; @@ -20,6 +20,8 @@ use function is_readable; use function realpath; use function sprintf; +use const PHP_EOL; + /** * Task for executing arbitrary SQL that can come from a file or directly from * the command line. diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ReservedWordsCommand.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ReservedWordsCommand.php index 6de3345b..d454c974 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ReservedWordsCommand.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/ReservedWordsCommand.php @@ -26,7 +26,9 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; + use function array_keys; +use function assert; use function count; use function implode; @@ -120,8 +122,8 @@ EOT */ protected function execute(InputInterface $input, OutputInterface $output) { - /** @var Connection $conn */ $conn = $this->getHelper('db')->getConnection(); + assert($conn instanceof Connection); $keywordLists = (array) $input->getOption('list'); if (! $keywordLists) { @@ -152,11 +154,15 @@ EOT 'Known lists: ' . implode(', ', array_keys($this->keywordListClasses)) ); } + $class = $this->keywordListClasses[$keywordList]; $keywords[] = new $class(); } - $output->write('Checking keyword violations for ' . implode(', ', $keywordLists) . '...', true); + $output->write( + 'Checking keyword violations for ' . implode(', ', $keywordLists) . '...', + true + ); $schema = $conn->getSchemaManager()->createSchema(); $visitor = new ReservedKeywordsValidator($keywords); @@ -164,7 +170,12 @@ EOT $violations = $visitor->getViolations(); if (count($violations) !== 0) { - $output->write('There are ' . count($violations) . ' reserved keyword violations in your database schema:', true); + $output->write( + 'There are ' . count($violations) . ' reserved keyword violations' + . ' in your database schema:', + true + ); + foreach ($violations as $violation) { $output->write(' - ' . $violation, true); } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php index 5111a650..d17db5ae 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Console/Command/RunSqlCommand.php @@ -10,6 +10,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; + use function assert; use function is_numeric; use function is_string; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php index 8cb8f4b8..c1e72aa3 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Tools/Dumper.php @@ -8,6 +8,7 @@ use DateTimeInterface; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Persistence\Proxy; use stdClass; + use function array_keys; use function assert; use function class_exists; @@ -39,6 +40,8 @@ final class Dumper { /** * Private constructor (prevents instantiation). + * + * @codeCoverageIgnore */ private function __construct() { @@ -52,7 +55,7 @@ final class Dumper * @param mixed $var The variable to dump. * @param int $maxDepth The maximum nesting level for object properties. */ - public static function dump($var, int $maxDepth = 2) : string + public static function dump($var, int $maxDepth = 2): string { $html = ini_set('html_errors', '1'); assert(is_string($html)); @@ -150,6 +153,7 @@ final class Dumper if ($aux[0] === '') { $name .= ':' . ($aux[1] === '*' ? 'protected' : $aux[1] . ':private'); } + $return->$name = self::export($clone[$key], $maxDepth - 1); } @@ -159,7 +163,7 @@ final class Dumper /** * @param object $object */ - private static function getClass($object) : string + private static function getClass($object): string { $class = get_class($object); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php index 4e35639f..e8dc5d91 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php @@ -26,6 +26,9 @@ final class TransactionIsolationLevel */ public const SERIALIZABLE = 4; + /** + * @codeCoverageIgnore + */ private function __construct() { } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php index 78325ad9..3137e03f 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function is_resource; use function restore_error_handler; use function serialize; @@ -18,9 +19,9 @@ class ArrayType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getClobTypeDeclarationSQL($fieldDeclaration); + return $platform->getClobTypeDeclarationSQL($column); } /** @@ -43,7 +44,7 @@ class ArrayType extends Type $value = is_resource($value) ? stream_get_contents($value) : $value; - set_error_handler(function (int $code, string $message) : bool { + set_error_handler(function (int $code, string $message): bool { throw ConversionException::conversionFailedUnserialization($this->getName(), $message); }); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php index 69cd5341..e5d6dcbb 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php @@ -21,9 +21,9 @@ class BigIntType extends Type implements PhpIntegerMappingType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getBigIntTypeDeclarationSQL($fieldDeclaration); + return $platform->getBigIntTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php index d604b3bf..e030f166 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function assert; use function fopen; use function fseek; @@ -19,9 +20,9 @@ class BinaryType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getBinaryTypeDeclarationSQL($fieldDeclaration); + return $platform->getBinaryTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php index e4bb22f0..b71e7255 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function assert; use function fopen; use function fseek; @@ -19,9 +20,9 @@ class BlobType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getBlobTypeDeclarationSQL($fieldDeclaration); + return $platform->getBlobTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php index bf9be9b1..f6e4df3b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php @@ -13,9 +13,9 @@ class BooleanType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getBooleanTypeDeclarationSQL($fieldDeclaration); + return $platform->getBooleanTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php index ba8c2a91..55dfedee 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\DBALException; use Throwable; + use function get_class; use function gettype; use function implode; @@ -26,7 +27,7 @@ class ConversionException extends DBALException * @param string $value * @param string $toType * - * @return \Doctrine\DBAL\Types\ConversionException + * @return ConversionException */ public static function conversionFailed($value, $toType, ?Throwable $previous = null) { @@ -43,7 +44,7 @@ class ConversionException extends DBALException * @param string $toType * @param string $expectedFormat * - * @return \Doctrine\DBAL\Types\ConversionException + * @return ConversionException */ public static function conversionFailedFormat($value, $toType, $expectedFormat, ?Throwable $previous = null) { @@ -64,7 +65,7 @@ class ConversionException extends DBALException * @param string $toType * @param string[] $possibleTypes * - * @return \Doctrine\DBAL\Types\ConversionException + * @return ConversionException */ public static function conversionFailedInvalidType( $value, @@ -111,7 +112,7 @@ class ConversionException extends DBALException )); } - public static function conversionFailedUnserialization(string $format, string $error) : self + public static function conversionFailedUnserialization(string $format, string $error): self { return new self(sprintf( "Could not convert database value to '%s' as an error was triggered by the unserialization: '%s'", diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php index 96a446e8..6ecd4989 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL\Types; use DateInterval; use Doctrine\DBAL\Platforms\AbstractPlatform; use Throwable; + use function substr; /** @@ -25,11 +26,11 @@ class DateIntervalType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - $fieldDeclaration['length'] = 255; + $column['length'] = 255; - return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration); + return $platform->getVarcharTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php index 51960a8c..9af4fc34 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use DateTimeImmutable; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function date_create_immutable; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php index 65071a6b..f6f6da0c 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL\Types; use DateTime; use DateTimeInterface; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function date_create; /** @@ -23,9 +24,9 @@ class DateTimeType extends Type implements PhpDateTimeMappingType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getDateTimeTypeDeclarationSQL($fieldDeclaration); + return $platform->getDateTimeTypeDeclarationSQL($column); } /** @@ -60,7 +61,11 @@ class DateTimeType extends Type implements PhpDateTimeMappingType } if (! $val) { - throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getDateTimeFormatString()); + throw ConversionException::conversionFailedFormat( + $value, + $this->getName(), + $platform->getDateTimeFormatString() + ); } return $val; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php index 6240da89..bc25890b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php @@ -35,9 +35,9 @@ class DateTimeTzType extends Type implements PhpDateTimeMappingType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getDateTimeTzTypeDeclarationSQL($fieldDeclaration); + return $platform->getDateTimeTzTypeDeclarationSQL($column); } /** @@ -67,7 +67,11 @@ class DateTimeTzType extends Type implements PhpDateTimeMappingType $val = DateTime::createFromFormat($platform->getDateTimeTzFormatString(), $value); if (! $val) { - throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getDateTimeTzFormatString()); + throw ConversionException::conversionFailedFormat( + $value, + $this->getName(), + $platform->getDateTimeTzFormatString() + ); } return $val; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php index 15d9362f..81cc86c5 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php @@ -22,9 +22,9 @@ class DateType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getDateTypeDeclarationSQL($fieldDeclaration); + return $platform->getDateTypeDeclarationSQL($column); } /** @@ -54,7 +54,11 @@ class DateType extends Type $val = DateTime::createFromFormat('!' . $platform->getDateFormatString(), $value); if (! $val) { - throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getDateFormatString()); + throw ConversionException::conversionFailedFormat( + $value, + $this->getName(), + $platform->getDateFormatString() + ); } return $val; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php index b2d37f00..be76b7c8 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php @@ -20,9 +20,9 @@ class DecimalType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getDecimalTypeDeclarationSQL($fieldDeclaration); + return $platform->getDecimalTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php index 4988d725..98ead4a9 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php @@ -17,9 +17,9 @@ class FloatType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getFloatDeclarationSQL($fieldDeclaration); + return $platform->getFloatDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php index dd451650..a4974f9d 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php @@ -12,9 +12,9 @@ class GuidType extends StringType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getGuidTypeDeclarationSQL($fieldDeclaration); + return $platform->getGuidTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php index d7ab8fd8..0df606e2 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php @@ -21,9 +21,9 @@ class IntegerType extends Type implements PhpIntegerMappingType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getIntegerTypeDeclarationSQL($fieldDeclaration); + return $platform->getIntegerTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php index bc468fba..400e0ef3 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function is_resource; use function json_decode; use function stream_get_contents; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php index 127f3fa8..d17b7f51 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php @@ -3,7 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; -use const JSON_ERROR_NONE; + use function is_resource; use function json_decode; use function json_encode; @@ -11,6 +11,8 @@ use function json_last_error; use function json_last_error_msg; use function stream_get_contents; +use const JSON_ERROR_NONE; + /** * Type generating json objects values */ @@ -19,9 +21,9 @@ class JsonType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getJsonTypeDeclarationSQL($fieldDeclaration); + return $platform->getJsonTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php index 82b1a752..49042c1b 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function is_resource; use function restore_error_handler; use function serialize; @@ -18,9 +19,9 @@ class ObjectType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getClobTypeDeclarationSQL($fieldDeclaration); + return $platform->getClobTypeDeclarationSQL($column); } /** @@ -42,7 +43,7 @@ class ObjectType extends Type $value = is_resource($value) ? stream_get_contents($value) : $value; - set_error_handler(function (int $code, string $message) : bool { + set_error_handler(function (int $code, string $message): bool { throw ConversionException::conversionFailedUnserialization($this->getName(), $message); }); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php index 31c22b8e..5e3e73ce 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function explode; use function implode; use function is_resource; @@ -18,9 +19,9 @@ class SimpleArrayType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getClobTypeDeclarationSQL($fieldDeclaration); + return $platform->getClobTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php index 5fa3cb74..90e63495 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php @@ -21,9 +21,9 @@ class SmallIntType extends Type implements PhpIntegerMappingType /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getSmallIntTypeDeclarationSQL($fieldDeclaration); + return $platform->getSmallIntTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php index e0d1a552..9a510eff 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php @@ -12,9 +12,9 @@ class StringType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration); + return $platform->getVarcharTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php index 76dd7c48..b1e640b6 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php @@ -3,6 +3,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function is_resource; use function stream_get_contents; @@ -14,9 +15,9 @@ class TextType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getClobTypeDeclarationSQL($fieldDeclaration); + return $platform->getClobTypeDeclarationSQL($column); } /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php index 1eeb2c01..59bd7f75 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php @@ -22,9 +22,9 @@ class TimeType extends Type /** * {@inheritdoc} */ - public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) + public function getSQLDeclaration(array $column, AbstractPlatform $platform) { - return $platform->getTimeTypeDeclarationSQL($fieldDeclaration); + return $platform->getTimeTypeDeclarationSQL($column); } /** @@ -54,7 +54,11 @@ class TimeType extends Type $val = DateTime::createFromFormat('!' . $platform->getTimeFormatString(), $value); if (! $val) { - throw ConversionException::conversionFailedFormat($value, $this->getName(), $platform->getTimeFormatString()); + throw ConversionException::conversionFailedFormat( + $value, + $this->getName(), + $platform->getTimeFormatString() + ); } return $val; diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php index d39ac2bd..0e56a565 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php @@ -5,6 +5,7 @@ namespace Doctrine\DBAL\Types; use Doctrine\DBAL\DBALException; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function array_map; use function get_class; use function str_replace; @@ -175,14 +176,14 @@ abstract class Type } /** - * Gets the SQL declaration snippet for a field of this type. + * Gets the SQL declaration snippet for a column of this type. * - * @param mixed[] $fieldDeclaration The field declaration. - * @param AbstractPlatform $platform The currently used database platform. + * @param mixed[] $column The column definition + * @param AbstractPlatform $platform The currently used database platform. * * @return string */ - abstract public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform); + abstract public function getSQLDeclaration(array $column, AbstractPlatform $platform); /** * Gets the name of this type. @@ -196,7 +197,7 @@ abstract class Type /** * @internal This method is only to be used within DBAL for forward compatibility purposes. Do not use directly. */ - final public static function getTypeRegistry() : TypeRegistry + final public static function getTypeRegistry(): TypeRegistry { if (self::$typeRegistry === null) { self::$typeRegistry = self::createTypeRegistry(); @@ -205,7 +206,7 @@ abstract class Type return self::$typeRegistry; } - private static function createTypeRegistry() : TypeRegistry + private static function createTypeRegistry(): TypeRegistry { $registry = new TypeRegistry(); @@ -222,7 +223,7 @@ abstract class Type * * @param string $name The name of the type (as returned by getName()). * - * @return \Doctrine\DBAL\Types\Type + * @return Type * * @throws DBALException */ @@ -277,7 +278,7 @@ abstract class Type * Gets the (preferred) binding type for values of this type that * can be used when binding parameters to prepared statements. * - * This method should return one of the {@link \Doctrine\DBAL\ParameterType} constants. + * This method should return one of the {@link ParameterType} constants. * * @return int */ @@ -295,7 +296,7 @@ abstract class Type public static function getTypesMap() { return array_map( - static function (Type $type) : string { + static function (Type $type): string { return get_class($type); }, self::getTypeRegistry()->getMap() diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php index 7e8093cf..362a5ccc 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Doctrine\DBAL\Types; use Doctrine\DBAL\DBALException; + use function array_search; use function in_array; @@ -24,7 +25,7 @@ final class TypeRegistry * * @throws DBALException */ - public function get(string $name) : Type + public function get(string $name): Type { if (! isset($this->instances[$name])) { throw DBALException::unknownColumnType($name); @@ -38,7 +39,7 @@ final class TypeRegistry * * @throws DBALException */ - public function lookupName(Type $type) : string + public function lookupName(Type $type): string { $name = $this->findTypeName($type); @@ -52,7 +53,7 @@ final class TypeRegistry /** * Checks if there is a type of the given name. */ - public function has(string $name) : bool + public function has(string $name): bool { return isset($this->instances[$name]); } @@ -62,7 +63,7 @@ final class TypeRegistry * * @throws DBALException */ - public function register(string $name, Type $type) : void + public function register(string $name, Type $type): void { if (isset($this->instances[$name])) { throw DBALException::typeExists($name); @@ -80,7 +81,7 @@ final class TypeRegistry * * @throws DBALException */ - public function override(string $name, Type $type) : void + public function override(string $name, Type $type): void { if (! isset($this->instances[$name])) { throw DBALException::typeNotFound($name); @@ -100,12 +101,12 @@ final class TypeRegistry * * @return array */ - public function getMap() : array + public function getMap(): array { return $this->instances; } - private function findTypeName(Type $type) : ?string + private function findTypeName(Type $type): ?string { $name = array_search($type, $this->instances, true); diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php index 2ffd1061..37a3d444 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php @@ -37,6 +37,9 @@ final class Types /** @deprecated json_array type is deprecated, use {@see self::JSON} instead. */ public const JSON_ARRAY = 'json_array'; + /** + * @codeCoverageIgnore + */ private function __construct() { } diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php index 38beb3ba..23f8b572 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use DateTimeImmutable; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function date_create_immutable; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php index 1d9dbd3a..20960579 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php @@ -4,6 +4,7 @@ namespace Doctrine\DBAL\Types; use DateTime; use Doctrine\DBAL\Platforms\AbstractPlatform; + use function date_create; /** diff --git a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Version.php b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Version.php index 93fd5027..8036de07 100644 --- a/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Version.php +++ b/conf/site/vendor/doctrine/dbal/lib/Doctrine/DBAL/Version.php @@ -14,7 +14,7 @@ class Version /** * Current Doctrine Version. */ - public const VERSION = '2.10.2'; + public const VERSION = '2.10.3'; /** * Compares a Doctrine version with the current one. diff --git a/conf/site/vendor/doctrine/dbal/psalm.xml b/conf/site/vendor/doctrine/dbal/psalm.xml index 3db108eb..f2fbc3cd 100644 --- a/conf/site/vendor/doctrine/dbal/psalm.xml +++ b/conf/site/vendor/doctrine/dbal/psalm.xml @@ -1,7 +1,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/conf/site/vendor/doctrine/event-manager/composer.json b/conf/site/vendor/doctrine/event-manager/composer.json index c0d3a847..3f026fe8 100644 --- a/conf/site/vendor/doctrine/event-manager/composer.json +++ b/conf/site/vendor/doctrine/event-manager/composer.json @@ -20,7 +20,7 @@ {"name": "Marco Pivetta", "email": "ocramius@gmail.com"} ], "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php b/conf/site/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php index 1a6e333f..8af456b1 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php @@ -366,6 +366,19 @@ abstract class GeneratorCommand extends Command return in_array($name, $this->reservedNames); } + /** + * Get the first view directory path from the application configuration. + * + * @param string $path + * @return string + */ + protected function viewPath($path = '') + { + $views = $this->laravel['config']['view.paths'][0] ?? resource_path('views'); + + return $views.($path ? DIRECTORY_SEPARATOR.$path : $path); + } + /** * Get the console command arguments. * diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Contracts/Pagination/Paginator.php b/conf/site/vendor/laravel/framework/src/Illuminate/Contracts/Pagination/Paginator.php index f6bd6c0e..49bafaa7 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Contracts/Pagination/Paginator.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Contracts/Pagination/Paginator.php @@ -86,7 +86,7 @@ interface Paginator public function hasPages(); /** - * Determine if there is more items in the data store. + * Determine if there are more items in the data store. * * @return bool */ diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php b/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php index 2d0ec3ec..24ab0e4e 100755 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php @@ -193,7 +193,7 @@ class Builder return $this; } - if ($this->model->getKeyType() === 'string') { + if ($id !== null && $this->model->getKeyType() === 'string') { $id = (string) $id; } @@ -214,7 +214,7 @@ class Builder return $this; } - if ($this->model->getKeyType() === 'string') { + if ($id !== null && $this->model->getKeyType() === 'string') { $id = (string) $id; } diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php b/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php index 4a02fec5..c97c4033 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php @@ -205,10 +205,10 @@ trait QueriesRelationships if ($types === ['*']) { $types = $this->model->newModelQuery()->distinct()->pluck($relation->getMorphType())->filter()->all(); + } - foreach ($types as &$type) { - $type = Relation::getMorphedModel($type) ?? $type; - } + foreach ($types as &$type) { + $type = Relation::getMorphedModel($type) ?? $type; } return $this->where(function ($query) use ($relation, $callback, $operator, $count, $types) { diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Application.php index 3ef3a2eb..939fcd41 100755 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Application.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Application.php @@ -33,7 +33,7 @@ class Application extends Container implements ApplicationContract, CachesConfig * * @var string */ - const VERSION = '7.26.0'; + const VERSION = '7.27.0'; /** * The base path for the Laravel installation. diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php index 6efeec97..8ab3e8ee 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php @@ -53,9 +53,9 @@ class ComponentMakeCommand extends GeneratorCommand */ protected function writeView() { - $view = $this->getView(); - - $path = resource_path('views').'/'.str_replace('.', '/', 'components.'.$view); + $path = $this->viewPath( + str_replace('.', '/', 'components.'.$this->getView()) + ); if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0777, true, true); diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php index d401a9ec..19bef8db 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php @@ -51,7 +51,9 @@ class MailMakeCommand extends GeneratorCommand */ protected function writeMarkdownTemplate() { - $path = resource_path('views/'.str_replace('.', '/', $this->option('markdown'))).'.blade.php'; + $path = $this->viewPath( + str_replace('.', '/', $this->option('markdown')).'.blade.php' + ); if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0755, true); diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php index 40e9d849..6eb66e28 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php @@ -51,7 +51,9 @@ class NotificationMakeCommand extends GeneratorCommand */ protected function writeMarkdownTemplate() { - $path = resource_path('views/'.str_replace('.', '/', $this->option('markdown'))).'.blade.php'; + $path = $this->viewPath( + str_replace('.', '/', $this->option('markdown')).'.blade.php' + ); if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0755, true); diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php index e968ad90..0cbeea12 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php @@ -37,11 +37,21 @@ trait RefreshDatabase */ protected function refreshInMemoryDatabase() { - $this->artisan('migrate'); + $this->artisan('migrate', $this->migrateUsing()); $this->app[Kernel::class]->setArtisan(null); } + /** + * The parameters that should be used when running "migrate". + * + * @return array + */ + protected function migrateUsing() + { + return []; + } + /** * Refresh a conventional test database. * @@ -50,10 +60,7 @@ trait RefreshDatabase protected function refreshTestDatabase() { if (! RefreshDatabaseState::$migrated) { - $this->artisan('migrate:fresh', [ - '--drop-views' => $this->shouldDropViews(), - '--drop-types' => $this->shouldDropTypes(), - ]); + $this->artisan('migrate:fresh', $this->migrateFreshUsing()); $this->app[Kernel::class]->setArtisan(null); @@ -63,6 +70,19 @@ trait RefreshDatabase $this->beginDatabaseTransaction(); } + /** + * The parameters that should be used when running "migrate:fresh". + * + * @return array + */ + protected function migrateFreshUsing() + { + return [ + '--drop-views' => $this->shouldDropViews(), + '--drop-types' => $this->shouldDropTypes(), + ]; + } + /** * Begin a database transaction on the testing database. * diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php b/conf/site/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php index 089a3e81..d9c95c78 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php @@ -7,6 +7,7 @@ use Illuminate\Redis\Connections\PhpRedisClusterConnection; use Illuminate\Redis\Connections\PhpRedisConnection; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Redis as RedisFacade; +use Illuminate\Support\Str; use LogicException; use Redis; use RedisCluster; @@ -183,7 +184,7 @@ class PhpRedisConnector implements Connector protected function formatHost(array $options) { if (isset($options['scheme'])) { - return "{$options['scheme']}://{$options['host']}"; + return Str::start($options['host'], "{$options['scheme']}://"); } return $options['host']; diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php b/conf/site/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php index 1880be1b..6c406cad 100755 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php @@ -616,25 +616,25 @@ class UrlGenerator implements UrlGeneratorContract /** * Force the scheme for URLs. * - * @param string $scheme + * @param string|null $scheme * @return void */ public function forceScheme($scheme) { $this->cachedScheme = null; - $this->forceScheme = $scheme.'://'; + $this->forceScheme = $scheme ? $scheme.'://' : null; } /** * Set the forced root URL. * - * @param string $root + * @param string|null $root * @return void */ public function forceRootUrl($root) { - $this->forcedRoot = rtrim($root, '/'); + $this->forcedRoot = $root ? rtrim($root, '/') : null; $this->cachedRoot = null; } diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php b/conf/site/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php index 85a9b39d..5da389ae 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php @@ -40,9 +40,9 @@ class AuthenticateSession } if ($this->auth->viaRemember()) { - $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2]; + $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2] ?? null; - if ($passwordHash != $request->user()->getAuthPassword()) { + if (! $passwordHash || $passwordHash != $request->user()->getAuthPassword()) { $this->logout($request); } } diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Support/Str.php b/conf/site/vendor/laravel/framework/src/Illuminate/Support/Str.php index 76dfa9d8..59158f4c 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Support/Str.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Support/Str.php @@ -370,6 +370,45 @@ class Str return rtrim($matches[0]).$end; } + /** + * Pad both sides of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padBoth($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_BOTH); + } + + /** + * Pad the left side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padLeft($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_LEFT); + } + + /** + * Pad the right side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padRight($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_RIGHT); + } + /** * Parse a Class[@]method style callback into class and method. * diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/Support/Stringable.php b/conf/site/vendor/laravel/framework/src/Illuminate/Support/Stringable.php index 0ccb9f48..82ecac84 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/Support/Stringable.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/Support/Stringable.php @@ -338,6 +338,42 @@ class Stringable return collect($matches[1] ?? $matches[0]); } + /** + * Pad both sides of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padBoth($length, $pad = ' ') + { + return new static(Str::padBoth($this->value, $length, $pad)); + } + + /** + * Pad the left side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padLeft($length, $pad = ' ') + { + return new static(Str::padLeft($this->value, $length, $pad)); + } + + /** + * Pad the right side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padRight($length, $pad = ' ') + { + return new static(Str::padRight($this->value, $length, $pad)); + } + /** * Parse a Class@method style callback into class and method. * diff --git a/conf/site/vendor/laravel/framework/src/Illuminate/View/Component.php b/conf/site/vendor/laravel/framework/src/Illuminate/View/Component.php index 4e11c316..c3e37549 100644 --- a/conf/site/vendor/laravel/framework/src/Illuminate/View/Component.php +++ b/conf/site/vendor/laravel/framework/src/Illuminate/View/Component.php @@ -133,6 +133,9 @@ abstract class Component $reflection = new ReflectionClass($this); static::$propertyCache[$class] = collect($reflection->getProperties(ReflectionProperty::IS_PUBLIC)) + ->reject(function (ReflectionProperty $property) { + return $property->isStatic(); + }) ->reject(function (ReflectionProperty $property) { return $this->shouldIgnore($property->getName()); }) diff --git a/conf/site/vendor/nunomaduro/larastan/composer.json b/conf/site/vendor/nunomaduro/larastan/composer.json index 4f7dea3a..d0c94788 100644 --- a/conf/site/vendor/nunomaduro/larastan/composer.json +++ b/conf/site/vendor/nunomaduro/larastan/composer.json @@ -26,7 +26,7 @@ "ext-json": "*" }, "require-dev": { - "orchestra/testbench": "^4.0 || ^5.0", + "orchestra/testbench": "^4.0 || ^5.0 || ^6.0", "phpunit/phpunit": "^7.3 || ^8.2" }, "suggest": { diff --git a/conf/site/vendor/nunomaduro/larastan/extension.neon b/conf/site/vendor/nunomaduro/larastan/extension.neon index b7059319..2c99e3bf 100644 --- a/conf/site/vendor/nunomaduro/larastan/extension.neon +++ b/conf/site/vendor/nunomaduro/larastan/extension.neon @@ -48,7 +48,7 @@ parametersSchema: conditionalTags: NunoMaduro\Larastan\Rules\NoUnnecessaryCollectionCallRule: - phpstan.rules.rule: %noUnnecessaryCollectionCall% + phpstan.rules.rule: %noUnnecessaryCollectionCall% services: - @@ -216,6 +216,11 @@ services: tags: - phpstan.broker.dynamicFunctionReturnTypeExtension + - + class: NunoMaduro\Larastan\ReturnTypes\Helpers\ValidatorExtension + tags: + - phpstan.broker.dynamicFunctionReturnTypeExtension + - class: NunoMaduro\Larastan\Types\AbortIfFunctionTypeSpecifyingExtension tags: diff --git a/conf/site/vendor/nunomaduro/larastan/src/ApplicationResolver.php b/conf/site/vendor/nunomaduro/larastan/src/ApplicationResolver.php index 78569eaa..64f67ee7 100644 --- a/conf/site/vendor/nunomaduro/larastan/src/ApplicationResolver.php +++ b/conf/site/vendor/nunomaduro/larastan/src/ApplicationResolver.php @@ -47,9 +47,13 @@ final class ApplicationResolver } /** - * {@inheritdoc} + * Define environment setup. + * + * @param \Illuminate\Foundation\Application $app + * + * @return void */ - protected function getEnvironmentSetUp(\Illuminate\Foundation\Application $app): void + protected function getEnvironmentSetUp($app) { // .. } @@ -62,8 +66,8 @@ final class ApplicationResolver */ private static function isServiceProvider(string $class): bool { - return in_array(\Illuminate\Support\ServiceProvider::class, class_parents($class), true) && - ! ((new \ReflectionClass($class))->isAbstract()); + return in_array(\Illuminate\Support\ServiceProvider::class, class_parents($class), true) + && ! (new \ReflectionClass($class))->isAbstract(); } /** diff --git a/conf/site/vendor/nunomaduro/larastan/src/Methods/BuilderHelper.php b/conf/site/vendor/nunomaduro/larastan/src/Methods/BuilderHelper.php index 4a80a928..a0603a0b 100644 --- a/conf/site/vendor/nunomaduro/larastan/src/Methods/BuilderHelper.php +++ b/conf/site/vendor/nunomaduro/larastan/src/Methods/BuilderHelper.php @@ -18,6 +18,8 @@ use PHPStan\Reflection\ParametersAcceptorSelector; use PHPStan\Reflection\Php\DummyParameter; use PHPStan\ShouldNotHappenException; use PHPStan\Type\Generic\GenericObjectType; +use PHPStan\Type\Generic\TemplateTypeHelper; +use PHPStan\Type\Generic\TemplateTypeMap; use PHPStan\Type\MixedType; use PHPStan\Type\ObjectType; use PHPStan\Type\Type; @@ -171,7 +173,9 @@ class BuilderHelper if ($methodReflection !== null) { $parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants()); - $returnType = $parametersAcceptor->getReturnType(); + + // Resolve any generic models in the return type + $returnType = TemplateTypeHelper::resolveTemplateTypes($parametersAcceptor->getReturnType(), new TemplateTypeMap(['TModelClass' => new ObjectType($modelName)])); // If a model scope has a void return type, return the builder if ($returnType instanceof VoidType && $model->hasNativeMethod('scope'.ucfirst($methodName))) { diff --git a/conf/site/vendor/nunomaduro/larastan/src/Properties/SchemaAggregator.php b/conf/site/vendor/nunomaduro/larastan/src/Properties/SchemaAggregator.php index b2a1613b..a7574242 100644 --- a/conf/site/vendor/nunomaduro/larastan/src/Properties/SchemaAggregator.php +++ b/conf/site/vendor/nunomaduro/larastan/src/Properties/SchemaAggregator.php @@ -205,7 +205,7 @@ final class SchemaAggregator $secondArgArray = []; foreach ($secondArg->items as $array_item) { - if ($array_item->value instanceof PhpParser\Node\Scalar\String_) { + if ($array_item !== null && $array_item->value instanceof PhpParser\Node\Scalar\String_) { $secondArgArray[] = $array_item->value->value; } } diff --git a/conf/site/vendor/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php b/conf/site/vendor/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php new file mode 100644 index 00000000..6c7ba931 --- /dev/null +++ b/conf/site/vendor/nunomaduro/larastan/src/ReturnTypes/Helpers/ValidatorExtension.php @@ -0,0 +1,40 @@ +getName() === 'validator'; + } + + public function getTypeFromFunctionCall( + FunctionReflection $functionReflection, + FuncCall $functionCall, + Scope $scope + ): Type { + if (count($functionCall->args) === 0) { + return new ObjectType(\Illuminate\Contracts\Validation\Factory::class); + } + + return new IntersectionType([ + new ObjectType(\Illuminate\Validation\Validator::class), + new ObjectType(\Illuminate\Contracts\Validation\Validator::class), + ]); + } +} diff --git a/conf/site/vendor/nunomaduro/larastan/src/Types/ModelRelationsDynamicMethodReturnTypeExtension.php b/conf/site/vendor/nunomaduro/larastan/src/Types/ModelRelationsDynamicMethodReturnTypeExtension.php index 1ea7d1cb..9486ee4e 100644 --- a/conf/site/vendor/nunomaduro/larastan/src/Types/ModelRelationsDynamicMethodReturnTypeExtension.php +++ b/conf/site/vendor/nunomaduro/larastan/src/Types/ModelRelationsDynamicMethodReturnTypeExtension.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace NunoMaduro\Larastan\Types; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\Relation; use NunoMaduro\Larastan\Concerns\HasContainer; use PhpParser\Node\Expr\MethodCall; @@ -93,6 +94,15 @@ class ModelRelationsDynamicMethodReturnTypeExtension implements DynamicMethodRet ->relationParserHelper ->findRelatedModelInRelationMethod($methodReflection); + $classReflection = $methodReflection->getDeclaringClass(); + + if ($returnType->isInstanceOf(BelongsTo::class)->yes()) { + return new GenericObjectType($returnType->getClassName(), [ + new ObjectType($relatedModelClassName), + new ObjectType($classReflection->getName()), + ]); + } + return new GenericObjectType($returnType->getClassName(), [new ObjectType($relatedModelClassName)]); } } diff --git a/conf/site/vendor/nunomaduro/larastan/stubs/BelongsTo.stub b/conf/site/vendor/nunomaduro/larastan/stubs/BelongsTo.stub index df174f46..a5d47408 100644 --- a/conf/site/vendor/nunomaduro/larastan/stubs/BelongsTo.stub +++ b/conf/site/vendor/nunomaduro/larastan/stubs/BelongsTo.stub @@ -4,13 +4,20 @@ namespace Illuminate\Database\Eloquent\Relations; /** * @template TRelatedModel of \Illuminate\Database\Eloquent\Model + * @template TChildModel of \Illuminate\Database\Eloquent\Model * @extends Relation */ class BelongsTo extends Relation { - /** @phpstan-return TRelatedModel */ + /** @phpstan-return TChildModel */ public function associate(); + /** @phpstan-return TChildModel */ + public function dissociate(); + + /** @phpstan-return TChildModel */ + public function getChild(); + /** * Get the results of the relationship. * diff --git a/conf/site/vendor/nunomaduro/larastan/stubs/EloquentBuilder.stub b/conf/site/vendor/nunomaduro/larastan/stubs/EloquentBuilder.stub index 07ef3edf..eb256d55 100644 --- a/conf/site/vendor/nunomaduro/larastan/stubs/EloquentBuilder.stub +++ b/conf/site/vendor/nunomaduro/larastan/stubs/EloquentBuilder.stub @@ -117,6 +117,17 @@ class Builder */ public function firstOr($columns = ['*'], \Closure $callback = null); + /** + * Add a basic where clause to the query, and return the first result. + * + * @param \Closure|string|array $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @phpstan-return TModelClass|null + */ + public function firstWhere($column, $operator = null, $value = null, $boolean = 'and'); + /** * Execute the query as a "select" statement. * diff --git a/conf/site/vendor/phpstan/phpstan/phpstan b/conf/site/vendor/phpstan/phpstan/phpstan index 037e8ea760c726f1935e8e6491004bbd19cf92ea..c48c831c74bcb953e6ba2959b4d5801c38183b85 100755 GIT binary patch delta 369371 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�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

&0(@Y1i1OPuF%9s;R~ z5i+{oLB+WCfggOeB?y*y zgri+;CSc|SX!GcOgPA9f zXpoo9#LJ`BTrzQaHAYkt$5WT5n7F}#3q_|Pa1Df+i5sc@P@*yhgIAnzf^8iA?>*(4 z9e|k9V^48#CZ#eS$`4d}lk#{Wn;Su5^e&l}D9qp(L z8d+K~=nL)o&gjob3&(@SZ&`$HaN;4s&JqC2M-pf&jF+Pkg-6UW@II-dz)flLkwaU> z(t6mDuHfWd%ELDk2BJbK?;`j@`%VJ49WO7{EVAC?)ocZFvy&iO!HY_aB6ToX;7(Vd z%$lI{HIqLmx(EwpB%$@{5H4+~fG^qCRY-HfBC-7%IGuV3oWhp6;0I%d;=Y)&CqIuP zp-phAryw|QpVo_l$T)>3-ssuVAM`^6{s1MxN32Rl3!da;FQL$xtRR9l?LXPa38PK$ zX&<2v+ddMn8YsA@o-{i#cBPKdp2t^*AGYWxa4SEi6z96ep5rOER9tZ1>MwAf{5sw} zH$eD+MeSZ-u3)P$;M&0pok9aa7$l^#r6j=N@bMrgWa{F)G^K1b>@L~o1I1}VjPp`k zoF~_?_rt*gXZcC=kAQdEUiX2rA;LK45bh7z2-ua0!urBkG&e(r@}VRW0Vr17oW$he z<co}b@E`F>h(*;aA7(NQ^GSDlBd7f4A!j19fPzH!oQuDs-geZkpkzCp^berQfSK5 zBiKJaHbCSQ!Qpqn#mK8BIYE;1!2uGg6bVYwIHom_2;l*vk=$&aL{dN4lEG^PtjDR7 zy3#E&g{~|l2@Q%Ux06N3sB)aZi7zvr4A5%40M22$kWQ*`lrVOJkj&PT#NG#PO%OQy z7PkD){JP|L90nZ0*eOj2by4w zEcy5(VXVAh@$AFg8VjqZfPA;sg(WEMBm~2ZV|>4U2s@X?wuswVNwD|#!yLxfem^{z zEhvTL`LW3;AkpykY&11`P7_i=9VsY0pOBg7~hUoZ=X5WH_D5^{E0 z+(B(Vqk!^hLNi+4r>1;Y@qQ3En|dykEj5akQq+_J!wC!m(q*F+G36L;A$Vj9quBzP zIfwDZhEeC-;A-kQFTAw;h&!ZY3u74MQmc2ca4!q@d$I*>Z7`4mmdrgIIQS z!X9_LOrkVLh-Sgz2=C%5uTC=*<;v`v+7)ZkOko%cQxeh%PLipT?6V6k?c6+GVN0?b z0Jrjl94D1gb^~E^zA)N(UI4V6B^+e)L=8(?6$qi+j7k;q!bkXJ7)`FyqZ*htS5QLK zY<{+q^cNQ^MU$63D$HS9r<%C`9D(yzOZq(oew)KH3zhr;7&n*qFNsx9(>H_5bNM+p zWj(5+OYW9t5V;riYPl`mqu7_rUgxy#i+8i zXD=v0f6$^N#g7SjE`UUlp-bcpUN6MM<|l-nEJD~<&i1DJAgWRmw~gas)5p~obEOJ3-2yOszK*P_~e5A(WAbQu6!LITCg_7c($4T9`NZp;Rs~x z*SkUCt_lwbJA`NC_w+jM?Sofpsbk{t$-4Ym1Mt%S;|8eu3%7uh9hE^~AAKEn#}Ab@ zEuM|RcX_MOhN}AUBwm5^o{u{;Z-S#{-y7(I$oSbe2;MIiyp=QXO4t0{%<)+h;M$KT zBcQBF6TEZwh!Jlct$%yRHyCTSjIXONUJly|&MtmC9I8qidx7e(F^Hv?wADNS^c#+b zi0HJgzRQX>b+QhS{ML@!5?ntp7tU;Hwdwu zqa|RN3E!T4)N`LZkY`&j+459)Z!2SHd|WNY|t6bq<+!w5Bp%aD;b0U3k+AI=mpPX{dZC z?AeY2uX`SSM7R{{RRam!RStf?;~ zcl^W+f~%SbK&p|CghL8Y<)MJNf&58$xdy>`%RnyKgfSecFrD78TO{JcvQ<0XgC zloJJHTu&%8CgS^NJB7E{UWo7r&Yh#>bz-5a#G-)Rp?G!cH+ux`ST6PSYcB`^@Sa@x z*IXs2fIAOcTCxq&dKq(ZOZM;*-epbm{7##>wJuH0-6wF6&K8;4KuNhN0&eW%ryo}; zRlIhgMQ3CL-PX_ zpq3Ap`s^riDAhO29>`Fl-A^BC;Rc?>V{a(@Oo(MWlAEWfJY#rCAi>eGhGRX=L}8DIY2Wgj%}hrE!TV7hLVJ1~ z_Jld#2~Tkdhzb@5b1YPNCgQ^@*M;G1fqI5D!C_tK&lRuf{(LsMTI}y@aAdI%swp+o z5=%PY5%zJ!ki;zpyiBGTwj#}=X8U!cIqH>iQ!qEQkt=x1r6+DkwP|AF_6ulUZlNVa z%o|N+xS9BP0!fze$-oiFjO311A1JECCo!*{#R=8#y-3l3?TANh`&6RIr8KRFl3O2p zk>5Q`uXwVEB8~7y+7gQ!T=zH02W3s3?g>kCxVRa$+SteT;0c;!lal9kx_ichRADmOH% zy>-i1Jh~N1)KR8cu2jNZ6XqwerVMeKyv-6&R1gFegg3{0yez)E6LXVFpBRotFdVHw z-t1kmY9yegX%q*wR^gwzvg37z+S=mYxPbf4ucZV&4$sMxoW}n9Dj&OSEIb4wSjBtmH4Stc; z>$6j@?B=F%De}(OpIe$$FYT&ViS;y4^fO{m-?FXZmE(AN>%0nIAb#^xABr8s?|U7e z`dOjIcespb6^R(bFrz6_>?m~%#1^+f_Z(*WgI$n?PKc8=PUH=0)^ONWQRzumnoRud zFqFA8YGXcJ@Fu<%lb18`64_7E+nORd$-?U0;p%CJCtT|CsRBN2XKE%B^fo}@-&B`2 z7oB3BWLSGs73U0~6Elv@0J6Nh>8iYuI^CNOxt-61g1(oDJE=~4LN&BAE!?xWX@p#* zrxbtwkq4x@9mR#yI6QsSX*)U*Du$fFYoyXl+$>qAgWgFqtz&yxn@83UHW{6vzj}bh z3r-jAz@R_zTvh61JkOK-u!(bi)~(~_zH}iT^utjb&L3*xc4)EG4z~T;dIZ;hvTMe~ z2?dododl<`73-$gxRIviPV(sVig`l;r&oO7aFmIg`jPC_7HP3?J`7TQ65XNYXcMS|0rRXiIT7t)628`i{0aBl{^RQb^Y&n9qoGjd}#>7e#QTK*knI_J*qzl;{ znWjq4Fp;_x10PN>rLdG^teS8#Bg-_&oh?yEckMLZoS=D>?wFShsdsQzO3ya+Wg#Hl z#TAX(A3Ua;xV2WTIR9z_VmYb-jy%k>+m}=lV^?Vng4!|KS&|R+-4r` zMQC7bzKM%{pqhqGh+9aG55D);gquoefm@+wC1lLP>5q8^fzk&LccG8|Ai<1)K59R_@YwXSle~;esJ;qYmMY-t zIa3_u&imMdy!eDk$2CadFl9Tz?aihhpjF}N`LboE=UCWsOwa(cz<_6Py1l6~hQpoZ zrn77nT0kFzC;0oWM02I$M_T|%ebTg@!=$zt!D8oJWr{GGll7}jZ8+^BM+|A%4bq?H zSugk2QQ>nDhbi@LKiem%N+^7{!NiRLy2N~FBQApXuQk2y%r?Nb`atvZrm-+=y=jtj z$Ob5Kd&!Mxo-zI@BXEvL{;mX=~10nV1yB_e@W>dG?pT3Z>#nczt<;6QY z;^9Pw?{#xZVv4g^;vYgS0wl`3tRm_Mc9?o`Jwovv3oq?78Cb%IKuGK^lbKUzSbQ|7 zI+Wp)y8Vx+K=r%c7fOD32i>n9;8pIwzic|p!r{tCo;PJeuYeOlki8xkKA*l~;=EW` z9^)kZ{ywW4aF5 z^{xkL#0rJi-{cApN>(PjO-G?TPI7NA*ZbP44 z=hLS5IJxJ_(%TiTbU77>u0)et_4HR&Vd9oot|}3%J7KA z@Wv^%o#l_r;NUV545wFcW*t(Y2dD&VD?AdajE1Y9n~G%Z8)45Erc^drqJ)c69vZ-& zsA1cerf{~NwAkRnDrvGh+}eUH`^xl%8(XJVD;C|c#FL8arZBnRq}ruZyeP*V%BwI8 zqom7)P*627E6IqTO@iD=q{h7`bpPBE1sPSi(3|u--fq!bW9dsWelrc_#DR_)(Smi> zK*ArURvc9&j7ia-CSR^`dKF47dapD!^N~8(7(OOhgFjxZG_AQO46v8s^Vby-c;iFw zBdFDXHoJpgCyRI=r4`TdE6fqFurco4VVW=ad73?nH6I5-d9Ed?I`eQ0E{(6=#)Z`F zOQ%D~Yfa2uxXq^8;Q;zz^I(<%E=GgoaQIt3cNcHz)y>W~TH(=_zaGLRtK7fxPsf_v z8-pp;Z}C;%wsK`OeCO@+>VntX$jo$adZ;h-0aGO9tTAwE!|;;U!n(Gi8eb~LDLiMBu8!L z?`D+{z=Jj~Rp3>TJ1Z3Me5{$ANVuY9LsiDqGlI}cv8w{Qv& zOj(RMoTSE^Z*llY^2F)OTHh7H9l16fo#<$yFLvR@Fuuk4mS&{HWPXw>MIBhUXZN%W zO*5cht1XO~W(ojRR486+meAD)He1d4Y|+2vz!F86pa}oOp@WM--0|;e#*00>@)V_^ zfs5LkSyNmzj@rVEZe}&C>|p*ki<<-v4T?TyGyK`n%vQWbGVDLMXpeyAg*1i%o>77R z3w-Ho(m-<|TeJ=^_PHe#&g0LaP*~_xjIL()wN$ecXN34HvI>IJ%%!fNi`@sjc!0Z7 zifKMvEZ_;J2J`)?Ek!O4F;{W~L}%;vi@}Fe z%~x2k7}fYJT#Z2g3WZaYZRVphQ@Y@iO8ut!CAK1hH^UAUT6g-l%uTDopW1Q3hv;XT zH@iedwb&9^{6P*zdcI?hC1v^M*<92X$|DVhh~!!mlf~dEQa;zbgp;g>>HyZMfaH&a z_K@4s(+6}Fw^e&DHn-rgEHQV0=zX}M>p#=nlvFM@ z^ZS}ewYz2c(na2VC$)bc@rjZx3@@B9$HL=Jn15!ms?C3ODKDS3S!hQ41Bxa-l<_p` ziKt~}A98t_xdm@pH^7~0N-unWhZ6RFmg8ZcztYT$!aYF1J;kgh-f*$1v;|!4W{D;X zRy&jKyTuQ&RzlZOjBi`>n7J)fy!fdSb}vOa%NVM{jdnY3LM1I!O@aVTSc5w@Vv0OeYMM~!z<!uo7^Zms0Xhx26_ZF`o#$b=h z7JuS<+nR5bAY+aS`c!pw)_)BTK>&&n)t zOrI(~36d2YjYNdlIXAl-F34Uq<&}K!nP&lb!3xq0CXVxubX{%Ns_D+asF!sR|7*a?#vO5 zx2jIZK&>lnEj?s#sC>?b{w;H(q3}m@nDYYrohN5Q#Y=c9U`q$2TiGR4o>zatf2vNL zYX-`WmOhZXz=I1hdI{HpiuB=VXfqDN$PvaCW<>*+(<@iOCG0C zkreI3h#m}0Xk+=2p)Fv4s6=pw8EUJLe`zhBa|%XM!u2U=FQPPATK-R{V}k0qn8ifY zpiykE?oz6NN_9iEbX~e*!iD@_=9%J8CDHY=?2!|hDULg$tgM&JHNW%ehQ=F!s1Nd1SCf#mTyh9gRU_@NE9UzWgbF zyl0G?YNeaUf?3?@@)&nETpsO{pEN)}JMZtVzKAr51?^(jPztmQgQ_XKZHS$Whk=h< z{O<2;k+{Kuhf2PT=B72#1x~&iZW+Z+(&7ae_ZF=u?lr^`?O4lGoa3LaHvc`%62x(v zrl-!ZbZ5CoF#TaR2`F;WGcCDXI=eq`Am1{ayI)S)8fXut;<=rxTTchUF;6S!cM(ew z+$q@0VJMOKEtXkSKT>x&p3PA~-_sSiV{~et0w1UrqXw5)@?4ZB7%BcS*9H|TDO#Ey z8S;kIt)ZS|(Q->LHzP>mfR8Y(ws00Ief2(XjU|q4TN35^F5j!ZM2{GYEUlaf1)xxb zkxd&cgE`{UQHGJFF<^e)!bQu}j%4be6}_^e4G~)0d!sLm*S8 zdg_;__bg5*^&|zGEKVJslmTMsJ;4J|{H}on>={`bv81ZRGM{6D3xz>>^LGy*KEIvk z1qJupcBiL;@A>5KwHGae*iK0j#4Qr*_FCVwS)$o04}OPL9HAhdU98qGA?xrdiqHz& zxE5clhUBbM@gnc>#cT!S?lXi{KXVaNY6;?miZTwjQx&lK{qqVq8esDvi+5P^IIYBV z&R;y#*b>yQ_xFZPo$y(aWqU2h*$z_%V+4YpJYQzH$hC>KS8sCaC7E`SR9_+_H$ChI zTlQOmSg3WEhT|@+f^>Mr@`kh61!_v2c?(wzW#jkYv6iEjw>S)Fuc-rV!zY&3WL3H4 z7B8WqIeGXEi=L}lXQ!CovN&7H&_yveE*rh#3KRjRLCZ1>)AaKD*dMmt!D}1z-}Lt- zzrAC5gImQ>91)s|xP4?9#-Uf+0fHSE>?%`=ukeO}yY(3Il6J(Kq@K5Yz*;HPULzP( z_%_#9Y=j0Iro+xXN0pHCIcnSFn`m}kxnfZ}fkEv-f)|6gNZ~C-KY#iT*B!0?v_Qa4w$I z5`$(||6*|x4_;jW9Tq-h(XW>8IS8~9yZ+60q82dLi-E!lJi(4peM;E%r-j>Llq639 z`L}r=!`)DP09$tl?>m-mEKQ_B1pC0>Lo4Npfy5NRGSD=#KII$$;0A&UqL-Xi5dX&3 zCLD=bQ0Z<~t{->j|HL-HnipdD0buw+H29YubSK9=tQnl>NY+OEfe3iOCJ5GeS+BB< zq4@NK+({lDGL|U^#*y23k^rLIa)f@+8X{=m^tn$76xF<)|~yOm$+;S88UR`;@oaOjHZfa!QR z6}?8{0;dg0?Q7k~34Sdp36gRqXD=cXYEPHd>?>zD5~Cn#v^A6M1eV0UiU+jOT*1AU z(bk*38g*j+tjt+c#wV&fc7ju{?u>wv$HD@N51m(%TVt&Jv22`QV&Lj@YXA%Rp4TJt zcNXNQGhEE{(rton)%Q|Y6~2M~!tvI=EGBdU?7!IB2O=j}v)MenPHj0xAcT9@&bwWp zs0Z!~ulZLFKI8b7C!T-#437)!ecYM=hhF%|3(C5@~{#XxZvuz~po2_5OlMwFR=BH8WspHu%@%gb-XMo zsBkC$F0elOH+V@K41(JxyqYccQ70qMnQD-aco7-WX^vIRp-|sjC|D;6TDLdL^^O4N z!bQG7qu7pBg)u4c(Y^PWlAg^{;?-p5V01y;_5C{j?wWPpBfP7ek^(JMUv@io*Qhm6?*U>VW~55 zCa9WT;4r)Aw$KYK3USN|UWgGwENoc8>ueWpIQiTqVofjtjek{}Vuo*LdBC2P)`={I zs(UI%t&Le_)yVQ_u)7&jKW>8OVDvliq4>cOZqWHg^9aztn23)lu11r9JwGct4gXke zJPl}Q7zJNBG;a_@^ONcNFi&jIu^csq|52!LR(W3 zpv3!u_cJy$#X2Jj^b8+;i~vV87v+HEjnHbHm2*@|U_4>Ul@q>jXzo5=IJV9j!{RC8 zKw^rmjkyInt&O3IOW5Mr2@|L{T4%G#v~tZ&UcF=YUW3g4yk$%e#J#WSDA^h6n z*ABn-_;tXqBYvIm>x^GAeku5M!LKWR-SF##Ade#7t^j^7CUM&dULztQ-O!EY>n>G);fmxu;g^r!Ec^=a zdj!AP_&ti>9Q@|uHxIx0_$|P1A%2VSE5vUxevjezIDSj;djh|u_$|Y4IeshfdlJ8= z@LP%BD*RUCw+6o={GP_|8T{7b_bh(v@GHg-@LP}HbL7(X4d0ED_nCaxb7LcRe*zY# zZHxxpK=cU4_1`#^ts~_%gERd%&Z{R+3B?08&X5-%2$;VZ1Az_zwZFjegeIqk8_@PV z>7{h?Sddh}1Jv)G^lVT)BbN&n8zwu948Se~;_kB8YpU~Dsd z6@F1bz#&sRD;}PwU#Zdm3KxoH#5iZ~U~ZJV*?-an2B|6auG% zZJe&zns19B=B76Oppw-73VG9jO-DmQsO>{Gk5-8YvvD>cO&$?uQ_D&>gXhC+T&x3@ z?%<@LI@}g2OAdjN;WqBT6K$CBcRYxG~&n?k+!EfNm|^T zFOG~4h4-7=);pmeLcvQ)`?z_-^U=0GYyp&vNbpnJIAdGhz%`SN+d04{Ih^i~f`hw#C4(mNw2ls_W17mbMfYw+8!jx|J=5o9F*Qe|&XL<=aJn zkUz0-PG`$vajxsnG`)@6gle!q{S3BY4~{?i=KJXnY~$HHsb}5T zLizHK5@5^#TUTWbr1Z3hp-ql0%e(IP0N6UpHnFxq&)$&S+cvefK+oPo;Oczaj0mX) zCZrD>HlTYN_C%{r)FrC5kdkZ*4Y|8OTKCj}gL@Adm^K0eMx%xtILx+`?d0FqXq+}} zi0-hhpKUtZbe%|b>d#M74UjaBgbc9xKd2#+2*0G==VY_SNmp>*^nkHLcq6cZuG}RZ zpc`cy3S~oW55cB*TZ;J8gNzz#o7BYc-)aUvZT>PXCV)` zFu^v0MO>PSV&L&C8@G2+tH&T}qOB)euL0pq!gr)>3hxx6gS=JY>Tr~R~Ax(y^GGVsmS&jwu=q+$EnpF14oaZ_J+uO z+Z?80g6!bmCq-OhpxpB`o+m7@X%=af;!8&A);0fAcPW^XJppfPoi4siG$mhMkYA9Q zojpfAWybittjzo=GbTxy`B^gyvSy6W(yDvUQs+<3DZqL)rLxpnnd2v`XHA)&rJgkz zq0oPFGxKnh4j+ulQ%}tqSKVM*YxV5Re05&I40X;7ES9D2+8f_6%6lX$Ppj^qlRpc8 zi%4Xt^QTPD&CaT6Ttq`^U!6T=T2?!?L8CTm)PhzEF{kjwJ)Gr2pzmy37&%m6>-OM= z_nAlUM?=%${rnu;WQHwJHxi6Xg=eEC7o?kp!^}57uh`TL29qF3!N(gFb za6nzp+7{mD!Y!C67uyIo08re6MOTC;`F4q|CpZ6`-D(Si@0Z&`$@HbRQ5=uOOoEx$ zomIO1q-`6^5-c7LMgMXr$jPT{)11{oSV}T+m5mS8q*&}lT!1vox zqb6_T{Z7|**u&wGZM+eR7{)?+u3kYdZL{&u0G(ZA?~N~-@a_(*lR&T;K1g5etw?Kp z<0Q@Q38gk$D;a*YBY_ZP=a*yHmKoOCZL`=anOp4%q^-lYf)j(3V7nevAu0v*Iqd|$ za9D5}h3Mo9cD%AT0pr*&cMA0+Gk4l1b0YA=X`32yEe<94@3y6}Z5!O|iE#MXY=UF5#K>THDBvib z6o|2V6ZN~cxtz6%^wh$g-S%MU+pQx;h@P@>E17$tAgAAuSe#P;Q^H}#8CwucIm26i zQXaQ&M3etKW0OmB0;E>(wxHMz@>7NFNiNC;q2Q$%7j6EKedml4e(Qb2hg4j!y)I{O zEWu(6xpXSRxtDD-oumV%v%)j|Gg$2DrS^jxV46;$%$6*iZdprD5U$<>{I9w>G z4lC_h&Ra-=gTZ!;$*PF=g-w@jUNCu>qbcd#$i9gidotV!jubz47OF^LQ5UtgZ}hTr zh)AN>3~nmzKx+U+TKM@?^sfxv)|-sEtUsNZ$=yjJO2!doPyO-Xtpn6 zTNP0wH_UcfV5DpypeQ^3q|a ztAF=2#M%BLcCcllgBxV1Q!VgiFFUt-5eF}1^tLx=8+h8w(G^bhwpX#qNa>pC@0&h$ z9;X^@91p6E@8Wg)58F3#l^5B^a4EIm=xn-kD33TT)<-h!>;@OPmTBjw^lN+Vy=2YZ2N$s=iiIQHt?T815ICOA0lE7_!SKF30|$)SUF3+)%#=Kj;%gQ^IJK>n~eF#bv9S$Z0-TI^*k z3UUo8H#2C@cCU~bGoleRWFsy@&`ej5;ZNFmQ>Y%BjG)z5&W#;8F84fJx*Go?uLFwi zbLtBsK2O^>a(1C>_J%{dllIdrS+Vr}jY0~<$F6(b-sIj{h3Zia*EiU;Y~zyNQV`_M zH*Rd^KOpiy*2W??lK3G8vOx#b1_^(`p2(t(x|I$*H_(SUeAzsSJ@HWXlEWLme!;$< zE$~mrnscKAs+DAf<5x~x{%^_58MsaS)%OJip(r z<(w7&fNS+>ppJ*_eOWR}L)3-w9Yi`Dk*!Q!ll}o}Ac7ib!h=&8^-;y+gniI`QpNjS zdkHtt{wq`gq{=zS9d1{W&rjPw`yVrA_J3sOwtHj){=wNX2{5l9=Fb`TeRU)m$Mn`8y<8~^1>Iq1EC?!0c*arf5Eb+4&Q@c-T&JCzp-o-r_rfU z{;mDrGR*NBR>G#^LA9S&HYz&u(+07$L$gR1O56y$bY?=qc=+m8RZ|qg2EQ&`2Ti6QJ)?d zsdhp=C%Ta|ig6s_RFmuB9}fNF9NemuE(35E!I$ibbA-x4-G^?d&*(=5kw{u6IQlef z+HbYBgc};ibyj+CzD}UKWW-PF;BOK7zZQ1XHJp1OqQ<9nsv(O=b7vE{>M0sL*8GV)Ft`S3ZD2%pab5ZcssT}P76ap2 zZ^yueiH`mp&Mxh@9)Ke42~}NUyx`&_$ER#PNsGrrNy;fNe8PH%2Z^8JILc8Gi`|EY zc51!V>~|z)JGi4!bR1E|y*k@bz|mDAP9W));~2zc%J+ED$nF40l7!lgO3Xj#eD?ewgpThpy8ODxlXKM+}Pt&D%D|!H1HF zRTOg_^PQAVA9>Inj?Z-pDPo?3^PAEJ=FO8$$YKM&V-EVlt$B_(C#{Sbeb5Vr%y)2s zP81yGdBV~8PMR9bLQ2UzXn@5F9NZQcCTro-1&#!^^wZ-GnjmE%U)rEQpoKpdIs#zV zLI)S>BjvSVAuTo>Fhcqw2j^j<$RAkb1n)L*!+5}xG%s{q;1(Elnu2atCoOSs%T%tw zh$kFbEHZT)srayi2Q*viFt7!1sMkbesixW8$@-;^CL9vADh|%Ba73}S>+<5Cbdnbi zlb&?6mQ@J{@+8k&arBUuPdRpR!i^nBfr@9ZdqC7WM=)t$NCYUx zW-5t!hvP6egau|jBq!)XbXaLH z_#fei6C#Kg5{<_PeZ&hENzoC2%ET5myXx!Mk?j zqXNk2ktxQ9Sb66Z)psy_AYG-{VYMAB;%|@!_^TfL|*;CF^5Z+6Q`C6#f?hc;n+ux zqikDJ|1nhf3&(S$&nFK4L9GU0k{>G_{N)@R(9IX_1L)#<@tbkU5q58VF7qgjgTO0} z9Ov+AhUu{@j@Q@%D6p|$yXttAO~x*@Cof);+1)OvLtAh9g=3fu3RMzb1gX96K05OM zxcd+AsEg(S9Df2Sm);Z7KY>69gpklX2_2*a1Vn0%SXotd4T&!^vr zS|LwkI5F@v=I3bJx)s!&+w+|;YLkL25Z3&A&n%&}Ly$Q*;??h67LRS)q|2hg+OTZ_ zx9zi#&}whi-6MkpOCjH1*&}*M>0TfkuI8FEWBjd_kC({JDHR-!~j@iData*`?!(<^s}nFEp+eAL_|9Et*V8D6Hl6hz25 z{5vDyK|$J6$Acm6`_`@RiW{9P!7ns8gJguBSy^H2QucrHnI)PTs$O*`R!l|0|%-amL4(6ue^_cY73%n>4s5aHBsNG|{v}Ac=Fs1(DcE zCV!!_X}lcUxaNM-qweu?QRCN6HvPgkZQQu(6q6t>SRHO$J>LZvMS=&Wn&!F`w}gmk zCc%fnTHl(7@2#d!Gljc!k>GX_);%}Pw2QC91v}$X(wm@ZFP-9u^)q>cwdZlMBSJr2+mGL3N+dJIAjUnK!^%zW zhBTC$1eYFzjm+u`2g^-=^5`_`4o>e^Fzns1HxZI5O@bGTZ%WowntBU|uhTVypZI-7 z)ME6{n=&ACiK2sXi%o)Uf(Y9EV`SYDlbGS00o|}%B$yMPCoKE%YzVor+;m>>YSC$v zW@}C7-N`$Y0)8ZXz3Evuov4Vw^luwXD|uQW%e5sn8%-~{_Gt;LszklOIN@W!J*#}bW?^BJ2o#`P@CIra=ZW8+4+;n&8}moTOwRL7@7bp&8DR; z6J`z8x)d{U?E^SyvYR?O9_b>RE(zEoXRUM7obB23nn?(dYFJM)&1w>_ah+?SgB>S@#VK)$){ z2@SvCHPPxr)_q|*EJ){uN?7rY={c?=>G-Wl{9+|Gmx%d$akrAXA52zp!HGGAhxb;! zNpxA;2ACrtahkag>_2!!2lrexm2!PRXpnTxBwQ448-{s$uS_!slLOaGS6y+yq!90! zeaN{VO&tVUpL9WR;P0mX0v|ZX4*{5K4sG&|!`M-74Y&U=&F8UiL~hp&)As^$*Ujb% z;(yEZh_EDM|5PzM_AYZUeC%Ns;sLU7jUla>`4&Hp%TypYPe}t~wb~sHHa8#RTjRh< z@TRAEze{l{SiQ{>9P=_;UF!(eeJb!Af{KN`f#!>Rb60%kFS3Z2c(avw2naR{s($iI z|B8a(bGT%KgU$8AY9zmDM$$|)$HD7Qngw-{vL^U%H}8du+xz-K-cgf3*&1%%;|iiH zEQ&G?xG9C9m?(&=&YY@r2EZX2H#XlS_vFHmf&uNHU+|iH)5* zLqEwZSR)MP8p$kJlvtb&r7tuKf-}ju_l72$?{NXw*x)z5u7RIlZDqbD%)w>NNqTGZ zK2IJ%<93Q|XFl>5b?MNry*Za_@c1rEdobQMqaxYfEJWrx5ep?Rr<;YG1=vr5``*U= zbWQ2p3btgLJHU?_;Zmt*MrQ0y-bTq>%r!>?wVH)G4~b5q0P??FOO*SX9CT+f}_ zKibAZO@6xw$X(J2lXh1l>+GLtKFvcyG1&p~)?0OOI$u0#m}G5LU>4lvZ6jmV+{))9d>AS}K ziMzefXT2!oX-6{PL9?!j<{@Ow!{(cUal}S5J!TfX_b4%w$n3|>9R+2Z$*Z9|&4Pm+ z)#n7L-D&oQKc6tK=I6sE{1=)6K~Z~;fHGsY1y7l6Zpy)Rcvq=K*N>QXnuX8d0$W$c zLhW{$1;fv|=7Os0EDnY@cbR+gbK_4x(rLH3qp;kK13vw%+kJq@n0cVi0i$4JNR}VG z*~N^n4Q6-Af}78p1&@AX)32X5FLVzEU;n*m_J^G>m@EIH!FzmN6YK0sXlBtIdht!c zENK)aAMP>7@~cR&k9dEAMcv2)vN=>BAA_SRX2Fdr&>gjoE$%wvNy(1Hzn6G`hhrdo z{(Dy)6t`4T;Ka))Av;8A;owtpJ{qh;67Xa2Blcn_$KkU+M6;S@{s_Wjt0j5(RdXK! z4VM#^c)Vs7^X%a&I!uV0Z-^okcTcZ`f%KCCZKpPopaq*STPzcfNNx_QzXB~d#hj4F z^33pe_`&0EnM3(5PDq*H{kDLU)4t$MHg@h`d)qujFc**k9R7;g2h2aXQrF?HSbE6( zy1UAW?+RWOyN6`^yXHeY!njZj)Lg!p4o?D(n0vVbPvKgU)$f~c2-d#q;=f*J{zAv~ z1D8f_bTDe<6EyO73s|sSidsVuTsSX?WTYpv{!(G(Odla06Bj1|{J%Gck|#eki`R{) zp!9_cJuxa$3Og47bsLqiI z&=R#b-plF4U9zkH?|*4-%MaW*f%adS*YncFF5=NSz^j`LFlkH!x#wFm2;C@5f<*aE zz>bx-zifU=Xn$Qh5(WRhVixYJ8&T_V)jXf?gE$NV3^>q1i~pEYN!uUI!k0<0K{S;7 zY(B|Pmkp)=#Vp(=G!Av{7xNJTZPw?|Z{`gGD2Ff07gqmn?#I znEdQz`IsMtIwO){beJW8G}Bq05~K@b$qxf86M1Rg&}lb6MkB1WaLXZg10k#-Brnpk z-*q5#Dkoa-Oh3ELj}*sRhPvzC;1_|T>B%urn}z%ka=4WzsIlm2=@M@dq!yz^iv)|H zjxo+amFs&K^ji`{B1=FnC(jZ|4z#qq>ETl{b!x@bsS+$tv7`=k{4q^R^YiufZQH*W z{oy-hdU~(EQ>RW_mezLaRA-a+?WG4;ZLhZdlcgyQ74S)lrGpbH@oa55@5A9len__% z1GplX)zi|MFPZ<18eKixf+DFtOb2IrTDI`@`mvU9vaXlqs<0VX=2`^PqXAOhKvQ7# zm*G0Nua_m*1)6ZrjlE*w`LULnE)By;n{k$beq1@JoN5uT*eHo<=#4L&cxbgR`Cyu5 zp1{`FVjTwtPUTrH^CchXExhIb;=Y-pTZt{^g?x*P2PV%FPm&E5qri7aqn3~dUS6D~bg?`v421f3eg$Nw#S|Zl{@*oe$oOjT-`bU#+>OHsG@-06Mtg$@Am%OtR zxg&e6n(yV&*~B%v={3w3N7XWB9gnU+e{)Hd$7=sl#db!i7y1!JmU8MFXqL+$=6mV;%MjhMzWD1VbzL z0CwKI#Uhx{4(vm!tM{U-W~*hKuru~miJJu)he9-T@Y6QSCYL!d+TwGF7n-53`*vs7 zwTg$IAF(|A-}L+OQOg;=p9||$KW-VvH^B`M4>vj;4uPtHXE2mAFt@p)ZHjm5i<5Av!w?%mFmwZ5tBrA7Y zCJ8fOeSUw|BDiju-1+`Fix>sVn(uo-ln)MOe8hzokr>NuiGk9kAA7^rIjI=B*xQ1E z^)Fgh31ntmzS3+FJRr{EQ0QNa^Q!v&ve&B?%NN2VuvIcKrg8DIrz6AH6(~Bg z?gLApryzceQvX$H46xRR_I3 zvrOhmQS+JQ9loS-fEPX&H43IKUi;j#f$ySqL@B@Hf+aalDL-S*DozE3yqks zzT-A6n0)b_wdd zC)suzZNK3gl^$@rwaoi0fz{0bIRUgbvaoa5^s2ha@${`tAPh>CkMpDI$I7kX_MmQl zkhnnU4;$Lb`&=84g=w-Fok%G}yilFxnsbQ5REWj?JQ5_`!RB4%)m2f zR2TU?Uq_K8_jQ#61@h7bCAgrY_#FdC9Y%IP2=6I(jWJHd7trys-Ch+ zcJz{`2%wp>?#2`)9MXNXE>Lwm79ZL7#kE-5N1nz*w7n!x1h4+`FvuJ%`;o`{%0U7! zXN$-9j*N`2^_Pzd#bf0ZxV#EO%9rQJI{3J&91Epe4+KH588yNd$<|Ofo+JA~V2&*4 z1xP1*Pl7$Y1SA?N8CY^~fIQ1xi~YlJS*0~N@uh=g!K_*psAWON!J;6+rNeh1-4$L4 z(XH4X$Y42;pB@&6L+N*NDEvHF-pbc8FPS_A-rPr~})ge*KbT#l~9GF%q*db;&U#yzr_I~}Lp6Y5R`c)`;n<<&f_#^Y(^C|NkV zoa|o1cVSp9A1%(EZGawQgq`gK4?)?;HezJc`)9UeJ14=?@_X-NUtrO(;_|B}3NjBUk zzHsd;H4fBfwK_&x^4>&Q_&N?jip&#Ol!@>;lV$#7hDPC0v!@wayrb}#xkl=J;IvCq zw#bQ7WEXAKAu}%VNRNF~&4jB(sD6}B6IYB;s-u_Y4}GW0d3-;_DAOK;Ir)TWY*1_o ziaOD{WwXFj#222*lZDO1>WXIJ-n^72pXJA5czmyyU*wCii@R-!+$@1{w(Jdm%#@4x zF0&rOYtLu$JibA+5&l%xQbMvz{v<3<8Kfa4ux$C z)Ru6*@(?CyTITIat#nKwk{XJS{l?>E*#`AND2+77K*&ZFzk&2crVs2Zlq-bkQ0)g# z6W=Cdq#66y%$3vmj;#2PxpFXH%tB?m&yz)O9Bck|vD|@gj>WAYrbHGT>1^RCk;(ZI zIno^=k&{9py;S~&hsQdy1C{Lwr#9hDX3UqxbXB31avJzn$h&wDD5~S(RE4N~U~8Fg z$hP)(m9n4!Q?MjsfgJ9|H%DDC0cw80!|l%kHG-^PDvL=#7%}{3CHTYT2juoHy<i!ZaL^blEC*6I$X; zqXajWVN#%Lw`2XuYgKZF&;tDst)O;HunrO)kp*A-J13PWFgzk^*;t%Fv`6GQf(DC@ zwDvIiad|gCrL6O68nmvKpX7_t6@ihl)$&-rnA$=FZK0b2aMU{^;DPP(^L+En$yzkr zzF!jz5-i5g0G>G&4(bj$f$zdXC+B?jW&&7Gn0-l$r(_So5x~Ns*t>vb7Ztn;*_e+3 z43|w-9*)aWx$)~Vd3HBeC~|T%`LRY`DNNg`f1q1j6Yn*cR&eE6Stp=R7rpxVBxVpw zWaNwTWMR#7MyVN4weuk6ARMLoz_mT1-HQ!kA;lyw=4VU+llM*XW_R$e-QMp7k6UDe zYai%+uk25|^`!=|^{8(L+0UYo&HdGsRxP)|#1k*re1ls}&wikFtJHKU zH6=48GZl7yBZWiA+BU5qH|MNBR1MjUp1W7%9|fW?#bEg`#TR5EKh96kxvCMc@-=z7 zYaQ`@T}~A^q48+UvmDgHiZ{@%Tk)p2eXvz)@OVo!ew_n0#YTW^80i_kTU^wygQeS!z8GvC4@+8knL%IZcA!q=H+>G#q zEr(GTfA9-SIG7LPEVms~T7&fqiyvH!uJwevYqA&Aq#eLi8|za&p|$A%2G;$Ak6}aJ zm2bm}1$Dk%rxupaz(vJxNw-Z|pf9R4q)GjymZ?kae=JLFDfN=3&Nft3EG{)TTl9uY zZ+1=O*TQD7Nl7Io#tJFlSb`s&u8^D{@LgNwN$8?@>>>PT!YCcBI@xp2OLjfV?1{qbC91L}5<)JX| z6J!q4$8vut?V$KznmwH_1so1zzL$OBt0}MIUF@xX0S$m-;F&WhhyMJR+)BqIRy9KD z2-h|yBVWyY%Nt(%T26&c7ezzEsUii#+?nr(!1Q-Az2TlqZhc8NF3B1{gwy>b_+gj| zb-RTU3DfEk>54C9;gn$w{)kcf+8b>DN*3-`U2zwv&eng*G@(rn`L5}?>-xh>Dm80N2RtYA}f0d63 z!@Ech67;*gK!AXnW&%3 zo>(#%uKNEik`1ed=`?R2#uQdYO!9PmzS)~>4^V#nyH)vz@_cZxGM-1%DbM5JQn2zF zU*}xLG(f@q3RpW~aNp5TMR4diTTKKtOwqfCkVGbjE0w}zoXQ5i!TlKHv`R;z8WS6- z2zv)xVTj)_6e@=zl^7m8^Vs|lqM|!HN-5y$7wzJ#E1Spbz!I(O;fMGear>drnr?Iyvb_Z|xUg*lN4VL?fcy9cwD?8t z1?>|Q!A<1c&>^IGqM{RqaoNyrSclQf)sjFF)e>Aa1m~sJ34Wf=Z9@2BW=MRNtn?5J z2`um9+7cdWt?;K9!GrmXAZMH!XM`JrAKCJbx4ZPQrwQdAG<(IDJdmdB5eS69 z*v*kQ+}~ai92aaL=Dq#;b2%Mucfdy~C$^!2l>KRfC-h&3pTEA*Ug^TmW91u49IWW5 zw1vzLN-|vQi0_VAr@FnZb(need?GmY4Az8?Lw&JUx~@uq8!T$hqZTyXTl0lB-IO7G0|phf1#ft|n^Nsk*ObaYc6C?o z7Z7Ai=jwsO5!^v(^a1besl34t-1J5bfoa}&@Z&sEh)-{2q<{jO&GJ4?`B`4V2Fmw98o$ucWN-)2u9f(H$b_Fg&T_onNB_$rq~2ZHZ7!sN#}c%7lr0H zL>IXDT}T9k^z#mZexnowO(5h*C5;=FDvPM7#S5|_D?^jy!(`AhKultoJ-4wfCxZ@2^GSp92 z1c#kdunIt&_rgLXk+V1)?whKdbs3i(?Y>}`raaX|9qBe*@e!tHjML&^P`0>1U7ckZ ztUZc@i|;$oj?7a88=S>?9bavEn`;a%0LgE9#n?PmUsk4HJY!a2QH7zbEw%Ayg)FyM4d>S2~ZUm8xAYGU-2P*7AoQuW5z?)WKz6H5#Pf!+6pU|C_lJBZ3WwxDiu)s zyAlB#{**hpN%?>iX%8Q4R^sEOfpZM`^CY%VQi;CUAk8%7>*=@T3oBr9EFOz_n^BRx z`0d#ikY0k8(TcN2F>3iM{O6@e6rb1M)gs_lsS*P_Eyum!_vr^(K;5>3x(I#S6#Kf5 zM@J1VEA!XrYtKn;loEyx-eZLHEi9L)%ST^XVO&^PW+;%1WfGPZ7nYY7mdut4OQeFr z12tc)eB(fkVNt2EtitgJgE(luh+qI>jayNj99M}3C*c&B40kJh|l(1H}b@X7188HNgYct zdTOHp)H&lM=(#C41X^xZ=JPY7BqzvZr^Sv`<3GMt5g&Fp0<;+Mn4h{$2@y$1=w2HOgeZgswCc?NWrBG%SvS`n^gR{IpAXj_{1?N;96iD}#kT4ak#yvU0_>GLjtATr_G%2rSPg^KFWFd*X!Hm&bzj>C;1tg=eV$28hRiu0dZRzAq#x#Cc=}DHJKum_=Mmqxlv06~ESwx4 zR|wao!EG*QL-+lPAPSvBI; z`QeWgVT*^-;;hq(5F>`FdlcO2qJ~2IkCnqbBxd3!^-@QG;S)vh60;!g*ncUR0{b%y z0b_c6VA&aEE)UN+Rv5&cRc`QgO)T!c=fv{?m#ZZvKRfAbe`^(TUWp+;pHp7t%_H*a z=Zcs+w&7-+;LZ4>0^W_4m`=~sR3*)|*OQFy+knyePQ(zRl`mJc8v*PU; z^@97t2_zKOe5V|{EBd%Hf8I!x;_v@k3E}%Q=9gqKq&)I_We(p^pf7#P237ZW_JR}N zE5iFL7JlJ=bGz=7Z6}cb`d$`=h`tWlf6-+ng~#Ihbwx1vZ~{@V`I@+)SpUE)3TAJw zSEBz%Ac9ltzd+){>!M@+9|K8&&#$^j6Dnkqul;{xf=N*Gqv&zJbX-j$U;U``6?Psw zuqXbkJR+1+E+;|1DjoQ34|wUF1of+wAX4!kWsA^>$}DJgL)pT!2@_?fZYYrgEY=)F zTr^3#t%#RgO~|V$%~V0b`$xwMJrf0;VO7i5;~%*fi&TNOoQ6SHcrQ>X9%5N;>P9H;qIo9Y9Irc+(qqwaMEDzCD- zXLae+wM+NzGdp)Km^vCG84Obg4e#woZRRG@`!sQ)GymghKh@}h9ERA0zTgeZ{Z-*~ zY)WPwL6fIXfchm5sqw_RH&C6x*RiYV^MUFUF2(5}rJ@E>cjRphx?Yp%2`7ToaK2UT z!)goS9julLEXo#iSBNV3k*M>M;DuC#s36h+`gY;!vw}&6mS6NtNZ4)+(<**7&Of^!o6Q^?zm_jbeKd~a2-M{osGN&7ykcp<`8FQlLP zHjlDXyJyi;gUEpX>KdK}3APZOPItY*Sm@;B!K&a9Vw)%L`uDN0^J@!+N)18p^Phv& zCj|P`3{?m4*fKNNbC|l3FJ{BMGE6)waXDJUu;Hrk6oa;I@mG2065!}?m*a64KD8M= zLKUusR?*_bdoZLeF&S;WntRlI9<>H51kgmmyH3x&L6CH?s}KB{iSgXVQ;L7}MfADc zGc?o>Hk9ERvwfr}ah+lG8GTFnw#+=XY423bZEd}dlE z96?Tjj)~DHs@eQBnO8sVO*Mc#Hc<^0B6P50JnYx2k>ui3l?c88T1l`{$SOv$VDVNF zP+Xu2L8;C<7V&h8$K-BiNSU6L%u*K%N7hes)FK`lyOUd9s49Fhw`+Vr>6fg7d2?04 zJ%Ozx)K$?7+l;`op2vU z&jx}4mf}~~8U!8uP^#we!!*|A%@_46R>%AaP4r`R!zwW9xpe#S5Li&AX7SLeNOChM zD;`}gvO5!0u0zpcf}^Y!sK}yu7Kr}zVpZ^&IF~@!-Aqlv%>JQJ zu~aSRCxvxsB>n+)v%t@Y52h?w-Yt~;vQoVzY#~$<^^o_V`UeM#;G410{Im$R6s#A5 z6!?*s&CWYYAGleiw&q|qR*l>yRDm;Y;A*5>y&bN9iE^{cNb#c#h*Avv{)o!olLB7; zj^Ku-PYILZh)XdQ-lWT8>f8KO;d(SCBn_z+b`NP+triF^=_3vD8mNiFzNHYzFHfo& zLi^+xtrZN(R$k-rb3dT#9S5){^bb6x%6$KepCBPh>woZvNlyz>8E75Z@w7V1Bg~b! za69AmCU_Yflh2q zcG=VoJODab1ltD6_Nu4(Dtge9vX|8B0(&+Dra-h}2pM155~D>P#+fVW;(#d}z$ zpySyrSTN2!ACcs(H&yWit|*%`V8wnl1ZvJ7^oM)i#^0WMxJ@X8?Dx_^pM9eHq4AJ- zai8e#a2_r(cL4mAVAu)5;w>Nyqp+J8KD4QDiZt3hSmzJN>d(cK&{}n^K=xhls1*WP z52*L^C5@mi9K_(acMhn+rIr(A{KD5kRL@%<6t(Qe`Jy4^Ph0Wg7m$FwQPVIt*4h_x z4~ZvAQ^w*ERk&baj?>Zasoqd>SZ&Eqt+CGZzUZQ8a6G|{!{UUnp9C9^ifhNfp^sJv z9~^B8oDKqxAr()(t48s-WStV(#EG5Yl3;_^9(Oai1V6l|#`0kCenn8S@0xPxTTX_Q z_th94A}gNzzAAW|o!ENgSNEElyf0jS-wiFJ0M|#DC3-}M!131jHss|GL{j~;8T_}X z{`sMZD$cwm3_Ys0;0eMOS5H5NP#zN(l8w^8PNW4}jqi?$#s4ceA^Go)ZSY>B zH%|_R(SJ_dJ^q3_&dEsb7^444QHA(tybyRwT)ev`6jCG=uAEZe;Ae{}Ogp~h`;SD^ z8r20N+-P%lKUuKfCk7Kq?{6aiJ5io|W z9jq6;;4==^4+FVOZU=QE)i_riXxz*3N$I8?ui2gBHaC2ZJqxPBR5 z=bUZ?>fw6>FifGDAKw6TDhrNyT!hgsZNlO6Z$zhqb6ix3Xo3`$fMw5n^{3o)e)33t zGQ?TD+(cfuxF^V(f2+p@8*8s*evCj8h6ZwhtQ*U>})B%eU@U7u9YA~t4rVbL+%7&rI%%9XeVIR;+a`|Us02?jx1ZWrgQ6O9#dD$PNt%*AL zC0G-#KAhr4I4)WK`r)CPV4*hR%if1qWhHsSH=$YqKV{Z=ZkR}RBy4;5I!x=}zO^6p z3D<`5b=V~y@SSNXU+nb$1d!YaO}wpa{KCz@BQ-ac|4so`3_hKDyM-q4#dy57fL$>! z2t11Jn4V3zoIF}+ognrb%sF`bBedDyjnRhjAn`d12Ajl+BRMTOainZ~qyKTNwuJ|R zuK@(jj;-Lwal&UcfIb@_A@N%4Kpp_b^9ZV~tM#m2V`%yPd_^{CBthB(00KNI+2Os#Wup8q-bOIqcHwNH?u3-_WY zk#ER~F@V+|_VmPCm+bCZ2zX#@teaLCGTVtSUeZI{iy!pR1lyhsz+!1X>xP%IQ+jHG zDZH$wCU_-o_SA$s6a(AFM>8;J+OTO-{ z6>=qHav$xqz(Y<4IVs52x(O-?Rc}e{Anj*CP%{4be5lr*gAUGOU(#oo_Mx!k;UhFb zwVgCV5QF5%2yK(l4I_jE3CAMij*S$BBFiY-YLvEw$BDJZ2%|t!H%b%3{pda+rd&aOX^{eM&iVSo(D7P2KQ61=_u5;&@WOcQF}@CSC&j}{ zYwKD-(i3tTAY%SRouG*+faoT)4Q|7EP8sBx(rY%u(D85;tgH zaU_7CjhdM+!KWzEP`nilonJR<>-f6#!&*FS?Cyv9)!V3ar$2Mr4~kCXcP1O=HG5W> zu~^beG5-zDcp!Axti8YQ~i``6>1 zjz{yuxJ5h9w{p(b$QL&`(V8J!g2F4xDh-&$rii{}D%Q_7NXA)U{k0-GcKjTJRA88; zuPmZjZdiS}G_y#bKMy#3dx8JY;{(C^`ub2%sR3$irjvi2QbZ0Phx1o-r z+peYRT+m7;Q+I1(o*e9&O!_{jz2YB^oWzK(mx>B2DvI!dTOo|CHFqN&tlBW$G~7y* zAZ7XzT$s#^jI7K|iOz&>9jUEzb$WD7W6a4mP-AJPy%f9kWSwxQHTLP5mH`QyQPs=r z9pndFVy*;0T&rdNw20L*47OXx$wW4_(}HqISC3h7Y_BYhosex*tsaiSK*b zRQ@z4^WWD#=ZowyeoK$KlMQ6jF->@IOXeMSVLTkHCFU>CzQ}Y{KBrEoC@d;R6|}Gf zU&zkV=NqKq!zzl4?q$LcvZ76~aBYWe5CrGq^UCyYFUCVAF+a{Pl*>^8Ijw9hVf{(% z!R8s#aL`9Q67HE!UvJvp85^NXmnut&4CUoeJJ}fFQ4V8ohK57-#~RHpf={=KPHBgl z=@&!hN7};X`o(Dwy5>L>?E6U5fi>>d-c)HNm&bRt)O# z67sRrn!!U4+dhiGk75L4ph(EVoq=Ht2%=;tMhs`s{RYeX^^Q(1F)WmfC3u{bOZJDr z1=7O8ia8R?8zz-h7Qy_pTD;E#_Wl&(y`K8Tn6FG4VU4K1Kh_uWKGKFhzO1> ze|C+9%+fY~fl}W#5{G+RH_uL~kN}^5X``JOU+dp4U`4T^Y_{11-weW1zBemVE$v>=YG(hoLkEY8K;XQ1X5W z@Pf<#!U))N_dF2>V=E8DLG8=+o}qSXW=ZWGbnOK5)n?(4`=5h8Fyf3B7N}pGh0lE1 zP@U31ugM+Y5iCcp>I8UW91F(9m^^O9CCv-oKclsvTzBb=HiEH<=MqDi5rQ>+WE=a* zWXBjOkRgq8=mW?OMN;7`N*1XQk~dBahXlVsd`B|^54VIJOMPKw+8)gKcUGIGqf9~* z4dS;i4=1|$d?u52i_dAXt?g+DD~$IT7PqB6($b}=Z15TQ2R>P6zk_y8OM|`dJ{FOb zg7n5@bf{(7QN*omWMp-;Odc>Pd<-Qs1(xAlb7Xq@H{~KWjkdVx1x92G`qZzPoAs)L0pXDKnU+ACjK-hv z>Dt(Ue@q8Vc)f174z7QuZ3?whtf=4~17#`{SrC$RB^I)?j{Cr^Pqk=dd@MJz25G%v z)#8sMU~lX0F_693+Oh@i$2(<_z1cKepBbAzjt2h=ny(j%UHm)lg4Pbstc?wU`z~nV zNvx1b4E)E=TT|%Zhy`ZPYy;L0@ng3aM@Gi8{gYxWDO!x{VZ^QN;7b&?<>}JGIfeOi zB(x9mQRbHB*`jqRrFwj^P*%d!|90aHv+*7M;6?d{(uzW3iG-pBMM80DVUeEwjeJ^$ zEP^^7Y^%se;hGy63ZGxlg6wiwJ3loFJTGdU`7?@nGVi~rCDT<{f6hx{&j66wMLp z3w6uz6sqmAC1|K)u5{NF7#88CL>Z?q&&NGO<*~7>z)(g-T}dU1=)!y|I?5#`8>zfW zm-HF)GN@Vzm-;^+4mAs{)5y6mv>XrnfVLMS@a^@EIA7@VmG&b)Lw4e2-)r@S{I9hl z*#BEIA9DI@t*@t-U0{TKuSK;*(N&7dyn!E|op88y3d`*0TzNW7Yu_WulR7LF$O18^;D$YyT0c)Qg{=x8Y zRS443oid3otwXe;Ey;`!ltHtk(lXOkf&Ycec7rM(D+m$eXz52^~OP;(g- z)}9f5;q?1nevV07pYy_$Q@ee99DnDH>mCWYM+1FeXTL;mn6bp-4|$U?(_?KZex-2b zT1<-_dm5Dx*O$glg<=8tjfxD!aO2%R5OYO~DXuW!aaKr=-eLnPQ3cXW%Jv55oSeAh zAy-s16YVIwK2cscyF^dVWGQb}Wl28cY)9@<`#FKEz>Y}!Moa4@%`_T|@?h1L>8(S{ zjm3txcUHr$&Dl}#@D;74eOYE{=ySgqebP4wVN!VbKWz`mAy*QhZs{5P=;?&mI9QpN z91pkawIG;yRcjT*PX$i)-V#31iCx1Y+4t`pJ?bMUZ2y;efaR)v{oG+6eoc!;C5R!M z_uj!osPfIiPl`So<`1PGto95mmr@!iiV^~e3z^HFin8Yhc5)HL&`u|0M|+`z!(rb; z!BPGHPiFD$H7$s8A)AH&b*)>&*66{C54?cka2M5RuYtzWLIXNJpO5NdUsVTg&g0rR zb1u41B*zb`O(Fgz4O;?2>w?1Jv+L+V4SQi5et@Jz354612Vkn(v3)U$|CDD4wE9sC zXM^z3ijfKk-qTxr7oe>Jz{;s?3)%b zv6BnM66DOZwx+3hG41(JkNH6K(cly>rj@|9)olTu`UyCfm|B7x$NE_Yemj%VeQEeK(Kr^Uj$gxn%tLQ zUF2FW!Ifld2=SM!MDVO&Cy8KXn_zxrTyaA)x*aLcvR)P-(6b1iOIh#ZUB3j^_N)h3 zyL9(i!3fGEq<$tkm{5zy9gZJkpp5I3n;8-{3(6K2;-Xc|DKjoCN5$Wvb~&wLOn$Yv zq(Z-lLO=zbt_k%WrlVGd>K!J*E<}s;4s#Eek&fzH#D+!r3hzDhX#1}AC2X)SSUyjy1i11@7hiIv zxAj*KrrLHWGt4TY+Z4|o%GeGF_?z>vq=q@u{168?{<$d)N_K{N`!Sy+s=fL1s{2{< zpeVMpFU%-0Mg~wyI9CPEr6eaaX-<~)vsN^N+%>iUxYoUUP)lw`xF8L~;n3(PttiZg zka^wWsTmdq{h!B=CWhu%YvDkitu^r;V7*`9QdfrCKMx5m53;U;j{EoMn2OwjsmP5d zRSwlkhUv@aP=9cHyP`aGu$7&Fa|c`RwI6=3%{`R>wVRLlkZ%TCLwQNeTw3%Y2o_7gPkp*HVf64x5;Y8v7R9B=qNr(81_yo4 z>TnMujGZw$5;8x>j~(6m$`l2q98}MZ?Wj3A(%M`P5jecZKgy~~>OHw+~I>`fWm!?Li@t8T> zC3Hn_pQYa4p}0eVG^|%)ukuuwe`wEe$ZmZ|2Sy+CXM{|`58YmSGA7JF-&nfXu5+R` z^*P*-6aN5&8AEP+gx9K zcV1@mgj+9aexaxrITibCCNiP+Hbw>T2*UDN){sVrPxUNoF=R&g#k;X85bx~fRM}cL z+nVd6U(CKm0iVvcCi`M3YV9aTVdYzK5%w&A{{u<0%B+KkZH~1@;5b~bII^h7s&9_h z5^h%_iZm~^w)9};EtEgqKLUo&w_@i0Mb;$PGv7L^u_79GoE{C{3N+!%q=jX8xqXW!9~%t0!d*m=2Fd1wwSIx>bk$@pA=VLhNCIRo z!t;X;xT0Y|$1b*e744TiQ;G{q($OcfXd3m87#xl)ygfyFAWB8Xh4@PmszrDyhlcb_ zlz{j<-7#$`x@k`RPa0iWj5I_qi~aV}t~xTY8P_N`(Y0*{LftAT?F#602a)}Yth<^q zT<136>Y$}$DApGiQ7i@VKnh}(UMh>^n|gbG}PLV;=k?94$Q z4kaUbb*VMNK7NeL_!GvBWTS(AaZL+*^Tg%WEB59EZki8wBAf2iEzzKMqST;?Hn{j4 z0@98fp6v86M)iiNOyziD7o#U1EpI4VW!(oGu38hwq}A2|&HiyX58lPZk}uav?B8e=zrH}hlLt3j+X?tlyaDl!h5L8Mg+TMIRw3|(HNYVT!-=id zvD`RJdxo)9)+hL4HkIgY*0V0fcMj$1p`pq+JoJe55jXu1gK(JesP$96&gHa&S&vzl z^rlxGxG|BFohAz&8TS2JWGI=9*FjA4KwGH{c?$QNRE`H4)r1RRZpO3m?Hqv*)Cq{y z$VPNWR-)Szy(W2?9eU=`U7eTHVKQ^*q(aB5ncgJsaXj{U{7@Z8hMH>YEZ1Vv8LW>B z&0VHLZa!h{S2Qdg+W0jMj5DX1MH~X*RXO_$3RUT1*u!qT=1b&ZyG1q9zQ)fgpth! znY>pMBC0oq>cICYJU|*ynb?R*8NF+(Sp0v2Np)svWE@ji>9rnmE?r6&oa#2MN8NV> zeyrlRr>q^Dvp@-${^*n=?8+khob_X9@4z{!wM zOsh}7+QeiGHDnl7;F}Izf+>SD=5h3+GE#E@KFzMyFrvt~5K{;@;%+yUDKayS1&irS=f?9t$P-3+{=SC>^w^^TT?(XHeHT;zpuyBGol!U)xUEe%rDxx@J z;^1-j4j(gm#_&N>AE`$s{wMW^CtkBAG?RMKpYh@8()bypb4CrGF?K@E$l*hV4<3{b ztG0HG_CU*|JARL6^XupX;qh=e1Xwf%u^q9t7oOfsdkSZ>?qQ`p)L8HpO6Jk;y-A;M zt@~UpI*GKoY`q;7b4P5*19lA)Zvv^O66!uRwTIkWawu8W+}6#*|BjaMj;C!ak0TrT z>r)3pA?cGOA2_PBjjHb8gV~gt+oH%%UN#RNz}P@r7ufeAKKRc&YKo!51i>61+hgJ= z13`MWt1nE{+4}y~cm&7$jT?cS^s|+Qa(&3Cc-wvq#{V*mYw^qTSmN+u9c6fyzBq=jldw1cNQ2 zOp=i?sQZv1RKjL18qEGCxovDAf-=B#hs~)rKDwKr-+fc_VT}q4^*-aqD662?ljxL1 ze=NOD!Hr^9b=X2iroA6?9jX8H=PwJ&Jm?8&rm(LX5+iiP`wke~fY|Z)yo@4P}O6 zBMn|DGU(ZbDn*nEKx{ml#wnJ}Lp!O&Q0_z!D+`O!uZhjdOY!0p#cheBMf*Dkn=pPz zhaSvJh{D#61alNp(KC9;K$6_iwzzp53LAQU*-;+M<|7G1*8irz^tlwMClHYxHs{ z%W-B5E}30aSdL0(QRy80OmyB-P)4k4R)E2-sOt2#gzQ?e8&lvm!eZ2%~&JWEW`_MJVM4$XEBOgI#mZHkeSet zT#`@yJ`Ib7C$j;Ae@X|GV>OLPp*NlQi3S92pjQjj1MRr1E-a(*F0=6(y`&LDOyE_Su|qVfK1s4 zm=0Jj(Nm>ZUxG70_^58M9YR+D_5L~Rc)=5qdVCw^fp?^oEC|-#1w*D zx&wWwZMzEn%yw|GPg(?gkY`IEqX*l(Jwo}#Moxr#huF;UcY%aD>DP7ZYp>PZKsf5x?S2#9|O z-xCfDv#o~{*)|=UMHm7!pc4T7lgKA@tJ%Q^Gw=;~mqXqVTW451+_rdy-D81N#8|jH zSrqp*Q#dh%0T2EPR0}AdP+g}&KacWH!`x95MNVQtQmFLMXd@=#9EKe(5cQ}~&Zhj^ z;6_0`fqF}lsJoRVfAvl$I4@0E+GNarl6c_TD;kXpqj?7v`62!3f3|9t?x4KHI%u%m`Z>@J+V` z!IatfHXysU&Kq(!w+VoMe;pM7tJei%j zLxhi`2_$Zu7{x;ANbV?Gb#wMrT|MPZx=R^zloigNLvIQTaE}H~NpBzU1xYyRs1I7-=J(4@Y zR>G+<^y$Pp7&FoKu-_fT-a6Tq4Cxyu>Y7QTVfiF{_}=W7XVE@HX-SOt*#bT8qH*nq zx=@I?-}WPh0iqItu_IJM=_lFZT46!T9K5Zrpy4h!EDM=)h<}V2GZYjV*b>J`qa7Q^ zaXo;nk(W|ZF((iDPqro4kwT|KD11EGcGYE^fIG*5O_OaYbWTBVVOdfOk~h`%l5k1j z46zJ=oEf%OQ4L-|yDVVQHZvFF7im!<9@9nYdPzBs^F>O*$S_=B{XCo`y?<^vd5}er z&B_e3XRuQb@A=tXHOy}x)xw)@`*H)!58W66TNCoUq3SBeg}yk$c7S=6!|lA};FdcA z;$ZWmLw!6cn?q*Fy66e^h}l^vstW9Jb8H7NOR~IjrXzT+!6>>*q#;YUBiy4cc_+^{ zz=K(aE$9YwL^zaCO^Km|ObA)e4~_G-Z#yV@cT;Q^N~`~BKxqaJ;-pgUxWPkb+&g&u zj4|T|4Iby7TDhP0_9gO6+gJ~HCUuKn^k1MDF~S*0=!h|Nc)1+}Mn1I1wjkHgt;%#T zbU?AtLmIo{P_n2(kw@cO@nh))HX#c$!4$b&1-5cN!10HOIkso{-FK}JPxFg&Y+{;e zEKhT38BcQN+J*~iyo)(U@RHUnnAiKuZ9`%Du!Kk`ZLRYmXN2lB==2)>2<;Id;y^uY|kH4Ru#57>ke(71>&=EZ;<%MV)p?%O`2vGk|Va4KxBbF*b zc36Y&9hj3lct$8*5f2ffsscUQ@)b+-~mW*W> z8$Sm1IePPlb7fKFRDRSQjEVJe1awj#O3QE-)ytxroD!!1F5%-pkPgcctt4tIq@bN= zhh&!w%(k%K(oxCy)I+=D;DsgqBJ3*B+iPt8QAX4X=tY`i$EToKixF60opLA=UfY6s z>_gVt!o2ORAY^Mug!A`HCxlP51E%PUfP1#uBArdLZesSEl^H>v@a|eXnzWSImXNC# z@BC;cLDtQSjSXYg**ZBPjD6l0Uo@<<`8(=Da}r{p-6mU%w*ya)LcB-8_g&c7PfAplxyEuRWpmXHU%D6NhoHrAHA84(JE{ zAF}y5N6Gr*qlm6;Q_7{jQufqY=!h<9o8lx~YT3-xv^1$r8>wwd!JQ54vw7?x(UHR# zWYoj9z%F(W%TlS5l)BVG`emsZQcEdAn%Yzr`pvfSaPeVOIO&Qreko@R(!iM{XM-(8 z;B6dKcyNuWRQgqS4Z;Amb#2jO{K7#m60pfd=wiRtkb_UMT)25^XOstat6q-}R8aA! zr^WxfY@I#976vC0p7%<0va@rQoPP`K-RB=LWg2YVY72I9=3TJAN0n{Fog5@hMZsHy zr{^3e_oPY5GzQRF3`$BYviqIftn;K8!~ER=t>9dh&0pu75U44!Evkds`M|ZSDt=)% z+v4fwZ4~3R1>0=#|23~ojL_pVCVKcYhi(aTEbC$VLm0%q2?a<4*TJIH8G#^~KJkRr zkJu~%ztCJj_dV){jXJ{dis&$yaqf^8{6EaScX(9Q_CEduNbfzQPDmi3B$-JMH8klE zI!Z|<$pk?l0Te+%f?bhjB+CW_uh&LPOwOFlOd3VSO1L&eq+IJ&K)7}k_`YXPhH%y# z^nRY__s8$?c_g#;+H0@f)?RznwM6)cU8>#g{r!Y&LYmp9|zIQ zC+oh`kbcLux}J=zm|TDb`O}GQb?ie}(J-s4>qcl~ftAMc7WQH{s{Ay;T{-`A_g8vN zv8l#l9K_(3tIG@csz99Wji$P1eTq_3i-faRlv*TzLv=&DL@YPW7l#4LYNa%vkf2!M z{AUmmz3&Gcyx#vz-Cb0Wo}Q{!;yXtz=?wY!6HTir^omoYZ!Kh<1|K`%V z)7XF1vG}&2}rKuM$oWKA+nD0Cr^l=Bz#x@cUb?RQpn0gnaRZx*p6I zihZf>3#Z%>RQM`B-OhZO_momUdDF{vdztQ_i#!=lqIwh9E9FtU5jb~B1dz*~I(E+) z3dP8cd+VmZjBhAk3+SfY-6WS7?D+f5el1+?Gvl@LZ{1AGrrfn;2?eIqV9h6KyH1kD`2qmexTkr31$L?t;(nI$!BT z?7hkOTz!mS_Px$5=ylK4FoMAF8tC1^?1A+yg@2n(~Jen7tl~MN@m(r zm>a`r(wO>?p6U#pzlJNfM2B~rVba#ZdVFPt0-{t(UjHGusr_yo^|UTP+bX(5bP7`{ z)cK1}6?Rl1?79GjAv~y70RJ{Vn*?p&aH>qp&GPH%F zRqV~GT5x;Ci1L!Z6+|(2qI(ocx|>SsI8pADb(1!896fi|H0EY9rzuC##8JhB`k=r$bCkXwAwpURis5UOV-gI7(uIL(ENM9% z7*HQd(c@%4di0f#18Mb)`hqIU8vyHo)ShzXjC$EMN|}ZDx_Hi1(F zAH#J{&WlC$-6A`<(zKYyz>-xM>)q(x$#OUq%&Gr17_;*_=kifl*KqzVEFOfphKl*< zlrC(aB1axMw?20=UECwbQo$3jGqw9bOxs^SB#8<>l|5y)H{4c^pmOk)te zGq53?3dc0YWAE93M;k$t`wwVXo74rt-=(V?26V-RJ>`#R%Aek#quLdXZWOnoF;PBK z+^{&yYn*A75-uOP_%6DbCPh-whKATGofP8UkwEKf8}Sj`_68q1QwIY#;i-ma+!ifb zZY(oVJT*-7n1}$k__dxI`qM9Ujfr$QO$xX!sA^I}g1qGE2Dx7+>zLOYMs@z$I!g|v zjc+wXbdq+z)iAd6*XAP)db#Ht4R>~PohDYNW6w7X?)cMaYeI!AU_gpK|ejw;7^-dtWnhbV*}eWod2<5sX8Ah-RbJ19-cJ!EeYRC{?sr*gCXeW zhGI3j^5=%-YRa{rc{^16(y&;~lNN62O{bHjk!o_uuMO;TpYy*qsDY=b__v1H>Rda! zTSDp7ZwR~mZI+88Kb{vjU=dt>m(o9~r|!RpLWv6ddReJ%!5&94o(AoFK~ z8>L;r|2A!R@uodj8iLgPZ(rek5g2DN(4wmiQ`L+hN77eU8*bAePtf7j0c7b*FJ5b4 z2q7ZhmpV(houO~MC1%?hUKzo(Hr^qn?J1W~+IyAjD!7*SGvnD7rEUS&Fnq_lNO5Y7 z079;}m(}hfF=ZS8aC1!^Od1t6JS1m-4e*>^L9uDpAHa=FWI_FMNV~zr1VIMnQ3tMqLxUBxdiD_M)IIZF%mn`MLv`Im{A5$#EKu6HdG1xIvga97edWPGaGu)jEkeE*ImaC|Wqe zf(Odtxpfz5Ka8+=(lhbWSheOzTj@lJqRl-dw#Z)S!3W`Iw?MZmy`@mf*GWONJ%Jn7 z$)hazO3A<8pK5j3mir{~_3)ihmS|d$ASF?Bm5Ud}jD~Bu<&OsDS`HZv6D(}B5c6V{ zOE}GouJ@>pki68Yzc(6|E5E12yr!XJK;G>{zS5J=hys{!dbF3syhlO)Rg269TVs;6 zNUf1RnRoPaPLylo(M$sZ(M+)1VKlxsH*YI@^ErC9Hy_Y*C!&sTHa6fn&Yq}5%|weo zoxH@Ga(^Fbh%lpW_B*05apE^G%Q8YG_4_y=en*ZF4QY)YuyyhNzl;p^HC#n#CfGc zaYgWzVg~R9hXzQGs8#7ZPPg?vhk02W z$1@KZ#NAi&Y zGKNArEFVE?DWzG#$`K#yxPq?NG^P2*z1i>*Tze|)Le!Me0K+mj#l3Zmr>o;N@mY0y;msJJ_4WUqSJVff72X7*OZKt zCi3y-NOPro@4~9ne-iww?_tOQ!IB zm>~PzV+ppmajn%FTy@dijV9d#N8Gt!!M=1VpA~}q%~U>8k4Cwr0)WoajoOFUdq0SF zOp^@ijt5sH{XC7!d~OYf*UI-{+Rz+9RX=p~q4R6d-D|t^k$qsgv|cR|ln}D4g@wPN z;2BaX_g*G_-bF{3XGkoNXS)|cB!_hj+FI*RK2Skj#KD=|!1S5L4SI4VRxQWaMZCBY zcEGt!b+>ZAICZ@x)gDYh)qQF0dP}cuPNBEB+oT87D(%0GyVIaV(e5tpIPkmA;%XmU zwR5Dvs?$MUv}86P^F#uTwiMx1Km?t-A8U-GQm&LgN6Juht((I=%pd0P zmbo$)?&_A4ZeH}%TyD{kwo)x|{X9NwFFXX#Z<0~cRjmtjqx?c%6QqaJeT96U4Jm?$ zCmT_AcoDa5NMlh8sfc$>ijh}syOA5zA&`9g*!g_Sr#)`zqcE@yE6Cw=^l{8xVMqc@QXuUpbE+lo0Ja2`fNUoItVt8nq&_5=3HpZZ`a^K;rOJFbO#>*jx;~oefc#!KKdjKw)Y~w&Dr%7V%yJc!$wV5G$@-*(TgQ^ zB?VmlY0F~1emcm&&Uq!%gJv$_`U!?b^%))%U9M5`NIG54H}iIx71A1YqZ*#EjHJ0s zIro8QEd$7ZnY3EX4KgnGer0d{eCoHH@7wI9EZ5MfKQ%upjjIayGl*87*26w+M~_`N zz=!$S9dO=9?||L>{4Qw}72d@iEHI2y(%6}o$fsW^xzqPM5r?T=!7JLyu;6{Y53RkM z$5b5*Thvt+&G#;X{PaJeZ`>M9b^f)6&n=PVk+sqj z8d~bs!F?&ZS5qgXv5k|E^y(`Zrr+ga!+3F(lv@>dDUBYlO3E)3)Jaqi~|3A`6z&Bk*C}B2_Onl@6TL6p1*$UPv1sT)mH08A`)Ajtb4?RW!u0q& z17F^GAPaWyhc%^qUI!^Svl3FO=6vT%JD-K4<9uu-ggjoN2a?t!8uklSTqgl0_EB!7 zMZRnGDCHfewD=9uFnhCJd?3?{UfnFsB=1);ebHR_dF?UYO5i`DZZ}W{(-t%4=>E;p z6uM%@06w*WcM7-$kb##+dsUbx) zOwDHLQI^((^?3Fc9ukfRxq7R#%87Y2y|t zkT*Wb^%LaCHta>_ZsTjDNPDLZd;Hn!u~*;n6sB0e18@zT*EX=e<5XTAJ$Mi+8q7(0 zmHvHve{|52?CeQyeOAh%g-Kt*H4f?JBkh8mKP)z4-jc{{wcAJ z5#+%yO5`M|Nlh90f#nwZ;U(_^oTpeg+%2V82EYLRN#5LLEg+sFQa6MH(=RUXz}4 zVwg+Q>ZJ`%1j3h)~_vt=(c|=&eI+o5Z8QR@ve&bAe8o*o#w&U zmLW9o3+xKgqG4w$Uc*7ioJPryDrLU2f>6QgO=(|(->;F!Tfs1l{@ut;v>?}7G|024 z*&zTI3*S? zm$HMQxI>64etdvmv~cjV*tUa=X9f;(7ub>JOCv5~4%iOyj_PC>atS)*^(*PhaO9>_}@?caVb|O!Oun7VP!E!GO~~nsLZ;r6F%g&uW+DN^!qp2lh^s-S5N|kDn~TRr|k)Ca-9X>Soi? z->@qG{I;~#NuEfHqNDFf?5rDlIM+0u2E4~D5E$c0_XkYAM?1E^v1f3f^L-61;%W2y z(nco*1lgOO`xBA7)yjP;rIo7A{2QNl9Oc7T6gBn=&OBG2cT|1L6|8#BUW8zMyj{9S zqrmE`uq0!S@py;Gl79`sy3dq@3Wpw5m1kmTow?DShVWh8HlsC!E?k2dM;Iw#TVLE` zbc%|BCyn}kDD~aeW{q&ZQHkUj3UIO7MUd`Q7u=E63E10WTG9cB@L6 z8cQd9c{d;XQi`MMkNF9lAh&*k5YD&VtoUN-2XGahz@FCsxa3I-Kau*V)FlT$bJHAT ze_C@~s?f-?-vg&Vx=%HW7ipW^tpU{UQ^W-?6#LV6pK9t4PA@W?;CD1c=}3#B_fPO> zl}H=yX$?}0kAL+^DWK|TNg!?Zw7Szq5AIpid0Hnr7}VOPH{6Q$iJQ9?moza$^SImzF0qWlhbe~kxzeyhubdsS@Y?X zTfL|_r3G4D>Dn2opSpv>x}roY}HVc<8e}H1|uc5Xd{!nuB7XJzw$GivL=A%!#oN!AEkZSCV7= z==;G^h!_g`LImAvKOtBdpjBe9JE`IMR~EEPTR*H-$8x(KeTkyb;8US3pmj*tDoOE}_sCkjJz(*>y) z`A4JOoGriLs)&X~#UjDZLqwWy46NmzFf1T#KO>6X_X0D7xD$_Z?zzB+xgf`0#5Qup zdAJap;;e48I2N*QqJv;dsy5E{ zpxN;##5a}O88D^MtpD=MCZdqBJ*;@__D3{h+>cVChH@)@U62*H&o+V5*Et|ze%Ij)j$@u-4jAef9LjAkl*VK#ZLbw^{I+o=u1D0 zfU$R4{z-7&cbT7*tp5X-U_Acd8*-3YAX`j~m(@2mfUg2HtAp26> z(iqQeY39BZbJfX0Dnfz zQm<|QG51h6zNqQjE@p4qY`{u--o@OTjvA~Hnr1VOz{w&VLcqc<=D8YjXJ=T$6$5sQ zM%uXym`de*RoK>YqdQr+!G$#kH!BIE!7_~S@nh#ye!Mp}TZ_3Ywp>z&wbh7Tqg^g5LtDYJcLeIII z*}<^jJd+0lm!GFJ&=)Y40Ul=es?B2)ZgT0#k)@A{+pFrrSgnOkaJPAy*%vk-vu`0l ziKE8{SUqU3mpNBm^-Er6c4hzy4yy;kAt(wkC(&hZGuu-OhPi{_6(|fC&CfKEn^EGEW6`V|O4n}{7V*G|!@nx)26iJAg?q_BB4G}stuW)8C`>Ve@H0wVL`ATzth5~z%~<{&fk zPy7r3p2&``r!(HeMbxqw@`6X13_|IgDZSQkZ#~x|G33&C!$)&bdL3 zpdn+FkElMMY zNb?4e@QdzL7;V18sk9`z5^ZJ|)P>A{#PFUJp7 zXpkR?GcR-^r%>S(*e7xM95OR0_HLY9&ELvh=v_K93n@aO6tYZ3=6mBc>YhSjJCIB%7imd}=6luRK;G^|$)+tm%`7$s#%%h077Wd~ zMDuuR?Pcz(&L`@UkYrw@K`y)vTjHm^5EVfCu$#If-~43FcJ=CQzFkAy+&S3s5sdQ%A*T)>GE#HG$*1U|1jD5LYfrZvw zYVOOs1>{>O&IRuLmVSKc7g+*|pk!W(xy-4&EIN~7W*;RDHCnUiliTZqXiL1=Ky52r z-05g4Umd`eN>OQMcKv;8F;wjSJaiE?U9$?K@t)`TXf)`}EQ}6HD)|`ry0_k7u5wa3 zg(jqH)Fp+^rE83U7_ydO#BR(m7dT0ZA-7EP3=MMod_+JtXKIWWY^3L715kK7hCxdX zCUMQ}*t&0?pwaI!bW!1|$ujdxLJJTHI2Z-fiAL&9?Thgh;=N1I%thJeFs97{tNyyh z=wuC|lbi9ycw4mDOU=J^fEn*i<#5FV??7)sU8V@Q@o`fwALxR-a1mBGM6+*oDj<>k z7b|8XPgC5rJZ`Nat|x8kZ#Ftf>Pfl*W_ITn+>bah_M&kEHN^I!y%p%FJEAbVi$Yul z__^m`tn5wt06s%oHGejwkXbz_pW6XiRDz}7;F$v+c|I63_6}$WGy1PRHq z&jfRti@{2krXXxyazIBvtMvGOYu%_F*~g3uJnz2u{}nZupylS_T(@x3SV z^rHvnnXfvDilEf<-}_R1q1oV+#*BkQNPxVx$UKzQRcLjyu2}tKj3*Vm5aS^aC^m0% zR~NLU29EgU1?CHX)dS(=TW$7}^X@S7cOj5nM;|XS|L!DJM}L%?*C49$dN=x}!u+f! zaF+oG4&Z9iKLqFZg{9^J8kxM8@y#*nmQ2OV%s)`&SIHj!%T|qCqC8wNRe6AU(Q-Pw zyCs;WEjP2%EJZOn>P~YEo~<9V*E!pmQ+sKAfi=;BvC{xs2TxLb;XiMwh^iT!ElMGE9)slZ!P zp#A~13)IKEDuAkPhhe41pD;(b^r4|&uL)lVjOgi0fDo0Lmk?2wn)7a;8lrZSMW zO9~a>L%gb>AjSaF46vLPMz`h5@uuHhwAAJv=MPN#8wUynu7I_w$#Dy!Kkmg=Xt-;S zFe)(NshXDI=X#0P(_ z??CBPUOqxQU)RO2>xf&%Q$_My0E>q{AzUA%_NMi3`k_r`<^XC;Yhv`G`d(gvG$Fj! z8;)9JcPbxk{!%rR6oVcv!#Z9F*A*A%l^N3YCX>mi&&n(-Gv;KMm<$=&nOXYW^xWKR z+IlWMR6f>X&R`Z6UVRLu95UP}KpdSs%rz0Qi}qt?SL*vZmo36_OJ8SM#Ode7e<8=qM|ci#zu-5Xg91LpTZv!)dbPyJBW894 zH{}Q~b;}Vm`{qG>wm762KK^%3?GX5uxsSSxQE&0s8jyh4njsK|&a_xv)Vx`(VCP_iI@y%J6CYTm&cZdq?I(D{zkP!5i{^c1 zeoQS6V^614ESvTP44k15x((Qw2X^QnTW6| z@QpIy8{ftKQI6LbT%9eaU&m~ef!R16-+m94Zv<)FHC^sW6=P*@kLwtXfm39F?tm>= z4N`XtUb(rQ0&kJ~F^tADPsuuwfnhWrXl#t8fWdP34FHh9Xbh*e1YpJ~C3tm~K$EWF z))3^r@fm@AIi*8|o8vQHnJ)Jh!a_BLQOXRt zhp5F(0RnHqD=T6dy{^|yL;;}j29<6q?>hG4*&;bYwAD=j2d^_OEd#cl($Y7t=5y2K zKBAgYn$_&UXuLisZZ7EZats5d18)w^h(|#j?f!T8jDOc;6Bo$|f8F}mQ5Ua^iqWj$ zb-wF${2O$}>+-ZmnH|FMy0Du!*s+%yd;V2}5r7%-g7EVlBUJ;Pas7Ys39i!Q0UVu? zjy1@D=Nt#?uxG3s>mGg+_(d|98zV_SRSpc(hF+x2jg1kcPn11q$lQ7l`Tfaqwu>h2 zq9FtG;o>YApK4E$T?3qO7lqM+3}6&Y!$?`J{Dt8VDzBX?|2Rtq4CArBa>1waSLN41 z6(>z-Orv>Y8iTJ>fTb8pm17#?WMC;?=+^<62-K;?jftJOi3N88(@?=pl!2R=J>WVr z;(^-6Y1e-MCNWO|M+~R;Ya2&Z9Rb+t#@fb|P7uSU+QwTue*r8pLT;~Xd_&(!n>`Dr zvbLo$t&;?3#3(xRdSh6C17@*ve4T8(0YecGi4nB;WMi~k{qM&29XN?Y|7;xm#DlJM z*3FVcm9GGq4oHdq^w#^0gXG$88q<2KR~0N83FH@OVTVZ$;KZ3~ZU;c3A9(~>rfQ@C zCDDgA1zA`uQsi?Bw#?SZ0;oiGz;z|q!tPbvfQ|Tza{D<1AKtzXJc#O0i@#c=;LHrQ zu=5;%B*xH@PzyV>2U21fz3nQ8kpE}c6t4@juv2>gC*lmOA3oHq`4^75{SM-rt8-zN z9Ce`pQ@mSE0ghrSoe8(F7z)4?BdIXL!p^o1MOavzULY!t?#{afWOi%=M8tR+9BJWK zfi5?s(S{+I`0d?sceUb=23NWmX<;rma2Ey2qQ4XC<%U??8Nf`ejI^*Qv;%`Nl)f2- z?*O7L%p(@*bE0`21sPzBzV@;%MqB!;n@lhOmT`uf3>?N{H3bli6>17V7UStZ4UM4` z5U)T6#aj3%kF#u4XK}zS`qLjeTwRa52CGmTW@V#EZ~=XBsYYgCE;47*fwHK@9n!;M zR0{!CqB;&j4)jD{%1_|4Yke2oIv?8wH-y>?EN*CZFB-HRD2{(5Si;nD0j-V zmdJ+=$jl`NMIb1$3IHvUwVsd&ctpTA?6;3Gd@--!ElzsQC77(IZq^6Qq&a@tUy&{CtHFH1VyK^FDLVE7py>44C93bcu3JV)9`R_%RIFrz*l6` z8-R+ejewrWZVv$}F_zvPcw>)E^uiXmZ5p>(fKZIY&Y)3D)-bxgAGbn4RP3WzA$FfD zB!!zfz$&skH$YTm8#Lf3Ce!9H*gT9RHV1*I$m#_gMRp1Z2t{_?1Hg$a7cdjqZVmW| zakSgdUTOgOJ?|1i`RRP@0yDA4^@)r-^68dg>aGBUViHBZhM8V53D?|#q6p9}rv?R- zB2x$`ia_=agdJC=4@GBM($sF6zb+==1MOm2sOu?VEp0DG0(Xi=8MpqBYc z79UA~ToP!p+hE!^nD3VE6%n(U11$SlEpMkp>t>z^3F{*a?+L0~Vt%<-USe z)DHsYOHmjgy#n(1uoSGr^7ztZmk#r#Wz>UE)`vn#M zj{X*QLqdoKn4=GU-W!%kNKGAJVNnXf1#Cwjx_5wP^#s7<)BjZ5Ql)wTcx0hGND$bL zxCS^-qwyjsXb_)A$a25BcR>-@j*Feh_>v$BpR9d8#L~Zdh-TTqa`d5sA>1DldI8Xp zIWHi0VmSuVt-~z&^lS`F$)wATS}U}JA4kgnarE)Uq4-pJ)=&$(2IXM&AYeYSIn$X2 zxJR~9h%_KQdeVhq7Um=Z?vVwMfb`glh9siBHjP01wtEw9BpNN1ZYRL#DOAE9q|CUQ*#2^k(C2f#~y#xHb8Xj zA+)x)-DIp5*Zu*|#-|S-uMX@-=HmnBk3_ehhCSV`g z+!JKrJO~Slf0w`3VK(gK! zWPm+-)3=vykRC=ww{g=eSYN!&GFRQ!f(!u2AQ~{+GF>ChJe!+1kp(D_LG*|}W{RUq zC^QFcT%NsasXes8Cu0#6Y#Qk4)TA12!bHlmLTd<^aHt zQ8y^La=xXfS}brNnHLVY#{@;CNE&k7>`9fwq)6xHz@bNi5{_;Ez2w( zRW<%@)G`7S=k!9J7l4v%jdWm12GW9XxYIF}GWk2Z%_m=6d2D zK4Jwopdf?j_UIecs0wg*t=bP{$>eFMpY!7Ez>4gnAVl_ZHaP+%(y)dX2b4%=z<~W| zp!~IbHFH2hIw4pK49MH=w=r-Ydr{%N z;QqamFBU+2d_c_&c*k_QxSlWJfN0dwqTP;`^}io3>hHI~NpYSdD)2|vrvmBmj{7Z> z)P)K%03MlZ3q;2r6adJ@s%L`&XwpM`aRR<$5-olJxI_UDTKcL*b|O9I#$tID>jkv- z#)GJqTqo9kN-@k;TKW(-mOyu8UZB8xeBfd3+6lbJD-ZK+49LI@uf)m9C(lcG{1^3I1Yx*8Zwcu6A!XV z%>Yb90R{Pt6IozCdeLoTl-a%0k}A*EaFFlsv5XR&yO&^#;2doe z>;fDz@+safNV90DQS-FrK{Xk;kc`m*3F)iEU+nr)<+GM7bv|%4t0{Kvm%}A^?>W8| z6=}eQ^i$HNT?dAYR7()}gTRDjemuypYcM)MAfLZkn!tZNRb#nVn<1K_W+Q-((KndV zc3Ir3X8(k3h=MGs-_GZ|&#S?&|?_wT#Z@iZ14pu@FSnqkiP6iKKKPUpd({w;!B#9ci=|`Qrge<4R9`%zs!&N zgcz_!&`f{DEbIi<(2!U7k&EC0y5s>3)c_?KK$cgzk;nWp&}T2$XMUywRC3Z(zW9Jo zfJ3sg0|&VSGZM3eeZ~g{z!vW1?JbHGP?4A}qa09?TI;KWQvuY%*0gfBCAUidJ-&3F zRPI4@9>khl5CBX|Xa7@V1frxjMeVkCsic%36*383;g=%)kpFcRXX6AfP8J z>v&8;qysZiE1N({-1(Y@$?JfS^k@K}nEqAVD?5j8(==u8Eq)SK z%{e41I487Po=~eL$iS^+woH%#S-H)Ldn&aa;6@1C0;6&(HZ~A2PUI!O4|pH~z>_w0(+I>qU`{e8N|1pv z8ATQUv5ckWSJ36o$F+hBpp&~bWCBJ~OQr)|QfEI?*1usfJb?$;0Z7T5aL5*Tlehx| z4XWJVj;Q_*Z$j`0@W~)MPsK40`e83tN=;2~#G`Ec2^W8rva1T(b<}!-NAV%JgB_TZ zFFMsuq$Mdsd!!K1e3BoNbP53Q67bbN=c7u+AP_2pX!Jfy4q#+~w5A|sww>bpH{_X1 zvp=^K(f)dDu+|kY|40Typo^2X0=iNyJ=Hlg0YFlqS&~`+$O4aYyEa+CRPsrvAXN7J z%EG6!LIy&mFL{2=<0B~Lb9DizivXsKv5&xgHiQT@`&CcCsborv%v1iuJvBiFJY~nI z4rsags0LakTPGbLmDOrJ9r%=ic0I42<8uxSY{9|e-U&|0V%Uzf9@PH=5H9n6;1Oj9 zgMg&;SGYz|+9B9TXLs4bDiA8)RIA;Y25`!I)M-E*6i}2}WCseRA3gmOyo|^n`N@;W z46Yp7^P`3B-5hBGlrlt-z;LDo1CS}}H57tOfKUEndEsVh0H1uuDXjx!()~AXqfwMd zbIvl}zC&#L5$2)tD=!MT%wsOdD!^WLIPXwq$p@c7-o+A`JkO%%2owU`uXNwVU`r1o)Ba zz#pjUWex;^5vf)~P+xYj-r+3Lfd{DusSu?hX@PSFz&?g3aU@(C>S`UxPfORQ0R&py z?u?Bv$5joQ>PPRU@g+ih0t4vB0NQW_+vv7%z=}NF&B~5x1eXH|lEpS0X?C%j zbG5Q~v4cV2KXzBR)D^U2);T~ReaP3{Izd&}8yJ8DY1B^hqC}6I31&APghGIQoU4`u zd`F2G996TPi004~S?bHsy5#g3)~5~O$aDJj-Do-DY5@fb`$_*&DdD$0Ur zvoAmR5lldQ3>Qqa%Gb&cufV_@U6BP~j}Yf)ouRG|Fc+E8wqrG(#dh915Fmc80akX8 z#sTKYV$lvVFdhS~w>p)QNI-VHOHD?r3s6Tk#RM66j^Wk8*4vzNjOsYv!LY0X9%I$U zqG;uHQLXqJ1Q`^($Bt{w%1G|W0(`fxGy@jEf*iyO$eS1R7X{pi6Zu$}40NE5QWT)b zG$-x*5I`cCaT4_vu#mXaVV`h9%??~hAC3JwvUC7L-Zm3ZH7IkqQ&EE95p6QwPPAh| zYE2!16$$u9TpLo(fg!xN!tO_dGp&(-CC?5Cxj52VrojbBNVaeY_(GsSvfCem4A@6@ zJxP#(_{avZAOqqtga*c1`&K=6YcM_2gHIa4Bv2f4Vyy*g-g%`0SZ6>~G3C=I$G?dO0ic!TSSb>6xnkTe?cYIi_lmqY)A=~5Vf`V9UIPf7u z>7F)jtwq7WfMiWB$UuIKq$@r6Byzw%PGV&$sE}caR(37}?kw7uXl0kT1pH%GPi|j9 zW^r1;CJN-o+3L~+8BmY@w7ahrIJHUEL??#6v?|G|+z!x3W~m`=@b%#uP<3&k8?`4} zQ#3?o_U64TfE@t=$<`o2F73lx&w=+CNfmmG38kc*zSeYgNnpxWD#n^vOj|%e;wD2s zE4v0FKox-l8B87q4CK=@f@pUNAIO3U$c{l&o}wuLY1g44T@?)lK4iS}V&jn1i4o~4 z3Rd7G-K+LZ2ezYD>DhLs3D>01>NKmry4FG_KqS5CRGM|1a~hB&Llm8+IVaJtdfqLf zu^cFpYRAgH{39)ayu#55wR7TWqYD7joFmY7Dd~KE2r{4~*|ZU4phzxKYv>>g%*X(G zHj^6>!4Q^ZovM+~0UQ}d-5U{-yO<3h@bfGyJCqa>z#2&tvU$%s(md#2*?g3W@0bB5 z$yQ?rS>Q;j{Y2_a18}5PJ_l4Ji=&BrNZX*Uq#y(Q5$C7<`7(sGeiSvpdW%yQ0Rzbb z7-t7qpH(wn>Og>8r9lSnBl9~2H;^8=F;#>B-|=n@ApmrYr7c6Og&JuOR!UZmR(DafnE(dUw)aOL3q;vSt@00QNE3UP5~yzTR@) z)(bA6K&m$p_Pz%8V*ri)4U_N8K!8MzAHkjZzz!%#K2SzlS%ejg0^Sjyz$gx_*h&aE zNZl=bKnvDR$j2?WSlJwQFyMKmQC4;lTHrn&8pSPz1NYIFCXMD(5QqWM^yX-uMc@kn z{BaiF3klrE#xZ;X7{*%JH690=BVN)QYh@!AX>pX3f~J^0j(0o|5d^rSE47ZZvYSRq zngij{)&6lo#YAf+^)1Ks+vZ4&H0O^CI`V|lx)N;f@=F1~e0eQympk9g1E+v|WXDSm zawigGXVJ_L6s*963{t*O!LTU;{`7uM|aV}0~g+l8RVLb{8H61?i51_)Ce6oTp zU?W47w8`}NYJ6aJKAcxcZ~;YYj?X7p4wOp;SAiK}DYPAaxBfY43wq`#7 zHjk^Q|e>t6TuYTLk2_ujla# z@!+&+g2taRK~ew*5x9Xo46Mzp5-+3uus@wARFZ5|I{NrqQti64H4l;hTo}P79g>^aI34 z=Xu@<1j&>}xdQo-ne9so=;Ol+xWxu}i@KeFkQYz;7V`ZBARO7IR6ywgy)lqZ+`-)& zkp>7yHV*|E=#8xMf(+nB06{Ib&UR8qpf~!`m?b>UgM0$Q5if~MRF<{7u*&Jm`6@ZN z+{zCH6+Fgq1L69_Rd5pznF7|)Sw#Wi7Qe;1c6GznY5WeYMO9DQl`Mfe<| zH7~BP_Rx?CL`NT*c(+Dh30OxTTJ&zn*T4bm=s^otTW6`YLs}~RxtfK-WB@#7yZk+1m%P?G@$b2M z-fJECw_NgL_gWWbsg)CRJEpk8DL^XKB~5n$G>CU%EAi& zIl<>$*k|0DjQGr|QwgGq&#c4Ll$Ot|$!dz3xM6nWa}t0to&=@gydju((A&V$yRwmw7s zzXT?4%^bHddCyhr3>R8|)@le`Zdz2W-I#c64=BWcKv!rz-={r>VDY%^F=i?fTjp?qP0nQTO)21CxiPuYlQgkti9FsU-BR86BPa*?gnczzNF5o z$#WkKT%OgB^aY{86#hLk8-&iWsD#Lg=d7NtDiS%#m6u$ye$h?MH1`)Cf5dRV@_UPMs{viR#HD*5^ZgE3C~Q@ z4H~RVGNfjvX5^cSOVe|VdAZryMpJHjR;DR8Cj&pqa`Lh=^9*JB^h`r;NtQ87eyXeO z*KTPmGE()aS@}8H*`{1WZk8c0+nASAYAVev%QK|smKJB1=HwYOjE3~g;v7?PHXZb^ z%}X`p8?%ZtjM@6!jEvHBQ(0D4dTxd>H@#F}lA$lo%qj(-W^sC+DaWqkrAM(lGkV%i zq@pwfbS%-M3OQxP#p#)OxjDt@#!N#=wmv=GRBX!4EXyo26z7^uC3;%qWsB{XhvIT` zO;8O=mX&1X7MEsb7w4vDXJus@%8GOHic!gQlU`q(o=avWM^>snKPNZOlvh?#lB2Yn zsVut`V4nc_EHjnmWM&#mGqUnBQRBSqYHwRgpWOVibo`f_o}R7GGUk{Jm!Fqw)aT|F8*=ipvx`g1vQ4J+ ztdd+~W^r~#W@%Z5A)_?cXw1qm$S?WW#&+qK4dqPf#d&BTG;2nQF|Rn&U@Xqa%t+5h zdzY9p%5qI*nWb6jnMR87x9wh+kzbsVS5}&rSDcrgms6aLhRey$$SBS!%|!>~Wudoo zOa@afV?`#0h9M(A-I$Y$N))G;3P}d zxtUoxC7C%{=!7h2fQsHIr-Hs4W%c##5M)R-Vxi0&&|sz z%Q5PUvyJGJ%3j z<(?6?+gx3;s4~X3rEg|>ezqwmqcl4c^8h1MUuw$BD$6T17}GOLOgRQqW?rV=WW--t zN;#o8tFrl~{vUEB^&UV&mk!p`>A*OAZ+epzs_2v_KI;55!z zm1JxDANC=udfQ(4TZ!_pKDHTuFHCOiYun(G{C8l*{re}DEm&k)PU}P5fsvSE^QUK0 zY>)q~7IaIhZQkE<$%j*IUAz1}+c$b!AGWNPro|PD6r}EHir)nit!jBW zK4u`WtNZDu*|Q8*ai%PwT{A|61`O;-1)Gv}Fun5lr0KM^ZZHn<2SmE}np&~Qo_*?_ z<;&n7a(-RnawO2?jj=i^cw&;9OESe(P3rF6yT5Kl`GQi~wIMGQPYt@dcbPVc4*U^^ zGk1S44_8qb4gJWL01&=V_XK-gbcyzV`{@!(p^R>jZpmGX7Trt~9`O92t7oV>E0~MR z%NIG7+b{A?W6ABwPRyE0{-2opQ2tAkJi?tMFSkFPD;l8Y+d5B|5tQG3x{kJ#uIScv zNm)77ty~=2YmQR`JDOnef|aJy!8f+=#r`%=&Gv2g{=lQ>|51?p$dx6giaT%CT{ren zMM=#-A$(5=?3rSe_2D0#`fw)t$2boNCX`-B>lVA{U*dw2S&@)Nd4n(&gX zm@0m0^75F|fgeg|D_;+${V&;is%8M4dC6u_Qif@m z%1^y)t71-U{N>1OTD-?rsTQ|o)Ay;AwAc1Hdu?I;F!%2C>0TR)e~Hp7?{<%+z58rA zYEh_hBzf((u~RBXLnO$r?zg?+>X~R-Sy8S)#?#g}^a$%owinfM9t*kEAN(VZe6Ll&=5#P{x5Z->in01dS$UC#@>j=ih-n9$Qwu$*z_W< ziTv_OaPId+0=_$W)7QhF3qO0Z z8E?hD;)Ag2l$fj#mE74v(pzhm6o^~NPh@y{DXFuQ z?p#%Y$J7q_gplrhkOx(6%mA*##$Me*`u8t2m4GEV(axxt4w`&^HwMP`HrF5+6Ruoc z?cu)U-|O`tvc|t2O&71Vy2{^LZ9`oBRC@NKz+c+pY2p*-+-X9at-yIugi%|Y?E?+E zY(8L%_Eh)eS-ppjivH`SHtS@3s4IZJeY<(mo`vyz2;b+RyEtAd~aY_xqyZqjnK(ozi*4~qG}A; z@0cyhLq(#q_qhW`WU`kl6+QVq3uvI)J>~76+BV%z`CXeLG246MsiL>fkEejQTfOMw zJ?-xF_~&?Oq%yb7mv)Y9(vkktgl?oyYjUSOj~z~-EyJ3^X-oUN=<~BJDO5hP$%FQN z{caR(e)EXy^`D-!=?h5FE&DV&reu+E`Es4WwB}g5rezc`H6xUCSx3F_h1q9;l%I7p zf(m~=;YLH=!)8}{@K9f>je0$lhPEb$)6s+jc#|RF-EP#rGue-h`JPColxfHDZJmEp zEE%>O?oPM%eia{QO*`&So7TjrC zN^9L zMZmvK09wN%$%Ez}$qb;{^L5>+_3dG9bjmj?k@CmA>P7xzU-iMo)x$n?QI9UvwPpv< zClO660`17zbL{_!Ryy$PJ3Z;4?oGE)i~I4|NJry1Hx(`Y$NRuiey-M?)?Bc8(yHp+ zqBM6p_Z1eZ>!nqjTm9)!R?|KT==p&MEzNF9CEdy69xk^~O?Fcc^jC%#J-PgiT$=x% z*N|^tx+}dO-RePJ4}Rd)73PS}t~(q;Z%4QKQfhfy1kKIv=I%3JyoxdrCTn>z)$M&9 zrxoA5hnE{)?H1s9J&n%nJ(NrOF?gN_vcswHt2aF9;<w_`dRueu@?@8|C65=AHSTXS9Sz8%XZ9hmiOGU=21`BLS7 zdk5g4ug#T~4s8vm=#+Q7NToyq<*$1S?-6c)%Z0-t@IPc27pV0mwK@ zGyG`t=b21vk+wJYcpzCP8?@5&ZASvBt-Q&N+9n&=rgvz3#!$7A2j*umXYAPM^vvqJ zo7mlgp=qBCCH(>(%D>e8IJ${ELl<%g(=7lR5KXkANFgSzyNI)&3? ztxYT{4#kGkKG$YHIiRg6mi4wH(Vrea(8La?Q1xL-Mv<04;|?~(sS9SN%kF%aa zbB-r{aWig>);9&pIft6Q#Ft@k_dOl%ektuZjWzw~_U~O~-RY)5K7oqEHrlkP!n6$D zTk*2;J7{0TxhS9O8DKl9{oAJQ-bk)k2H(T9tT)!k1HphD(+BWJ3*VdLk2k}p?YZYp8>7crIwUFALO=zO{PYSU+|gT*vFy*ML)iXN(U zr5H=obNJ@fmLgkSnj6&K8HurVQGeW%8oD*_R;%O~C>ylNp)|z3xd*knHOHtK9D_(O zu!GV6W&8}57kV^rbXNQZAk}-Qr>FLAzN#6 z01YrV_pLtvp)XBzKM_#wuRL8%t248{TN)Pwq`(CVXH`IzC7$fHEqpR z_WkeCO$WVb_rc~M8hH3Kd?9+K4z9}S*Mh6-n(-vULS#LoM_nqu`FJQ*dLN9VAG*f7 z)9IdXd(h7G%pl5dz(z&vq&p>zJ=hE{PASa6>`8l9yyi_48z66cGn)7LgUzYR4mS#_ zd&%byHqUgSHp6Z>{7=JG^?SG3hvpw{K1&5t&f)dI)ZKA-O{y8661pG9wTR%B5IXhn zaW8rA>&=m2)wf1^Mxpg8I$8*?^x=^|(Td_v>h~5JzS8w0piN9T6iabtECuG1_NM!R zPJekAC_ZC8cBh#0A4ik^i^Bm_ap;3?G$8OGYOxBQar=g5#Nt0ggADz=Ih!Wv-p9#u zb#xH5dHNw_jrgFv`Sa%4ne@{=hr>v}2iud-)%Ytm_S3>v8e6rS7i6;Ghr+)uqJC9maArxaA$oo4iJx$2bC zwr{T|`49cfU4Cppi$8M#;_E+&lv{6WNx*h;!(mTq`Sb(N>#xcjGq&Ke$CF2*X-Qyv zFFG^rZC_bm)bfWvwSM_850@0W_V0hCQ`>)!22$%I$AYOKv>o6V&mZ-s&}A(Va^H%U zE?wN0+_l)WY(WVb|NXCi+wza$qG91NAgz7djy>=7oV6K8bk)xv4Gx=V=bkE}u+tDb zO71`ib!7HcWtIb%wY--~XAd=p(1e;6FZonW%c?-N{kydP2+$hO z|I3r^d#z=>I&Emv$KiD8wH9W!MV7q!ma|UWJ>=01EhAGx5q{7JJgk57NHA@pBT+Q* z_jmjd{A_WhKOQ_1Apd%{Wu6O7xMuU0r7v1~yHJtoF!pNY2qe@#`+6pJeJ28B7}F4T z>0oG07BIVB)U#Xy|(<`<(7xLs`FzWx&+|~ z_FLDu)A6eIzMUmoHfkAK=cv7w+H`uks;Y(3|!f5D398T`vMw^1P9) z{&%UzQ{9b2X#}+oJ?H`O%a`2c-L}??2xi|n_V8rE*G1Uf^*(?I?AX>o@;lMG*TWG` zqhq^UGiaZ&4UgU2(T=rpW?KO5EJd%j^^Eb52Y%K%dorClaUhLqmwYmrS|3Vwm7nX^ zb_r3&dk(nLlqLkY9dU;Ms(HB!7U-U>p7QS8wp~e@iWJ=0)0GMjwuaC)Q&h z7ltWr>Y`@rXfTIj9fgVZ3pj=N+N%$={iapo*AKQm?)Sflx>(ufNo&vovd6YI4;L+2 z)2iFP>8F;}q5ZByZL=NP+YMBuA<2(+1Rm)j-+H*Mm02l~>q&1%cOx!J$6o(n2IcQQ z(3A2{V-c-=KHFV>=&iPucs%fqLt%b5?tM)I?SZ$SsnUIPVPvGQN`-Dlh)6ZATY-WYzA1LJ6N6 zm7sW!<2|sPJ=?9DI1f9U-_*~;A%+5nHpNraA8pNQqkCJ+_eqpmcrH}d{n@rledSJm z&*eaWW@RhIMO0_-5m z@5jO{rdr#ex4dPG|AFl+yW%4~ye8y;ye8z}!mYSHb-<1MK0$Qy!bjN76fJA%4%hcX zFQQwHMOFWFtQX}!b^x*6^Y6OK0WTi>f9!pET$JVd_lIqm8Ma}UeGn8-Sq2qzL)&{^NtH*RK?;WLH7=wst%bd3Bbbrw zGu7^N{qrORsoR?&9(}t-LvLNJRa5DORs{24*x;)6s0+7PdvvEAh5EJ1$nXP5;Ril~ zWO?`1TI5}rR->fC7D!$nkJApI1wTU6*|G;R*qp}dAX?shG@f!kXmz5Wegx(!TzMKA ztfMEL$>G~-UoNWtsGCH`1rlf=_h8%67|C()JASbJXjiY5sX6ZK(SqH)c80rWgLbf_ z<;1@apF{)hmI|9L{g{}{RTXOg0qWPjqZGQ!-o4LKN9b#1u=w4AyB&?_l7LMNv&Z)=AMAJSHw zA3%lA11%NS?3c)J&3iQNrkld|&vyfE7&#`6c=~WPuW1t$VxTg2=1;2Q9k6EpN-ryU z7g{=O`gGd+w$_jKZPv~r)!*#_`MsuMJ%e7Yg>#@c-^N+;U8E(tL#4AZ+L24$soi4d z4l>4!$C%)<^{pU*6cXjT=o0fk;B9%&SRG=pK1q_L&%8%R32e;rIgQH5u@ZkM^)T&m$VZk zNX6VhPdQihQgf7^3zaUOwkILvYu>V|(zoQ&5xBWRd`%EvJJOARX`e|L87tbcsIf{l z{>2Z0wH93`*$1hdE0n{J|3~Z5ds@O! zUV(#=&Go!fH0x6|96JW-S{QQS$Eg{OSHEPS& z+dKrBhe!6i&1J4!?ho2Ij((`x*N|p>=B}`GOtpu!km4j)xePRS$>XlR#+pHD|Cf+> zaL1v6Q~R8*U`VI7bk6p|g0y8tJPu&6a_;f50}Hg=+kQPFr_Tf6S(x_{ALw)3%UoXs9^ z$FFPW+e@FRFuS_XsoSp3PlUbG{}Y2`h}X1}Xzw7-jUKeG>lPc0vB?X&3~AkR+btvq zhq^&twvz@|9Wz!*kK5IS(}c`(;6EMeCQ9dVO&{RT{nMfDK0B#(R#UNI6qn*uS1YHV zo$JPm?cJEYT3%-U3d?u`m=&I^5*Q#c?~#5+qxO&&g$~K;7F+t^?^^0(`<&gy zeUaT;We9ZfjVsJ#yaERe6@LZs#UC|~X~ZkVCbl8xjI08G3+__{*Nkzt zB6^;zs=3WUNfT}uL81+;tFvxcfO%ip)hzA zh`N^FM`Z2mh~++vtQ%=B&{q8bb03U!pA;6T^2?yGR{u*I%`J(ln>LtwBC7njihJsU z?F30d>heZ~&gz|gp26Dg7sB^cc)c7C;o!vhi!LxpGg$dhTqx>jke-ey=x;}D; zUhGX|iVNIxSIPJ~Ij5Rcw-|KcZ8Zs0lQ2>-kU27#FlgqZxp}e4t1_1r#3rZbEzgfp zj|YC$(8kKTsifb2R2gDhBO59kp+*$n9*VyY>!PV9^GpH~*Vf6D`I$3eE|AWQ(JN}} z#?fbcB7I18Uo8}J(;{Hkb+RtVUOk2`ogNxNx$}mB7d!#0ySqo%AiUCUdq*k_^LD2v zYU-wV!a(QY%sgv2>b(`cXXMr6Yzr()C@? zSS1}~)52OKdaX4tYxxSvVsnnv-OevIR9LL3O7GQPD1xl7<^I}em_5~b(wIHq^mf$O zh0>bLR=hg*hrn|2LQ4?URMg>??}tL}!)mDEQlnd4aH^5608N=A4ch|a#_rIT`6YfW za`M;*L0`%c5InhcbzxMt3r!DJq)#s-WxBTfyIM!PqIUxFZYm>RJVD zsHqJVcE6?B)rpE*t7V+Kwk~I}glpbfc-n>B?XLj;e5jFg`@`%10@z}_GB{o*SKDh& zHwM-RS&>%JDjjl;SG&Os?Y6_ty$y`3PWqReIqMOgnZY9oTWlzPy6M`sU>{1zkwFmp z5QL{G5%q%{rEiJF(wF;dRQ;G>+Wz+rx%GEVJGWBlq;rUkeGVGm^_{gyaIvmy8{dd>dmyDOeznV=nfu|&+?nk{ zZ#>quiGB5_*gHWd`?3_NR_ zyl#|&t6WKp&HI;2+xhLffuiI}e?oe>@aScnC(LOb#SO4|NbGVcf z4URa4@i3IEIThtWxyh~0+~zsQ(F{qZiDc!znmG3e>z684h`1vv->9~PH$ zsQ!z@zJxy`x9CKP=@hRwW2Q>nvqz4vmoTgBBZrR@`VlPob1ikp=R8KwyzT45&6sfF z75RoN2zv^$mStt;MMuH)FJm$uu(-9^d6}S8nDTsbdco2aQ8BT}u$o9`98@&S?(^2& zot2%*yFHq0CZW+`MNB^fQa3Ljln&a>%rm=LMrPpy-@mxrA#&v+TC?%=2uizpd>XZA zPr$#M?K-ciSU9QDmr6f`b#h!dtYN$V-B7_5PCGH>=NWxY8(ds=dfqy-ng;*P$STOn z$(BqX+8#JZVc8IN6|7*ZpdG2TeuE_CY$=u^%S!mF!IE-T6%sF-&iIEaGd~}r3!|_q zIp*!)JF%%E^v){Eu?c^6u^htK7mn;fc z2&U)ZTN?ZjFI(wI#qUEmG-~9@AbK$uiq!oJT40Q7LizHN!FZTodgEPe=!WAey7czR z9!~x4$(>1leQxMls`%_Z-|+vP`{%`;M`4Ri`?rX&TTgH)7fz0LPU&+&S<8M4IK;U(ORSbL*%DLnAY>u?HT3FJ@duM$auOst5Z>O$H_qXG-j&^K>-!zoCu`nlsXkN zroWRGKVK-9CX$_>4 zH(rO&MfYcoP)0a5gK+9RsHB!l_3m8#Tczy;=!FIC@Ra!K9HMeuJsd;D-(8l`#nVX&Zd}Ldzl<2$ zCun5n-F z`3=tq!{~|`;?S((;Xcuf+-LrseOJ9NJufRgdnv0O;@=Fqg&ppO$4|OY%6$#PDL1#l zX#qZ~)3dX4u!X?AjC9D!UbRjQcaxk)GBec6a`M#7YfPP+o(J{;7Y`Mdsd>`_FzV^q z8EW2icp1VPfXRGtE!=9CE?tXS*oDHM>V4w|<;TGauJ<~a0U2+eVA`8|fSS^m)1}8C z&uRJbxRRE}jb46^K=2l?K)r*Q_AZ>d$3 zEC%7X{XeblG~tmBIdz}f?aB?<*Z5tSJm1tMm44p{2b0lVOQ=WPzEZG~$r;i-7=~D| zkK6>CgNrfEFL5c2jg4-KEOE0!Roh}N&9~!rh@lTQO-FR_+S%0O)U<+no@^gMsT&E$%qG{Sp>NgvssAtDncrguZn_QCo zl#J4R+Gil@)mb;X8sD@5VddIjxw-W%SnJ#t<{iINF6%Ze=5eexM_OJrORHc2@5~!8!zv zPuO%sNgMvv23=AvnAR6(AA=n&tI{&f!W;1j#o}RkcJd$dLN5hme=4hx*FS)^I5nb<}5G?lm ze9W1~FKh9(Uz<%8tznUryXdGZ`=PO`N2uT3gWb5Mi_KrGr!)dnTNqg36osP#=F4A@ z0NI=^j^pV)^GD4hsz@IKyf*RlR4UGLaw-`OYoXGYDjm7ng)KoPp0)?l&#+ z5LghAcmm1xtph3aZ>|1R^U86kyPrFQbW*RLadUuYDXn?@eT0|V*77e0@EbJIyX6b& z+1di1-1l05Z)Q~D816r#rW=FKOrhZS667@CP|GqJ*>&3XYqwnELaJ9=oPC6=0o)G1 z<)tQDFS>Zg{N zpCMKl9dia*EBC^WE$p^3Fx{0W9qEqnGw@V<9^&IP&0d*vme4b$?n9z9USOoYtqk7V ztZMhK@I5aG$hfmg zdgG<46iV=KLNdW0&fsExemQ^&?Ym^$otMt6bSBjoXPl|)QK(A`E6*rt)E8$42_`Sg zzBn_6RQhPZ7&C)`;fsp<_Ny}_VQxWc@^-d=?Ztuf#R=T=SI&%^D1ANH14IemH@-!s z9ko7Go&!VdBd@eChDmJG@scC8xF4t6C(}Y*>o`jDZ-ZyC@hseT4X6C5$#7Q2?MZC& z8h+EYpQ>nb=bl~G763oCJK809P_?ZonQESEhvK=a>03%DhQ0n9Yug(AC5s5Ei>Gl1 z?3CPr&20-L@dw$$xnU>T&c%|d9nQpO&o)KSgg2Wb1?&6b@7s`$ZpJ<(se77$Buept zw<|diQST(rN5l}uoYLw8?IBcs=BzVaO=?5H-pBVs1`Hp5Cd3KmX(4mf%>1Q!S-Gqg z-loBL;@&=L>Ji=#U_8HXgG1-@S{ZI@u$p;9K!Uoo!^KV13GMhv?L$|%7)TRePJ|ag zelYOzgB^*KdZ9LoUXlkZDda!9VSfKZ+tmOI)(~D?r}if(LFpi);=MaPRE&ByFO6wmH;9TqZ(2&KZ71Qm{b4KK zpEbbLK-Xh<{7mIxpwW89fn2HC(tePZ1T+PaTU#T1CiL(nRWEJzR83q8$`$&Qb!IZ{ z$rWvpC3D+dsdGbnV#(sBa8kSAZLN8~DU_}RG$B>zKbvAHb#MDfF87`$e>*`@|Gj3o zs-GQBc)Jl#o=Y>_Ka}mxHWv#-7*zUK+u#H}s5z0!3j$?y<*D}h|6PxVo@sZonUrr% z!HUd0DTO4Qy>(_6Uu|-C7d=?f+}@4t-`dGc9s@-)2f<3_j`k&_DyetjQdhQZfN|-% z_90Yr*9aw*Kif2yia%(Akofz?JMgNxaFa)#y%%!oe|Lpb+NtphYVqtiBnE?&n6@PZ zq860wi|ut(=zDfN75X>bNvYqS4G|8Ir*2owX}^b?k={Nfz-IG!Kr*9+2rljZw(E9W z@%r|Edq^t@v@`oo`2HzRx^W=gh9(Mvy+gI_V+JErOrxiGdT2M3>-n`U*QNanTk6}feu8DoctXicKZTR3vP@}c=0aaapGB-AhZfJ0NwovHpa(i;%IV&{jgeBeY#?=CJgs5KbOn{CcNFsYox{&p zRF>)T;FI=vN70{&AiLLeD5!dM$8btm(-CV$m50`LOb-+T2CQzwczY)pKDlzwzSQxk z;GTP>BUmEJwmN63OWa|7_Zp;5J#CRgNOcL0X8XT80S}h$ zE6&`VB^?ig=ev5=5#rB}WYqdgMfe6@0u72T8c$D*df~EFIXQXJCKCjv$HNmgEkhlz z)+FE`%ng_ln*EE!QwO2(Z?+sHv=n-j2_pwKWZlJh$e824z=>@e;NjcwYw$g$aoj+F|sXH&(R4i~Zjr~zm z#G%G(lF4E};G%R|GnC66s;d{bO6Lr*OPezdIivwqBflc&awqHj#emMDOY}QX?%y@TL8W=hsdx&w zy3$pn6x98Z?m6zq+jSX|-N8kQ6i@2U-`E=qZ?>^ul40cvnS^eOcp}*SJE(H8?k#cg z%~t+W+l?t6V z_s~+^ND0vY7kfSN!BLaMGuzQQVkEgQle#YQKvv$7C;>^VLvjiFaec(yctku9e=R(Q zYoOry6cXW{03Bpx-(OL2@hf!SNLF~W?Yh}%)f~I*N`VjQD#Sx$jx(urce@jLJeN3# z!(~xQE{51CkyLFpGibx+!A_iej&7c$u6b+Z+`DUZddWw&o!qaF=*Gbrsbw$h8+5w2 zspetbFX9=QtDU`th4XNdTBm!QlRvJLi=P+*mK;knW586d+@QN(Jec{LCshtjRM5ae z-KXLT{{=wZ3P6mZ+-i`!IhQr?%Nd^N3jRn+7WD@t1R#N*;S*H~ny?>s<)!r1^N zu1bvZZ;Ie<1~@!LYsI9gV<75$aYq8^tW~;bx)FBVhvK&*=#T26E{r#g;&T6@n=jG( zF{mwhS+`ugxn^`Nc_kQ3abVJfmYr}*ZqLbSprS}m+-q2Rlcu_6>pdA>-oO`$#X#R3vTt2_I^eG zCSK&9d*Mu1KU_QpFz_^*zS!P}a)u;IL~GV-c5X-_v>uPt`;@EzWT)I;HH20j(X9}7 zWkDd^uxj1nTiA`8UAfZs{VML+TAhakCV%S!a6o}mC3E;M_OqY&uQy&pxR)U%vo%8{ zThp)S|9I-oNR;^f;Y=h*Fn}&@O@K4qe7%E25eP8FUJ|(XI>Ter(ZwAUQ6yn!~Bub>B&PGrw@AhmgZV zxVxV!(-ElUwWDx9e5>4phBr9eEOSR zWhEs#895(H^l*SlDHRVJ=}WJsYgGKNBF#wXUtnkJ$Qn|(GomiAkAckkG&Y%8>@wDV z;XS(*g29^nGKLr9#4Q&p9OHNIho+jUA(S)QGCW^Uf%8fdN5k{rgZ*m@aAP8 zSMzm@g5t-XhoOzzFn5wY@LC{OY2T?3n+9=sPNno$_-BdJxp?=^36jGF2u`Qmo%Zg~ zT8(ro$xo8g$;5Lh2vbn0qDPPK^b~^(PWrzL|2NRPb8a7f!Z0$Dg6DNg3@xqW@sUUZ z#w7MtfyEr;R{M0$k}QsI{XY{r4w2g?(*7T$fgAe~i`+^q!oH*>cLjB3iqDvSBcdE3 zqFey?Rz&A#l6E}C=EKUd*kK%EhqXy=Gm9I>A())21Ra`Vh9z*1Cw6v8z}fuqe=eLH z_56wuNX4T%B`;i`l8}MK$DwqZ3@7XdZtEP>8{#-rXppSXiV#c7_alSPn9lK%W%e_e z5D;^G=jh(!@WC=U$K=j;`x#6{Gxy_#ov>__hSD+|+z7+Ek?QtNCmNPDN=eF?4!G?9 za?F=*+}3Mavc!nEdm@4n_Mdy(b}eEiawCCsVj-p z+lISxrGB*rBnXku5AUoRgUfmpLkN4ymEqHqLmcJ_Vr!Ln|cfJq!Oz|>pE*gICu-?NJRLMO#~7G>%nyEKMkQJ z2U_M(!t~CCl<<6|k}iIWmY8@5nGQz8X>?lR$)X-iM?_5VMWM$M&UZsMe*@!WP4FOyVf<=4y48T&$g=msVj>fI_T zTaMjHeszS$rj;L@<5qrf{<$z7L{%1lHU2KatyA*^EIZ8CXCuuViNFEPetI7C=g{5f z&IeHQvRpX<%vVzBy&BV3=AA~W6mWk(O6n8t` zOw|hr_Hk@}=Mrj8K90~$4|m-|2VM+TkjohT6z<7*{Y+VZm;q)bwl`@sUQPq-qn>UEuL9|8G~CQJ`WGY*IZI{3h2-mtB-i<7NqByGO#i01_ghP?lU#qdCwld`DO?hZymevNFzTKcCK@lNqK)Q%%J7o%ESY;Cg6#VA1$m)Z=;xJ(FgpYyyP{>5zu33!_u zyU>zn^pnIL^W(J~GW0XvNaPXMOIUKg$>ELqeww&Ya+g8u(MWugDi5Q?Oav1fi{RYG zL<-x~$0+gi&?db^P-|Wbqz0Sxl6CT<_&ui&6)(}+Wc_n`3Hb48p1Pk7k}~;wL&tDW zeq!*lVptKcxmE>lBC6sdWJP~=!Q4`4Z{9W&8=V}{Tf%d(skCggU zchq@t*I(7|vu94{eDWzK!^#(2JZ*}&cV5>!2ZXPORR|XK<7od8{V*=+nEq*rp#T}B z*Z-?>V<E~0;Dj3$M{7XMVviXId>t~4OM%zCv8^C@2xqh{Se}6d_i*}Ux$nuw_ z!iSfnOX2)UV2t`e%#WW)$uEkIU&9vGkx{atb%p%53bEx zl@TkL^TzV#x#_$$aO@*l1uJ6B)#6qZtX>r{JCngfR`&9t)3Wn(1*_qFTBf3Pj*yP^0l z_!G9IdIU3rJ1+`5sF!aLR?hnuAw8wXkb4-VYhB&YL}a`BmBFmz+eL%2bDeGD@k8aN%b;yYE@D8Cq=A z1WPrwnooWx%AFg`#eecSd0sG9M=0en>@H_)`K!1yL75e zi43Hlj>otRj+!&|zNxdP&7ChSZR+gVGiOH)lXgmBmHI@#Ud5PcRxY(1)(3mf&B}#~ zoTwdDO!WYh@EEAYhPU(s=-JbHnDU5rW$~ZCD^aU??>xcNx*M=$H;iAk3v7$kEL0O5 z2dOmYkl!6_yZPWv!qVg7d#_vlJGRHPOgKu)&5({T%lcrd32lP1={>#Ivj5pts!cbH zw)h$mlJxN~N2O$`)BeCx@1Hn(#N#VI{lu09(+fll-_1Mq0ZwG zih30sD%1ZN2-d7eu23<}hk7n%WI7nK^9ez`!Nmaz&xbPC@#ej$>9Cb#b!fq|@rd~E zcgh)Af`eQ>(ES4N{C;&H$XXv=r&eW+)A z7`*6O$(=f*keE$(NFPTZE~`LX$&@gsiBV53T$uf&0PO3t86HGIp1B~8FNj{S5K67} z3l}a}xNy;;81u(S4U6nV>A&n6FmoYX^OrBdQLlm{ZS+Duoa7R$6v4<$g)9I=K0+Rt zzVXZM{S~QXk;`W}r8^p@QqQ+~n2TS~-_6~n*H=sEv7RM|22h+)A0mFbyF1Dt5i&~Y zkKS}a?RI2`?CM1>cnn6MuaGNJCZxA@$dTf`{#@Y|{aVSqz@tgn6+XjOaTUB36UGJi z#j|wv=o`eV=$~jEP2)ZaQgGwH)|W~KHgAX<=l-p}N%GM$2TuK+eysE(bKZaIdwsc- z+Frgtm>y6XT)jk&h%++b3r9ENKJ?>WR2mLSIs;)8L@IYf2)Vl&*t> z7?x_U4mOmFzm3|yH=Le)vm6oM#sn$3m!k~jk|Y<_S?1qih?6kfmXGwnJqB0qlNpBT zl6COL)GSK`H#^k;O5Jv62{08vH%iOg=($;jeDOEztC|(NaU*6MZb%yP;*AI98XP3^ zF$)f1DRlseSDqMzK&s8FD-mcn9VsIaTO@?kZ$Q$v_-VK*C;w%HocnQs;b%!FeCI(K zhIb{J_Df%fj-d%}%iK#okCIVvuE8Llar)lS;oKc-3@Yhl9}OB#59J%;>GWy?ax6S< z2q{@>KrE_!gXA&;YWbRf6L-vtxp4&ssggrY!5_hoM#ZMdD=)hA3$*pB_7=j!ItA5%rkTyrvDR_6_B_n)jAAUHj z&CaIq$J*ei`LqFvHH=3fdOvIkJe91bg4-sQyodjm@B# zd2Djt+U$u!*i-miFj@+66e1CS!Bm)WJFVJo7(w}4!3qRyH+a&*3zCUf4E?yejSPs&*r=@$!gnR$%1#LLSSc+^jL`oKA66f_LUW07z zkzTdO()MNMQn$DICDu^^0sv|)%JdCoxMp>A?RsOP?*K(6GxVUFY`+@uYY^lgzmYq(V* zbld0B)8mV;ChtVNt&U)m{VpP&V7GLh5z3=gu&0^A`qB$&F{1l0zcbSrRnO-#nJAm5{6ziGGe(Inhc7 z<9p)Gv(`e^*8Au}1(0s)(|BRqD~}*I9Q(`s&LO$OQw9YsddiUGx8%;Xs~=pud{WM% zBBI3d*ge@a>8n?+Xn9hBb z2!-c2PHxom15CUUQ?V+@g$oEVMoHkX{{>B>(#>wZ+>fEg zFi9ITmRIpv(YSeP<77z}xT%AUxe{GR?NDR9c>1-i`+*kr zl}T1!)Vvo_S%w)UTB)L8##!R_;YZ6NDB)tDga=2rK_!O$5(*5ZezY>yC>bn#(Ec!b zC)RjU(lsmoN1RbYRr6Cj7H2H!qxPnFqeO$l_uUw8tdZ1a(@v>rapjID7^P}0Hcc*Y zxKV1S$oF+abpUyYS;VBfbZRBJj5HpWbj_xXTG&>WJ|?B3b{IE0$v9GCiq*2m7(%Cq zA5e;0Z@Ezh|HRS8I8ib8(`e&u5&%ee;DA5fn12BIeBL=Fr~I+TZ$)j$+?9-bVVv4D-fDyK{|;Bqn$0C7jMB9Z=HvbyBp5Z@x6{wgZ9O z-_{v@9LX^p>2nc(SV2Xrq$Zqu25T_`} z79-6its|0P+dBHH!lsyJYdRwxY$_?oT@APS?iU4RP-;4&e&WB7cY{* zA?Nb8ajT@c8J_MDSMLWX`a~gqT;nd|_hQK9aB+@HxHR)s@Sqvvj2;xUu`-zZ&wk^1 zaZ4D^K>zs42(<+L6qTVkRVPJ(t@HLFRK$qj=J1cp7Es{_ z#ye;^XZ%uJp)hstVD{}Raq*fj%KS@~;{o8~Fl`I27(&INrxkQpcbP94KJ4`b0O4^f zJ~B#k67lGARCienYcqg8zmA}rxv}mc^kSvajZ3XGE|$DbX8h_y#W^(*q&jL`A)XlY z$^rDoQKRIsfnIsOxFUK|Q;JrKXO?JpK zgClINGZu-v;b8@}Jn4mcqr~3Ax~lGugKz-7XfMHV>9h7q*fbo#4DkS{<4qU7C|fKp zHjitXUBc9T3fk3RJR`2f8gs86H)`x7L}?|)DwPOWuAZKslRXFdiPKkQJ;uVfUAj;i z7>yXS7W;~^CLOxDEHw|YQ1c4bG206&`gv>^K;fSswmaJ2$D{`mg zEJXvVeIUudgxRX)wO062@eli;R(+u=T9&)^!Bt3+T(sofNLg-P*29RY*Se+(G1eUP z(Z~QA?rt}M(%p_oQbAe9v<#4`js!x)V8hfCXx6v8eSC$U5hXPzXB9s3eP_~h4&b+1 zddfqnY+sd33EtP#j@C>%=!;0|U4e=Gl=v_FUp5g~gcv%ezW5rZZf9+kdDD~SgA{bs zQ6EkoE1Ffb((Q=SW_Pao4u^qh>T61R$+y~-E~F#Mu2e)JrOQJRrhJ-S zvjIv>7T(bm6rEWR*aQY*@ycvJ^S@a{Pt%%Bn__J*?5|A^mTj@ABW#aQ$(K)M#9|L; zEwzqBo;P;Gdu&i5%r1w+?6v1V%>gCqE7Pd(-e%yQ>^hsYW-ZeWB1J|Vl5VG-K``0t z6T5s_t`?kn)FNa6Tk}%Yzz|_t>^IJw2UsKvTo7e~t?*Bqd>q*XXh&2#VvRwCOP|%? zX;wM&9Ktm8u)6gO8`vSrKf(;`4G|z%A<{$OtXT8DP zl+X5H`H^bA5t(DgWZ>b>Kukw*7Ym};@2EwX10QYJG6p*leqE;e{E65W2%BvxQL^Ey6%-QCHP%@f*Gfm(2qfms8!b132ngCKLSwveD zmC2Ml)2RI2NG{ln&=?|?q`L*Fw1%sN$Z<{zFM~LmzNxd z<#_oI`+zg9Ak{HLX5>vs;gV2u9-{prbpvEmGMA;VT}A16&Un>;%IJsCG7nnv?QYrN z2iMKcTxP~ie6-|@ETAp{SFK3TH#H3psYeRL}?x5x39yU zf9N{&0rND`ewgo_ro%@11iZF5XIn5fmjTADGqkN>EnS3ox`=ggYv^j0fGpUJwLum9 zRIS*HpPpJYhQlev=sXYF?uLE+B33YQzV&wE|ipE!obV>P;cW2C8 zMxO6OnV0KQ?@F4|s&INeVgm98g>F~M(Ci-E`-!_ZBFjutl^fsBmLvo;N-2Csp|JMQ znzS3Yamff*+7J<_Ol5Nu%yz7{JOwLqGC-BUk`YfY-!Grh1V!dLC>0t_Fl9Ei_V2kz zHo%KtGONKZyRiOQZ56&-Q{X@G!_>1u6m2(Xq$BH`Sh>HYIiK9k@{5X6>Jbywm?)bz zaaC4&ezau*mH~#T&2vKd`QI~d(#&ffrm(c%8b2t4yuSBCJmis8K6V8ZTMA+h`wIEp z4@VqrHZJ|Ss?q#hLQ?ZGmu9l8zL|YYh(bfl5s1=qVw(ANF+(iF;cYa}lLh7!sL4u+f2Q$Z`dd* zda24=ZaJmWsP=(>gt%fsu0gg~cG?C3*-XuZ(yUj>rkZKWJ_zl!7CW#a`yw~$dJj{IGtl&^z z2fTnKqXzpqM+)>PUE1-Hza!6$?x=gp53{)%s1LSVMitMU_by54kUR1`#H^&MU`qV4 zE5P3}h&gcwqb(OKqViX&5D>%4#{MQ(U}i_nw4jN0Ffp+_`E34VBACrT(;o!thNZmu z_p&S~K+Qh{YI&I2*@W_GbMUz^a=p_NzP^1i!!vFhoG?Pzi(6uZ$8KG`Cs=Nt3cU4n zzzXTBSRc#i+6(7>$zy1zj6QaN$KL4&-*qWTX+uhY@GbyWZ@<3j%~TROWmN zme0sY9DynjvEtoDgnKKW4J+&{OF3N{84iC!#%LD@ID1fy=Sc;9^9@4e{J&)8d8n~{ zD}(~;i()=n>uX{vv8iI>-ECeR6U4FSYo&<|Gat3>V3sm#XFM?4))5M<6$Ajatzjy` zL+W|D!bfhNDTU|13)|vns-FCv5`qmTHdQJS;J2jLb0%yCG8)%LdqVYA!=tVH<3|@dfx`+7FvALJ2%bp8~0bLm!6F?pJ9SHv;tk3^D zNsSe>1X9HYs7wVm;FNJYPxF{JjfWYbmKBDC-xe4$OP#Dc#Q^KtUQGzaFMG{-kOe7D zLDx)<)YtPw6CXql`Q{goDpjl+s4iZ<#DY5WvM;eb#Uc)|AVl`UQTUgQ{>+~bi0{jW zsfZMgM5~{6C?B*`XSFOpL~X6|FVS=@;xDV%^$Cjz%u+Kyiq^!PxJ5QJ(!339Qc_}P z8q0Hs#9DOeL`C4ANAB?A?zAQEBJ{>vC!FZgUn9Mlm5@87%5$Ac)`dG$>1*TVze%K2 z+~yD<%Y3vTGdqJS#zZDkZc>-bBpM%O*VvQE78XKW~X?Lw}RO znE8hUOZ_8s^4t~6vVb$V$p1s~q2G%n@Bb|zvtDNbS($gra-XH*Y}1|<{?s_})}%?{ zH@n6{%#}ZvWvTsf_b@sZppOIt5dZ9Xq)3KjiNDWw8Kn7K8$%a-ko&9QB2w|HOHT%> zkq&q+5*;wRf6Q?-u%poRQgjS(sSK9YAA9m_OoG6 z0;%Ofu*`xh+!V-60LhDE*6Q3hYOJBO)#O=UdSZJuR1^$d0L z1L>`g;I(?TnCv(Ck(Pb?;ag(Dbd&t7gE4ey{zaN}N1rfuq?R$6%PcQmvrL6@eu*6X zzYj}-`5ClT4L{D(#U0Kgdat1`zR9vC1_bHkc|jLKxnHW_bC@hsg^Rxm8^Q9IS^28s z;V}b;gF^tLG`H7?Y-6+W0>>uz>WDO>qY*I_yjLQ4uii~1OqjR=72ODgT{C0F%KvVU zTuX6#9B-!HFoUKo(_tyIawa^)+SU;YtQAZkY+J=#G?*O5kMf>i`^gI6Hc~({oE6wS zRk6wDQkr-~9q@;=Ac)a;Hot8kD8{7WmH>~?&bo1EY~^7_^xh=KrPwkvb9-SH@>FO7 z=U zVwJnm3;ql5L?Wp+6y32xMV>X`MHJTkG8?9t#ZR1vEG13GY(Eq-P~724+4<~Lh- zqXdt4E4DXJ$SjY7O%6XX8*FYCll79E(VD`Vus>wxLQUTw2jcxp_IiX0!}Y?kra}L( zUCVgkI`T3lt7e#Az0Iw*8C>M^q#hs=Y6% z0lWFX|Kd2Zn@ySr>f=pX>>W?R*0yEZez_;ZWlYb*Af3PewB~_kb$`?(Oyk0WZ^HXy9LH;n1cnF8iPms;_w@oR=-<;#M^kn-gTMGZkaotqNbNkwCK9tb^m`=-LctC%) zippfma_cIm4cYrU}@55K8b#n1sz2zJM+bjv4$vt_jHgt*c@s>rAg7 ze~F?NS;#r5kjuQK|6gMNha~nlHBS&Q*e#%PW`2HkZs)fjYd85K^Eo~WJKa9%%6DX&TUTAZrOS^`{ zD060=3%xhspg$8pX{dPj@CZuVI7m(jX?v7Z`dH-e7oYQ{nKkbZhWqfaBQ8O<_g}aq zbA%{SKm%)@j`EJT5~A#K<>w-#kqs>h_DU>Mpw=eXiKaMB7}%E~@a&skXWI$bzSy?q zxWkr-usXD5%2986YhIkE6Ppar>BiiOnfIe*FwI*zzb=?5Op!YA)@`;&*xpuQ`)p`h z>ujxbFJ?--WV+_0@n=497bR@ahHy2fjED>Fy2d!7WahbfR@rH-*O3s&;RWXjTJm1i zC8&smXoKoiL!2+HSYxg+S`Wd}B zLzD3<;&#a(mUwUZl5I-t?Jt4}OwJONTqrZ+FGElhgrR7td zs3x!2$J!?4(~1Zx{b0HiJ-Z(P%~zdl^QH2abxyQlxkgSCB2EvZxH4V1!qi#JSki3M z`O>z7#z^{m8Ipg-9nif?X$s_6RvmVd**#2)%5}3yeR`jKfG~b+GLl2vt~Z}NUC$wY z_(`Li7a#Z%`p8TR|3MeS4`FH~1gE<{I)u9a(;Nev=zD059}=gF4TBvS%+oc$ zCcZz|sP2U5zkFvRQVMN}L7ca*Pb5=M3wHg5i->$M_P&vD$hmimA3pWiJS*)0RBZrV@msAE9l z{f|?+=m?Sv^#9%c(KeyIWvkikv8*N4>i5L2xbNA{<(VtfrbP6)Aim1ICe=zhrN3Sk zYXfc>M}o;1(lCx*{4^nmx(DlBXxx*>5H0t|hB*3mb|+FQJ2i$0A-#_{H6nWgi)r4y zyGr52;uy`K9q&PQp0F-SY0?XeoL2&BfINh%_{qkp+I8)qTi0w_HJ(_hoA+Y2DD805#Z&cE( zr5$)u8fy{udE#*olC=P-un$VsIDf$+aJDqD#fZ3aA0@#nH_OS1y$2a{DWUotoTf)s zJCXCCQSS8P>@rw-zqt?L=w-(gp5{%}^01o=l|_z{d7IS;`TSR* z$K0K5YDzd#?&xPy9Py)Dv^fQ&-r1H+`y)p=)0KCk5h49XwT%2n#6;2+4p!oY^H0Ef zwd{z3-akW*Es&7r?70EHws=pVPS`D3Qq>kfanl=R6f+-j zcUv=z>+?hcQTqwljJ>RS$}HqWbU< z73Bt>9l)D++}GzG2zzaTZ#D|NiSjZbcM;6ZZH71Le)tUHyfx+oOpdDGX$y8XZ3#UY zJt~|o4<6-lm&iy~)QQPnR@{wcjc{lY4C^skj_~Z$%yX&%2>DqTNJn-?r&IZ;qbhz$ zqi=Od7OQnC+8OQRE}lZ~l^}$x`7~ghIuAX>$oEwhTdU{lJXg?aWL~A`el3X0j7dng@o!LbkKxJz?;mTmS z+85W<$hKA|$?etSsp3S9p9H9_$j%n1Gt3w`la)rpZ$dDU$ut39pWu#qJUTMLr)?7o zpWo;$f`4Bd__qQ!wN7NHiup^HznSE0THP=qmJOpn#3YpE9P;k31+TEM&B zeAij|`I!aLkwVoO6h5yJE*Xx1!n8ssPfB?|!jIrEEZ~~?mZgb~MX<{j&O|UU|NRGI z9@q1uq%ayg1`n_;KH6Y&9>Tux46F?zO67&!BHWZJNZ>_fzk$Tedp?JE2IX7wz$8nC zJQ+J!+E(i~l;J-Sh?z}s*~$@&Rp^8_38R|nLAWREKD5ZA)e(#Wf>Z9q(^Dy76YzcV-A81Otb5bh+jkD7BR(3X;3q7c zu6k#LxU*k>NN^_ZorFPDv$V_Ek--mLoLjG3U96DJqhpojBSaI z++S-4250hgvE@|}T{EiA>Qf5G*`YXE8ph4 zB_C`~UHrv-s7zs{R@3eqNqB$Q?UT)W&F?o3q~uUF6eMil(q7yxcgAg!oQ68HTDTj( zmqulqM_>I?7dTFU7hZvI%j=|~DYYRc9CH6_p;XllpU>t4ZOBE_v(J%IGD4im`Dz2a zt#{cwQQ_MsJ?O9P#<5Zg%W~=i`#yEEe41Z$!cSHHK{q*eDxK00F1o&v{a#<2lfU)L z#XmNw-zFg9&#aR!wBbOM3%z8B4yN%}BHigoDNFJ?3K7wY^*dwe=j(fv4v_`x$ZmC4 zFm+FDL(ZfR4-BA`ooA7VX~D>_l8eJ#>7j`u{3+WN{N$Iv?D4RVO@{LCU;uSFq$_je8wkw|3bB%N8ATa%2F#^%|li ze-^0;cVsY5*XA@u3NLJVwr)NPFM!vG(hr~Uc3~!^4B$Z-(1dU>Pld{Mq$({tt)eUL z$X2#wTay=vgGeVuD#JRUA0z38`+7gCXNwsb5%@%e%y8bP3OAjV`3pP5{AiQG60Qim zq|#?Z2hi2BL?`;<&fzL5jymE&+KieYQm+n_m29qeqH5)l3;`jP`nDs&tH&-!Dy>1_ zyjkBwfrgJk7T%sg?T&st(ZsZpe8;iL8G^6zj>iD)Gmj&pIWGeeeMDr12VM)Ir=L54 zOjOHits9N>WUdFW<_L{kY2FoV@U?Bhi0}K&84tQ`uqKWQUpc5G^;dN=>aIR0qYZbC zKq8328a3sX)j3k`OGn*lYFRrd`9YfD)csiYz+WRS4#w@^~8{>n(VW#vi@xq9_3I!6;%O)`VZ*^CI`#0isAm zFQdvVgw_K@hf)0X1`nr6t8$h;L@B9y4gGqp%7@;a(x7tY`$WX?iO;wBMX>Bp5c6aR z_?xfKbN@5owTR#wjH06E=i2-ovq3je_`9G3`R>!MgHmK9Ph8(~vV9NOfb6A44|Awz zW2X-_Ez~=^%vp*k2>f98(vJ9(lbLvd7YE=OG$pAI^%AmW*mA9;{z;c?Wlx!a%S8b2 zOcv3As*AL^)Mh_hN?8HPh~qprZz?~zQzn+wTzb#oQ!)r~R*L=s&UVT99GNTMN9KLJ z9E2{7+khA1C1;h$veP2#vPinvuvddehER%sfG-tZtoePiwBIE`8%l4dj)>N?8cb`w>sZgMg_BQa~ zZ#OC|DVy)4gom^v8C)O|*H6YWx>1NEXe)m=QyH$s+X z7zk(U%l36j8gL!MJyWKIjA4Jhl2XPYD2nQMhZ91bAVa}zj#nbXGi(HyJOtm4EwPnq zQf+#JFFosc8N66tZ!6F&Hb>!1)Cw+oY9YJ8v@&%E_4T z$69#P>k}FfS7VJap=4yDlJ+)mu2kf?2jZ*Aoh~%;g-#C_n@h$=#ZlOt-HdF==mr77 zZ2ts&pZc0HP?nduY*i)#~)%$tPw+<8j~a%wQeNodBi&hY!LJ)}hr#7DIVkFinfM^{4Yoe^)aV_1mIw&h2g z@$%BOd5m+qo$h{C3t35-b_%t8(5ZA}LLIv1e8unG7UwGvSvR#gJ2DvHS`TPL?dVij zB}B=WUUPKMD-bXWghXa6E)swF@F~8n68hYn5u>TNx&qlvh9O?+7e}Kf`Up6XQLnrK z^31%9%sd_of*OD@Ira{eBjsIm@-9u_1l zqLfIy2o^@WT$+{{ljQq2D!G!!j>Q@g3R9T!{~w0)?#5X zj5stSWm6ZzS#5cGnEz~XxBO}Uj)@7o%hqQdO<3|!_0}SHKPp@?$k9^@MhmFoGrXxw z);oaAMFnS}!W2@)65%^0XrhDTR10zaa21Pd4PvRmwFMP?gNi3JTUa@n!I3 zaP@V!er8V#)%JvWJ7+LR9Xgb9Rt)m>mClg|Oscp&(pzrc8cO{%z=xh+zn@pHI9s7K z;Xw@&C?&w9sPOy2PE@`sI-%rtUpc8%dmZV;Ph4f5lHHjDRPr;_2x;pbkmnLR;AYwZ zHlx^B+VX2tV4qvyQGiF>L$%k5@7CG0Dk#?+eC7OdVq^bLUsoO8g~K?DKKnp#m1-4%9MIhGlDgM@G>hzf{`!lDpv z{ob1rdUg(eGlUnv(srsRm3XW7d_i*1 zx@`&K`VR|*n=;>9z1#Z3+{#PA>fAVdtxHAjzIZc6$#XlVK$_}LemUwo<;7gpWTKO~ zst?)n)CcKWks3ge`D&o3o13q0;m|~(oz(BBwp(EkRTrpj70`7xQ%teyqr{b}Nhak| z7xjdx4IU|^n!>Pl^bhwh@CwTNsa}oU)b4rszSWf4kyUki47%rD)~My>(Lx;;p}=fm@+JFzLsu)*qR zGnrOgn!PCe{CD{KUI{;cyu1XL5+@T*WD_Nv=x-`pgfjkG@OKh_r|@?ge`oLmr)Q7% zqLT-Yd(#KiXCG7|C!h89)L~?ZwP*1guCvY}wxtiYsC@u+bA8L04$fbe_~3fi*Ktj zR5#X|F6xqoE3u-qdxR1vO7n*+;eyKtW2^>t&qIpQ@9~jJjG)UJt)z(3pmDOdcPg!E zqVBJwlrXpcSg>g52sNJE##`frkYmSK;{}QB0VSQ5&Vi7LBb7+numUAC6J5s6tearb zvl$Ct?je|o#cyWcO1!;MN43>zB7HR8+Ci8Ir6_u4yw!^$s=?+)KYN(yZtY?vfV`Jl zEp$=u>AATu5gTygLWp{GIqH~X&5KBg-dm)E2s*bpN-{m6vyxck3ol#U1$Oo#Ye3_( zO0eLhL)83*DS$?dfOU1SEiM~o4zHXnlt2HHHIOWaOukM6kCByi4m>k>*^w z$bW(2C)jiA)z3o>mYazWweEcJmnJ_4?^s8(7?&1ck3-?-6nB@p8b=?md}T@#op*Zy zCS}EUFR-Qv;>vmOKfSJTp;Z*9_X2AdLH70w)+9kDEtTj14PuG#rMhbPf&}sA&N8c? z;PTNzIQD-UVDG&-R)5OKg?F_Z|njyw-!x2-G;Fq5T7w4&kQY4ifHF*m|fXOkNC%kVDB+;&lqpeg(U~@$hL=m8-2~a;Hue;k29V5% zC{97k&zK@bv#J1lG_5&fLR8QtV{pHp6otWVXH5|fY>wbu@Rc=)K0hSGIfL4l@G91T z!4Y3rlU=}14=Pb&Bp7?>n^wdFzd&qg`9cYFw8(Olf*QY;UMc$tqS6bdKp_;@p}n(j ze8KO6DaHlca?px{B7NQ2@|88;!5Ev?FX6+C2sMglk&#`3)Ywpz$v=6FEr~vzXkH|g$s1hWk+H=#IDj1Bo zX*Jvpr6~ICM+_iyMvGv&eH{MJV8Qp8Ppgh05;?KcPhbi=u{*xQn&QMBI{^ut;Nl~Q zdlD>gl!9sFF^NDQB?7^{Wqqd@Hegxq9EC3||F_~LNWT4EDHWyb*G<`CRFm7lI74n= zd10@WpeJSc*bQfgT|(*V4O2To0yRuVJBJRT&JpCg(eY;Fs*^9A^!;O!%(xRcUr6dFzHX#)Uz}EmK_U7WYW+ zP1^k$K0I+9k=WVqsGm(?j%FQQ5Z6?z0p9vWF-HIJ1q60(i&7Z<{fZpC+0pi}#xOh1 zt9E_rCQP7L;nySWM)+m0CD4Wgn@D?rSlhVnM7Xp%z(~3lh4^uH4#FV7BGDPsZSb=h zQb;-@BVp|N-%JTYje_>}VwYxHV(iA`W;#gFUU;_-LS)0k1(SA|v#cJ2e(mg;PFniR z-xeccIAft&APv4_@)X@-ZX14$!3n1CE+T4hf^zEwEVbsOHH3DYl`g||Z=R7O&fv~d zSdO`K1{a<{UdZu-!HK7>xh`1dxBQHBeJ0s-7V+rzg;sssIWC=yNdUH`yDdmwogIOd zv7R%@5VP4>6r3$Kn$0q>=*plYBRDh3(iZ850F402Hn`Nr9KqQ`u%5gQdmO*vW*JsB z`B5AuJtZ>1h3;5hSV;~&0Y|Z3veDela0M>)iLk}es&rdh0q*T!i=z$6HV+r9nrC;x zn(_tjk%?HzB#U^u8{Vo-MZVo&5nf`ClWisy*^?b@;%Ho&B!U$2k|-tJ9!IM?N)#kA zvIOQ-D0)YOI8(8+Oa~&R3OcGW(nT6a_qwj;ylm0x+fGuJ^C|Xt1TWq=K*BgWQ7k)W zRIa0&SaX3vr^`aiN+q4%r#ah@hi$ki#}((~K(%R7P+d_M9l+eBC#vrt=~!>0U(t~< z1kAuFL!CI2vwghD#ZWXhNsgdSMuRh5WP?QvQfB955o<1V;bG2p0(hRSP%_k&m3`^P zlZNDuniE`x!RamN(&&a;xG**s8tUkJN_8*@u5Akp5`AoFW3bs>WYGHHk{WFG5Fqz& z32B9`4rzs55pOfLC#;0)$d=z{H&8H&;j$P8qr_4hQsigb5-BT8PGAPRmBGjy0rqsU z_Yox^j1&-phL9!PW~B9QMaUMI_yb==>T4PMeMNu=Xsl-ySFzB^sTLyk86{ni8;bbV z!)|1<3kz(a6xTy0hzon$4bF^6D?oO{9WmJ0!|n>Mjx+}uk+#5QL>Z>L)(xRTHcKY8 zz!oUvlf4B{T%8sr>af@wyR)ATTf=GPVQjd#EkGl_q7*M$Bt3$K$o%v9_}5P>P~XzaxAz=>7{jdig(c zzr$eQZER~;DhAzulZh6<7;3&Fmjg-cNlW9*p~7lhclSR~+Q~j7-fW}{jII4ursNDB z{}s8NllWr1*+~0=l`C;qtfnl`-xgzWWa6)e$UO7fVw;f{zBbPmKm%X18(A5^Y_XDF zAAtN|>Jnth9^>tuxXxE!EcAy2^ndhr1&(xH8DKXu%IAm4{mA*DlKHK^wshfXC+9+l z2tDUMF&LAL1q&^+8Gg8;(k^%ABd~O5jX+|+Te7*y<|1LFFO#K?%ZA$01cM1>QlGVt z*m0#f*6t}3-SQ9|Z)bmK#vL&>Hr4DWSTQ*E{J|h2ZugV32#8qfI?nDZxG-J$7=YsN zMek$(!;a$`9sDBA>?@d}OCw*I)DJ2Bm3}Ur8we?t2X(n$?hd$*-v`)ygqau|@-QL@ z3qETRtj1>zmLYQA2&Kblf0=9nyM(#*tD06T&Y2!>u=fzATm1;41{*P@#vVc|t1+V) zY+QgOZ&`-96a6p;Tf>V_+3ypG@LBdUQR=+{Bz{lZ5*&yC8d8Up%gG>hDy+s}NR_R` z1rhid#+(s*X4pzaDd|bO;Z<8k+k(mWQOOFRKSezvTl9PqPP^erTRffIDNnGtMg3Gb z2s3464%HysIc3>8)n*qz7mzGo$825X*^{!QpnmZU)T8aTFc^OAitjyl=GF)$Y5ys^t zVB`?Fwc1%P19!nngtN*?ss*4Tqx0x7@XUZi4sad9CflH95O#RncCEgoe%=c~m0h6L;R1UW zVf|gH-zzi@MR?5`3Rk)K7Xey?Vn9TB-6J>?mvzUqWJz@r+VFtf6f$^hh#3#REWzr+ zU|cysmW9Ff!_X18UD(%{jX{pd-)CA)lNp_P*lMg1UzaOJ;3z9sjIc6t3ofwYMt@))5b<6SM;`awRI3_;YacAk$(AgevL9%Bpjf#(CGI+ zFpgwES4b;XBde_#wcQ|QR)Mc6@uCGt9x^f|gV@MjKvzt)Z@@G8c8^(E#=!D?Pr?%1 zY(VGSM(xHHDRVdW zH4fpq{?H_|7d2O5Nn!ui#o_v_$!5G{_mLGpF8z_K#x9LMmM3M7Mqt+IzxkvHUvQNmKD5%UVb^{qNW+IrMZOTyz(8z1G3E zThSTuQtz9({ZrmIG3fgkHi>Lx2G<|J4V<&B_W_*jIYA60-j(_J-#%iBaf@-&FiI^i zLq8`S*S)n&F)}MB-N_}`J+`9DaOqsK!n4A!Ag(ao!X4HSir$L`h%qFJ1nHQdMi8knhcEM^?Q zR9aKlgvZkzi9M63GZ4yt-)_aji?wDq7x~6DBOp3CqjOhqj~!7*V)LlWSOhxew`K<7 z3XhCrZ=}?0PM$EO@5<Zm}cFJqR@J+a0xw}E$9il}bb)Jc3)H%|%Gv(~k`AJ8| zCkh->UIb_b=e-Ck%FuT&hr7Vrd|)2Savnb+T!2jtvG{F4Z> zym~uXO?y&06Y9DOWl)Nun5X2H24Fm`+1P4T!Zd12%}<$QU37y zV!d@*h=*;%ySVjccV?1x>*1k%8Noun_bL3BvC`uB{)E20Wh~S(LMyN-BKn4{Fb>z< z^xT6gtvig%jgo#qMCeBqwj4Zy;X4;j%z=-=adY7iPH_EPID`{?x`z~!iTlsPH#D8t zfrT=m_*;RJEyM-geU4JJ=kTh^=@TBEg+us495=B-%<1Xwax%{fu}b zGzUOKwV#R+%XqbKEQU3=*JA+L7?u(! zG#-fwEyFE3+XkGCTYe^<-WA7njL<=ks=8s1S67R4=dhy)6p50$ z1fI={#XA=Hcn=WmL^xuSno{`)(Ys@nPQpVA#v*m)t>~=D*r~9~pcF(|lR?agZ^uZI z&___>-29u#c*+aWqB~^;Zso^NdNChWEror^<-Vpd?K*@?7iMy@~Izg?aA2e_=A`-159c6H?+;MNx%4W_cmcwr{CSsh0Gcc_W2sb+LP zQlxC$p{{rLlh4xpCPYOFx)+_%}24tjjzD*bh$RR5f9&;s_R-IGZ>7wI>(FIrhDC&wDM81Vu zq#47=w%K@5^`i0xS3IfcJa9+OsYUuFxo$Q_&EMCI7lh8MLn-}&im%{o$NNH?&#O<6 zO$Ym2P^(QvF63)|y&9yPzMyV3k@>P3s({BZ6E0by30~mH)9^y$V|Ym^;j-EZc7CO= zhSxDiHhEC>W%U{Ac?Cojm(>7wBP+OqXNCcL;@82igz3Vkn+&mcTv5HLeZr()U-?SLyV1l{tpev8yP(e^u?xj{@k%1dmWE-P0UJFBWP+)SRp3Do?6v zfr)C9g&d)@`qis=fp^5wbbUP21Xy}a&7#mBCF2!c@!smrsULOJNwVpuYig!B&uJ5U zlV<3ie5${$PN3a4(c{H)O#yV_E=D%uhH9aPpHMgYhB`q`jq|@>4WN@Z)O=$UQ}iX` z|C@cfUGO^3sUMLtkA3b+pu=tQ>BS$_QMBt8L{0w;KmX-^Q*EN4p8*ce$NXEqtjU)y z-c-x@L3^716K2G#4s6-=W6}Ch=I7GEpYSw(KI?=pWsN*m!1X-D3`bDSsAGv-S)hBK zg=)7!$^Gvi@#9LK^cL(NoA7;)pVeHUnT2*{W#fz`8Lw*A{;DQ5PB{`s^R_j0*4q?h z>Afa$-J$TKK)j{2ZMPQj8 zh60^uGXax;o3AM=cW;7-0sG;QZo7!275LAfV)t2Tj!>7%>EO49$ zZmW&ZNbirrlgiFiL5oO``4|h#_3Jsf`v% zuR6fMM-Bwhoi^GOn2XhMwjQ#(nSG^*b%TM1?)TOQsffjoq}tuho_P0fPYC_urp**O z;Ky(G?F*&X-L-#6CE}Ow^`XfgS_aMX)Gb(p@hR_w)AgMmn!g^;bxlE(q^nTuPyt7j z|Get2_g9Q)uG7>X-eb(t6;m{KdZw-Rs@_~578ZJN>b~}Z2P+cj1){Ps2Lz8ide%#e zr3O!J3T69hNfhg)jVHUWmPp?Yw!eM>?Q}IRON>jKk20({Io}DL68Md2jZOyTP76hKu-rl(F1zb*C7yoSOlJm93HAoqwn<6@lb6XJ6%p5!zHbte1X?fMO$K zPJ3DH9scjsmr@c?Vv{Uy4^Yv;s8|e8X(CE%W6^APBKk;<(`u<_5=xun zFhB?NQenJ4d>ufyH6Crx>7`x?kQ6IREPa!pO{U-U(&$8#o=-ukB@u(O>n1`oT*;d% zlc4JBsX$yxf?COGVER-Cu-d4X+9X4aF6qE7Plg_!r$dkE6nMfz9Z~vQ3ff-KOO{j& z?aWRnZB0d8n+%kCrJ-)QUOJctE-{%XjY)?J|Hy7D@>jsC!p0to?_r^+coMfiCoNhJ#0AvGQI9NbBBmQte4M3CMW|%McqxOjweziC zK_fj=CS=NC%F<$OzlRY`vD}=?3#73tlu%`TH|?m&TqqU`+Em??PVsxJZ9OpGvkPyN^Mtk%&uW~UdntT;9vhtTHv;4cI39a?f8eplcR9mn#mtrG%cXgEtOA$TpKgd&}T`ZL-3q2)HZHzVa*zITe zX7WuHRYQF9aBSRvt0_S`25e~G{l@Y-Q47)DG-t?vYcZ3@`PT9uIz$IC++jz7GPPPw z>_)>XU5ZU)GvE=qK~yA-t|E0oUaeSyQ?a8wN{~m?sVG*I^>J8Qn~RrgqEgM?*Y~iJ z)ENY*W}*C0d+>tMYL#k;M}1RKP>(-+CqeD2cPB&t4f%t3eU(agIqRn!wzB84XFSd~ zmM!&&AH@4*-&QN;u9k|64iSFjuTt4noVQml7*mt@=lPcQ)eNZ#VxDc-KLyYe{^z7* ztLY3@#d55`ee*$2=rD-sVGHgm(M^yGYqrz6*ivpI zoE!0pby66+Urn-HWZ=(xc<8HAb)7T5wQ?ccQfY1A#5FqDpd~L%15FQK*}A48)w5J8 zZ1faYLwl=$^px~ME9ww2aNeEjtjY@H&b7xHKD_B#GnK0O*v+0?hpvX^$`nI0UNGK5 zrSfq}O%qOpE%cRt4K)r;(o*{m9DvmSu_WqyXzV*){V^ytoIe-@ zjJ`ee;E{6Q!7_Udr^$khQ1(C~h4^XfhQeRggI-y#VX?hD6YPq*L$plaHk${A2}Y($ zqN$$ZY;3~mM}Za1wqDWyEoYoD$$2$Mr8@Iz?pUEzJ;lt}RM}x{&zns&1$$f^kJgId z58fH6R5nw4Tl``JYe$*b^1@+IIJ=_wz^}qMV>6b1E8jw%4c#M;h*yVvE&{pTS*{Vp zi?hbXX7V8D28$6txv$^O%`Ze?X}9tX*nAnhBo&l|)ew&iOX~1j804bADGjd)PGFz8 zHCvJ^0~PE@pMAZWZ!3=%6cGFQ{MG2cLbG_2Vr%&)cr^BbSm{0DkTPtVrP9zWgbR2b zym@`$h@E^mquJM)S@D85_A1rUKhLcBAD>ufrl&kLGqXl=Gi+3RwgU$g77o0&le*;Y~o}`?!TI(xSPL@iL zxhtpD090MOW%Ek(C?(arCV!X+x(Oe%eEqNSkY!=ScD(@$6*`dIh?ly*s^A?#sbXMZ zC7%`kjA-Iv5BA}+i!Y}c1R>XJRIAgXBXeb?1u12#xk`0>eH$425N*#}xXNLmB~%7t zU&Cs~%D)z|oP=&&mCCyAy<(-Et%H(fWyt($7CXpEB5EVfsq(m>thc1W@&E>HwM$#p z!?2?2KfR01U&D;GPGU>f6k#mQm3tP3%&|I5S}TBE z%mmpVIy^7XLGrIq=HasucD=^;+q zJ>3WB)nFQL=xM(Tl_0*{{m0#3x_)X+;bAvO>=QnCA6Kc14cTrsbo4CX{%25wr!vaM znrrSgc%-+*=Rl>Zfu-`(UZdpNn8^M@R>Vhj;*x~5y-3$lFsZ*jy8joyezx}931e(q z@d|grReK!z+gj^{=4|1Id`H=&J~55>{ZfYkzlKhly%GEA3mJy-d+?*aj#Le?+l*RY zz@#;l-gYjW^lUKP%=-mTl-YKa%(y^;aCEt|jdB>189Q?(2Ndhe;RZwlu`*f58SEU! z+kXfDyBSh-4OHNuq}#jmhf6@eZy&^3Y55J}PoIaWREsJ)^c9M+<03jZMDoH1r7Bfn znQt#{(IN+PX1cY&RMtB|-6Fowtt0aprO1J1l4H< z&6^%@F(x`X^UhW|(yTu6i%PY;nUx+48aKtv$%PjNIW^>%?o^-ScBcj$pE;3>+qYAx z>bw0MsqAiSt7N#DD3va{N>^tKUTLUvBaS)FO}RL&V5-_*+kYI0YbwXM^_@Je-#-%!M_5~&kbx@Zrpk7Pmo{J}^sqad(V_l>8-)d&g|Tp@g|9G#FnlH%q(yBhY1<1mD_G+yuur| z=A7nA;L4-^mzQ88Tcym|h?z~>tE-U*6S-7(QqeAV;-t#GHE$hNy%BG{3R>5j84-ng zWp^|7Le$9ED{E#`;-;Lf9?PrSdvxa2_d@j#eMXcCZVaeNqbYk$H2O4Bl_C$4)f}Sa z^rV_`N>D8)#jb`ir{h(l4#!?K$YRTC)aHMmt3m9^H6!@naW$iOe=Z<>@W|yhFwSh1 zw3?PIJ$tW?W+vo*XqfVvb$M-#XDG*L&k&B|J;OQf6Mt8Ew%~tcwy=W%74XKdR z_&P(C!=6scZ7*|PsnUyxdesW%fA^?G!^WY7O7-umMxVevZI!}WG_}tKeN14*OTlSu zl?k=X9R`k1>N6x6)0byZgpmvJMXS{N+&({jby@hjy+#^SHxi+>H+jkeZ?YyRQ8l95 z@=%C2whGi%qI^viLm!#5;_TC&Yh^RUtD!mr!)dTC@Co9jhkd$mboBi{q|p1dq?j*B zx!sqfyXV`6HwyG?&T*{3!vYQcNo8&PNo7mHG0gs2eS;eWiEj6|;SG=ZQ*P4;rlm<) zQFhA0y1Z95e$8HE%`q%Y6Z)Tz42nw%u>*On$5!hoP$WC2|;y@Q2z!n7e}jFD^hJcWlE5q zav+E_P#zS<88;3lj0q-I`h&efy9Z8E+6B8QJA+B{rNQJ`UxLZGCxSc^)8F*PN^DAY zp|J*=p--mOCePkho5&r4AuoNs=mtJ!t5gIVC}wp`c)zZ7>T+XthK5TPz8Hg&C<|*F zC{yZ~@(NjXA~{~DL!!%d>+!#1>XLWQ6n`JAOWyyvZWCS}S&!OHsYk&!6FS)U?&1vY zqigF~+Op=7U|P_jam_&cCJJs(`ZF|U^^{(fDbgz*id=jmbe_pUICPt#zW zgj9QaPQ+Y2r98|~acV#zJh%aQ(J+C#8_>{wCeSs!4p*^0grdKFd#vR)XcVreyb0Gc zNgj?mxJ*fzvLKw4crv^`Z!!zK>7CLdj=QmFq69`5aOT4!XoNLOg$dzH^K@mZpRIDQ zp}w*sf+nVO5#%OUl2xkQkco47%)knP4b3@uj2m~_1tciv{CP{ZW*0==k1(#$ho&_o zWgTirUiVpGa3p!az(`W=c7d-WNe}*wsNJAOG-!7=BBN9_B2Rb%gSVUIjbWS}vnCoP zD^j1iY~8D;NhMcMhDDLuQ=sP4!z*^sdby&B5wE&>OQDHoGxz~A`7w%^35X{592!lQ z+a67ptc)g7vq03V&3{0C216S=?betE;Lyf2Qnoa1%C-8oF@>P|O=7r?Zi5NJyEPll zO~1AYO}B4lm8y5i^1fQeYVf9-reXqUDkgxYr2iODs864Fo;+HuXlkU~YbtZvL!n?+ zqCpS74`SMkVu~3o560f8JBeqteVY04nu(D9op@@tg56J(tdw2N$fFwKO5)?jWaV`; zKhA+u^Txb-6zsgHN-m`HY;jU^$`-?*xAgb7Fd4Q~TD6c_x?ZuV{1tW!FhC(bG)yj3 zs+v>UaukTy9$R^UCswUm&<;j_uuy7fy)&G-%ocupL6itJUpzRbuU!y%DA6sPnTt-b zfgBG-NFDLWoU03IuE5UMRV#Lq#{ipHjJT`3u9wmwhEkV_F>SdZ2O)dD8{;#J4YQN1 zm6tK3P}6EERjX{>yRa;^017X{IcUHDqzi3tZ$PAu?ji0j8r!>MB^vf~J=Q#F$10Qz4dEDh{n_d&e7`q~U6( zOu?xc%Uxe!pbTzJ3A-=!_H6fKd!AKo}$!8{r z4n>Ou#9=#TJw_ja<#7iRVq_dGDNxBpNdZ?t$<4R`Kj1;{AIJ6oM@#JP>H-J3i{J#& zuGPu0G`us~nX{aZg?cPvbAf@p5PT20MVuAZ>NRYCSSqF6^p%8E1FU8#KLwp)4aA09 zlGDHmDMlHz>&iI@2hXTT?lW6Up0)uqA^G^?^ryl95De_M-_opH7#%Tir@J!M+Dd8F z-kd?9o~hWrMB78BN??0RS+76@*q;4J|9_~-TMG1;OQ%8;IbD!MY`WRKDe&l}Ja11^ z{@3=MIG^)iR34YjVzi2-vDFryu4>t*1~Z=k>TcEEmfd?+>?L=B$0#*of!ie=9yVTf zm)WlV1!gikMWu*Eb2hkuXM3>N`2}`z1m$E2h`tjZxkCv>?Den^i*ImYwvyP*Ls{2J zv$U*OPjTu*Ggk(P7a!K9s}eoTQ7P|i28D+5RI#;z*sHDmS=g$^mK3>g$vtI=&U3!s z(RPrGB$-cnu`C}GqaQKD++n(MzbEgIg)D@XWG`?)lne2P;nx`ut7&4`4-POmX}Kw7 zBHz0Z#ftd_7V=`@BZz->?q>&#&{W+BMwH?BcX>24UUs)-Yo{03%ld)?#D!yh6SR(@ zuf%sXQ_8y-$PY#n7l>%>f?j}`XnLOs-F=zjQXsmk#a(FtM6~5ivubGhwq;We7h5Pn-F0~Jh!|M)x{NJE zx8T$Vb*DX%Nsz}kUNGPxQ1@Y#B{1qsgl-YzhTm$Zl?v3PYu6-s$Pmn@ti*N`;s?_u zD()trOC$m3C_VIfuR);hg6ECLYh#PdyUy%kPu}kaqx8vYPd>>cBxwuv+3TqV8d=kl zbc6UV{?p)#Z=$yN$GD0+peh2T*hN^Vcu8A<_; zCr6K*1m>WX%q7@-$=vr~7gtS1FAYn(0vlu>gjXV_>kJ+Ci%F=Vtm#FQT?y>|sIIoF zrIn9Dz9S6zAHzPCYoE%@Ef1#R?_%0Qta*0IT$mmVwo>8~$yroTW76RYI2Yq{mV=U+NT(t)6zn@c zJcz3*ElI;_T>@1Fh-nFN$>7TO+|kpL^c4RjQqw+&CF}d!*a#icChh4)DpmUiVIMGt zu(!L4b(NANnn!N{9Zk>KN3?;2wcT87D>KmxqPo{eFD1ASDIyqle;fzb+^h9`8S5Lc zdxHvOd98@Th{Lu%g{%tpVj(tR6@BGRAL4H*45(^5B5NroeLHg9R)bJ>TQkiY(i9AS z`bt(`$|n~=;ImB+fkQqX74?;}zT|3AV2zUpj&*{xCx9o4?)`djQf;8%OrPX^Vlvc6 zax7?kL3KG0rX!3Vh-V9W4&>Ud>_6cp>o&tXtu4aA5^H?L9t^evfE&N7g6>-?FGezjwz+l!s$wPK1u z{Iq7lJ3W%mIt6Dm--K-u=g!~u;Fm(z4Ki0w40Ps%3n0MW zR%f>3qe*aPA-hA+LeUUI!UIIG zTl7Q-1{@^idcg8n$o~{O{)g$lMCRA(1V_ zJ6HcWCt?F1NxYt`d<$G1t0128e5LpQL(b<<@RR#ul0i(UXMXJ$ix>)=QdE!_?5Y7wCD^IP79@0DvkX1LshCyLyBeyb6_E*Jxx4dSH4@zZ#*Pmi~XszR63Q~ zjgz(M1P9gsbXi108PZC{HPt}*2{nhNk)0f126DP~z*0H99rL~470S{m88hh&d18Z< z676V$v$SCrtmj4;E&mEdB933XahXs$O>MZe?lgSI6Br(j(8OLjold7s`QS%YExn)f zr3x0Lr5h@>hSBk7T~OZi>1MM*B3ijm9M+jjVglB<+-d(4=%cnG54V@c+$M`7E{ciU zP5RvVmxq!zoHE^v;j~$Kb9fg{Vhy-j--VY-m8g*s%=c2Ip}bKzA>ysRd9Lj6JXnB7 z{pq2U4%cN_BjNPuxR4QX>HC11%zObxUG74MOx@X(PRc<9X>N$lPOihKTX zv4+7H!R}nHG|;T2zLfA$R5N=Narbf*#r?fdzI)dI3yN;NN7IhsiqTZNa&!Wh!5U`N z{v$$;DXud@Ig>4~RT^my2-;i6Q0<>%h~{y4-q%1RQjL z8f%${(~Tkd#+s?3x3mewPdNNNHNd?A_NHV^)m7w)wAid46U0B7+BFF(MDm9uo(O>vf;#QfO%$t3iI*4P+G~&8s8c8QlZ_A%2O{e-r z(`hEpg$1Dd!Aq_*2z&okV`)mhzF8JzfEe@;Cy(2z9FDb8f_BtU(wFM7-j6CxrN@%=Q<#rYp`4OzNTamduloXJFIC9Q)28In?G((r2 zc?!0*7TWQiO#^g3Ncrqm>?3L(4Yvu}G|Si5w4`iOshCY;pcDM9XLJ1km^M^#n`5eE z&7ncKW==mYRd1-Udc*p`%I+;xAuwCR4kZ_9G}siSOPSk;>*3toZXCVm_2f8v9{Kf? zdA&HLIH=#G{-*A<96q?ho0TG4DXB%q%DVX^bbF|?XX(_sN_J5QOCMNd!*;!bF^NoI zSEiXna!6(Z@8W!BBFEqbiM)$0P%rCJQXz%t+yzbe(~j^oz^nWB{}I6@JpZ={-4>GL z7cC@uPFaLgvZ$Z?S){EFK&h3*t({tJnYJ0lS5Ykle`~XQBR`84ktTXBqUHw|(Ku=c zCS5%4;A9Bnmde`_S0!q$Av@nOUtc~gOp7?t&L;_iOsJBh>g*?b^ zad$4-TX^2Q)8NtE%9G;r&E-7uxdg;-8|Uw&DDq}8g+QMr6mv3`h;T0c4q8e!TyGC$@t-TrOw#%xd!MLWiDG02UC>9Y^G-F_ zQwB3-Ka;>=w6%URa**E3$eIV1k+xlz|86~_N$Fi~#YHP>E9J{+`m6?Iy^dTtB?`#8 z_^@$UwROLEvLTy@-VzW~yf)0&x*hHNO3slwEF?~q11jGf) zryhqu2NPcRd^iM!21w|@2AW~;T1l6pTU$Ua(M+yZWvE#PYQ-998_7>kZlsO8S73zI zO`C^mlL9*TnDi%&lN*0hhV=$&)x0q22hvlfY@*B~YZKYx#U|?XPmtz7%FEW;@J)xQ z*?-Zw=>5NlWW&vL^!f}Y)66He_bS73Al2Ds#IF#IAa_kboHDB2Om<;|WVL8ZQ*NIp zK;O>m(-*D3)L@l;^DUI+Tj)f5%N8<{(N>C&13=;j=e;LEaB0cptRh3X2k9UIG5&qK zL0GbMF?fV1Q0i~%%k8^n8;=&s&utWa61J1l_H8G1^aW0ePv)j+mF9t*Xqbs{m9gf6 zuxaWJvgK(QxP{MOtpMMEDSEpeTQ>j<)`?beirY>KK>5&W^ZfB=_{@4EA^-Ozer9J2 z*_X_lfY`Rxk|Vs9k!h8zVWPM6T`{tixW|KNR~XPoo2Iz3JFfXQikw4{yoD#6UCp0* z5f#r&-KyXmDTg$el0)-yQBEg$=qBzj35fNV>G$NPC5~fVmH1o(*{U@aBKqCWi{+#O zz4Og9Eo+gR?an2+?!wzH0-`)Q<)reapqo4cl0Br07&M?+1TX{Q=YtN81_XlsAMqDU9MHKmG7xm-1dRx?=W7lFz zB}$5EL^$s!?|ufM=y|t~2BI@B*2WPs%XySoCm`1Q^Xb6fo|x;HZzJ~+A|rNg(d--W zQk#`JSDCOhXP79Ti>(JltC+%Et@&LPxkTSSK52N;P>hCOguIAneA$HGE+&_di@gK- zWz)@1{bJ563iOl<+gqq7M4hi4yZvGg$+L9lDpT2$;(h|+QyW8LL7*OYtZ4ARjSr3# zC_x8lyU!J*TppHEIqo&T3#yzM10#}y_q&nxL~oYxE`YM7I28Bj|o6A)v9E* zR)XrxseO^LJX!2hAoj@VGC?~8S!s(R15GY$lz|wEdnq|=YH4?FsWYV%*#7|6sXuC# zHD69Uj`c7?olO^EC;f06xndRR0rBGUu!TGjN6pn?Q5}nnd_i$7$W&>NrjPPVjui^m84R=xvsYgE^c8Nv z(Q85v#s2S!+yz{qkD5E1>{r(RO)Hlv@F3^2ZBLx9U|9e3U^(pyWTov1+TgkbN-UmR z(}=R)DJLjD%7L-7&MV`Ja{fd*CyN&hlO|kVq`WR~%A(SW>&eZD-vq=5r*0o&hrMyL z@@g;^n<_O=(bkCrP`cT0`e-HkRJxoTLmEOX`F3KSa`@CRPCh?grP3c)<^rLIlZPe6 zX=`3`4cf1j$0sPePY>b`5+QUAeP-87kuJ7W($9qQhX-Mu*zL*C=E{XTO_jt;ddk0N zXv=ao?5>P#+GLpW@-`OevU~Ll?Cl$iafav?;+Lb1mVK0@>(NTZSvplQfepmT3wHEI zrm(Hj>m2P-e+A`NJW2^&@=Xd+Dy~>Dqjm*0_ML=D5SPA{jD8c%z8a-Oo%iOP-UM|W zn*Q!E7%W7|EpuZDEeZ_Ty6MGs@;VR|{Ti`R^T%GG9qiXsi7RvEZNaZp$G=UTpbWd# z5(vu7zh!~3{7?)B#9W8nUw@T;!_s2mtcV-cuR4GMyDJMXo3fl{1?IAaJ9UZZvGqs; zD4oPF9jIY`n?9;m53LYs3JAfnpp8;~fzDE#ph~hy{0}fh24^n-9@s^9HdQh&PUjC` zRjbY@t1r#xRg+=ne=+Y~LsSb^tpPmJ`Nt8k z0&Jw-P|6>p!dzL&RJeTp0`?71SBN)iZ+XQXCu2^rtGrIw7BS^a@F!*4mEOFIc`!Hi zzSzDI3si&Ia?320URO!4%Rx7zdMyh<%`yF1a9pDjL=bEFxb2}fXzGP=upf#SDzSIO zVH-Rnq2WN@hb1_tU;DMMgu9uraSaPhc;YZwcn9Le;Y+t_9THsFnk9x8=*U<6h$v!7 z+bc)Vmsxp@0%zITjY<&bR9`;}l0!JixIw8WUhHzc;cEsw@aj73XJWB|^7aNDAo_u9 ztH%%7i|Si+!vYJd%g2PLA&&Gmd8=gJ9L)Kzf(H|_de27gux}lu^(`0f5FJ5#56-u+ z*E&QWaENdv@Qxu{=nW^D^ZOM$*f#**MztXJOLVWUtvm3)b-iSO0If> z(|sJ*DN=EH4xZGv*iOm1OAfmN`pX}@uow8s08Taqsy>?FzXer?q5u;{O6ENZT!(@1 z=KWK`KsUUQB@TjauR5R@=O`>C4{XTQf$La>%btL2y-y16*1UgzoHG*9!mNH zT{d_HoR4i1RS>V&7+|BM{S1LpPcCK!7M8XR zseULFs9$Y=35l_#^74KyHh&ddx0xs05HWwwqjkUd$XZei_pF~$%6$>09wd&qb9vfh zP-+N+8ji}2$K>M~&_4X2;S=!jR4!ODbQkpQbULUxM9Fv(%pa!1!~V`kzmO9}vEl$Z z79>K_h@+2;F;s$|4&imZ;6Z7hf8(gGV8?XPGxAUDZ+_t8ON#Tep}cx$2op{hTIurW zC2G@(peqp48C`1;c;g6OH3hgBnc2>Zj^=Wohss~X`5WTigviy@XWKe(*5OvS*j;WT zA~@owK@$p>Z_NA`OgXm?rw1QG2c25sFq3n9wSuuO-z=`4>#!R0I1+0QZ-C0n_ zVjU&xE#*0HJs?bO%xe!#D5LoZy|}hNewfq9s3aP=fIG3EX_Nm^m_uBjLCJkb@+7rB zF)$tQC9{GzOmIkn%E~NZuKnamrHHdfjO+vPD}>2Si~Zy!;0DMzV)_sDL@ZhK-dYL# zhtibc;1yACmX1-}KeS?Lk&p~5f+yGl@$#u-naZhuCUY_SA&H!aEg>$2u-s^n1#oPC{(+yW8In=0;AVhMXvxBVL^J=r3S| zV&q6@TU58O467o?_dZy1Haf%eDVj-;!@qCED)b68O8iF}jYoiZ3w`}u$c`E+S?^4h zLm%z=6ygZ92h4jhM>{R_QKCP$WX}$S*ePv4(TOaEn3dcAHblLm=4_RmPxSs|4p6eT!yM2ADH7F1C_`felm>qWkP#^MqnKN6bG8GG!Yei8T;)PY;M->vJGaE%_Y9 z#lUNrx}B{;wV{U_GhQyx;r>-!=~y z*VA&u7U;m`kblK2h1fr{rZo)SXynLIUKv4z5Qlf2K1;OokdKNch@T(c4?!y^6)z2y zDL=^Q*IL4UNS(>6ae6EoGlk1C z5q#+Emw}4bhp>&aY$(Du;>O&iDt@r+c*0ftMs$eK4`P=w7ge~~tj)3m;PF-+$$~dK zs3Y;?EoQDOwc|X;K!X3|;f(v#eub`RKOFW8j=$ah56f-??O*6hPQ1N=p2S~RV(s*# zINp8|OtHs4lr^D_uIq`8Uh7GGuZo3hB)$*LvNaNaFNfXINPM@I`RYq?oa!WfsU`n$ zN?)SOPz^jJ)u_vxHn9sRRciyuhM0x%(DjdQ{5@4aw!%O#yAs@G&gs}JlHrB+@!HjJ z8)95*2U2JQL&=JF(#}xyw%SmlSG}IY!Fs{loz>WGf9TE0NRoNQKqJBNI3tPH?HA`t zs;|yvUL@=;Bgw!xV8qB#eVz@J&?%Xzv5+XySTxY4SPL8?;JH9XeydcG!+7!gde<*8xF9X z{iopyQeR6mp}zASVXMgWMEGyg%uJA;`4iUp&lY^87SFXU{H9B)>rHGUsmD-R^cX8k z?YN58zz^PIQ}DOMvyr#SU%bpEC;m9a7nbuAb^fHs6W}p#w!&N}!><;cVfq)&Vo7zR zAm(f#e7-ddZX545-$>5`Ere4|wvZ@j%&3HED`VSy+&^LGqCiLAEF?=#+T2noqnD-V z!>T$Q>!n!F*A5_icH2_orvvP@rEtZDRuXMw9lVki%dnPcl{yy2qwcZJ+j*2@y{ZFmK*fr^u@+PeY$Sf-%tqTt zBRSpIHWJ^^WUXwaB>p7FR-#OMXbnl#zIhOMCR_kxx9ub!*4j?8=ao|IBz`c=O6??y z@-3lngYutg81z`Ay~N)PVpHs;*1W-adx`HCvmghFk~9NoV4vslnx9s%90!Sxx4waV zk6-PEHyE~CGTBjT$eYJIN_=0HJr<3A?3OMSTgV2?@lZQ`@dJh-zT?ot#lkFGA! zq;3H6*Lqobi%$t>TqI6jpJi1CZ}?JO_>Q56MBB@^!C517gEwFz@5d6oBzp=9IkbFY zB_2{I-Yq20szcJ6UQ{v4U9w=#H6;zzPKMPxhLE%x65rKkS8GTEI9pLQg~RNuDGXrZ zDN#3f4jET`2+@5i&2R$Xq&0?UuO|4$BtWjfNjh8ukN&Jm8=IbS9tw^X;{qoBE z-^%>yEt#^HUJ`#PkNxWDvuX^TUsZP|w{0MbBdcMMyarC|H;SmMz_?j-=4q zDoAkd8KzQQ`@AECLhJG%5n6WyiTL$7Nbqnz8aB^7D%Mai91|>p;rw6`gDZk1+N=Hh zIo$I)-+LS>u19S#JKlH$3xRjnJ%7uvy|(1Q&2qA~P=Q=W{ODRou)n2_)RlW}3(#=T z&2A7rwewN^x1^@Q~1K4A6$7d@IGdWVP^;ydhEc-)N~PF-&c5ncC#G52tA;zpYC zzd~&;r+KKbaF0+igBSqoJ{d>yN&DABh4x=+%V)uzZkO}RkFX1-;BEu!i`ivL{r}8& zi`b>3WEA}{VHD>u5q&0Vf85gkXwX37XTNN915xL@_D7F!i62w2+;EAXu!XIS?&!5v5bZitr>>E$!hY$ogb9!d6vwjkraTdcv^m(afZ#8 zQOozU-E|-w$PHkqE{GJCSsN+lg!wRH{L8!a)wXZMHJI2)^mC|@m?@1QU2Xaz_7Ac^ zx<=ArZKH&B27zA;YnqisW>^7_Ig#B_BF2A@622QBExdhIw6HgfN>$CyW1phE{h3o^ z$(A<_X)JZ*KQbGOiXM;)E_fIFmHIbsB0S)I<7%o+3B3oBVS6?ahD~cC9Pg0!hgnlG zY({7#Rj7a5Tk^oUO@#+;Z7N!PX)1bjff4`Qrgb`z9@|Wip4UuNywyxd71&&O*+|es z$BOQsY3T20E{6U9m|vn#9*m>MU$u`%gGQh3?sN&JysSY6!|ZEd|-~mcm9(vBLBdK&*>lLtc>TH^&Oq=jf|dclJEGNsNAq6^t6T5-xnd zFRU5Qe}gpzu1Nx0YqRIUTWIRr)k<{q6@GBhUqg!ts(~l9d4)Zj&|0d&i!O%1PTR2# zp{PTDcD=R45BykVYZ1aD+lV1QyN$5QZFs_)ZUf1Eoe%UOK6i96Xi?l&(9n+) zd}OtOSC*drd7fNkPMmO&EpcMp{u?L8c4EACn8b@*q88Y?@%*(8tg5{f!BX0Z&L*`J zIp3{zqD6!DB27T=c%0()f;n}97T4N~0s5@HP$PbKs(n|dpSXp}dUufcZ5Xz)gJ9uD z2SK@KN0FcmhX(HrR_xS{XnQ8Nm*9o5PLjTP$F%f;efb*Z05}aMAeNoPf^A?Y(S9r} zYd_d*#rM4Uio~7$>?F}<+IR?)2iqk^p(psWbl}yR6B`At48#%;tL9bdYn#^L2Efgo z>@9M>_NhI4*;&j;`dx%qckLpq<+&F2boYPnEDYU6Yv?Xw0UFsJ=HV^hj*zpD=_=6% z`$Jf5FMii`5Si?3S7EZ3UB%Gc4~xSk&$F*F^EeFf-LwI|n{a|t-NcM&-d%WQukOMv zwrhWUfg+xptb!D<`O1r|9JMgMhZyGFy1>i0S+5kz_fGbZs`Ci;x`&V~bPU{{4By+H zqU4aCB6zm-fC~vXl z>u`Y`DVB%#hj%Cv1x0y^N;N35(+0d%<0K-$z8Rb>;7hJKtGWsoq{a9L2K`s6mE+8i3o7MpF~$P zepZJ)#S00OsXRVe3@wAJDwV1Kw(VjLP1eq#$-?+QlSPWqqrZ5vwZ9PY3q0XAn+eP7 zo5_`b5b22nMAz8^gx}m5Ahv^oQiR^$!K_*qbiGJ0o1$elMd+#tc!7W9IS1xGP@+BM zGY}naUAz|vUu3dmYlpykcfml(SiWz<^`3zEdD;3vzEm$6DA9ZNpP|v|Y5T13bq(e} z6w>m0U*L{%TRm!o_|I3*Ex1+2Oj4mZeUL2s+6*>+jZuM*ZmTeJ^~7SC~hf$z@I%y10Il&!IQ$Sa!-5yYLLUNg1H z-v4kjL~xS}S((L+5Ag0W3GdC-UII^d#SZSq6W|FToqf~cX{r1>F}6ZN#IP^5BeV+e zmG46@7%~wbB<1jL3NUEw#YujI`k(i?R-!jp;$sJPYp7%wnZ7sPJt5HVs(vCJJlK24&?j;{s|s;XV2eOiNUJz8KSw-k*KpWb=&13#}o8eaz! z#PNqchvC?>q;3+^MLuyGG_i10K3<};WUXhznlv{}vSINC`z>Vg4o3oFURkZHc!P*l zrc1s&#JUWV=n`aqFE}dv;F|{*>^SuRzJuEvoE&99tn)Jxu9R%yrA@i2CD^1tGI-o* z+!Sfd?hcpe+GkzLixLo>JOa0~$Wc^Gdvnbp@+@(8Kg)u~z~k?4;8b%aZ2%-7ZoT^O z!f!d!$4fOhCwGNn5I2TR9fhr%v4c6FvwosK#9068dB{!+wrzKTp*$MqHsl}iP42Z} zxF)b+E~BMjyG|pLN8tI?1W^UC@tBms)OyW6Xnhw}0oWR`Z^n#4C)zz6Y$FSHgL_+!m{}O*V3IfzW*U6 zAB68KxQ!8$#w&f;H)(KjJW{0HuDh`GIHK~2{ZEr?V?_U%(22*iFRl2VjN@pjE(;qg zB4urueKV&%;!7jJ_L{MhF*l|oh*ZyZ=S}Y6(5xQ&F;+6Rmd`?s(_ zU+xXNirnDPsg{bh!Nj2tJt5_%7e=nLkMwtr+aA{`>Vae(j6>oFvk+Cg9QWJ9m|% zceP+U55PHHT1kP%9*JQ0h&Mjfh}5dNEvcDT{C7WiS7(tzBAOhYyWu~4e*X+#wj2cJ zLqdps+Jt$t1yh6@OSNGW;F8>&y9z|E02aO--qrl?!D#-SJ@oZXmYN~?^O&(FLu~TD z1S1XzTQ?0aRI-HWk|*<>DxB~&_{PLFOG??=5*Q$+(UQQi zHh-2B#%@g$X%6P!SnukV@7hWEn zng*tcH-nEa_Y~?!bX46u_nSek=u*f1;7&p-h-agZzUCan%@j$@c9?1o9X|NtKOMI& zgO0`Pdy3St)r~PVX!%_{wR95XsA&A$1UboUZ zf*T7u4mX_kiD?V*g_Hkio3+`RJ!B9neA(pIJe+Taf*JrU? z@{N{e3SA9`B9GqPdeTUpkSWzc*SmXQ?l3xI$f9S!$yWJ%AkyeI+{exoAsO*U;FL4O|G_N5{{slDEuxLp z@D3+vCQAz8R>14d<~E_Nv`=fYlx(4|XHXPhZJd`@Uo}}twn)4~VTg=gY}!t%WeRS1 z=lMqUAG@jJ+uQM-0&kKDv7!Fy_h@W7;!k&lO`W@|HpA^~U`GLUd|f0N$sggE29+ZMAQusaMq5XvYIoC8*Pc54bu*yxzN$pJ;k z6AtqH(b26++oOxzR;-c`i#y+6${ZI!t4e8^%rYx?m79Q>8=1H=)Djo|~m+B)-> zNOT#n1Dsb(sy^T-YRaCPmgT{RpjV5gh>!O+=)-pZsV#rLH{V2l2g*mqA<8~mEZ_#c z6+62G78PcX;4R#BkBUs>F5-$CqHDhUI$F-eG0EMo5;zaIE#|anLq2PoUgz01-v3TsiKSQR&Qf z4cP3&p4$ybqM+51A$9Tv_1gr)=c~+gmZ~ro%)spNOlRP9nc{tCqJJuqyh{?@7 zdi~-|kEO4bjG4SB-_RLe!c2zAxi6Ov-2FCp@oRQN=c*9{R zq$+%oB0OdSV0nwd@V)*mB%={KezeF^-VEafm4#S%(+IxE6+kv%ZA!qI61=DwQO|Mx zDD6m6sqd(o=tu+yRY6Qy<&4Zb5u^4`c=^uB%c|AlN z(1jV+ffMXvu%#b#ixMH4M0<3isHW}6lyxnJeWytx<{-Kqdqrsn4tCb?Ao!sXj1HuM z7*J*FgWnC~N(IMJ3bC>Bpm!Kn;X(_*+lD>sUK<+DHBdZ=r#{8t(S$2yxKRt;U7?=07#`vVDx zZT~gfiYD^FB12XQ|C8qnw?XW3{N-vs2d&xyUe$1azJVOslSD*}HGKIF4Nt2V{LaEI zqsnp=x{e%Do$4W)C`;dAH{PuBS&^yS2;wkm3DK$hoW*ETZ}zhYCSm+II~E}tuDu4w z>2Q~AT?|4L(x*d_q<4#4SimuFI($V9mFEzRQvx!=fF#Nm(5)WfT-j2=S`ArN-2DM zL{|h1#5ON_PDSd2ezuY!q|i9nC|YR{fUNGw!t=1*)OzMpdJ zI`6`zoh11;)o;TVY#hMK)~9vUChX#{Hp;EyHhp97ZJBTP~COq z$uaa4aopMz$N$lVi9Ae1EyVeqN}8b@-t2rOyyoU77)Cs$U;g=jyJZP)L5rJ(9TD3m z+D;}7wb>?_%C{V-V?@^$6ZorbXkrJK4kL#TOdX*8Q1${5(-9*lDwmLL57zGhjKU>i zs3Nwm*?9uZrjxfxG|$fjee9~oH#}@uHly@Gn|4>Q`XFvbKv^vjI@N82lFA%EZk_Z7ukOmbL=MSoP8aJ^9zwepS$C zt~*3G79d6I>xUO`kL3goB*P}@U(h?65b?<$rEV;9hZMlmx`R6;{@q)q*(uS7Ej~aW zZ`|fh=4-c=1(FL}w;KXnnf^XKwri)z9P@#Y-)pN7zKwNvr$mSHZo9+-`}#q( zFOEhA=8Hqov-yJY#n57J%l*}~f_tz~!#qokc>jYDpZTNeo_wiF3P8WxL-cY}+??Wr@`Cw}{dlIH9eMbGz(%CQH8 z5_TRCE1y50_sd5sF4F*m?j2Z;NuHUkBeE03$$@j;^7Ny3i4-i?jV6aiJUe2&Gs;f) zdta9b*%}=bs_O+|c&xk;UQUEfnjQyXmno=TmANK~qBMJXP`Ib>A*q41wF=p=$6?Hu;FuO^)>-))0-B zeZ9<{9+A4rnws0WXj@u*gm{@i%18*&iZn}epPW~||oGa-Oqz@0$ z+rz+y+e2o@rAGWIevM>s&XTuW=Ap-h%nOf8wYd6aD-AO4# zJ}J^g>~$1-+ONbLbr)Ymp;M_JiPi2~F2li(spM5=-KPp!4%S=cF2-2apm#tCmY zB{;o$O5z_kXO5>O{%LiVa9X5n%T7z7yz<46Htwtp4~kw@fX3F{W-x#uXBRK>~o^| zN~pVSMcd2F^1RSf%kv@_&N?qPxC_rqjra-2cF1qKMD+RfUa}8sR|cze{fH79dAV4D zAX@i4G>yfSNj2osk>rJlH-|0>W)sV#TJ~*3xImn(cKoQ_%J(CBW{>vS$#q0#jp)Cj zo(}t7CIxVxY6>PRid|sGLdwOl^~`d?`+;(aUdmYp%aEUX-CHsJ3nFO5Xn)MUAe3?T zf>5gdMTy=4#}CAndCjfK7M6opH|_GwG%g~hj=d<1lY3FP(c_E4IG&e;xq4j^wq=*Z zE_@AWeePZleKz$XED`70=9y@E(70qqmxTq~p^lA?GrX053F^$Zg9*V+Ob8P$i#>^& zpwvZ6hwP;~m9G1YHSdIxUtAXA1YD6KxYrE5A{g6s1swe=&V&)ehwa9hMGiU3f_UUMxMaPEM#08=j*C2iDl|;=E ze_THPh|RkuPDRc@6iIJTYcuM=mVLY?uHl$ohpe`-n!b>Lc&xwuUu@}h*qV>@F43@z z1BE&o@yavHye>pKe_c4I@eSzoEJSjY4Y5<wK`Ha zh&zugiDIX22r`9@d$0ZY`QF>& z;@7&{BC_1LEd_GdFuEh|CUv+2ds~q(oUvELPfGP2Y!N)=L#zyVzLpWKPcm&ThJSP- zfmme!-VtVRa98{ob61R`y?4bbbSZFIK2y&RwQtXIu1oX+`$V|xgZ&`}m|rbtG518U zA9ha)kUzn^hsB5=uj&pY?Sn`*a)Qu4;>rPU&QekDl0q8|zLO8FSd9wdBFPnEKy0l5 z(`Sm+1>%G~j~lUv6=IM&-xu|gv_Cf87i0X+eX;*v1VV3UeQ!UDe*|OT{F;5WdgE?1<`?H~yQX_dJq>@-0G5Zhqp=|IwaIDmE`>Zvi-AHAnmBLWwRidBP zRf3o0RU%qluM!77Az+VV$rGlqcHg1bdzIjYW#jjG$gMWJw-EY5Z2oBdbuh6lTU`lGvA=JgiAU4q zzHnBVG;&~CYWq?2Z&|sCv4ME-;kn@`9c4S4-ice--``2GJeODkY&6+z(n1^Ryx5xe zkfqcEGyMX4S0*3Cn__Dr@vMESnQG}H;2w(X zSg)~p7MiBSJ)8JJq@wFVRX68E`!e@Wk{et82{!xgPCGI)RwX zTr>AMvc!*)4)>1%AH~Y}?~h^-+I$7n6x1R-_ zwqL}nQwr#;o5O(GEZ`x@0h{z+#9Vp(i+BSn_^W6?{;L!#-x3Bw?6-K`Xm;?RrN|-I-hVX=4`jQ_|<^4*w})#JrzkmHOxkbtPl1XZQt!v44HGiXR$tyLztTz`LPrld&{&Cwc&~b^5+K5G^=hd>ui+$(^ zh_@z9xUY52D3+_Ewqvb#zQ>#1iNwgM>tFKo* zo58qoXMWYx?p&n!YU+4i90)u{=4>iLwR0X|e`#Qz6RWJICSUthP2ECXS&KMA3`-gV zmpXrOoTj6u6TdY&YI>>iA02gDc>_&A35ZMnT>Oev{nW}BG$hYa#($d+WkhsYlQCPa z0)mU3HGgx0Ho?Kz3_qiQibS-UG@_*_<0QX|GQ`In8@wb&vU2kDrFQ5wVQ(KH3OCb8QHH2rGT|z< ztIf-BYZPfBc6jG3?8I3y6Ge#CuiC*s&uXFev*yBe6%-M-^!(DD_r}T&!k%oFtfp)9 zZ=lR|{E5BX@~rgaK1da`Ww?j;tgP`K&Ivn|3yGI(F4~=dcGoIWnp4@j?NAo4Ewh2L z(e^RRvCNmvGglk%ag+t*CSUe@Kx{PHoTsN54>dt9cHLZfyPbvj(N+6nnfAwZ3o$V5 zEk&Jf+8@icKW=D$*jtIp-K|9B71}4av`-wZMNtp!kCoOUj@;Bfaj+3jy4i@z%e6ml zXn)w-s_89*5w>c2@vY2OP45;5*{NyIdY+w{l8@tdYMSZXVOqQSO+Lg^1z&qL?X35- zSI6+!w%J}y=V}%9YTA>tbWqdgQA-CkZRBJ+2wD*sBsYfaW#>OZc+GTDTQWUIHGM3> z(NRtB)^vp*+zx+&(#KtR)SXF>skR|I=%}U>s%0=y*XjQEUCtE{a%3`4;~aT9sp+c; zsZMHo(eJ2}nl{PZoYkRnut+Bnm*p3xvH{L&+T>d0tfp<&7tU(hRjTfyrd_3OE^2y7 zN*88`*shb#VR8tm6XyI*m#Pd|*35l6@((z%MfXRHcwxSbrV*$_dt%|P>bmkbk!m2i z#h*Bb8Fjeah#V{d@!=)g5x+8G54iwV3rG~vUcSD9=W|Ov)CR0&|y;ss~wbC7kJ)4?mqX`#DWRSa>z7a9eUD)}A zyD+9vb(mq7(gHF8G0J4V>NihvLZ!WC7tL&JeRXx1JW6C-i1V+Q-qhBmElY0?HC+(8 z2Y!}fnKFZAv{qZQEDyCUx8^nvb&&j-(xL>!`R>N2*$WSKP5H1pDF)HGN9t4NT0`wF zXNm3*#|`iOiQR9dwsrddsC)1Ds*2`u_{+I9H|-__lH1QsAqfPM&`Br(sX`$1P7*o@ zB=imeM3i16gVZ1bQiOoWf^-{Iiiib~qCO~!3U->jbIv^{uybw@pXc|_`+PomF3!%* z&d$uv&d!#DA$K43%*$xyij4HTV#e3`urL){To&t#d*Fjup@wyXA}HxsSK-cJ2#izA zvw57N&Czi}C2L@H9}m)R)rPS~D2`LC|2pDX2PiSJ^xNs(n}a~CAo$XY-75&yWh9@_|cg92Wcx9Ns7_Y=Jm*Ryg)_ZY2 zcBJ1<&&M4BF$sw#CkVdFP#qE!OMfXrseU{`$dKC$N)&wens*{UZEP=DA-O45%}*43 z2X>1R1>gGn+eE>ar%kG;SVVqB!FMI{Kt;j#q`@KV?x>e0kA(%5gg8j4B=~N`Hpatx zorm1sB!OMf=677c{T?GT3@=m?e7kJNDha;#6C#ro&blQjl7}QTg}bACJ(PaSZ@Tmh ze3~Tq4uN#Tk$Ji0k$0h9GhB21_5Gd*Q#aqN3H2%~QXf}Y@dOttD-JKEisBS!R}tFF zlDJw$aT_&~m7)d7${@IyEcoulrltsOtThy?lzu;JxN03NOi={!Ws2Z?_$4J(sW2;5 z@gLvduz#uNoj9nUEZE>ybzJfW8uliY44KMRg*Gx9Q>!YhUaG1@%SqLgqAAq`-w}T4 zCAq=#TtzUgG7|f7i$J!FRAkdYtgVyI&24Hd(0R z@v(a=n9Nv3n&3`X7kuwV#Me;7F}a3fVCQNmt-gz%X3)}cCn2?_GU?>kRO0i>sDlqW z{=5&`N=+}nwJXuu!siRJrC)c)6L|hp;#KbWS>4`bt1ZH(Q0aGngFQFlTqR^`VJ&5% zIZ{hel(V)Xh9R{T;U223m`X?;Wr|RGi+~yDMax^Z`Hvl|3&0Z@}$zQ zyGM9BT$Wf#N>gUAerba5v~VnX+I<0m>wLX1ChSeLF7PexvZdeF$L{1xqr(OdqV~p_ zURRoEm#&CzOS<5DVI-ig;CnM9x2|GI`|2vTWvwUpGE}+s6wy6IGMk6=n+l8KvH!Q4 z2zr?E_iXu>xozPVQ+mCUh@Wufh=#JNajWZg@c9}iqKxp zQ0D$y8H%yiYp5uAQA4GLYYi2d*KMS5Ij@nT``=N*=dLi% z9{MARbLn@|@R;6El!Tq~G!sIsEtDeZx6}Wf43?aVZw;5%OtH+OW{SrwLXVkS`=u?u zc_g!?fCrVDD=XKk%>~~Hgo(|SmX9|Vd>PHq7D|0-3F7Vh-7INxC zP@L?SEtD8aI<4ku{mDC$6IHNVJuCPwuba?@ruEz0z(=Wa3n2&=Vwo(t&Cd$8tyg`) zK(_Sz%=sOcVN)}~31_SCwVUcIzB0L`;&(^1RC@ecOQEuLUXmg!{QbXKH+QSWLeB*Bz1!OgMmYQ;e(+!;B1^i@Xr;_{gZkk8k(0-&OS8OhA-=s8YGO|# zA9d-s$1frO=L-TJwi3!Z-&Qms{Z3C#9;&7naI@n7aQ|*sl*!}s!;qP&c=;DIl@Wa; zQ>Z6<#6QrzovhihvQKD3S}WRF*c#)LDoT7M{T`aLx4lnzKeZM-*3-BnE*XgQTW4j3 z8Q^N8#Dg8$C~@-qHbPaoiMeQp(VPr?Ql&<4%?mnKfxE_+I#0&{n8t zeYb+Ig7o`c_Vg;giT{nZ0)FN7$2|e^Q{Ur;$T(2Go#4B$iq9SWUwqrCZn%|*e96fB z&*1)D8)d|9YNt%~KebbABDKBZYR0!mF1!0Cjcn=HY`p)OG$F`c_uZl#gXCkA%iWOr z=7h^1?edro`(zFEJ1Dl5-$C(IhdKyVt>5AG2}$14ZyC z8|TA>jzY9`pb|Dqzs{JNb75;oh4AH$g70{Wvy)PDHu|UTLfwjRtuv1DDV>B6d0Z^$ zq!`PwPD&>OJ1dgy*jZVe6?RsX^I2zQkrUWONRibZg-&?D3yUz!l&I!(5q#&>yCRz% zUK-_r30;Ilxt$GN6sKCItK#+AcNH>a8ix=$J@0Z&m^=anmGR~+Go0&x{J}E(QccH&rLHhpu)pp@l zbu6`%D#(xN>LI6x;CtJtpocJ8=KQZ7g6|2b05tJ|6VeC3;GV)jx#&Vq;W@br%W!md zEo%J-wCbfyA}f0dd2*4IDOwo6E(jvCgor0CB!r+UVbYQ9;WXJG}#oV)jCIEu_v-Pe$ime1Lp|7XSxQUf~KCo&D4j6)MrnBn4c@OvhMJuJ+r0XL50Vcfol-1CdG=oM0k*}%L2*01>bG>MM!#S zxA+1G&O?N&MYj@RVbY#J>m_vGlF>@P;gf7XLU11;3ARV?O0dq0_7zFLJ(KI4l8Suq z{78ZPJNKubfZ=_Vsc$4g&Yw-cDd9ALqM}>nY#R_HQI>vf)z0r##ZXrg13oApy~_$2 z0|nnH>-7zM$kJ~aUBibkzb`Hb*5d0S5((*-c`khbIg^li&!9an({jZs0{bazftLM* zMpouq0cK0T^P5gDmdKzu>g)=It4(nyTaTuL1mUB8LWWKGTw1pDyEAx9jLKjFcqd_m z?`(e25+P;3y7<(TE&UcvVz=Roen_-+T};O8Z@$Ok>^x}Hz}9(v z_mAO$ByQ`vTQR2kO50odDaAgAa?crcdr5C(@E5ek3 zCMF3tXowOlbQ_|qy4DU6GOeLXI3xXLe=nQ{?^vv!+-+C1)vFXqzu9$8>LgbptIchC zSMla^h6=r`(lh>2Z>8Vhj)NP)ouNV(t90F0f=a(be_1gXa)&9rzcEY^hCWa5y${zX zPw_*q)J&5mwtQQqjQoDx~%(rC$q1DI8uHCHU^IO++KzJYaB|Bm~^Wdh3=6uI@nV>!A3W ziKCTy;^1gS5)VfUY1Tu&USvzZ;?+&DF!edCUOWaF?)blyy|pSY-v$5s4gW+Wxw4pwt~J1Sj+#J*v&>boMyK zVk%&h2m951rbN~it}U`QTLirrf8DrX(9cv|VV;rJORU`@VcSuu-!lLgnWTjg3KD*ws#JfbKpE5v3UD!;<15aVes5U5&xQKalzCvvG==Z*f#?oK z-+TavrzyeI-_w-6owgXr%?mgh1I?!kzC_;e>B^wpKV89TgOwm4{ z4L4^9zN2ez;u3(RJh%k4pI73)!OsiTtcTKkB&6R{9n*Kfx6cc{Q){=;dH1l--vpCq zNPCn8n1*RKQ^_rt!APLW`qaN*+C0GyQ)l6N?&?Q)MkxRMn-SK%O3W+$dea)b4SQ!Q zS(iO%+=X9+d;_T^)efIwPOB6lN(L?c?hg3%Ysh>-$u7@)LGV5C`1=b&Us=^XW(kAk ze;l7Bs6pt{M-YR30kMRr2+*2pL)JP&DMv73#?P4#L3Yrv|s~sBFYbY~aVo<|-l82s~i4 z^TUCQq$5*!adDpDdwBR&ocbqy-S7=bQg#@&P>8f1O!hG?{kBZ`>}!BULbCNO#otK3 zojdoQ4c!(CzVnU&=veyQxYiwBUaTyfjw}{@Cr%$MRtMn{WeJ+SM41EDFHx3vmzF4F z!TGYX+RuC$laGUxSV8)|_-pGWux$x0cSryBrqvmRK1tRx{@%BI&`<5M7yAN7?lG?^ zN-^%gUKV1jNvO}D2~{lL^}LFTlkflKkLWifFIWChqqVn>qV&7#)%uelwGdV4C=@KR zMiL5@ZgekHY&r_ZTb<5Pi9W=AD&nz1%#}BoxJq+-d!dn1@)G#oMH$Zpmk#k2aGgtyA@aH)Cb*&-wgS~wsa-{1LO=nbvob;0b;8$zg_N5i(` z0m&w?K0Ae7gtl5}f&L7`qvOvT!(sF;p&L&EIqO1C4vkIjv!K1 zjWZVh`brqg*U^{)pedw5a{h)Oa8=vlfGmACBV1Y5!3@KyGzf&8LFNERITL`d#T5nM zTRnT7MB;L<4vD(X?94a97laelbTM-it;5-A{nntuZ_)idE=Ew1w!pXlLC>49REHnU zxc;RHGQJa<^Qf}DU}M(8z(XdmR?zi;t8ZWiv3QKr33->$(k`z=2b2}BGq5!`gj~Xo zBwvX6LGbWYu?yu`pC5z?1Rde!;qaSACy0@{KzJCb3xWJBFP?+?IK{-8{wRE?;|MVn zd@50$%5e}|@T;);Nex88_;56*{Cg+$P_z?M>uY}(`tbCve+WAXeO3HHfb>m;cW|Xn zh1-FHup@Vb$voeXYt)V4kbvuY40HW0)F$rYAL~>%>8A4iWrxhV9wxq_e33WKk;ae_cBy7KoJN`w^n&qH_sLSB1NWx}lepJb-1wWOUf6UV?h}9j| zKx)9WI9(GStXh(6`wVUWFJ8L7ailurrR++AE`vC-tW2GYCo1=7WM$nsG9!mB=5gggNuX%_{&IqANnFeT`qkF{}abIIu$Q-Yafv6F> zpLlxxXX}z6>nnXAcsl5-z}S(x4rL$rSv`gf>fLWl4>&sqCjuA4j-M^ig~I9Gx^SKl zG8PAC7NMAvC+l!0ucN*(k1(~P9*-X{#%R1 z{e^Mp*{v@lTfN5W=J7QC9INB!E0#4zw}NzBi_7PuBgwgH;OH;VHV6d>K~xh=(9{dGM6Orab-ip>m%Y_SwkK zAgs)E-OoG-?mw@a&Cz0uXX<*9K1+7V&@TTVmBVK1T5y#C72b%4S7R`5aW@wrGbHQX1AIQrvd%%gSJ%r>n=;L&hUv!aN-rF1ggq z849pJ>2!&Ov*8PLl}XQ$f^3gOGm;fDw8A%tPm{FCBzq_W$t!iwLAB+&>pZ8NzGt$_ zD>VH0(XnLL;ox~kXJ@-t>AoW!*t|wpjcbJ6Sfg8SWUASoLNzWUQ`dV7a?=Q%ezH6Uh4Ek{+@<>Ld6TOBvGHFlj%I z;kVz`EoblS(N!o#)b&VnoPg(n{fKTW-<(#y;mrPy?k^Hz$Ub`5S2_zzKcV}KbRC6M zj#WRUTSMHoOuPFhx-kDu2EeKR7=xkyIUR`@+N4k4jCsQ7tM6}1VF@fyW zPjqg76;*Fxh2vl7;-OcL38U<$dIQwFsN3S7O~t$9MD7TNlrMCho`7X#Nc9EY)kxwXJZvp1z+3fpgS@4S}qnzJ4r`l&tp>4Y9N)`db9!sb%BJ z)W1n&pbpS>tW`Vx%VeDVlYkfwOC1>#YPbKNiY337ev-BwpY#|`b2a&1F`OgH^B~FK zp342h?O}S7^^v;7n&j!{2Ji}$?FyaSSz>Rh*u3DHs3+5nES@$K_22QNP>_|_uu1x^ zglkTkdf%W7nyzp7H0Fj!&80Dn=w0~6kmw`BbFiJ$^%opG#)A7eQEy$Xf0hRyIf*gp zbMNYj>++T{M8W(dgO$h5eaR3Fhu_l^aKrWb^6>T=3eMfEkA|TWaP3g0NZ*sEbfmlq zFL4*?oA6+{0X*o7JK-N<@R^gA7y$KVBQN#V>U;C3=k^#yIJs8;CJ&Z*DSB1!}hiueO_XCc2T|eIs_}J_E=ly_3Y|?+tff=gdebOleHDlwq>dj>8 zK<;AMj_vyU1TI+#JN2f%fW&2`SkH^^>f<>c0GE=Lcu3JCTwDfgOv!r^L%|jr@OK~S zU4Fo&*yE-5^kfdQzpv+Gf7G|W5*&V?+U$z=^<;_UzJMIv*C2MgppWxY|J-5++ zuPQW{V9jy;BEE`Tw(mPUlx2P6b9^i7gr2Or=A6*a=BuFeU*;eTnX5^SM{)w{7$p%o zNT`I&^h|C9b8u?O_>B&TxczCMh?>_oCVzk~`Xwdh=3^pFo8*U)! zC#>pWH^U9J2-7mWb%bH4Klt@>hV}m7yCV%p{J~$f8D0~3PGtJSorX>Xf4JL_0y?*W z%!~;BktcwVO0d*p*v5mAuE_F4gPk`lm|S46v2C%2xkQKmqbpjPqkpSu8tvq^hH+Tr)h?HTDZs-)-?oa;T||z&u~~v9(LBp5Rh|Rk|D5} z4Gif-Qf*&0lx0^M8@xop2>0?7P}cqezM(A)#3LSh(?H@Oobt%rdhSJo4Vv%5!P53w zLk*IDz&X1rTybwQz@>wR4)|TXdV1#VWLQmEM>h@PbYn1kc*xMF49n|j*hgf9tk@wd zn?@GMvj`ir4as~D(X+VVVYZ8%0<750U&sxu8DnZC3dzFmaJs^;2_#1wE? z#q;dTdxkv=j3JQvl7UR~sH(|4wyZo1+=3u#wqX`u_DF-c4I2vI&Nj5sAb22mj)BiP zf@ITxHf@E=E~5>KZi+@Y7;SX%mE{hl&80rLL5y(;SodxVX6AW@Hbl%AEZN!Q`G#ZE zF=%|3c5zXPH4RKz7ZZ7OtZCya(quP`b~%Q*@if{)!(3ptS?OX?ZKvc zJq)oKD?;%F1IZ|;QnBJ!r^C#Jz3JGT_^N^AC9n54)q&^M8A#q(vI{`Fz(w~u!(zge z#x^8@vw5!>S`aIe`#z}?uDYzr`T%ITnFfV&-*;~|kP|FwH^SiTew~qJZ86LvbE~Z4 ztIwN8z}c#w7^PtmzzT{D_@xzY%2o+kVW9;-oG0F@76@&38c0SIwTs$0gG07ukpUA9 zI}K?(8Lj$DvHkykCTBR4x22x+@k#s>!qVe2cOtRn{}*#M;GEqM^4~Lz;u|iRw;9gc z?TEZf3Z+Ti%y7!CMlfVomU+zZHBVKVof*!~jYx`CRZVvuT>`U;XAM9MPS*GL7wA-{ z)t_uXXt4oM=UGD(oA8NYAqm6LG^;}M%hWVwi#>bUKn?)NVAmDHCZ123pP#SLfLwJ@ z(d@ugLmVH#u%Es%d_@*Xm+sR@5($@Qo(F~=uoOa_a{5)x-u^kUa#7LGCWt>CoLxKas z@uADJbjwleb4!`SQNA8OQ@bqoJ9a+@Gel^xNiai8hmrU}bifs$SFF(p;4mKGyHNUk zo6Br2V;bq1s`MDP%xw%KBNp9o9J}Z>mLZi&Z-Xp8RYpljs5V-bZI3n5?L4`TJKorp z@0Y|2ATPn}t$5>$#PNEsQ1K04WF!F->M53;NHXRU<0#`X^J^G3yqYnTtXvS}f=%^} zB#nl=#=_x=CM&yF-}ovoCAKNUm_r15ZHW=zP0p1LqxFb4!h-^nm+vJaL~UHv*!VR4 zbFo{^jZp+s(;Gn6D?^^$WMb1Zjen65BlU}|>uelIT-GB-w>RErU|o9}H~Z-d!>+{g zjsmo*&<+rcW?e9L(!TQ0b%M!WSlJi=b(f_EKuljFN&ZLzX6gNmzmRT9a)K*^jb`XN z*w|YuLxyF|d3{LnDq8sv;}Jp&xrtWp|*3lnL(1q+A~)2aKTVL zmFIKE1XFW36nD`Cldl?i6NKS9Qzh_Rqd8xB>!jy3G@{cwlM{+}8spec(~J#CPjSL? zK;Cnvj%>>e<8)G}4nDkEH_zx`b7vYoWQHGp!B`)UBE{?3odw25q`FoFeuoNQOB?56V>B06yGRi&NuIB2&7gW5kA8(-t=X>6aNnRF%g zi569zO(-DvvfNviw!Xn?yudrw0`8ID)Uet~MIjM{A6B zJzO0U6$avZqeaN*0oP9bSRRJHW^C^t9LCzMHy-58(a*ptCEU}Rq@NL}Y#Ii@<||Yo zr5JG94UdJ*-)aSTyT>;+OZ6w>E5=ZcGx3LnhMH$?c8OiDv!6NKo)Cgs;u*di=M}#3*Pq;&ObB{v; zM2clW`;0URB++C|_8aRF3i8fwgHLd6jR%%ZkaEOmfR^vznY`A4`XI|M&IG-WUo%QrXJOS38XIZFBC=Nx8{a0wUGCD0C;iB!BD-+$Vp={DYUDAiZi}#IWTSe`5ML3#l zDi7P9!~gs8fpHv92C<0#<=Hy*p^>a`F>MwJTOQJR5$D}V_VA(c1!BL*`p0}r=rr!~ z5RGIQ`t{L7tO$w$v6;o>%lwFMza9+5Z+F$Rfq|w~WN>H*LNAXg3fh-9kvtdfmPWur zJleoBWX^61NX(DS-tIPC0#{s+MG7Tr@ zi(NR!A%V)h2|9_UU3?kZax~QTnuzvRcujxsh^wMafAbKT$(I5gn<@#D=IUX>_6wA~0JO1ecbM*f5uz!xp%~xGJ zdOum7s|z}Uh>OcAZ0TInd=pPV4#AqfY#I>6!zF36FN;hLVwx)X5J=c+YQ@(MN;arxW6Y6k)yJl)ByoiO9Kf~1T3|{mAvE!o)XSd_kt-sUEzw#22&EH$s{0+a=$HH2hXAnMRYrDHqBx@MCvCm(2 z2SI2@Gp}5h+|j&*_$8Ujubs^0cs`IyN8kSF(9Y)Dq-DPnasdp)!4h%|p!YXli?0dB_4i1gM3pBx1 z4<b^ejvn=6@+_)_<#l2Svdy1;eTHF*AKE$n8&zd-y8!oOhr3&Foo{IlX;82*LhUs<-WTf~a5 zxi)9js$UNO%Hv-o{zb7`^=%=1(97Dkvg!B+0YOo0T&Arqi6|sEeAd>M%QXVmo{7OH zCF;hMW%=!F%SfGh`L;+_sk5ysY2(Nr?kEVtNeRB}Z%cvvhi1H#Io7t8C%tHrEdoM5 zaG2SRv9@J|1QwQMMdNL`{@~(7TR$Go5TD*mD09?dXL(a>5j-l$q$lRu>iUB}DDaC9 zDbsDyaHhuA0LUs5cux$)Gist)wp?S%6g>?*&uYW?RkzGtXXWU z&O@#&wk7fqtXcumme}$%Um=w^KJAqrBrFY(neM+Sf#Fi?0D#RPhd&jG}n1pQ)bY5KdRgH$-QEeVQr$_2A3n5IqZ?u zC|ZDNEgbk&*=83k3CVFIljD=b9)pJF55Wh96XGY~e?2ZBm2hgykKJ;WzR3v<>h(%! zke1NEn-DiLF|kTw#n?pYUr#2aT0r7cwAK$AmZ?zze$H=d08f-X5gN_gf{CJXZnHi< zAwC_ZMMOu!M4R0KGkV}+Hq>FS0zK_^D-_xBxwUzQuySD|`VHtePOMT-j8Et_sYj3G zL`fiaa0lAWaN2JF8eVqV$CRlA*Jj~HPX7I%aGc%k3GlPaJ`5JP>?SN4ekvpqQYMAF zVDPF65s>jmppjj2+vCbqjD3uHtV})rk%c{0m>3Ujk5`Y-AuH@$b$g)Joy#6L0N(f} z!~#FXAaC0yiRmmq+TP@exD0U%{9(+iWRHN?kBtnP6fM(EX-s#j};5FZcB+# zuu>xAypd^SLzC@!BwZm@2dQ0FzNWnlA8^C9-u5`?-pa1^Yj&8_$bQt17tMLuejKj0 zJZOalh3GOnHn!7SRx-n}P3>+X0cCX1pcF@X~xNkquhziDN!<7d8P&vdXi zA=KsmBN-3-u#3GrDSSfH48yV?$oEzsN^>g&XaE^6kioQLo$Sv6h5Q_Ay#aIJC(=(m&Y3dTzFF zVtYBB1D3kezJkx|XqiHsNciQ1ovbxvaK>qzFBhM*PvO~kRMzlR>1DT`P`2j7 z((27Et*Hm6OREwBThEkU*8ObhWtMZLm+d`gFDQ+dqwm{;VatcO(vf#ut~8FZ@yY;H zbtF6esr?i`VzlCy5aIBD?B9lS3(Ow<`wkid)4sEpg;Uq zz(Zuj`0wl)Jb2`H_OU!fMl5&3-jW9oxnU=%HW@MEd&<$U@9pFHsxo5u5B63(c<>MQ zK0E{wW8nS|_If2VsafnT+SO+jbH)zkl1#N93&RFZNX8i*tX&*>>=+cCzkm z8!V=AO#(t<;MT8phaYg-ZxoDV+YrP*-3f4MnI{Nt{bnbNxwe10@#y96e!vNE@D)c0 zEYy^xo^i&3^?7d;R6OJ$91-y1pQI6x%hqggg!(Tdr*9BD0S<+DNTxz2vidJO*}Ia#H~zAdJjC!B z?ii?f$Ig2NVbocGiJT^|_WnudOhY1P-9f2_N zzMap-OUqjsAqKvs-VVF=zxnp3431u20JZL-U!E{5v*lZ2!) zpFh=ek$eX7IfgYa>!7|$8rN)pgrhTQA3Ko5T9$Y8A#gP8CVZa|QUz{hUa_!eq8ysg zy~L%QvpL8Zlidw^iL*RC*>SCLQ_-PbT=+3^hqv&2Ob}!p3pcWF91ePMUp4S>R>9>+ zC%pd?WytUGrWN)q$3*>5k7Es~E%_Ce;dRi*H+O6n+e5|{(aj2C9J~1WSn}`{+29lh ziQQy46ucq^z?f`zBxKaWhZOf8KVW7#)g1IV%r&>CI^?XbZh?ZI67}rc>WPhpX~G8c8#^p4 zFw1e9h)U`;Y#u4%>B_KbhQcbM368gOgtNZw95pEG?Zj&Avks0UghVRB;j>PT7{XmU zu@bA=*vIkgA*sT^!%#yUbURM!F~c7J zLB%WifB&78=8a9@9ON)d5)@&|K!*o%YT#D=vqK%#pdj~P7<@3?QB~9BEa)~NJPdBF zJYk07@x^)=KElzI$HH#aD;(+gmWQHgRAq6a9Q0us2@dziIxh0)a^zwg??+@3?OI@+ z^#Mls6CD;fJl;VjMhsT!L8S=}a+E^h>rq{D14ZVf?j*;2o)e^2A0j3@-sHiuc5?#5 z4Pc$UnV4=#ODQuPVQ{mOCjdU2;^3!RhDiI!S`tAWA!Bn$S-^@OKkbQAuLeQTxeI1E zJj1b@NAN#|FtnU3GJ54^3MPd{E$vycELdN1czH?+`zCO|=*ZRnzISf?$qUx^R7F@}w$`6)z8keMtC2VX)* zRda!(3+bxt)6ioF;>*YM1et$+CnO=NA(tgV~B=kRlq4X0@^I2JgPK_^OVWqI)a=i zk+H20+~wKe<&H8$&?u%_kT1IMb8&A7A?)M|hl^myq4CN94_P^t5_BA1<=}UtAnd2h z_%XND4zlaCC=h2*YuhVksK3?`1glrmAtBfMbG3sk#MF8rkh8`S$IDEva%hbsmItd< zOi;1NF`6$^s~F&Nkt2#PQ|rkr5@#vb+q|~4Dkcbcm9imM8SrXp9Wuj-SN(PVMA`XaM&?|XG=XP5foY4VRYGzefJLStaO9~@N|j+{yySwnuAiR;K3C$ zEPUrFs~q{j;rzFp;h`7zzpW$pCha{3IW|}_m8^NsLDn{Mjg#+Dv6MJ{8*aOla)?5% zil;sd4zXVSQn7GGX#_{!cU1PTFzNzI)X@n=rm0dERJrS6)dzG?qm;=Mh%zJx*Hj5v zAp0maV!3STQR?7I`U#&Mb#&)>!fC1w8+Xj{H5uHp;b(o}#1ByZlxSefPB@GN1J|vY zQ1CgPCHwoNi1>ZckWWKzMb>P1HiX(x5GvnG_gf4RJ$C+wv%7I?|=BB`Uc69HM3ocOtg z!@*|u@Jq-01Pw)6jp?pB`jf@^KgoolOf2M(U`dm#^)C+k0fZ+J)F#+weuto5wKR|LHHs7+%~m)@yeh3;cjl<*LwrdELy` z+;xmI^JvHbt{0vcgQ1VkNpj6)E_YGAF(;bQ9yNBau#;%PFO=xZS%d?SBE4rx_a7bVlgee-$|mihS!|2u=N#JAX`<(X&`nh zhh|xIT~>BI&AE@{kFh3=P5r0ypOk+-o8}^soE(rL*aCll<}M2%Eorc&BH;53@oqB| z>~WLixr~5`?Fd-g(z%QmLrE+Mqgy#U@nzE72i8m{i6}^W3!Au{aQ6CcQ~6TD2(+2H z>_n#1Nrb7=Q94$!jq@G8eH9@R4h?jUAiLadhk_SXW!B)E-ett!rV5lWGGsQ z-$*JNkFV66{m*VZQ_GiYcAkX%#(poYB{Mr@7KFo23lFnQ^;Y?x?y`4#9gkhIPvBQ0x zx5*Uuh`~E?I;-zvOgRk`ZBT2NvmY;g36)`ABB?`J=FEV@{qaG)S|gmJ_&SoKWxtPb z)+TJqea{=^BuiM7a82pXB!0tol(Pv(ieZ&kiCl7DcUFZ{1?YKJRjVEd$EQ2(kTKCo zLoSKGoXMXx1~J!V!ZSV2$sA>9yUZC6Dd*jId1i}K&-zbx-XqdOj11}hjKD&R!^jR6 zIO*$y>Qv~2A?48>)L-R{g7i5~ayv%O!d;l-T+X+zR(8Yjxz1coStXV`&uJxk<9UW3 z_dDa+`K8VgTE^e!30@nCY3z=#IKz3c%7Z+Y8`=I>oX3dDWEtFg`GZ8bv%8=S^6&~61{EL;&11gmbj%(@YIVk7y)@O%v5*b4(okz{#XIch@2C&x5`DH2c)I-Q&X9SGd z>lFR-ZeXYPI_V3Fk6J>DFt8r`ob)~NM;P)z#IBdub}R!Y+xMzVJX&DhA?LIHIgnYb z$(NzoRfGwLon(I%!MLe=#F;_blHjoBUFTvAl~gwDJ*S5VM>6V?XxIoif)b$DjKdZd z@qsgekVY?E1uC7uh3vFr&RIPDM`fAEX$Yp45tBjiw;Cd?Ks@Cnga7s^=Pw$>BygN| zl4EyBF$v;+apQt=)8`_H&wU;Sm-{$-bCnrd@K_=RIgX< zJ{&$<9Kg2PTrNFdsBKi*$0+Tz3m$7pg#{bkCRpKit>r1nip=-8NFug`T;Vu;L+iB1 zMYfKleFTR42+3M0QLRdGqAS|9&QH6t0ZnS<3@lvZwlHgq>vulVVmLoW5P504j#=(B zp17=m!>e2Y>|SNp7@{z#$83Fys{!AZZ+4Ql_n~fe7jaSQ&QkykU5xU$|BBaI*a+W- z6l=JK5b|37kefKTGR9R7thGt(3;#ugeeOq39Wd6Rl(c7;*6OarLao=ua?s}4E5s9M z6XpJcbNKI8k)YAn8;JDcp0vE_mkG7EESvB%r$_(Wh-hm(G>|r`am-rYU2uFSuI@j*?*PU zO6=gXuE~Ukxjp? zLIAmujEv(Z7}(C$f>%sQ8|>$HuIEZ)fGz9bx=jit1u$GW|K(tdnPiRO3 zlP&7*VuWgm*r7*`E0n$2({GMQgbe*~48&iD2baCK^c` zOc>>Qoo@&Yr54Qp+h~Ej(XNqvnOZLvHjQ!x!KXuAiEyiEYsE>oJToHW0BR zyt(hB;K4Pn1!O#HtrkZ(ez`~8kApAQxk$h&v$f$h7gKSC;_3>nhO*_fPz3xiv(wnY)B38)^ z*rMGox(A8P)MwlFxZWW6Qosy(hh2EaZ=Z{P+(RvF1O+E+27z^y)5t;&y69e|9CRa% zxg@y6QQ8RV-*dHsi~$xiTXocRpQu(E$MQ*~4~_UFL-7vWA{D=I1%Ug6t3EH)M>!F%oCN$7?vF)LeXfcG<9f>ssFpUPm13d z#&4&HQOjfb+-I%N98tO!3E-4@tlayQ^R zB%fG7^~wk)$Tqw0@d$X*GaaG?cL;0`aR14dAy>ZK3j5vS_L5#pMgXdTSYe|TPydez za+Cd9c__4;yVb%P2D@o^#E~$-k0EYy(fm>EcSGIu329QhbC{c-8$d-!-543}CX)n~ zJ(f0NLu~GK|76UitwQ8G5r2y){&$`9Q#_B#Iz+pzPrl`#;@aUkm-`c56Q#^jkE)z< zyUDsjEtABKMg&JIUKH#w`OQlJZ8rHU8E zdEMlUt6IgvP$2Z%>1r%(hA9;^BSiA|(rOykq#+$J- zRo!%l;n5r!UDG{_Sb$Usu#%Mp)p6@cq1qhoI;6YF`Che5UZX^@h`R1RB>k&ml-g6x zIWu&nEm*%s?gNC~2Qr zpu@$7SO(CLTbuKc?nN;}FLzbqEJ{)r46ix#BvTDms>hst-7$olQd-sK7|_A{y$$96 z?h|51LrVDrA#CM9_bqx)LpjgU0J1)c4`li=ZW_(XjSU>@euf`SGWhyf_aqHCn&BCy zAw+GZ^ey!nkz~&$i2_Qr0{eW5dkzun@Kw00)a2Qnc(b#HClKmbG0ieD-Gk?h=d1~4 ze-*fg@``6jZ37RIGET7&TIg;H^ImY1OAL7aIE`6nx#{%)wGO@`|DyXO-{YsM69sS1 zrp_LTDz^@2R|pS*1JU-sc*_z97@?%f;$!=`n_wo2--%ZuDIiTFwiVbv1%T8@^S z6Dxe70JF*u?c@N?KlPBL?VgOj%nf|QrJ>6%15Y*>m}9wHAZA-q2rV{H&#A`X{=OH1 z!Fx2`61frxH#g9u6n>YnX;8S){R+=9Mk1*&gdNA@JK%VkI3a>wyPmN)4A#Do17X{m1KnH_qxB}8!bI6+oCYxB;G_?;&sEqN@gP@?{kx6 zh&&HquR~zwKKDhQF0vBC=I?i(Chi0+uP)&Ep0cp~U3WEbt`S4|id`Zfoi2bzsgpH(9?Ub_Q6B1$?b0rG*JPe&i-;Kh;!sa(qhjPkom3vD-vOuWC=e zL@#^p6SqLR!(#wqSlISY-SkBi70tr%P}!tXXhgC-7u^epw$+-Ca?N&Fxba93+`H;d z0_(5aaJ%~mzA5?R6*oCbtq$UHY|d5pZZh{j8vPTlyIXS7V3=iGNYG2Hg5i13m4tsZ zrw&jsGdPs(`^kNsi11O(TescYNlm=CBf`mF-8PN^=}p5ZKc}Wp6!NXxKxp-w#s~R- zVPMe%cV%djrz4v_>V+YH4-epFXF3pncc(*M#TZlJbbQi%`XBCU8g`%OAPniRB628c zlBL{rwa&+yT{`|d=J7RY6Ii)l0mX4o_O;R3{rhGD(vg(X?lMftcD++%=;2txZ< z!2j?dfSlnPC3rS-oWiy5FQ>BZIuDT0`U!p$y5@U`O{l%74-T{E8@>gZ=kx#%nXXE| zz?A|w0z8pC5!~qYT^)x5gYm*>ON+8_W#Y7+WMGHg9{w0M z!#vMhqzV57*lp4C!&6}bVs?@?NepapjE5dR^-o>CsL8IzdFZJxS?72U6R+&N`c5$W zBHr^0Vd7CXPQJxjG}vV*oEk1dw~8LJ9Qd)KXCQCfQeB2OU_T*2y`&^oT-!rGbdS>V zy#v6`r+J;Rv)A#h$CGzk;oJtuEZL>X5@JlZbIcXzsiHv<($g=-t;XOl~NNPTLp)}$UdGrnz97A+Q(B}1ID*? zvOR(9nZBNtM5O*j=UWjy^;Dt_^0kl1$aBVmfu4mtb2w+zfrk(A9ljxhJd7_x>#7C) z2h%roIR8!d75%$lKo>k5_CH4_%ztw93?2PLs$uDs3H1$)3`p_fEpcle<+1c3p9whu zW${t)JdbwAE1IFmFOUYOjqs2(yEYSsTC4>1MtWj-0m}K$f{~s^{=qKzdnBDo)hgv7 zqsIG~!XHH^IT;~kf=7BnUUQ&M%Ee-P_;ll#+jA9?8c6G><6)_KoKVg*>e5!_w256`M@(COjlsk&fD{L=Hi zmIK!1vZpNB736P-AvyXHJ``4c*7=q;?o(Q}u}PTEOosfwJa$-r z*E54hz%{@*4#H4Q6UpFF84ZCk7r%^vd`BF9uJ2;30Y3YBV=yd#Ukqd+WyESk;Mj%g zuxksxQB+caZ4|`+5Hx&Ps~)?c7w-|c%6b3`HHjz41W<}H<(MbeBL2yBNj@{g@Z5GR zX`&P=+Et;}B+vwv?Tn!lFm+*_g`ONAHqL}$g;$L53hpXEU=hltb%@xJw2C6H!M+I< z50O4$WL60-hKpl(=GB&Z7Vg30H4C$Yf?q`sU1qWvB@MNyJc7!(Jj#M3 zTH!FYsz`3cVHdhe!_bGordAU*hY~PR!q6cUkbX!bi8<57qhta1zv$cl)k<9YlhxP1 zGmNk%;(y`$@Vg`5LRMpedIi}iVAot(?kFk6j)s5WDaQ zk_`i1VV}c;Wozg(O(a1HPQVo)aJsmd$3{^$XSb(|S;VF=!zRBdLNZAz*aX*}7q{}H z)QCo&8OpAQU(4I&l7rwCT!hu@f||Tzq18&wt>J_i=%idva7&%9nGMt zvJD^0OTq-y_BEo1$CCUkpr1|m4G(bu4yT_1kLctd#c%p#tQ0Nm`67{iCk;8N#;of! za9layAX|r{JXpc)@XxBui9XSFxk(k4fUeY1->sR>$*_%1BO62 z5r@F|O(HoeB#&R*Q3!^Io5T%VWrp!wJeft1Ki`uBEOwhF&XtC-FFEA-(q>>8J4AYA zoyP#gsEJPjV^CGRLo~8BZ;Ia&b0ZZxGhBJ3q$1fC;ul&XNv!T+u{w$B)G>l9h3gy3`j+;ycc4XHeUDx?e3Ys0`#zm% zPo)9FaKH=>;^8H<;6UG+@{4ME zhOFKtvhafj*zrsMNKC>CVYlvy4NDcEG^ogs0UR<`u$p%ULP`&M?(Sa+>#arJU=kZ+ zU+S~(3|^YIm*9|U_7WG3;O4AzfHz7jlKO0~#k-rRTrzKl)=R(6h`TuLSosL=$7EE= z-6?PLUgKpc`@@sfoZE>)8#w7da}@ zw-I94k_<1sGc9v;uc?Jr9$=jS*mx>VxO?!D~@buL(3oDoHrAZvMP$pd$4o^K{fht|R zK`bQK+m)EMiW>)KbMUTX@mr!Dez+^*UKTERp;jL+*>aTd89vyvnOdkat2zN4KrvqVi235E~e$2?t&7=otpP4GP6$!f2j81{|@ z-WYghwwJ6bp9>z7JzYm4r ziL3%LX;O%AJ=6qS{y{Q9* zuXyPLJ&()9#PH>Yn_9j9cS@5Pw}5et_b|_)$~|!%>bmIPJzrjj#jf@KRDo}yZT)CF zt9{H1|5g*37x@d+KgypMCZzZ(}MF(aMb#_U4+x6%RvuK|6AEP0?YB#Z6q(v8^3m9upS6?wrg1ez-e=_A*iOcScC2~0o#=hW*W9*!bb6-=HA9OOnV|UP zPBle(SJ4Y5))e&vMUUCJ=2zQSZXGAp{H~qomnPNR+)niUyR;j86bLG*aisTRFM_KpTHD?r7!q(FF&#pPC9j>Pr z?^RQD7g_qB``2`xQ&2^^`^_~y3!P=@`X_7N+N&U!Vexm6g&S(SrpMLRt}D`LOiUy3 zwxYhTLc?~i?NwM8#{2=+GPbt&_8%8ZFA3LPU1XLaYE*iURP7-}tuo$D9aoEMI(O@Y zjg7Z-=(Xz6NSO^9TRWls1|MlZy2?H{_ReeB#1Ykju$r%x;!^hJG- zRV8)x_N+h9AJ$HNnQi+5s|a)Qapyk-mGNag&ODdYjm+dbAKRloEvXCeb%3qy^jM|6 zGN-oG4(d?1v&-^9L!jI$Y8%S!PaW!Z%M@GlScUD;F}nTxtP8nRz}v$u#F!*5~l0^ z^^cX<`o~9(wyj%7mfHLS>nGakYwNJ5XjL3v7(eLwZnossx-NF^t*CQ{{`KALh=b~3 zQG4}e>1PkB|9iJ|>rwUlPO+~28jeigo~}P|M;rfoeZW?)zOS3D81`8CaC{(nF{CcI z!-5l+9)mAHS0A|;a$9%?A9*}lNCHYHM_aHhnSmo|(miP-(Gl?}4$%fQAis~dJJiMEM2X?4SBd-c+W z{&w;FhFxvO4;o6X@4*cX>E#DE9NgayoYYtz8(lqN;j$&wM`SzBvIWN+zu?g7A1pZO zgeAuux(rmRUW|^qZ0Y<%5Ut0MeYmh+KO28dPb?Ac+*oQKpV&}8xbD~`KUlDM|L}q8 z(+A9+J8SmL$iLL#zvMhbi_{PU8t#!}FJ355IcGAqoVf;1xmW9HHE;zoy z#%u}e+L5nTBt%BRW+WJ$1tDiMzR!=JXvi8-EF*Uy3iJw;naH ziybrNsybVHFYZKMKEDA}XzkH2ec)b=7nO9KI)CZ@%N8s=Z1iX=y|!U@+v5ifU3=yu z*_@qmRYSGCe@#PArM4}y|8)%!OP(;KYE|F8JK2RtH0-%*w;Q^o@7kyFo(}z+nyTj? zdT6znSG{1-aSI`>OBS2g^SMEG*8YvXZSTVx=ep$p$WNDwx=fzq7tAKf?d1a+L$+ma zuReYJL5=vZ+DX4^jN9rlm@nUbP-9h(BbQY#J8tRHCC41Q;Lxr%_`pVg$pJS1+{S@6 z?-z|-%FqvY7}sFu&FL4j8Pn>!rFS{8ai6Ys)(Le4jpfbDf%*Kk+Me~n6wyxdCMNI zN_SY*SW=P!x6A0!v*(I?Hvh2RzE#(wD{Z~7v5P(Rn+Es?LibjtkFmzxOKje)FNAFE z=}=X9_^kN-{MLxomX zy4UrM#kU?H%1b|YW8*1B7T4C>FnX`Nt#NjNVUkAl$%Q_q^zn~0))qNFrYA@F(odI+ z`hAhPhWN3ze$3+ot+i@Y=k#AoN7eKwsNafm9M@;mYkk|vvAoa7&grWgM_pWaQGFW4 zuPpSyr?*WUHK@oYMJ_DCQ>QJSGU{)o+tokL)>n_jot{@VjnWZlG9g@E4a^LdO(%HMsoQ^fDHNML_*eloif-TWNwU_w*f|h^NdOSw>B3U5g z&4KDTpp7PSF-bhdQ;7Bg)iM0yJ;q$nRPkK7uf(vWos=kwdTcnx@^Sp)If6P9xmMdL z^`BAk-{Ie0tqEY6i3iS60GN3r+}{$imTzC=-_U* zgl~8x%5KGc)HKj1QFOQ{`hN@^EJiiM3aA$#+cBiaN}`IJYuOo z_`)ed&bB=^%npX%q({X^6_t$ODV1O*JWyQ*BN2d|2wTZ5zFo`N8@;4w6K?U-8K?NsYo;MC%{n;0qcu2BS)l}+2eNYZNA~POpXAQNHbd}O<1y-Pt8fh zN5jpw^)}zYDldZaNh;?E$rvFWBQeja)4sZ1QEJ*qGlEnYsH8mW)eVeTdYiBFxM+k; zPz^^&bB`ECh-<{-6A_DwA;dZ=Y@?B+)U=meb&GF|y_oj(uK81S&g6!l(<7 zSfAT{V>_mR$zLD#HT0sA_aYu(h?3V4TyAi?Z})z|Ol46CfrbSyWpCc@tL-22&~}V; z2@-NLBhs9(p?COp9qb@Nx={8ATarTv+kN$JU*A!RZ)T&Euvh}PIMS=3B(jR6Uc^qi z%h%L9MdHMg4stvpe%?JkoOQm_m#Bylwk)8@m|ga-z+e%tB}H6gWM7gLj7oaR7mvh? zk&H3E#*+|=6yp-4Z_tZStchBTAUfQTITcn}4!ucAjJU|&z@o{7=%F;mC6YlQ%tzsm zvN2X46VnK^ULz?a0BsS*FZ^R{r-(3)Jfuw2QG`O5A`J3Z=y7xqNH3bNlrpVwBFhIB-f(pnr- zP&gGP7EXB-^-h9U++!Klj1m!cie~n@ND7!X6G-)G$tI|RnwvqHHnenIoy~m83TFh}^o)Cb^@ju_RJ2ZBnG+cz%q3YT z`H~3`O&r~xd|(JwwZ~2f(lEfQC>iCe6ByT#JKo|OFtmtD9`Q+vxM%~qY;ea!G$Ki! z(2QufLKpx5axN==D24W-lnh~7KsvNfK>@(_%39x{EfKPuu!!DC2zi|HkRTtj6}lct zf~PdHP|+nwTqnK`NR<34dM7kilHMuyO_4j5LV;AO1z1QMMA-Wx?2!=)tjG4VLvV~h z#>Fp=$X*1wa>AUD8bNL{BMWi%H_wthjwuo?JD$+=QOBeDP!IJYY=Sh33S*^GniyY% zA=QW^ibAaZDV;3@X&Xo^gkFp+iEG^E=o#n8O7vQYknl@#N|TVrV)x16m**Z4bV>xI z%3~%bG*dGrB)-HBHA^E))C6Hd0}^Sdo;mFvFh50ZVelDTNqG7IMFCS$9)F-$i-VK>E>A0g z8RdwIOa&sB=V#Qxh1P)za2ANJT5&U&89@m%S|Y_r4rC-u$Ve39@fJ1=;GO+JiqW7` zS8@ZtM!ej(z^>^ObC`9Zn!I>sU}GJCJVN2#i8GlBZf6>||>Wp(Muz zNAfV*OG#)o5U_lN#*ECgl*X*KXhk&ivx7w_X*tC5KoYZ*pkiN%##>n2y@N*0vSew2 zHq-uTrlcmxVd0ii*(Ot$RzmD0;P}IlJZW0(#Syg0hCMw)QK!noByP5u+4kSSJ}bM z{|1+%5%R-Y%YxNb`$^!14vCbV`?#-(0!K7Z11d*0>O7BZ_K2CAWZ(ta$bd8~ z1^7vGjj4zifs_%M+e~1+Vt`q*EEiWXVI~TwLb^Vl;QZCsB8LqTrl~`PoCFdY6%dyx zl;tl zV|UkkpE8$h7e9&l-o=mmM)dYL;I(NPbIKm;e7?@vmTmkxUq4ntGg|X1z^xGsm3kZ- zWq-24+I%Jc~sSYi6lVf6Y zhCFSMqcN)_PRXcjsNKYZ6xAvw9pEY+2pQG1M~-_^YDjSm;~PuGo9+HS!K!-4MJ5;0 zfhE-wNtL9iFsLmRSclXnD@d-Y3s!NoBJoIUsy~k%!I6v7M|9ZH1&;)TC9?w`JFh4s z^x5MwwJ{TOYX*sGNGvC(#e|xi!CZ2H>PXT8La~7KuP8zYS-A*BUhtpNl5Dp11A=uU zUHyp95eB)Pf>K$Qh>&>;Dv zAto*YHOO(S?vSI9=*UsT$&PT7>@HIX4j+rsa)NbqR0w3(W!ub>V=ks~+X)N9yNvzWl(MNx7hj{~^} z@R(O%QaaTknI$(_B^Jr(Bm~G`fCalU1w$f$wx}E_7i!!|1&tAwgBil+sb%}LwRu5^F;l4Of`}z>^&Gi4^~fCmHGF{FQW& zJ52T@3gmh!JDHRjQ`A>!YvlT>WVpG7DuQN()5T69BYzP!oRX%0u#inbWaYo;krS7^ ze2Gg$nVH&S64uUg;OPOB$W|&%BKt`4t|tYBlCSn%BJs%a%F7qfFr`-+204Ct@fHwC zC=oZ+l#?mxABPh%iEm76BY1pkOK~L=20l3L$Okgl)yg*#oNum2(}AJ1LY#8hr9ty3 zxp=hcv}Z0`p5pnI)L-&B^u(@_RVB(fGHVO!EtlIVZa}H%lwJ0MuP@fB&)eYZPa_z= zRd&e+U)O*X2vE|zL~L?(5JV25GDe(560`Gaf&D;hz&Y?H6fS~vNy8vj+nnvp@TC8A{oQZUM%5laBF zsBBzHB>t0RaS(Ljzl`|o3x5;RgPg%6DLP3$#ffY}(?RymWG?V>JkN0f@-5dqE$SG1 zq~`T;!V{;3tBG}t9T@wi02ybnMS=X>3W^fG$!kkH6@HU)-&HZl_y1;d+qDJ<-S!my zUyN({y4Ep2hxkw^C`>WxKds7W^((0f9A|GS4l4;MdkU=lVJS|goqvXorj-0EH1$$+ zdZbuYin7`Q2Lc}H1WD1Lh*KN=hXE$*6jL-8;UE|1&=uiO6q9q1V~u=%Z38-p+q_fz z#s3>YOv4^ke4J0YpapYUyr(!5{yu`1|8B!EDz6w-T#(FH;8vBXe6bLU6+HQbBh+JB zC6w=touc?3W`OnD;_KTFIiuulL15uSIYl9b709uQWfs0NprFd<>0C$hAAQ5X;}S`n zj!OjzGE6~4p6oV(cAD@#Atuw~7H6O(?FfZDAH+HSCFC|{*NIB;e^n4y-^c}?OyFFQ zpgo7>G`M@C>;rssPYE@`T4Njq5`0P!oe0PCxCRgQxR{pWX-3OWnq;aLQ=C_xdO+(? z?DGk^;%Jkl^vVt_uX+Nb8ER&VTf^eIRFrd!ltx~9%%xJ|v`XUalyXWYNrWglmtdA8 z2PCZ_Mu}mRj*U2NpeTE_TWsd|lq4J}nmZ{bL;-yZ20%cbadncuq<)lINh>F+A;@^D zg`$9BQWT}vi2R4taZyq(#`$8BS~0<9T_EyB!i|81PRk^XYXzA+Y)!c{8SR;AkX9E( z)tJeat*=darII#^lMh!>gd)M!Mg=MQb(3PJJheHmxyq2Lgf<94TngN z)KnfN#3@V(r#JP)a?Fgv;7KkupGEQN0MhydH>H(4dBHSJa2}YTHJfUoGayB`WQwLn ziVlJl{h#tuC)xkC-$ZK$8Gp5~7A&YCNrNRpm=l~1NigNNZWCyf(h`9aR*8oTfPb5e z9Fp>{DG7)cE2wIcoDwFe%#zIK7Ud{^Ny=7&(kVxNO2!n$Ho^Xqr0h!gQxX`0kkTxL zzL6H@i;-0+XRMK%?2QTKqlVN|QWz>uO|qLNsJpb(sI>tBo+5lHS^OGp$e+wQDBGoy zke4kbAxtI7e>Rt-UP;h4Oi^7#G%@2$E2*6X08;ejX#bDabdxd8EwMd^0fEzunzEZD;o_9jB&nPbPsvHG zeWcX?Ig3b9C{iR(O5&$Z&$(NIcqN1v?dqf`PsNmyi-C;gT2&vn%Ab;d(k=5x?U@g<#K=q+DE3kqf+e}w?w*xcUj|G+peXv9Xm z<*V=Oi&~c|$ecH3@Wkx#jsVDR9vK{9SEqu5((k|TTU?SpWUFsY2dnEamt*XC)uel1P0g6ojz^iB%Gm(#ETBsP1B`b_3bL>bq=%YosNzHv|R@iWeT*+jsJ$DK0$$Phem; zK)e?Wn0o!&PH{$T^fQ^BQjyq4@%X}LHgPJA+-U+kkPTF&h z11}jZtbXeBo!cbh#L~vVkdnCFun{|BuSZSx!bTj*eH2d}W=*k8i0(17O@U?`wh0Bo zJc&5MMsEsKl@XT|cH?dWkWsTu0B+T$Kt<=tvs^iR&^%DpG;Mktpi+rKppbR)&XcCi zo;=Y3jm-nzh^H85Vvq(AN&Rb73Ew`XWyGobw_WaMFu_{-zfL z<-H<>wa=PqH#7f>$j}rkOare8e{&HNcAn&-6E^Urz~JhlIF zP17d1=pt|@PMJQ9LW;d3h50A#GnpV_J4s>u`CPa-afx(hIXqnlek(df}q@ zX*;_bu-J6n%Yi|aMHJuJ?nJD8@Nxim@x2V*RBR6PfRqj092ktl1kIZvDoNXWGel*t z&4G$86L*_1bHc>glV;k|&4IpscABvB+*}j^jfCy^%>f@scG>2DpCsEHsM@87WIIn+ z)*_1Sz1!p|!XZ*bvq{r-R+>$C1+uZjD}l~~i-?3AyQt?zBiOm{3J|*R6^Pi`uLOE_ zh=%Pqh?(ncM;M6ClnFD{WVDDZ6J`;@Xc64A_MYsH=|-bPuuq*};Vlqv-7cSs*r|LGpmSzTvYTH8 zBhGy_(4#}#v){fN7}&1}z*(~=Kt-&24cT5nwvw2=_iA9kkRry;m^pc`3A2SV_U?>$ z4Sg(WJG>ScSgcO=nn1OTlM%M$wLsP2M3InBo;7QdIuCUDWv>MWKWnFqrb6Snl34h83E7@_v8l^U zK$IvV&XmbgG|^-cgwiWSAz37bP@_{OKt(AnV%yLzRP&&}1O^Q)0&?o4*}Gvxptg%9 zl12?RP=x!e*>>GuFwUjo zcK2TbL(4Oxl1(`4nh_k;U@}?x8yb2?z7c3BX|}0v1O|J}MO>IR%aO0S2>zWXOT3yR zcHtX=VZ)k>V4E~$%H$cdCQAUCWA@w|f%*>3ar@$pKy?QkmKpwLpc-;}-fJEDrH5bY z!+jOQ-VRJ_bF8&z2b>_voonrgZMSy&+kx6PXIqbj#$EbOU}PuwLdV#i*Mvvfz3&A2 z6d!i|X$Sl4!@#cpw;wjt@~5_8(PN_BY4mw$Cx~L)swnI~?scJ06s9Cyx?En=ZY)<$ zh1&_*J8YO+n|90hs1IHd=U^iU?bPz0$Ne83b_J4h_c~J0*!`BEz^V3ai~QRX^q$i% zsDeSbAj|F_HEcTSulQnV+3|Lr#0g7Dwqf7|;1ov{4B!>*!G{;;cdH6*kGKnHMw zOGgQ9men4WggpE5ack+wZHCVsaV)hhI2L82@AOr5NJVut%8teH$4VU=$etd-Rvaeb zcKTa%jUKE`tnd{b;krZQR0N)p>B^m6ibAfSO+wlxe(sWH8veoYvyjN zW^JD2B1(d<3AvTI5|Lo$gjd;1jp`B|$${){(5WA}+mZqlh~jqZJ~q zu4Gm+Nf7zfrIM+v6IAwEn@n&N&^o?$g6If9=KKJw*C7IV?6rL7mh@O68X3rtdEAN) zo8uq@-@8@b>cip}o%IPV3DMh-IhnwAweLhObouzXUZT|$Efgo{eiyVHloC{p+Uk;E zC(-(0W>t&{ZXpH*2pBmV;}RJMwHO!v6IzSXf)*DXv=v9g95B#&DaX67XOXz*&TRrr zcScD|2U>>ET91}1+`b-ws4dRe1ZGu_`Drf}%os?Igza34U@ zCJG{q0w~6TAVOY7aF82&>ucueV54Hh2;_`%L8qBKY<4Rf1VGLm9Z3Z+$fN^AIHrcI zkWMt76(t->B~m)U%k!X;-~j+0v2MMVD;rvhO5&I^<$FhM3yo>S50m|94n#!A@r!4g zv^1`DrzjUzV07mjjCdD36Ld$5`*J-Oi@I%7n~^%SUJGzK0if+nf;h%OTgSw*bT{v2 zUmy7OKprvP9pl3*&;bMd~oc3h_V;zA8|eE;YO((2mqXnrJW%lfI5c z$U{7{m~%ZmgSxr zc7&ygr=3DkbYARk;X<4a#c~l-xastp6X6(TBj&_Jv|w&mPY{RqnFh3S;+Q!qpCklY znu}8PM7gNuK+6=3k&Ylyv=<9g!Do`AVM@>;lpu;-M0POIgExt-vHy zB{fI+pf*C`cqtdS(Pl&@y;O*3FTZx4^dK5CkseXz#w#l$;kExl$S2qti%6~oPVKLf zYui23{MnMm79!ZofN|eRiY!BlXX!)q6O*g#5_Ytb_~~?=;KQ3 zyl9*R*S09~D}Q`DMGcjrPD@d}xf0~C#M=|msg;6psV|}K9!bhJBnMR>RMIn9MN59Q zA-P9QBZ|BG1$2y6-JG!Lq6%&0b`3Itd&n-LkqCC~B`k0p-bBBy1|g8tT|z=GMrep- z_VRJGY08l4Q5Y1F0Q8+5?j! z4VpPP0Z5$f1|S-R-Tql_BW%_l?kt&gu}<9W#38hRG*0aB|>QfPD%<}qJihU)`y8+6Wnd zbE4^nB!qxNiUm2?H$^i_lwgJ0z-|F>qX5)ATggEIO1nu=5;GF`QjNSIM*(c^ z>>(@Hak(615%%&3tyjU-LQY1g5*%n$G!gdujLic0wGTS4L}i0()yz8`Wqz zI+KedKmk&mbvp6`c}ILg93lTXQs_D(VHKkc#B|#Sna-I=0b;mS2r=v>?$QdrWja%a zfkZ4b2Z^ySIziROQQb#_qoOF(OdamwY(IXq2NimgEz4NcbuB@zlCvQWEu8a3G-qMw z7gXE<7h@i67mu^qW~u^=+sM+aiG@dK*%0oD%{?#uI~#G8xX?A_3W{P_>0zzoIRfM|wwX?lp)R`s z{mNO7O?b=KuPab&TWh~|Yjqn5a!25Yf&pkmq#<4KkEXIQJOE$cK!MH12%h{4@@ujI zYPC7)-dS;(sH*;)pcND$JDYX>y^I8R2jd5I&r~K&$8+<2I^dK%4peW%N&wHt^WY2` z0{>7UG39i*&G~q~We~uRjTjiL@e2|HfHwIDIPxbTg&1mNSMk~&lFyzlcWMYtqL};^ z_|4YBuE&48=MKrEE-DTZo`TCEoJPE+=$fV?4p34T2olf**;pd;ulaGF9qcukqo0&o zO<3E~67_KNrAvrw+DaLb6)(|r0>QFWwj>6}OLkrbxP*UKE+KHQ|K5iZ6Zrt`8jXYzWFTl0#!*=Z2-j18;aBGk_1+yxw@P5 zfu@Sq-q)NwxSVW?om7qUMS!Vs)yQo2yO~Tq-7s6>*5U(t%cL`Ti@g(P#Q{pZL#CgAh5LKf;B zQA!VdMuaq3j!b-O`!5+y^a6IslfHrO=s!&(;wTzR?UO5P&8fm%lsi?8 zMhPYWA?SMMI~pTkdI#|Q6?p}<=nF74!6$)pr(SsiNf&4qAI}!3k`^&0M}G$wY8L~X z)QL?_`vC;jOsVO z00^H(Xw;4QGy|famnT^Z?v=GU;PE8E&BeC`M-oJML{YS_+MMVX0c2%7jQm{hU_~rf zm20~VC;~A@M+dQ9ajH3U7`m)4D^`-aIG?cpDtqX;ONV46_tJG&W~CGmWexs%Ly@d( zxMcEyDX#PJAxBfzk9%x3`UbRcUI3ewfs#o=spTSqX5*bSXarM`lLiM)He0&{RmBb* z+;_y%cf&x4^ zt~-^62ZskAa-ELpPFV4fxts=18s3WOT#%!U1gPhqdo?IG$;R4UThxqxP;Q|h@W6`@_l2Up(7q20evu%>(7x(i~r8mv3JVxM5I zN-92O&KPvcTq9~{>rryfVAJ@Jt>TtG{(udSWF!`1ZXWE4m?>naGx2vz^ztXylLTC(Un?l5N>8f+G zId>0~kdE@V=qBSNXGuxQx9(6(YAu~os{GfbPFgqm0>nx{;Wx64+sjqV$FSp9C%6s<4(S^FdT&BCSN-WuP2LzA2>(V1B#M$ZT_&JN6k|ZXi+ah!$XTjG$V9QHgmNyRkMsP2APXJpgr_NuYvrY zuodA%rp1^K;_~Bi#*+EVB}X`RyOZp+NHf<}5>DE)aq&bV#F=@rok01N5M@5C`a%BC ze1rjssoem2i*lTFOU(3wxRqW#<$@ST$Ecfd;7J#h#OcP!?CAk$TIh-EytCYLIxtKZ zpNwHFF{A(Mct5ROJ>&yj6Uq3@xpOqZx41AP!1CsDTA1x_+1~^W`|L~cuND>=skLOB zn?l3l21w#=#pIjNiqqjMH>D;~x=O&Kv7m%};4BW=3Y>Ik**4B;nF}}p(+ZT1T`R~W z@PgQU9vx$Lui}S-d^LP>g_+=SY7?WSq5_}ntkYF5I-Q-=0*^Lk{NaTgtk*9L>X<7;%rdc-jY<8 z`JH`QOHC3n?b(qFK2G1EZW4%d+|zcrBz2{Z@ncUM`7b~y$+}NK*Bxu4T#VwZBm6N9 znslAG?Sq6ZK^nE$K_}fn=b5{MNme0&*3|)VDlOeV9i!plE>t2SEpCyRTEMN-NtbG9 zqmqrYKWmLn*FS5^f%fX@h7PUUC4`O^eK~|^qeP6;g*cV0yJbUkBPrtKmDcjyr8mu$ z6cuU??AYT|oCnZnwRZshr*HX&{l5d)TF3m}f))*3-(SGd^80HYz2)m$|5k?Nf0B6+ z`v^7q_5s)5#Z$YKdI&uY8JtKNvg<1IkNLGm6UR zqM9wrp;y^nvJ~6NArn$T-eQX!n9GPN+y3RMLS$xv8juz}F_WT@NxPr2FKPjY7qK`x zI3YdHQ6^WXtTw*Us?!R*_GJ|W6pwmWtLzUnAzP;{khrS({{4ga-0EAt3hXIG6S-73 z^mCnxuw{SSS_}De-G+1Bo~`^0u9Wp#eY*_P1!F}49Z1?v&}<)m;v3!^rFqackRieS zmZXWS)%F8>wK-UC13&Y1voZg|7XVjp^_^Sd8s9P|I8?RU(y_rgICQ$_*x)jo@quq> z3x}sDZIdVgiP9p$;ZU~3;fVulgw4s00}#|Yz}rogIU>4w4-?$=i5!o$O-tLc-EK(Q zKT(=1`eKy4DEfL6j)x9IihM9Ml=N{YeRM}NN*va-OaI~PKQl@@KT3geUrylo=!{Kz z=G_)T8ZS{!kfL(#$gi(yj3ZozewnEZ7E?a(jh-ZoGwE6@<7AtgWt{^mN@rY@#%7d$ zpf-CUH7%g^09%_?4euxGTN@kPZdRn>fd6@)`G$-0^GIQBE_0V1XmcF5Iyj3x!(3Vf z89;TLL3@G3h4j!(db!->=oxo$H zM>svQK3lUC1UbZpWAcX5GnTC;=0s`yxL|*Mm;^^IQ30(+SwDKxK2&#s7_CjsBo&tp z*z_=bLO@u7+%ft#2ua)jn5GzxQW-rXq&wjIHoazJZ6L3FgfapXePKd@zNq0;koKvdmTYa2owQ+w^A6_)$k(n?ifmI9^%lVdd4U2L z&=K2#&6^lpHdlh^s)>mRQ9TB)ji3d|vD^Dvqun_>RQvf;}MHaGp|{`0LI!8O^yIs@chUc-LS>hX@YmeBhff zFh&F-?1b9BpUIDX)=Um`1ow$2&vfFw0mnS?GrA*g@{=a(*#-)1NM_>nu-ouP6PCuRA{037nPE=YE&!+B0>nLyFSo-3Gmu9I_er9Kf;$EPBUajL9O z4aGPa)N)je1GMf3ZI)#yuY2L93!PSJvnoR7xYb9_yfRA|pq6%DjKINQLL-b(wfykz zyH%VU!pCMCe~<4-WWTV4C~B~b{lFa3g+x51pgr9;*0sjqTC z^{B-?Wu|V@cTBWtMa~`BPaefbUk{T*(W80c33lpxk18>qXu+fA=5pm~jwux^N0GjL zqN%zDF@0>&eG-k@L-Yl4tvdRBBTrQDh7uFjRF&79+9vhzj-LFDx6O{TMZeZllx{yGd;N#v;&F3UdKFp2}dUnS#xxqwa~?N+TbBK_&7dCUO!Fxw4|P zFy-fIrYlp|DPe07>T#j0oMsJe>UHQvsu4D7GhLP{|DT3sT~C=}Ur%v#MMh;$k^V{P5ZY?G(AHVa z6g@4hxQ1fVUfKWbNuPbx4%|p5>|Ty@ zvbRHx3{97+n>q1_L{eWN;+U_hb4uDF7U5g%1lcc|apmg9gJSv1k=rF`w&ot)x9GA{ z15`7rB1vo5rD8{NjCH3v!d>eOj#Ik&d$!PV{yqL<`~3F`0F>wV3IH!^_}>ITN`}&h zcG3OfJ=ovaZ>SYgc5{W_*P=;_dN@@e60;Hi?l*Ho9IBSth?4o3Z~jyXW$ZR0vP)pp zwDpGvYi#r3!M^T0AgtHfmIPX>rQarymO?@F3(ev2D>s0~8pH`~VxEa;^P4&BfdpB5 z+EC2w?fq+WP1^*ah0Ofr3`u)+@SMao!KrHz$L z&irSKWq%n@>zq~cHy1B=i2|l(pyNER?Z1poWukekd*X>TRi2v?f=<-`geDVD(V~$n zLs#|&69obTMze(eNTh6D7ekA;?Z0Xx!BMN%lR@?$yDnGv^7ogwQEeeXlN97``>XxR zlyAv6K_E~np*aWxDrA95G5`-gbG+eXm;W5dv;UdH9!w?38vgLWag`&G##h#fYBayW zFGmmO6hJgt&GC<(oXox_z{Dx1RzRuS*-NwkuwT&%QaQ$DBisCjQ3+DG52{V9p3#yT zBY$Zzx^!-$+F^*>p3K;6$?T3Q+^mQkJ9R`3KFl0}IP06#R5@e@R3@PIbsDcxE)=;=xY<*Uf^TAGGX>etktwJhU~CD;%ON;=AdVb3 za9k^cI$|hNNX4I0GN9*cM1uRU0$q+Sqh`>-3>9>fHsUF(boA4hz-y3ZIm^VOuC=SN{;m?-4xnmp}DEd6CR=eFtfMwyctUhhp48mX=50!*AZ)jIm zgn-MPu3cGCow?L1HdU;?Tdc3l#My1+y>?#^=D^!b-Jop(S~YNfKhB=CG_DOoI<^n{ znGjNBTAVkKVw>V5MPFalrl`1-r)Ib8LT*zHNv53u?n5vlgH8%+%0`u}%~KKfU-=Yu zX}q>HXeS#)hWw*dqK~HFEGn>1xv9VNlcTK^B}pFxNl~2jwT?KK*5!~-QIvEkKCsm{ z;I%~{&KV9Wmm54r<${mWlX)aJ8)#!%KRw9RGo&2OsP_cpqP%hbvb;m=`Q-p`y`0a>&_6n9v^o zi3H_N|AHFNi~~aY7c6Yq{ZrLyc>{IHsfse9oT!Iq)TMvX3eTxPxl~3pWoOI@4zm?= zf|czAokLlhiyjI7lVSQtOPqLW@(IYbuO)8X4-Vq;2~q|SX8)-lbN^&G{{fl)QI^_S zV?4^Z={@L=I%q@aAMxxt`bWHaKVYF4YC{^*vcHhR!R{ak8j)^A z;%po=%1JMc8U9mUX8-fHPv&d~0F^PD52U^2ICBBPQ!Z51_5>H2&djsXIMuWlwwn(R z_Obg850=h%rY&P-*Sdf;i0{P#>k?C40PHc{WdP7K0jLHy1OkdS0=sOuzshbL?(d2r zmofQ(C7q3c{Or4VBbeQnTAcsi)wJ#Z?^AFbe`}AF?%1A`jskgLTtEhKw4h64{Rn^m z{@FQAp#f}XRQs!R`;NQBoJz|%zGOt?0}aFq*wMcEOqC$8D{=&CcOD8Qyf>PJfPa0E zov!Fe>vjRb)`AK(Wp?k2y*fKMxP|r-|7ojc{|iiW6yP|XnJ-iHIl_K*z_DC6Nx6W4 zxkZ}XlLj3sDK8$aP{@E3h~skH7kvJ~nQ1#>@=pW~r!R8Hkh=22jAb@yldm$3foX>l z`}oM<^Sp1h&fhov%2B~yC7r;FsC8KwtWQT41}`bGXBP!u?Mmp~pFOxZILfvz4$iYK zqx{{|bC(2PZLqb+_`P)9p8hvWY|_QSK{jocztKJ2nR~kMqF|%79#&dz_iY>7Ez9kmFG?+;`<%-~d68rUm{#my6)?g=Fzn_1Y zZ9T)^#XjHHf2!Si5bDS#Tw%km2#&V(=8xF5^U!qo>fl9o?(fjx)&u-WJL@W>;;Gs$ z*}bl_UAiV%Vf!D9%v;t3|Hq!Z8mRzmpe-NO(Ak352A{NXYqIs-uqGH?6$t&x_BhNx z*476?sr1L!2G8y2N~}K2|FJDvgeFx1Uh8b-Hh+`taD@LsYq`mxJkXSH!(#uabnD^% zol0znn~?(AhivO{{!TXj5B>@}{Yd{f+qBg0v({^nu=KXzT>JYi$S1s}FY`M%?pl_C z!=Ab=IF{}9weVv98XKDqMlJl1f0Tv)9PF{`_Fz(QpKv>J5pMhP6hCgSXV#bQ0MEt` z_+yz>pWoOueU8t6Vu@XGXK*K5c}%dURoxZzTgy3Dm!`+x8{Al86?Y^1^19GOJK+p8 z4!9#W?T3!V5gXWw)XFpK`&s308~WR6$NGP4TYdyE#=lnCExqu8;DsIS*FOdy|9Y~2 zgf0C!@U5O2C{6$H;oy`KTk?}^O64W~Qrq>>;6JSS0SesVe!s1FEO?C#{VB3cKMjS$ z8-nF_%j3b9ZQUc3t5j>J^!2Cv2bS0qKl9JFfy@0PZRu%f;DhIbJ#6(^p<^uZI3()y zy4Et==c(Xnw)||=)iSQNiyitSh|!#LP;AGC?=H8_>yf(t=SbbKKKNrh>Rdc+i9cFy ztItHf8=gjUOMmJ=!|q*)5}_}i>}u10hJ^i}LBjB}{Ab#c=OdvtxvtFCJs&*PcK9V; z*KT~Ivkl(}!z_okg|7*Yu<@kA7w7n&wSm7vM_PG~e@A=^m16z^i15yAe7!-hhi?pi zY%6kEwzi^J_=8|+ddsF@*An~uS0Hoi$q<{^7bo1pXA6OM}2L^ zgTTCUPk*oU(hK~jl-S%Y>|~h=dfKLo{4v|&h4y53m}qyr261e?2{PUF_24eH`e6SL z?cs|-)Pvs$K5e`HB^a@_`}(`A8X2mz9&dojPhJSY3%?1VR=DLfoLpj8Au_%GZ^0W%?9r?IkyR)8Yi!3oM)gYHyV_q{Vk@pj&j16SvIExO zY4IC=eA8kLT3&huUVDBB0LSkhs<-g}0FZq@L<8IELcQ#%57|!*fK*39J#5=G0A$#8 z05eaav#w*;FU+#-I&{YHN5O}jn&|p>$CPF};qOvh7ua7I_4FsfUqTO3_y36v9s~s`zo+c30i(TJ*xz47#%;F%c!1Ju3vZPsy1?$n z19>ol(pPT7KM!7OU;GPvS^Xih{qZy4gT|uv*yq8$ZR>shPH485eVRr^Aox(%Qx`Gr zpSQcpB}zT5=a<2}Buui?z66b+(g)eQYyDT*lV76F>K8!tH*ZG2`^{Y_TYYM<@q!g0 z_h3hrgvP9@2n@6zcL-f$J?{b5;AVw2bqHm!33NnWVw2wCUVjy|P-*B|JH6FEoljlt z=(5lm*8c%i47#0f1Iv&*L$_Ww=8pxy-di4Wz^>{NnqgAp6CGAQq)t*?#blU)k)XKY)A%-Sbqt3yF>qcXSKwV;9}wf7!Y}f=0!hjy*#A z*(*Imr`qI4opku@zKYNQYk17P)&j9WS6lrUbj4@Sg?ie)6`>bx`AjhS_R3IyyXFbx z6HnJwh9)?T|Fb74S>*0*y+RykF0kgO0Pu`mP~fEAzz~8GvZvp|U~}Bl0EH5~>WrqY zHtlVH5Bqta(80ERQeBzdbEMbJW<28$P=7s8cFIuTHGXhtnyoMSV|Uy9fd4={a1*)qtKe{3Hw?f&vB^K4 z+GQw*>)@)LL8gH(`ggU~-k~4bT|+}-p;vm@vSDDn+7Awg=!pK04i9OVgk51dH}!mH&_)~>y0Y6tsjM!*`l{HJv;q*eW+sz znLpaDXe7-p{&P2b`f2}9tYuVadhT@uDfJ_}`yGrn9NFz+FZ8Z?fAwcX=t+MlZ!~Nu zv4!tq{9gHJC~Qmr4*qX`G*q!F5*TUoUTW-Ncl-@eOJ7Ffn{g1lOArmsIHsT zwZ+dPb<6Ak8oCxE)%t0$+}2+Kov^yw0E#=Vf~p%n2BY4oANa4a>MyWYc=T4vLT=!>YHOQ;XJ>mM5`qcF zK^0Z?wo}K2HrOTqR(jk-P_J@Y0N+aAHT0TQ?2KX>SI|lO*su(-){#7X4~=+4P`cYpU|oH$(|Ta z_6(YZCsI)P2k@>U{?zOk=G7puWU6W0nG9RfcYwxk*v?z^z3tNFfy=Dx zVFc=}`bztJ2~u$Zn$K3B6NuW+r1Wil+bd!_GmPZ*RFQc zF9N67jmL!cvgPLnerye6Axvve3!Q1V9g7-Qp7u~TyX5rHYP)A#29Q;!Jp`7Y2h{I4 zo*5z&N(;PZi*^A#t5@IG%|5R~LgI7?Y~HvX-2z$v zpaDu)lcd$Z28mAE10@i5lTAGX?XJD_zKruhqmhs zfV(slSZGVnMTx~f0Y}3Xm^t@6KePviws3do^T6JA+?gm5SPAl-ux9`!(#p^?_QRi{ z_oD1Fn|FR_f7@{u+Nk_x=*Kp0HZam?vA!cFEEp|@uUZ%=x6dzY>TT=1z!lc-9JDj9 zcU`GfmNt~zdgsKPG!UFZk)&<=rsRbCNVVcvy+cIzR5pv}8HG%#Ip zWoTrH-7^m|wsJ#jxy`sbRFOuJy-TchekL-F$OR=fw;MtyjUB zbIBDz5kSC0H4~EQI})|D?j87}{rX6ViJp!;3S+^_Vb4_9j=zT%J@N-AyLMm5-Z9sO zMy=Wq+SyvJM`Pm+Q(^l#vEs16L3Z-pp?&R%+d}Yb+`FMN-Tj`>tP<;a3Nq%)4ZS_IX4R_D zAX|E3;3w8_I^dr7ezd>s-wK6+W7E@D-5*+L&C40TGyuWAA9Y@FCr}QrL#gUIXqf5m zMa%6M51_#AKg{N9Iy!KG9e5XrRQ(KqV!l-mqVL^M5M|Y?ALwe2Jcy$E|0G*<+nq4d z510ev|I}rHsW$gah(~MVV-z0Q+Ipi$iT6- zeg(cH7dSUC&6bX=hiCFAXwCy4WERT9D=V@fY<`GT`x8XwFAu}SVg>2y%L2_n>3rs4 zg_Xw!8f?q?pi%8}p||YP#{l*65T?I3J^%aCOzsyRM?En1d)dS%VCaUg4otNEh8k4& zkoB;&*Z<1j-zs+k1twhx=~BY(zX^;^<7rxn&D$6X*bRR!$k^q1IMtMJ&I_o2^;3b1 zY{P044xa?!UB7$a8r$dcg4Z>d2llnCzYX+FJb0Y&jfC?>s~~T3*HEgvjH#RNxl4)tJxvi&Jp_C@_67to3aK8 z*}gQ&Rz4RD+W4d446gp`s2+C7efVPM9c$3FUY@e9+y=iLdfD#2h8p<&yJ4if13lAv zEkth1M^N&&ze-8p9D3N^z8+a1HaFQ@Hz0NO>!G!_<+Thx`J(ULlo^WiQPckdI*oq~ z{M`Qyn#?)RP59=(>9)L6(?Qn#_ko8TAKrNjteVl0BFgqZxP=_gsD%@4|62jJQqTSe z=KGueikdOm%lKq3+^<)K{q&!qbM57KkudLPaE+anhKyhKap(a1`Ry1G!k=KCyy6bP z_$g-2AAb;BFFU!#x01<+Fpv$u|6>Y@O|u`1wbw?loI{FN%u)o9^YfOOM+6lBS*Q zhWh|>{r4fnVo4MO~TS>--~A?Ek{yV;%h2jKra9MW}m$EH*5cMoKF`13!a z_Vst6k8R|WPn}p}!RG>}*u#$^5nc5>yZ$lv)ZdQj(R7CO?a(BiHQDCp z@x9L@dN$pX_Ej{E?NpunhG*B2$1eH7g2mOd=N5e0GkrjxruvR{W&ft%wPZdEn9tef zTY>q=>^A|okI8=}FrSwDHefy~|3$!j96l>KGd;DcX+`Jsmv1(0EJ@#A)AV?UE{o?c zT2Q@g!J;GW)pwg}(ue=G$?K5b*3k5${&v>brUABfS-7vwD+|}z*&V{e(|_Nwsc%OM zl!m+6kHV?JvW_<6%BD{en*+yYtYdtN2u%Ua_F*_!7G% z-89ZtKG0Nd#|;hjO%FJt>9`Ube{fTmPRE|Kbb*~`;aT>>g-vj{o>$sw)luQfbk)M9 z=29XhV*)W~gXn%=HXpY&K$Yf1X9Cz=LzO7F0~ z>G^Ky(_U(NXG6sy$@%kfZtsxTA>M*9UAx-2vpWv$-Zm14U+?U1xBemgc473M4c-82 zy)8VXF#6`dUfpPw>2Tk|=nuzSU1M)Q8m=mgKDz#zYV$u9?qlJ>zKRQ$N6W1BPvNeG znJ(*w{gOSq#mg-G$5>ICps0R4JQV{+qMKbhFw$U~o4qdf+h;+Fr*03ADk-ciTcEpr z`RDN1!ZZPS#BNh(S z5eaFH>7EaSE6NJX2nMjQx1BH}3J>6YgNq6Zf!{qE?pIju-!SvU!rb@Y9v^4ZQ(oBx z??;R3Cje=1@9ZK(v&8vNnRIhI5VWp{b+>KLhyCecPlZqKSePSAi6UY4o?hd#-hcX* z_EZyy;aGxUFCv1vF?ZB7AKPb$O=$N%` z4)?Hro4+b;RQpAGrjxIPAKt#1n7vZwRoUt;Ju2}o&QGok?qT+FMKmxwtcJ7^yat1FBb7JOT2R1 z^wF@Q{@3gFiw4+@ABQXLycp2lf=!{e@?VW(ZOgmiQwy8jvm`pBFy^xRym}k|EIj9x zhhUl%dd@3izOb0|UNPbjtnjKAB4z12-wO}f9@q>^uO8#=o?f&yJhZ&9)hx*Sw;$cx zcKjq9Yd@_|`r1#z1Gguem_EX~d>Rf~b=81UTl$N;dfW6*`JLRm?ya)5o4uj-i|G$` zhS}qlr`P{0JfTCn-ED!irKN?CFh?3W4sH)^l{~A9_rUgL zD3v49*LU?U>C}E=XG6ihc2$K}G|Ut*X=wWCO7Hmog;jtZ%Zp-4qT|y;8@*$@6~<@z zS!;ifdXu+HQx`3FLrEwd?`kt5qlTsLi+NLvfIfQcoqf}RW-rtp71*ECVE!-KO9UCv zIgi>Hww1nTt8GSk1gq~mc&T>C>^gGwuZH)x58jDkcFh9s&tBKrDnERnht2)ROK@Io z*x(9QcEd7JY-rtHS%94hXrRh`Wd0l%H5-OWm zYvWHGhOTqP-I!zF{bGex?&5W~<8OX$n5}&jZltBlP=4rQ@2DasWXqSPuRqBfStNl< zyte6uUe;so`l0FJr+JSS4f$Caty*=+sP;^SY`SE4uR_p~7By&?0k-g7uy@u^ynk$$ zL464w^N&pU9gaNh8ZMf&T*KSajZhO@n5Q}z#$$>|B_c#$H3>2=>d&9-&XhKlqf zKlh$1N<hru^3bXH7eeX{8@Qsmv zHg9yY+}5AxeO8#^=$}M)w!y#j{#F=0qCPsYDCP@qoK?T*buWy*`QBL2nzniswsqw_ zz3ie@p5Ll(iNHO0XQaxOUlAE(;}e*a&-iVmwy@;(O@Jv_lX}T(f>^BW%DT=iECOr- zn5jqmr%y0%X^}DP1mK!T`2~%*>^n0}NZFQWBOzNmC{bw}ukmUM>-*2-0@hI6=7pn0 zQqZor_-w_qp1-iwl9ADgwz8(UJT!3F7GLiL3UecRlD&I<@t9eluiG0`m0{^~-pIo0 zZay>7V1G*_`dQ1s$Y2XUcTGRr(lOf4);}46J-YUy9`@7+u_|m>3d7*2y|&!0c{eu5 zetu&y7I`V|c9VBwku+}4+Y#SLe5UW7>}sty7x(+^tILYYOy-7y|Hvz~Q*QCb7b5%B z<@&;rR4mHk>rH!XEVUbM^*$`DDa)K8cIPWzk*!$3iV>^sj8xd2kG|Nw>VUbs9k=M< z;|||x$%zH?WUwG&mu&H-+sik3y>00uk73VV+MCn4pvg3>+PjVH@ALYe4%& zu%#zj)Y58B$L*g5l!<>TL|&NBP$D=@*&ZckfA?Y%cW>_%%Z?dzu}St0rM znlyYb?W@a*Pmw?5t24HzKVb^s9Q*HHs&KBS<(s`13)=-DHNuHaMTUxqoSh_oLnWGq z60IzR``-P9^=!||uMwd%47&Nn z^=@YoW`!nUD_b8fvzz?M-nKQEEOLzjo?UI@|9C~-k*tC#@=k6);(Ue8Em`{D@7q~) ze~8Q~L_Evks#RXJJl*;auet~^8I>z7RIgi|Qdn=}SNLdKbli1)T-g%DWg@5P?B4b5&|e7HDEPup2 zY<#zv!s|D^mAY6x*^l|(PMu2Z4qj((4Lx!7ct*tlTl~-rN*SeZ2IYQw4Mf+{t2LO@ zQSSvUK0Ow~rUdBMl2#G-jxaV@{|2P>3Gsug7fxu|Jgt5?DRvhu7-I1Z84h0jp6xPh zcQWx7B(~R+vGBl~$Wa}j*GN5CAk;AHAA+kr^tGXEglb;;Gy2BjsPHN)Vv+04bf8su zM-raZ6M2*Sr%ZlQgpCE0A+HW?5*LIWRgh1tcf2)ZjMRIvtSEgJp()ZK4ay(V6JIaR zXN{ZJ8|yFtJ~2w+b()LRIuGKK5F znMV4BB0MB>S9bAv{S#U!(CY(XcD#NS1ohMFpzhOAfl^uwT$z-D(G-(X@W_YC5AGM% zW;v<);lyi(1Ue+P#R-mL-57dU^e#o-ESS@Za&}dfj0f~PRjSxp>&f~;s4^J#x6wbZ zsMiB`{7e`l;WpISeMj<(fjC`vs99NCra^u%z%CVIfh8v4;vIPu^V4J zL#2~bMCOEh&NHg!liQ_@^H0A&Gw?xO<^CxSDz_1r8+Xi4l7*MF3Bx z9-A&g7z$&aLlv&7RJaPhw}J>}V+QMkh^_m7k?*-m{ol_@fV0x$kn@$kwdB5vhQd+$ z)gsIM3*O!&LK4`zBMkn*;R}O5I^qr17W$QdoctU{{h-a0cQ!EqUKmd&SgATgzNRab zf5E#;LS-*XW(8H6I}&60N{rPUetTVSAq1;joPEFZ7>1k8!zp&tg3s}k+!Goloh%?D zf(72xlLE+}J##y1argC2{UouOzqNLgobmDS@J#)WA`qEC;ZSf$9|cQi>B$C)%gmX^megz%){Lobk5&5FJslBxp36xD2TJ0qG8`WeOJA`f=f+S~ zvGZd6XUd9Z=$)Dt2GW*X?p?wPzM4+DF%{1_OYtM`Mk@96u9mH#WF(HvSwANOM| zmnt+{wP}faa4lix)^@@8(!IeKF21FIQAAt`N$zkIY}~Q8C1ee!a&@P#AL$#wf=;*@ znRgI(3Q9*GBWts2`yFuq&4Yu%2mV+^_qb%CBU*`Xp7MZ{xKA*W?Xx`ndtyIvE@%em zlSq=hJ{s7!n%d{6E!yF+0zKI@mI3S7*7x*5l#}k_14lyZ$Rrf#iG3RLX77KzE&D#xfc z>|dwPQqNP$YBB^D>92^Tm6C8z{gidOAQ&<~#K1?~pnc_D;AFu|4Y;=-lLC&mfI+I%hGx`y+br$RX|6Z?bInLllFh9j__oe6a=v7 z6KcrcZFGs8SnL;U>U)jg`?iJiMC*5kv>SpfAhiIouN_`tvJKo5YB zy_;j9`}K)L*s6GI!HzB7kbOYkTMgOk z2lUZm=eZ7+-SRPzGQEK}yjP;%E0((35c5edBdw_h+D|;@4+SSN96aMcxMkM%ARPd% z4bzWULSgwq{XVe?S=hK`JyOh*#lB)6HDgp#5Cnf!o+JfM_JHk<)C!9v(}_{*g)<#~ zklhKl3v>1zt0My9QMRS8nRF1Buw8?P0q?z6uZ+Y*lBsR4dmc8TKloT-{7o1HU&O$k z55J^jl0r5&e5FrRdSxrjnS#&IoEg9VSOQF4x7`=6<|cVT;R!q<|5yG5#1qdpoYZHM zWa%UU(x5hsUA)DQrJT|~N$iY!j<%spUoHX_MlT%3m+QY33rH~8^0WF;B*0W4MhqKw zUjG=uMkw)&2vx{Sfnkq?*T#Uw*d)-sdn68uFBJzuuT^M(T%FUf1(ffM31Rk2dNVQi z)I%}>Lo&;98>DL3vYYxobSO6Jn?PEEAr5qNlcFGVZR038R*Kl#N>fb9P)g%WxrE1* zdZ2skc%n!E<(@xo(HbDCmVq#xJU}E_Vl|8o);hSj?e>LLdV1+#|3J>pmxqz`Y3;n}rtdo;yl zAj`m_tm6;D6uhz%VurXdbl~Qe26)2KqJu3)!weB1?`X*!V<6<14DX0}oHldb!Mw?4 z!;ZV;HGtR|CX5MhYVd-ot7-;8<_+o(!68bQv;c;9wlX{?!tyYxO3_s+?@IF9${#Qg z9{Q&=#&%o6{+_3stGIP!M)w6+JnacI?zcw6x=m6hYebm+sm+ujHrYF!_E&@NtcMiyHp!4pZC(TrhN^8gr+k76~*Q}Y8b1InVF4z z%uq+!NCU_obxfNZcZ@jE(UN@_Mw{<=?4wzmCk)gHh9x>d+=t7^7BWvR{%{!)N;x?k z+CD|8C+GRYSB;~CAY;R_Bq+|>qQmNyB5?5EMtP8n?2s8WezQZLg$JvZvEP1#eT=8%!1 z$yv$}gHt&~RWX&_MHJ-l=Md%`YS>IVJYj^PgIFB(RcDxd)Da5<3zzw^mNMl^1 zwf%TmBgp#`SCDAfJfr}T4p?BadU9jPT=SV0>TFy_TyHYq`q19w)iFiopUZUomMk_WJO1GP}to2w!ArW&GVo1d^Cm5QOW-5~XSn&kIWJ(@6 z6EHIf;-5D>#`aG#&@eTQ34+G>do0GV*f0-(V%g`D4Q)s!;#wchEx>h!@^r9rC83;A z?u%7W)Y^i#OukHQi0Pl>fsi!gR^suJr;ubq%?l?o|_Og^f>N!lFrfx<1vTEL%gqO<u=V>`$=oH@?opqGPG6-S#wy>YL_yi z_bRt|vG(%}DyN;f1p30Mg$C}`@ngCi!%{*yS(8+>}H;g&dJ60bpu z9gh&rxEvb_39o6q@m9rMwc+$KdJ-5RaNO355ai@LD6_#U3_S=x%O(8a`&EW{irUFg zwi<1Y&=2uG>*6)L10ZW%c_^yYl<3^m29sDEscD4gR~yJFYixl-A^XR?b6K@bS~liA z!z?91Dq6mF`82UXc{4Y+qB@#D~=Ng`h-vVu*NO0!1V@Lvqvef!H)BUL4E(SmA!D zBGU&O4fO?_LGC6wNsVM`qbOJ(W^baTz=G%m+C(K%#>W>gY*Xb^Tu8=4aa-Kq`);#= ztQ}&<^Dx#Z+xkx>US-k+ZQ5As`OeDnhK92W4<>2kRS@RnQ zK=^iQJbSQwR<}QHfO!goNOmeFiU^^dq_%5t$9zghj{B;Zax-pdbpwoTAZ*L`xeDWt zHx(P;$uAAQ4$1_2ir^bsuOQ1?!qKP_NQATRRY_2UQXiihGOHX)3$a}DJ{o^ z1&O6`O%o5NcNw0BbpHaabT%gmy6(m)vG~eo8i?O*NQ1oJ5Bb6ve?u^o7Hr2mP;=LN zLGov)&oZx{^unhRurMBAd<7cpk*4nLcuGLm$L0-B?7>q%H@BmoJLCX87Rlr5Uprt} zEg~cLC<3xd=m;QzI>G@(GWNDFv@JEnt3X1!HB`xyNgW2wOR-Z~4;=S}HU|w|L8;gg2L*{+884W|vwiS|#`8auKnXAIN}h~Uj|wagGDc2-h% ztV_A!CIKTC4+c%~r=g&mzSAG({eo8B#;*-6wF4v!o@)%#&l)0pvW852Zc>vreo%O9 zYdDMl#xUFitN?cCTZKCb8%l!c?~adK@^gkxRb*vvoij`oJHZgoy}lyta3DLfCf8_DDEh^KS8N_G@@~*ex|6P5 zLIt^!hK?UM>A7CxhYfF@Cf!!oJdKkMbl=qu^BOU7;v|?*wi$0UoE)ryp6@qY4hfkW zFDMBJ#{;Z40&sJFh@X#l5-*rod?YS+Qm_vs{9*9BQ#bVw1Gxx9_FLD!Q{e0$hE`$+ z_-2!IK^^V{2Wapf>{NfT0Po@H8wPp>6A}Zj$tXv^SJo|D0{h=G#E``l4ivuLQNyTW z{POW@Q`4BJYzwfhFxXbpxKqqq{jSLjJ8Kzli^<6AkAtpmh)?d*-ozD&gUnC)2SB#B zag9o~^8A`UkZp;<)sm^m3vxBa1wtu?z(suBf!C64>Eo#^a*g| zAX(Duv2b-HE~@qf8(R?&=u@kgJJlElWgYM~p3K_DPecfq-yHH^FowXGP^zjh&j?#W zjg7@BXD8u4LVTDpPLZ4n>AOv2=T~YVw*$K2*9BOJgku(7Bj3o>05%?@Z7ao`M<`zk zH|B}Wq7Mccb7PhtD~~W9CiKRwlCF1lh!zY&e{Ot~kw^@u@U1ncbTGQNF;IleN9Agi zaXTR??n1SPl5WN@78Gk-Lt4blG|2CP{hdF<7zzPhkH$dW%m!YNdCcU;GUAQxy~S1} z`mjAo#ykQ@N(W4jgqvQt=aBb)6h11FfFWEdIbIm_^kuNmhDOF&1T~qWsgTnXhqUa4 z4|GuSUREHCd(spO8O<8RvW%w2Q5q2inawPCpZCeo+-uu>p~npj?wyutq=s1qL&m}t zEX6)cHO`_Mrh=bpv!(5fbcHW-P7vh1WF$5W=5hAXLYtS3J46H}S|AS*cNnHtvNmB+ z`F_jVkg={j0`h{TJL!v)!lef`{2}4J?MTp$Mi5&;5pM?LI~nULlGWyMK0Y1dPW!pO2jOc%+j>;nlD;;tYU7x-hTh{bux`vV#sM(;kWt(p zV_4uAslz!LnarQH8)@7}Y@!`@Qz|Sdkmkvhc$ImX=U-Z9dK1>ZxED?to3 zL9U37H0d+EL3OY6WP`Q&cW+6%USdCUhd$lT!#qq`mRgE9M!@oeofBMp?7_S@LS<;E~2<=Vj} zR){yj=1x5f*k~k++vyvr0W66Tdu@|ZPY^50GWUY?ttab1`qI<*Owkr& zkph#4A!Vy^yCS&*tgvB7QIBoLenK8Y0zXQcsZ^bSsuR_JM~x23t!53(KWI!9YD1M~ z4%}g!CFHTyJB)Ek$dYlRh0~u{@VdXscfo4!q~^HHg4I@4+~y9)z&^Asm4>%c192_m z!48Q2)VPk=pnTru2p9LjI}%&$F%n;(#Hj4;J;vjtqTCTKOBn)%04Kd(?8*JcXNdJ& zMb$co=-L$Xx&tPsS5Cct5FBYHE;U(f(4;+VTqd@P^L8dAXl%(U3a?UaF(f2)+F)jd zY5Jw{4G|_6s?xhep4WKK+zFO`YEmwinnU|zM&gsIL<8KfhWo&}V@49!uUtsUUcW>U zG3CI^aW)Oag6I%!2FtdYqwXB$-CWeq7yf(zuiu?=!q`kK$`@x>PZ-IX5NVDNXq+^z z7E8;d35V!Y#uMs!cY@X73#QdBNpTYz$vq1J<(|5XbtwGjw2`_iD;A>Rl|)28KpT8$ z5m!-dAmdqlaA|qNojPd#vl$l-JIn#_>`rqA^txilmjquorHH6<0Vp4jj^@GT#@b>Y zCn?4{^B729cCFm_o>nY@!~ZDz^_;P>QX%m14};M^7@rpF$V}h|1A|S(Lm}}u_s|Ty zVB9EH!=Os_3&1@ln$m~NDp_Tl%$y&!>cpQS}5;w)ED+$H2!?AnoXfykf}2a z9=jdy_k9_!pn2K47hjJG+@{ODjaI{^Ak!!j#NBX~t&K>@nz<9V6Brbc)0&GB<$ z@O6O67X}R89mu-=Xv`&q6Dowlwi|o>*}$KTg?BB+rvGB3_axs9W6Y~qtv~!bT`+la zeX2*-$bH`;b{lPjHZXVs9&l;*hw7?4p{6OEt^C9I2{9gc#VfassP!k{O_%X8ra@rS zd=?I`q??ROTyegz=(aIj*%-q*ily8=kYI?!d_vc%_IaRnMxogkUu=){fi_;I31YKV zL`0XzvtnKq7~T!eY$dmF9rdbpudl#o_yBw>Q`@`NKG4cE5Z+jR60d3PU93=Y|(7p|T1V7VI5xQJTO@t9J ze~4qIP=#S~D49Yr>1nvytf?>VcI^$y9hT}Pi6yb+@79zjUX_)Iikn`Yjk$`y`T&|j zc{)0k$^8l55MojoZjy%yBSZ)hE5WgVP?L$MOs>bUPE$yE;xI0+y}qmsw=VB%1uI+o z1w!_bqqy2`vNw_|q6g}lMhIk-oWQ)rzt%=6*`Z!48H!7e<2k?g&E8P9^q>KH?ke|z z1+gaLmXx73gO#~vAGop(e;jcpqRiw{e{CC?vnv~rU{VO5gr}^nsT-$q0z+e@K5R@g zg~G*WQvEm7H_`A;B>p4#CZ{P;?4QgO6)vSel1x+qRgftJyc?Q!iIq_}J3`n091Vrr zMhuNshtAN`yMXX3?|*r7(<>r8#IYx&{J0Yjv!&ogpXm>r_Jz&Sy8_@;3c4lZnxi`pd?iPdGOkHCE2lXzL4o_3Zi6I7-_kfTT6s&4geTu>eVDgb&j^aO8z zr%(gir+OXR4*G5gw}xviOl$vsy~FBNs@IFx#me$sq zH#C09oOg&E_a1Nsmr8eOM04$y@axCNMF-L>I;!3&azB&uTGnT@^-oR zZVZ$C^gt|>_c)EaJT1P&fRh(ZddQh=_GcyiO*R$X$qoCK-7I|nFAU;y&9xzC5!&sq zmf<9ozQ~*gaRbmc-rwDVCx)|3$Gpu-WAPw66GK9Cv?J*Sx-Ap=^m#KzF5HG4I%YSUINyE@IZg^aI6Pln!z z3^H)IhQ0SWz721h=%EJL`J;jC(Zw3rHN)g-0n9RHn)WMO?Fw0MnaD@7^-i z6Z?rB$b>PwFc@t9Oj9nzEk-9u#*BkLuws@e64K`(^Jnfihr;Q?EFU&#j%gp+u$mfpz$Oxk2gQ@EX1=i$Y&Thj78xef z18i08sP<_hUzLR%Wqd@7%om1DOD{_?qmvw#|up443MEdlHCVJrIF2jz8 zhYXPRk!gj3M9rbiz^%Ag-C!yb^JKI*g~(DHZMr+p4gwzc@Rcr-Ya|_egmYWWb>IhP z+9!g-;@^oWGVmAFlX;u`4CXOq0k(a!>5P(0_1M0xrX?!r@}$!WG7B5&D&qtam`}0k zWuhu^OTi4gJ~5?<&7zDnhw@2gU-sZmQ*Y8n(Oh#=82lnm$fdhXQ^blM{JiqEX!T+T zaNah;)jv&5MA%YD9Q%2x1 zRvn=JPM*hizH{oETjd@x`Lm5BrbyDXR4R8Zo(U>HpArO9*PEM5C1LA9QyD>KhIuh$ zc8bM2X#OxoVxeI6>R}VTnHni;g417`J|LB)b7T`T@wx29EjY41 z?7b7F@fs0~JP1L#-<#-ZD=AK;_*>Ig_|$kW4a@%8M5FQVQJG=o-w1K;QKh22b0!+S zB=t5^i^m=F&Y5aZe*G)&^#u3xS!gtOGLc|$x#jAy8=8Y=m~S>G!q|(ZYa-1s&jM>N znch<*n*c4yV8{+I$LC%~&%~8mb;DTJ=cXn#a(_j;G5D%NW@W7IN`IZTofqWoacWrR z&nEgTV>KWoK=GJb{xEe(Q3J^M+A9Fce=<#m{6eEItb8mBqpkex_yWT(rukxrIOidY z86fi_&WyePFnP0EznV@E3z-+=W0P>hq`BMJL_uKDct4o&CmkCP!Y!|M(dB*1bY4VG z&huk$-8Q{MgqXwY=w+@i)|udC9ww$ps{v`J7%w&GU?veX*spf*y0_Utsz|JeTTp&5 ze;_{W=ch4;6CRfc!X$#Iq;n>=t@ANc&t8Q%&rmd0p;mJbN=H6(@yg(RI&%wBs={IB z3+W-|GwOMMY(#DIRZ6D{vBH}z-#-|`z^J!)-f$2vb~ep9LZdc&Vzn(DB$F6Q$}&?s6CvmgA@%^VCX7ns+G zP?3D?VSG1p8!?%)jZ}|eJ$k{%olI$-oZHJhoT4MCiI#oL#D~NO9FzUw@g;~zd9LLi znxOcIH(S%!tR&Ew9cHq4m*~il$USS^DN&Yh&Sl6=kCVAiLQS;w?lkcDZFFMnKWOSM1tr&k_;%)G zrW4)IG(#lJsAaXg2E=^IDo-5zp@pQ>U5L+-TT* zJIFH>V>Eg1d@U4z^@$fWp4$|?y$3_k+teB#LrpQC@q!FiKZxaJo4v)=1j9Ld5mh=B z8Z-fPLrj5e(_3amG-gGK-6GYIOzmLYT(d<;W;lqiE1Te&w8=kEqLT7$4w*Ah4fh^~ z2TL**n#ZVu*P6Y#587|B`6mIRJ1!Qq%>3ZNCFWivPd2cmx~zPO`5U4@WaaBYCkL=! zmYN&=|5db>JLI{v7H0_bYX`vijv8-vd5t-h;3X@~b1DSgd8>N~D=Rf!G!*+TC5+TJhyv?XT znYZs1V8$@O>@e|j%L_w)cJ7c_N5+|FO3~e{^-=RfL_Jn!N}=Dutn^E>j+8+3+q2|j z=3XRS=_ikbto0ZTw&i$Q;67*%-Sb@a=Px?rBDQXXTMDKUPZB)H7t*iA>h=( z{T;r4836IMEbT>XDnz^@&iLxN#=hXHWg#2s5(#rR;31*H)($UeFUgM$_Ob+!wm6}Y za8029&*<+y;ccNyeJs%ynmLcxh4%i;7kX+fgFRsL>#KOvU{hwo!$}8IqgfLlOLICB z6}K0A+zI4T|F;ilr9<)e`_wLk=H||K{uW}Fd$59}#yy{UY!1H%P(U7(6ed^2YkM!s zx$?i+j+8VKdpy{(hm0{d$1rkNo2xsfg^U*pG;DN;Wg<~fN~Bpzghg=$K*b31{qtxx zBho@GR@wNA!B;|!zN|RPLJyB{RhUQDmOx=1R8~mPd1^VZ{6Grk1Zn zwwBEqe~52p=}q#aRWfU4d5pFtS*r-Mzo;V_8i0$5C~$WjqScfYw6io(%fy}iV7UEz z3ce?kZaJ-nJz8r1(66)QQE;bPc)&n7`|Lr>!zx%w{x*MxWph*jaf=Qk61uD8p~w7! zAKoWv(81tFmfGywo))_Fp}<>qhFLm`J(Jt& zE+%u-Ru1=!8X#(~LBz9`IbubG$G!MEd^-hMT=zqghTVSF@+V;r-t2|-czh?EbOr}CRTlR?^LXSmD0jI<`33v@#@j(mUzli6@%3! zHy0yE2am7>u%oYA`jLy54S8A4q0^3)W@ zUT|7|6mggCkmklOw^#z%Mz>`mL5-Kd2`LOt7Fn9-eq7U^6|S?WY@_mND~w?&9Z~p* zL4UZQDe{M`&PVWZ#SNCWqS}(ss0{IWR~)Yj>p}~gc3Lj8O}i{l5rM*Jn?xv1J5Kcb zKf5N~Lxi(3qDQ`)$O|9QIM(>iZ7rF5E#kua&J7F)_F6WGeM*#`>28*TbIH0b$CBXK z&ae=?tfi|jii9NuZZkaC)%pi~8l(4q%Sy2(DuU+HqjOweYaqDGarB>W-WCcO*HgUV zjV~-#u{<{?Z9s@)sTl~_)QdH=M%KYP^0 zb0$tNwQEU``21G%`cSyoh&#lmETQ~H4mRSDLR>^4owY5u#F2)vq{mCqu}-qeedtIygLD;oJY@Gm zQ|54YV+btz+A>eX4Bs(m4R8Gt5e$X3qGDh{Eq85bd*;(P$oOzSo*x);NC$JoMXK_h|)rRtg2Ypz;Wy{lq=k6h5 zyj8phPK(av*sB&|!XabSgWRihv4hDTU1uJqJnYF|BDI+7M@z99qV}IH&nigJ9{OLi zG!>E=MqSgOpDL_={l&6FC=Q$o!<)J=id!RXV5Mz~ft+}BQVzI{7JkB!5+63=H^rh+ zhUm-kez!bG@a43r{fDKc*pgBkc%X;}1ushghQHsiydc8HOA}1c_@;$K=I|=3Z(8Us zrF0@7_D@SqVn1>I#b7&M7*eAZvHlTPBgE8fMH=QUr0h!7fGapEDEFtRU}#sfRRjdq zYL!k<#71Y%uhj~_2k>i+UmN_|;@1wpH2m7*myTZt{5s;-3BL#NdkDYI_;tarD}E2- z*A2h!`1QcACw{%~>y2Lqetq!ki{B&oJ&NCB_&tu_6Zk!eUqAew!mmGm1MnM&-yr-3 z(*)eTU&U9KR9xJ%it~_>IJG6n>-e8-w3i{Knxo z9=|O7Cg3*_ze)H#hu`z~O~&s9{9eTGCH!8-Zwh`>@p}coSMi&MUp9Wz@p}!w*YSG; zzc=xlf!|F0X5sf1ezWnLgWp{I=HWLVzXkZ^;I|OJxA9wq-(vih;FpUZ;P(!G@8Y+V z9q+sB2jcaV`pmv7SXP5@7y_mt zubAG~(}Mt*w_1V1Bc7fCz|y@uy#T;l@o@P+=5@;*>ZM@=H!t%M$uV<6@iP3D3B~V+6o{xEeBK(voa3x@#n2;$>D!5V!K83_x6BemAk45P z!o?S?#4J3!-iq%=#FfRfHZNMQ)PzT-SYH(@Vu=X&d5V?D>y8hsb=gx>ty;29J2=By z4;H*?eMJG~PCL+jn)R@lH{=6rBy`BO)>TQKmTe`b-;mc3pWV^y$_*isVSxGM!?Ar6b{w>DC0XG{>avYZNvnljRqtM8VeAtdT19e|?R% z#=#n1x5g+-2R%A*$mEfeTDKlLX2_&T1EJ4%O%mYL>sGSoBaH!T`G(a_SR-UPB@Yg6 z9cVto`i|HZ0-%cg18WRq&9o9%xDsNA<5m*SfNhXLS#7n(L&-j?53HJHO%$6(W*}kV z$Y~Gac?;`vV!?y4W%Z!;Y%BFCSt+Nc9M;5rsdiFjK!?v|5xVM1zEq3GU zGVfbS^bVJXUGH0mDSCmgTv@GYVzN3j!4)SCLz>O{?0xRaWH%Lc58~V--#Sjjln=wX zd}|Le*+T~cimZ5*W`T7!al-vuKI*wqWh~V6QRF7;SP@g+f%TiJ$wzZGTZ8X2@kbR` zQx%zas1Uy?oY-M~Kpf@BzcbfWZ<@>7Zylo2sg_?a<$A<1AFX>l@V6Jf#)kHA7=d7+J%hgkb2G-(D~TH z*~izc{YkIo%oz5>Z&rGWS=?p2~ zg!aiwn2AKTcX*;~H0b>ebaDxUybUMuqxkxLA=KP09MIYLu*Y_~PU z2ej>EvCEU+(Amg3tWSxp4s6%ij3QXXs~((pZqUI=ox_i{39-?eE;>xHKMdDv+XBUk zyqPU8*qTD#V|ITwHq=J9hjt8e#KYxXHXk_fjl&0ShS})!aKvtcLE$!HUt`}*a3e~8>eOh?V(H>F; zdi&1ZfVb`#3V{EsS2v#&U^AFo_k*acI4Palps37ou-4+R@ zx}!nth4HpcM7BKiW#JfmEB4_;+n0n9IoTzhK+r*U>;h$xjkS>el8v}k`QRUY$>t*c ztCFDGIbVjb)34c<(tSBebtwmp<6Q6?rLjaukmv~K-MRj(*#g_I1bZwI4daUJzR+i} zjrgTFwclNAOA=|xtDuPZ!6o&)^tN^lv|D0pqEe6Ny}iWNNX%P!ZBq-_|Jx=XxUs}` zRm_vdjv*7#_&ur5EaM$pM>4zc^x_q^%Va<}jW9iu{k+QNN9JOlsidpSH^{(iY}1u^ zapq>0wYIftjVa-ACK_b5?H~h>%+d-rZjB6q!seR;SoS*GcG4?kGqT5nD7S#Zd2}jN z&Z0OcksYb3S!(VE$}@-}alCOZDm#z*QqOE;hDHK4hMckXIFU9rZrdJ*}UAo&qf=G&cT_OMgvz&u?7GrK>#<3ZAeJWHDQ8-_>C6 z?y&)plz%~Seh8%ZWINdqk&Gr-FqsO5lCiNb2{7%9!yAJ3Q!$X4J|2eb{~Jutp8CSp zkoK@HHsd~EOA$v2xt?$~w%Lu8sW3-;VQ-0zJjYap{VS(z0c>EYEuA!sgy<^5tLAt% zg{xicWE%#N!)vj++FP?{58J*~>aRPLWQfagvOEwF#n8+*1A}4E?SooK=~EcYwtQ>r zd;f&+-?D@}>{%k+xcrqx*+tuqVKTi_Xh&T;#yeiLk$GEnuoKw2i?+c3#h^`tlmz>0 ztk+fBWnz-6ieEiY+7f)a`TaNB(;{WCenU3*ciT4FjSBP52kv2wg+ocrukh5zc;w-% z8@87S998_PH}5G0ULM{0Fyxl4qu3F370YlY`;i!ks$&@qXxaq8_7?U}M7Y%yIbQ!; zmf&r--cuSllbe0*EyR}O9%$JrU;8;?==}>i-Y=P|4^wn>J+CfUaCU~Bcw11el3+`S zovg^Y>5#F>f)2!sHZ7QI+Y1R%{;3X301u`E>cDiiF3i4*u*LrY3dh0IQTB%k0VE4e zp}GJGKLE<-L}^)8w4I*0Lt^(5p{VkF0-*kif}9eCw!^uC;SzyHar{>%q-hLw+keP} z^e+bEZfav*Q)(Q`LMIx)EH&BwGvN~A0Tzfqr$o9$#fPn`}REd4r(_I4s9&n*1}oP5Mi7F{x` z)S-BnwXKZme__$ZaMAT7(FGjCPW|lUjtME59qwoEa8J8KHlN~Q*+A84M(GGZ8a~37 z46>^^F=0U_9dB$QK}z;v|H-uXAd<{8aZ(OppN zyeQxU+?Gq(WD9^<&)P%TTchl;q{6@8U(b_90@NLA?@(RN!uMy#*?$mAt4n@vhF5UietWYmmK~U2pL|cosJ1KWewmWVkp6>uXVR^U3b=5j8%lkf0=l6^B^`XrS`-6lQ>Ne&-wc>x7Njdu;PhTE+{l8$v zd)5K~wcgRTFUkJ)YWHXeUl})R)}6C(Nd-@Ylt2PAFGW#WwXLvGhOKI3s%kAUupC-OveBKOpud;U(asDr=m{fT8 zJ^M-0-2Z76!v|2g6)zhJ_2I|->MfR}wPR}=z}#Z{$08mwW8>>i{nrPwcXrqnw^;m3 zjGBuL3drDv`@f&oK*<8Mq1NrP*Cp$&D&&g4j`m?upV`ZZ=%G1iWUW58*CI7Bok#;8 zX}-I-VV|AcV#94sZn%%%Z(k+ii}jka2fwhNRklo8;0E%_68l^cfB-xaW|i8fhy|p2 zti?e)y{`&;|4%p3l%Xgd)IBFigQNDIB1$+&Y8z#k+!@~49S{ihzqFT$RZ!dah4g~; zer(iN_ML=S)l}Uc=D()!rVDSCZ1KCD`l+QkgWG{^`>w}8j!QOwnD#Sn`u}ml{wU!H zB#DVFIBoAk(mn5`wuNWP=`xNJ##L@7p*!;0=x;3JIOR7_wE405XYE7D;z443R{uMD z3ZWzJJU55A-%}mKlM8>^q=jqW+Z%}E!t-tyZSaSI=j;WFJ`hgT1LryI92sd@oQtfY%#&f#SrI_gt_isX%IQQ5DFW z>dBoi;Z4=QU9^+iBzOauM`*#5-@jz9uhMRf%WCbiA(!o6(?y6R;^Tg@*COLt#Wy3y zZpDkH-M^8foCl{7N-n97{(-&Fgj&C4u75mQA{DcN6}t3JpoC;Rs{XZrLXhu@g!VFN7py zY+((@a3bzVf)vmPI%bMJ!DPG)IMDGvZ9)o4+-5o9$9C!*8wusH(%oay{6ig`NmPRr zIVeRrYFTz2#}*2(kE0TLC%6s8c6uU@u;F^9IX7p zu^Xhh6be_Y_lC=}>f=KP{dn#77^pinwVD9Vom934RS ziK8{#UgY$Kfvp`xs{T5X8aO_}(GfB~$C2@E<9L#chZGosvpzoh{H!Aq3V*`=xPmE; zH&jXuoa*@G&O7C+MmfBhrJds~CGNb_lf>Fmf7!hDj&8KLM2D0TM;r`F$GFdJD=-Fo zMQcBN$Ne|Fa1hhN;6e$Gu?h>=7P zhO|{t91UUKFb7%qDYb{BIvJ|Y*9nd?r6p$3FjN}#X#rVRFw_;t)iO~h~AAd(kq4#)&imQ~-xWz|9;9~#3EBFvQ(Xqe- zp6sPb4tm4CYHuHe_~#vud4K|SUn~h`8I!9aCaU9UV4*KM-lasBcn;NW1YCZ}@eyfR z8p;DNJBW3MEKo78w@h#b2~}9?6bF6HO0pXnj`=?2 z=m3&xXR&WMOazR~x@%bc3^f65$k2@Vkl0Z>-f@^&<~&Cfu^KVm0@>^FMYgLyI=$GZ z3mr#jb5hNdiyZX+ZwVq``g>3}*Rfk5A5`Ui3XZEn9>ctwqzOD>&=`U~!P_5iEOn5( z?Ic)eHJ;4(%6%=>o3&oyI7b|cRkbtMIs!;gnkswVp)FkB=5PqOK^1Ao7gt07a?ORN z2{kh+WpHrjmw|VYYp#g3uxxf*5PN%<;~hd4u8xtXgW2%i4u6`dm}*hg8Q{Wao~8t9 z=$7np{G#YR7YH#@0Z;ifGkn;ETPEVT!zZkWtiuj1T-oPXE#~n7LMt{F#;rM^g){pdxyk|z3yh%TsxZHXip3ER zj$;IWd%My=2Q<)w*!2=eR|1BgPZ@jA(MAC#0gfDWko7G>PlPKWPQREoe$P)Do-nxU z^JAZW{+W*BUmR)~G9>i@^HAf^)ZxI97<|Z4M**~gey&3fog%LhWN%N=z~v)$KSf>w zG{24)+bvX@PKCt|I$9bVahEtRenRpRY3LL#iDJ3g7^sLVL3SXALw%(id zxa2shtjz__hduU_<1kTDyz7zzV1uqX)~MCQ%-I5lk`79Mxv@?kcHz3?17)2GO?2p% zqk~FCNp-MJw;insCg^c8ezetjp1_kj$x6MQpA#KW)%m7xhT+iMFfJFwHH&W8qaErXR>m_ouQBx>=Yee48hS0Y>{+{47EJ<=peuZ zXdmh%lfvCvJ|5~Mb27Hqoizw|E}%A}G+wAKlf_Q(VdNSwt&THEk;g}IgL-ltl#UGc zgK@jR)WVu5=VOXeyuCn3jds>m$&(so)1sYc)euF-8m>|Y#Zxq$*z`DOD&ZldKx6nW z-dTO?U9wnO!ug{GqETNt&*J+I36xEcaP?SlqO&t;9Vh&*3d}2}-Z_U;@W$9__)1&T z;b<;2tnc(DwGpZst8yKKONn4edE#&Yyj0g_5ZjQB+~SRS{?Ma=(o!W^sojdJ6}*~2lE~xGWz3BMWX+WHA!_|Cnm^`mt1kI zM_cDyVyg4>nw^~Qk{#I9k2;&M(hTRPMBifi7Xn)B<;R@#@wC(@3lrI|PdcfuA|$8? zFKkRJ)Ub9>Ip>p+IXDT$JEzns+NDf8z?n=+c6i5`1TXD#Hj^HXd{Mv#ggjpuJ;+IR zdpek1bs=rP(~kuXcG8y@ISyO&t{~QAh_eZyvj+s{k8rjpBhQie^I0c3#kTslb&=3^ zq;ncUxe}v`Bb`5xzAlV*nOU7N&QdZC9YS5rAR&ut8)-P<`7Gz3ViW49!<9YxP2f_E zbruMkNQM=#N<3&LIkzhy{iaCi0@H>%BO#%;TfL;6rS*L z6+uS2%@4}=6b7Okwgje?=>45uHQdc#S8Nv*NqH=SvucF~-IIQGI! z=Ngh8(&O`bkT(afj_*0!Nsl8*nG7?%2rH!aC};rvT=+&kuDyNW+FWNJk)VC%Ij@T; zMe~sg7oS-d0dLKx+=zMNObT-8V8}XM5CRQzoFVY`0w?j2DN7M+pi08JFLYidolxgQ z_QE3PHe!;X5M2~|gDDyC*1OIOG5N=lE&~+yuNwg^mO9CG2r@1K?DkS8Jsyu06X48p zr&EN-S?4FMtCg56GfXTqtaQ>iS5%9MP_{GQ7cyg9K5XlI&L@b#k`jHb&QM>mfeGuJ z--#)ReFSX(7}x953aK7Ddmbl=cQf!#=O0Y&aF=B zeZ`7+RJquRmPDYL;6Ny2{5g)VNN%l15dc=P&C9`qGPP%i<6}|sXCvgn(rx}2^jTvaw)9iyCuAr*2=6{tDu)W zVXFu(!)f{iL7~HUsL?tcpmPZ(H-qy0nnCbP3FYU7-{DN=EOCA&(nK9a<@Cc!N}a(3 z3t0!E@X3x^NH|0-*gl7xsbZU0FCOw01tmqqZXI$?A=3m7+emi#s56aNB6s7JypzsG z1Y6lwz%$dAoef2dFwX!ZPgB$}IT^BoUEXZ(X=is49+S9Cf%+vX=?Ysf zJMjU?3(hzZCMU|Yt4@3*bjCq%`1(lW7>K<{SH`mH3WvA>sXnmmB31r!0S!c7ax$@r ze}gtdwEGjv$tb@sHZ!E4D3{_6Up6rx)hVUaM8={&e4DjH>t{P>3oy#b8Pndaq*eg0$ zOERW%oA{hdi0fssc2(ZW+AdJ!6)I950NZLOYMC%snj()cV!YwoFc*mjt-^nKxa$+K zo=oq1k`xO@!|4bYSvg3P2#bhxMU$bD7F&Retu!c%avc@gWSB?qd*gG_sKvYQYTPh1 z2y-cQsiFdTj`D}>;{{$UJI>XRETV9ZsK<^Zx!Mv~*hQ696zkE@HI_Re@57oa9rKcN6aeV?HQTBtEUEL6$+^6Y^ zowMhvj|wy};7J^tDG%X`p_jV3dXj!4t8i1q8(!$`ss~N&7{^ukc71>7HKSYu&fYE^ zeB8rTBsPoK#Di^&D}p(Dx@h=_0Fl@Lk}74bGh7`A7TiQzFgBlv7*yO&h8ALz*IA$F&C^V+n&RvlF~#*bSy9N9R*OB5ll|Fq(_OnrL)?l$Se>D?cd&*Pz3$qmY^^?Qnd=H? z1+!dz)T&pxOxn$MX-EmlREJS>=fkm$7H72pKi(DtQBIxm_T+QL9+KG|u zon@}%05P+~<|2Cq-h+gY3op4I z6`(Nm9MOYk{y(~+L4VaHZukHu6Q&NS?~aFUKf3k{AVE$Jfpkq#7-T))P6OpXxsp^$ zwfxz&MNF;^p;D9F5s-HsmvDoxQ7ysqdfmV&Y?*pqW(~JDJ9N$UBpD%IQObl-zq^8g z#}8!JJM0Z(e{&H5l8b6!)o-q~BK~q72Sbb;IZp#yZn^>>Wjy+g)8BXM;OgV+ydk=k zI|+(+_=G^jbr;##2e!KZ@1tEturPN>1RT|VIc!~c-_B_d6Vx-7)oeTo#S;p>iLky`f|F`Z$0Dq%rM zaM(b9cSo@(jB8eq2rW;#ec@<;Ta;f(*utS(pqp3;9oo4QSze&K1p$QwY9w|}sfReo z+h#XeJ^z^GCY-l0*xiu;Yg-Tw*$v#SSTmiQy4tYE;V?GDy+^3SI@ER_Bv|s2hA=nr z+{>fO`i~v+3OAD4B?p{bp%(*wCjynXNXzp$-){*iU=4q65 z;vhTPyXNWF6!SOFfYKXxd z2S<~tHGuWt!3J)kZC2wbG8{#^JV3Y&SeM3b8uBd-7pu|K9Z!Z)8U(;WXb+{~?m%Wu zcE3VO+-o=hha(<}SK_tQ3FQgiP<|elad{1D`7Ft4?8TwN&F@`d%)f;@UkUoI!vi=x zLF~B{_ee5EoO)-%^L0>~>g5G_$pt~s#Nciwj6TCsKdH3HkRga&C8@dlDs%No8g5eE zVPpLtbnhX)XSu1@AY(;f5Uk5Qp@rLB-EG8{d8ug+yNL;bU5>{`tq(@P)m;U(q2y@; zS&HLyO1!4p{$~ui&STyX*wGyb{kprSDq0#OrVP2{ZUWEsaEne}_D2u*1B7ht`?%wU zx@=S*_lKmA}rKh_1a#~*i}AdWa54)N5pZsOyIaiiR#KMOiUt#86^j&ffWWs?0q z)}2HQa0w_N(7}+^=@T7H>+jY;*|Y9eaN|aPB&4@-`m)gH-S3H358E-#ogXap2D0|% zlO=_6N}TS@Pk=c!;>na);~gBS*c_^8CoCvvDYk)Y*SfGE$4!Z39;e*TCmtnJQx!; zyX!;wN;kgnQ9=TexeFwNDvy@c2<`k4^ypffB5BH_c9R-7RT2` zmb#O~WL~9r&voIDu*}_ACGYa0e6;VExyfRB!o%wl;q)^1A7Yity+h`+!cD^!m0^VyhdJEl zUIAll?f{5hQ$Vy0b~h|&_{0(8Cywp>{J5ddjl}i)!QzBEY`x7*_XLr12SWDL;5snh z;T|QnjU7sYA6)L2rBT%|yVG4;=r9>dY8D}WSPlJ&nv(w;AFo0HL;46$1sl) zud)t1vCch0t@*4X_q!r2F6419t*Z_3%iJhL>)rI2%A`IO`&0(4I zL*U3J_d*3WABZVjD`aeOj}VhN@7_i7S@W&#_M|tQ50-Cp*CpvP{W^(FaLQDX?xkY) zaYcc8kiElwl_X1wXT>M(QZbohEbB21jLtwa=ge#kzHV1RLJj+Nr~7w;+u7AP*Oc#b z>vBgY1l;irCivGvhsUVcil3YigEwT{E(?V0-R{F;n_N9i`;1K4fJ(-Ar^*FIo}@OJ zWsh5N(7jS~kN@2Ll}a;LZlT|)Y%#h_X6|*rEf%P8)!hvG>~jwlljY8}7L&OSEH01o zg5Co@^JatgyJg3*kGRP$#M$rj z@rmc7Zqg~4z6krfMj??Kkfs6wL8T{z0D&};fYJjhqO@QjqZA2>ppa8;;NB&n1rY@i2zI3f3o12O zUQqH0s8Qe)@G)qR0n=qagWA6}c>j!xszd z(&|I`00R!N3xu7mx-3@a!nA6*p92g&S4A%$yEk-W1?Q{g)BRFkbUnVs5Q}uNYKusZ zYx5s2R&^A?e5iSq;onp}N6I{9sp4B|!Ra*^)(Eu|vGo8iEB&!*Fp(BM3XiV9PPV*E zC)(y(RWh4?xr!bG@nA91a)QFERJgDXi5{UBK-4kH6}}t0UiFB`BA+Kzd_Gn#M`Bqt zyLP?Gk+6>{Ak)1ldumQ`Np_KxQzGT$!$qfoKCrN{iX8eik!Y+MKuDm0oWN%MT-Ab1 zm${drVEDC)*f^Y44}H&>wXTy ztN$sjJ=hQTs``@o(c@h3SPPknwY^%aanQM?Of4+k|Npb4JY2*!doW>am95-BTF|Xh zSmhwUCDv*5L;e;VQAwl{!4Yuc2@)$Dv=|&|Ozi2487svpDL!h(2{HzG(w};a*HAnWH zzx=#4QmX>xg;we$cvri!{z39H*6Mr{EYA?@VDq6cD?}a*jaixAaQo{{&i=VMGqR=p zf|A&{1Zh%1L2hiEl$4YN{^4?pM*%gLLa*Pkb zE{=_!4Z|DX35G3_OfSakb`Y9zzL8_2v-3-GO6H80dP>FFxl_7zBV@oYQjU>kXFjZ4 zZzi!94Dak52x-4y_8}=V%pquY=Gf%%ar*WdIWDJoV!@>8*;yrsnF%vr?hpvv+#8hW z=h*@w!woG0ps?m0C!1_27^DU@8Hj2Baj|cS;{qw8eIhDet3&l9)!D&wr%roA*#>vK z31i(&Krf)Z`@HC^f?4?`3#6$zv$OM|tgfniQ=6VWnZ45ty|a-zGZz;g@q@~7o_LzH zqCOh*HsRTh2Yn!Iw2y1k&#UbY;zKedS}q`Ex^${k2j~HSHf%;~xdUm& z>IrbB4b;2FxB*p4$r8p}yH?v5e_uM$Cx6~?Tp8n^8m{w9Z zY1~x2aByELa^p}_NUfxj0%=~f4qT7~kwdC+D>${oAhwrMMD=Ok6nPAZcUmA>(ed17 z3hyM7py30J4r4mWqr|q+{*HlteZw6g&2hgyGS zaKzV)9-4xTzVegc+#AJYP%n%=HuRUH;Q9!xm7XT&JBqEg+a%dr7rw_-x)EED z=Lthm-r5e9b45%(8)(6LK=8Jc-f(HKY#A1bg7uHes#wn)?ITO_^keeRBBE}0!fQ+9 zo{&65z9^PiXS2VE)I7IiV>|moeP3Hgc)MeRE8HC_KQE%9`5=KZOx`7eQ6~|9&>V^K zhWd0_60tE7)dpG(m-mWbomVLR>^%n-F+%>G%#zvg=I(_H_>aN)O8+><1#(BqvqU-q zsyzgbqMhIa_R%Q$8&XdXT)&^7dct>4$|Uq^wkt81{*>HDtf!MRJuQFy5RStjV2r$$ zRM8)8S>Dz>v`g^^$FXvE5gXt2U>?)4@*Sd5c}Gzxy0Xm^rbE7RF{oz7CeE9O(7};Aa z`!76WFhRe3JM28ZH9A$Gy0BieWO_69-*ka1k$+O@*Pf9d6FIX~=?+l(tb9(yGS74@ zpt3eX$gKBqh0T@6TE`j%L*~hu*2}`#AM@l{L<*bYYg6nTKwBWs6Dyhx85hV}C*xeSN~z=aa5dW%b}g1oB47Gi zXQ*qtlYageF|e|r0T=WiQ1*iSwb(-QqJDj;Y;mGbO#~~_{xANPWM=jJ@cY5$3%(w3bdAv)3R6@^7V?VxHkmI@ z=X$wJZZnweaaVY8pd1J3>oC@tp41y3$A#d%%|)fS-`^N0dqG`z1Thv}+oR7K{;C`c zr`Dl~x%yRn>^0;L#sn&Z!|WGW(><(@qlYpXL#*ip|$C2^|9#Ph9 zRlUGxy*xl1e_R1g@(zVhI@`n6^;Dao2uHDm4KjV5&EcQSd||aPXj9CU!!<wdC`*F+-7W*o@xQR5833Gl~z^5-J9dAD{1 z+xO*-4=H1xy)QeEo?Tn2hQM#WKA!&~N;m ztN2hZXbCyyI9wp2c`6X6!)WNGiRB~D6_Wm8cQ<*M`(sc{Y>b}4QU&RW_-TAbnv zJ6#px(H(PD#)$Q}xg{lIilR|&N?)<;(C!QVP~)Z$KOyr;GzSOgsjjf6^Jx!g_@j+I zB%ch$WpnwAEo8Xb*@CnZA7JoH3=MuEws6*6nJtp$T4a%j@|$(A9oy!q+#yq`cah=c zJ9__{A5UfbDT@SJ48e5l%pLM(6@kiiGO&CkoWhhe_I-%blC-TCGAvwA;14Lm7vT!A z+YARTv;*by3og)ey6VhEL?~TJZL_WG--LETQdSCm0FE#(Qt2py_eCmGMF>ZPZTO0D zOe>|)S~L0_v-!~qjiqoKy||4+{G;ZeP(h5+Q*2B>aby=`ltMCscz?JxEQwe8i0G%{ zl~E!@zl_U*9B|<;wKv!Ah%nRfk z7VnmmN#&=&4bNY2U_W(KT9eQ?zY4tky}i!Rr<-zHY|c6pmiKMZybFMNvuWN)JdgH; zhVF`JdBgw0GSM=NJKzyoa!-YtHTQ61EbOU-iR_zCzavC2vgHr2cUA4-_nyiXv5e0$ z_Yr-2)1gjzQ;CMxdn-LimHS|O@Jv(c#4X@uLWcnjD8Mm?fT7to=(!Ji*d{u0Zq&t}^J3OO1;E!>su8=$;T z?D|!YDj*6k!*g{efM4pp;U>?>MkrCeL^7)B#sgu zc~vm1sZ=0S$x;j8c= zBJBjePt#2m#XTI-pH`y9ZlPQgUxkZwS{Kz3^2RBCA~q-DIa=u|g8$zUX$2?oO3D8X zrL$v{;Qt#+yT?+VxT0trtB^C4|NnG40-l{fQ}vnkojt3apwPRuxV5%p9Ws;^L{L*u z_SvOOB~e`Mz+Zv%%vLrL{7X|5(L-YErYiBIGHR^^sEH1Dfuymij!?hkJSO)n9$?4X z&QR!gK&&s))O=!f{ZHG51I#U;i>c2VV=!cN#M6ZR1r}CVbAp+at1a;tRxOr?t` ztlU;{D55%1x2&w}+-HiFv0{DP2HQi!?)kQGu0R>c4wfkN60LPgmg=kbY$^#4*^ry# zVaC}Cxv!1vVCeQ4;<1yLtPGpF=6(5Z^xw=X+tPiyxkujI~FP zVpW_yd^txUH+!4$7tW=7Zm-{zKz4qvQb>f8?;3OGQ$qmRieT@~S7^=-J#fuz7b#na z1BDJ+w%9Qq@WMy^?(p~vN(ZqFvE#sqS1Lp>Ua}y;H8T-MhA9B(`a~ZD-ya-BoBqg) zie=a&9`3D`9oeL1ijnM{culkw^k1%Ih|S~rCD-}*6RcNO&^cSYQknIzd!KF)u}XPY zB>Zos@*y&4`P!;#wK79&0#{rs$Qg%^urkW%+bm0g2Bc0&<_vaiKUJ$W(XMMjjUyi&%*8+0? z&prMNss8I8=RnyfQM@fX7`RQj`VRv@bgV84?Cy5OK-y}S0PK4|SpNpT4o=>wc);@Y zID?gs;k%%AbCpoBA+sC6@BVaz8;e@v{nw3n`^|5s@*I(Q#N|&N+~Ln^B?UH)adl;$ zsjGZ z#ko0IFmt{GzJ6pD+&`{#fD0$S_Jh6Ca7wQ*Wue$GuHFb(yN9X_KE8Ov7qhX9cD038 z)8F;Ow5<^?P&ot@QD}{F!3r6EzT2?#L>rb-tE7;b{TCrY;MM^?Z?%UFFX9&vCU!}& zXEFPffn;;U{U!=F9a6}lrG6;}+^)al!o1&AJnTgVapy~66OJlO3_dV~uO!L3lA^KUXdKF zd^DqZ$)(qJc7(Ds_>AYwFP+{07RC(w$jzBO_qo!IOctJ!G;Q}FT|y<`{H5}p$U*ZF zOZ->Lj}I#w`n9rAEPJq7FuaZ!NLoe3oFk(1z3=>4C0zuYHT4MVU@v(80&<=FXuT)= zdQM3Zu}}qy&NJ}+@uTw!31gXcB6*Kt275DXWeMp*^O)Z{fsbQXU!v! z?%pt?dxSHa|BXTuOW-Wr6nPis1;jFLT;Vqayx`|c#FAw=T_#cR!OW>2lr7bqA+KkI z3tM7u(77VLtL51held zxfFZQ0Fd-uPmJSKwmkSp7LPuVLD3cT*GM*3Lt)E%$PF860gY*d;sR?lz2 zI<-{8Ma{%A>{NOpwfT893hM3EJt8Z5lOn{@Y2*0;{&Y~qxL1V}Mxv5eo_B`N9aS;P zX>wAh*mzrZ1Ts$6_`@n^mAt;wC6WzrQR%a7{^<7wSC!n=Y~BNd-P9u@_dMf=le>D| z0vy3wd8pKH#k3H5jrzKs(7OrT0*+;|EJi9ssy2{DC8Dr^i= zpA!4zb@xIrTn|RuBsN&Bv@By-<{(NV;GDcIVw#CNLSvZvDJj!$hTRBPelUNZ*MDXQ=s6MHyp4E4>v)yKEX`gQ zew;8KZx&a=doEBGueP^BfjdtBiC0N<#=O-9=oDOF#ddtNxw@@NA3!xreYZq)v`8L3 zO-!rN0 z&(W}|=l|gtbHLoy7T5old0MTs^cD=VcjcjGyeqGc@{e)s$ zqiSh?;O-p=C;O_NLUsKp_TOcj%IK$xju*F)kWait?Wnq=xqhKF)P5P@3Y(oUxR&*Z zI!A2j$4As?5rTQMf>=s_wTSdoKeK=@2dL!H6!u_NQ>dY^MS~qYeeZ%7RQxJ=LftS* z8FTyM7ne?l+d|nOs?adEZ#x(^7*8R!OI~iEjeE}(Go*g%3EgZO0`ZL((Tfbj??IxW z0SJnQo-G@q+4;v*nqI(ctSlEhJ0s+L5ZoK0l7rPq=Z4WDBCr3Ja|7A^4h>bwl|{u9Xtmr)SEq{QobKx3bh~ZzMfEe+z54o z0A|=MJ$^=##8|fojWC;0>Ph03qTEEoz0vA+p#eS5n=fQ!sLoJ7Mr|vW@#{RvphGpxLbh(U85Y|w-KI6XvNt4uI zQS#Y;}WXmqhQs)xE;`A{oR|wnujD_E%OBBQWWUgec_#NcEzn(&}^VFZk z&Y1NP`WP)5#1k&y>Gx00S4sGctEr4aylOOM0qImzl^Y9Ga`~=VAhH&!i6RHQ6}C`) zR0Q)XF^j153IQQ|c5;zQ4{GsCI^k^EVhex2;5l`(*aU`HBBA^9s(6!wZ;^|hr;ZFF zcYR3wY0-0Pdx&^J%@fJv!;&c2`vM{V;50A*1})jKXzJh7Cn zN&RX+TlJ#an$X2dO#ZNGIUW?AU8_2aZCY9#IP^XcvyNIF{nn|ogsSYlbt=7`%NK|L+h0o2R!kl#gfX1!ij=a2<}g~{xf4XR4S-W)EsXU8_FNjAxrp{nlA z&a;ZMCF|e98V6ni}5XdSKf(tIrai+HO%R#IBv#LSr>}>P5u* z#Wz%Pn$C|k@w#jfM7~L#30{UbcwOM7?U;sg?wcw(0p{0rKYf$B$+zBA9}#&Qw3SAN zIBmR-*iJ;ey;Us{A@kl+$$<=BAdZ9?TQMea^DXKI;IM>2>Nd5XNQAeBcYQ~R;9J|& zi6SIxJ26?=m)q4(iJa)+a`w$mwG%Ni^k^6BrK!KRa1%tNY5vFUQrkWR?!;<$sWcJ6 z8Y49-J~yh91$Nm0lWOhS6Wn4{&*5#TfkIv2_hYy0QRj+a{n`}x9zus=bd9PKU9PV$ zJUUZ9AkxU!UBjn!UVW{6Tfdg?||xO^N@bw^EuIG|Qqnb8;uR{hRuo*v~8fQFn+CeEmW$ z;oK|ILSWG?H3=Fo48rtv>tDo&4VTkh;JDpvXS_R>?hB7i4R(U_k9p#u;rS)_aopp` z(}@HPKdJJZ6CSSpLA?$>5}3@HrVz)*+r#zS>PV5NW)3R1#5lT4%FWE5aeoX9K1$oB zR`TztOT}vDj&}n$7yJ-R#$C0efWWrgRXeqSMRV{AbXp6|9v-vNW(pXf2l*>fwayiL zTHwp}uWjuiv4s{4r&{7wW<8e;!+P{Plqc-80+9-~6T=GZHAfqV5!uB#bF+(Cse?Ai zkzna>h<@|Xb`xReZ;L+n(u^+l&7JPRJ_*wXJGMzqN=ivimN0j&^k{njfl_AvWa+8? zebW;pEa}SO=|cy?z67l&40F8b3h}?G&g^&_ts`mWeotMYYpizo-;%Y-T`xge?^6!2 zC{7bk9T@Jpi(33kLJau}AP4aG84}|Rz(t`fRdW@`PWQ?Hy)t+9QL0AY?0dNz@a93FkL@a`u$WS-F_ya0=!+%+8Z? ziuFuokaqGdKS+OThl5j2e#!jIqN2<>Fs{EA0r7pc_n@(__6#KX$w77rQgmh!EN;;X zle`YlY#lJ`76OVu8=&D6#oMl!-MpXHTkIe2Hl||pf^m;%+3@jUU(5>p2(ExD_XHsFhwfL&dbcn&&i)E&B&fp3~dH!QP7?(!Ms}z2kqeKAk70Fo1E?m z&!x5xfX4Bfy_?>}6saw5yFH|o91ezOm(;tva5x{5B1j*s^|5U~HhKme+KP$l41=|Z zrk{&vIs`-GU@d{Cdxu9Rt@Dq?hWRQh$}X8zlwT~BOv^^jrW9xMi7B3ym6cswJY`lc z%rvM zoX(~nk>mpI_PxP1WgMU3iN)EOMOo8g$6>u#oe1WuyI+D3yySyeI;f;*7A)=&5)9gM zgJYZg>}MoiU7D1QDkHl|j*1JjvvQ{7WKWhR&C$p80q0>*@4ws&Dj(PI^LmeKBaooZ zXIyt@>HdFuGswP~C%jmMDbf%InZvXWP&h>Mw~2%L^{IG{j_tQ@Za;HMQ_4;hFz|CQ37?-7M zp`fH|612=e83YsVokp!bT=R6e-$Up>T#Jv^yDIiGs~~SuPCoV&2csBi;<7qjd@c~u zBMd&6ZGJ;EOxoBHKNSB>m=~-cp}E7=+ZUW6=#rrmXbT-g3)gw`3lJ%Q?_v0I3v zkk>%P#fI&S&L_@n^1#rM3S;kS3~Ti~$TEQ!So zY7<)8RXnxJwxupuiw#k}kp5GZlYJ3iG+@Bb>_EG8%o<$3IMxmtm$$Tq3mIAmi%vxX zDzaHEiwp9gE>mmeiizEFCuL^MkV>+PA%!hzK~TM+K7s(AO z(UgJ7Q#Eg0K_LPdK9*2#JdX)cLMCWFP6$fuH7|O`0=T|^M`TMKBjwnRcdgy;z_0Hm zFqWgKqNS^QCZTLqp7shcKF$?rX^>l>WebzW5KKQiU{|DxQDTM`K@Dlbjka;!& zALrd!8U#bv3u|TqX zHVu7Tam=@^*1D1g5Z;=3zM|30x(IK_R<70ZE%7A?eogaaok62d=&+K+u&@mY_5B;` z#*V?;+OI?+&?b=JN&?<0^sIMshIE@#|}P_SEY4gkMGpp6=$E} z41Hx&aT`-nCHFRWwgt!CVM43(xJjD`>D%!1NMAr~DbtEuU>+s(7kIMEo;IzW zV0x`q2R7@qj%?UoZ8RBJ%Sk-9UwaL@9@-J!Bvp;$@YB_24q(53IG{ZNhDt*lHtC?| zEA|_>+gbIlHju*6!W4SUV&B&SS_C|jS&}_6Cl9R`o(@);l9^RfP;`IyAMnJEAo%bo zY89yy@}aZ99y_L`w&1_n_2U|iTj915$2OeM{vh4M;f-U*>b2oE5HV5qhSFJ`lF{4@ zu?OvA{6;4xdyE0ixWt~Nexg}iE45(#jZd}BVgqc*7upNN1IHM60Q`1FJ3DCPw4#D% zaHo1UE4xttu!wFvXJY=`q8vWIXhNe^IV(T=S+s#l&;rskcS^Cv*@c-!I6T}UD$FU& zj?-6rU(lwe+Os+5G(}_q@asqsFrq;l`;^u8^6wj6Xk+D0*3I_3oZ@2Lh()FI@0<4r zw~M#{GJnHQUJeOD$v&9zA|`#9n(7}oKqvgSodFd%ZwoeD)bd>TpWI9-f{R~=wh@G( ziTBChXpweJRhE6Dr8|thU;hHaUCs4zNn}HxW#@e$xy;tE`7@gdW&NscK@D|(Se*l!hKBb*uaPrZ(w(eaIRA&%j=lZ6 z=KD9~FiYfVB_)Ni#c|T85s$;--?bR#_NR9JZ&lh_Rv9&7u#}mVRZuipUj&#jcf^2x zQcCC4E}Q_Yy`$}emr9i+mUkDor*;!YH7|4mJzVQNXy!Py#gQ0*h z^Pp9>(a8{RSvUX!T?{0&&Ff%e8m_41_p9qMPAMi!ySs$@$#mZg|B4F%+;h zADHf8I4hP}Ze{a44Rh_JB9us&cs3$Xx2ggm-z3|!H@yt>gq#Ng_U`ovh3j|mYe*+b z!ki()$B-m8qJKM_?ej6v!*Pqo*$aM#_BJr^t!+V&|4D%ZbO|uzK;0jhI@&T1b$9)P zyiV|Apy3D<#>v6Z5ZB2GmIWI=YWnGU89(jJzu8;=>N#6h7;3oELZA3BxFZ+%LH+N8 z>|k?WT=45d-f(t8#g3+DLGEnWawIGPzwK#ogt_&K8=EZ|Ua|E+{ewxRb>YYV7Z*eC zyQtLMF7I^FzqIVZ4z)Jyu?cEM%F8a9R)8Bv{@>B_QaU=Z>9K~6wypZ0CqKC$YnC1+ z$>h5ndZEA;JET^@d>^+-4ZX_rEs&cmW!VIdl22j~m=XA``ugtG+%# zmWj|TWRx51VOH80RFaqbMAN2q=vuN5oV?M&QI7>;HlTrqw&DM!%EI^YG<0(ve#EZK zwY?LhS9i8&9i|u#5IYIC;Sd%y!(bcW-rSyU7_rzThEf{>gg=%V`a$}{Ob@Vo-q7>E zu+S$r)faB;jc{ZOpEt~~pp~}5&;f3@df5p)`(o1evh+-M7_-!{)=HZ%{p*$vylD8H zw#4dQG8B4=0(;}^{t))m2E$eobJnNlzXfCMAaJW;e@hIX!53Q%TcNCSU8t=d0fF>0 zhW6~kw+z8Hko~qHig|B0I1>%7>n?coZ38(3L%+B)q@FblWrgn;99qKoGw7RjkPYN| z3PU`_=1CqfL+b@|)t3|%J7ibmj1E6(7PVDfgevB0$ieVv-16GK@`e_g8-7E8}e!$Slv5j=j!r5D2yCF*NKg3W^4-e$h+0x0O@X_?rhO*!x#UJ3%2}@ zf##CZZFDyFo*{;ejb#^@P4yQQ{li^h?A5&R5OMybM~e&cyLH2<8aZ;b?l-oEZ2RhN zY-P*p!-T6tabE_*2M*OepxUlF1csgJ<_N(z^V}k>QXDXBM8EzM`-~XTXLJ(G?AQU% zOB3;X82R?qsaEJRq)U?mT6W}~WA!|64fR5mmxCW%c=?46@o>$l`a@9)gnP3N;F5|b zB|ke?llLg*^WBJwGa=rv$fX+d276aK!MwKuo#3Y&On!;vTSpWW&WXLh%S0C!%qq&t z#!ZhKQTpj=F?a-4cZ8o@tG(@;O2Njh+SiW%4TjOF{~3glwmiS;w2H2t&XDL){g}i3PC(is-*DLEQN5Bk-OjUmj`@$SP-YvBU&ema z3v=b4c5>9oJA)Qf?c79k_!P+(26Z~t_(Z6+*^w6&{n&&GBdJVyhdY+?$F-7}=HytpyJbn`AZ?ksPF`5nb zsg5R6)+`m^TOBEKDbU96T&6|4@i7Lwquv;A+2r8F#}pp(t0rD~Gu6KS)epH8exKvg zC-pB8ZVR-9)85s7f8*G>zP+dJ5xId|vg|JD@kIRuxFoX(KL*q^Wa#`&&MCrpq8?2h z_KDOAq#vBTAw6BQg>Mpf1~}ju;H|CkO~H@91XX(k>fT5Bc}O z)uE|+tp|dncZ&c1pJYj&8P80-7r@0+w}H{?g@&A}R`4=P6Wj@@-X{)YGY{W}R!56v zW?{nbcRYRC1z(&q{Ql6z2@W=yFh8t1wTa}Vu7XhWWoxI)gFbbzb%AAB@gjpqU@g1}=|B$LT*(N2mOJZ+CR`+RPSMq~_;;z|EFDh_t)csmIYZD@keZ!B zShLm(50~+T8s6=V@lxG27TF*AJh~6pe0>6SulM1eHePCO*S481kHW{d;};5=+a27D z0NPS~DiyT^Fa5_&4IyXedYct5sVL{O-Y9+7VVN|J|zxo#jLx zCm8p@zb}$3nQks5Ot<|nE&MHRP^5P!$_hShANnlW=9_8-@$anvop85qJi-$PUYE9! zH!U+_sE(CtQ-h!(7Pr~%t*bkU16Q~^Rf0{et4X-gTxBREUpVRs`R%L2;Xr7L2h@EN zjGvrqQ%$b_{+C9B;Om%bF`WPycBe*yYq=wS0r2&ncF-fXdXdPQ&I3cX-z8R-(zg0r z3(P>ckyPyg?az54@(bxL9NSCJmL&G zK>otmp!U_H-qyd1h}QznRr|AxUso6Y$lf`;%ikV?jx%re^oP6J&DyL)`9J;bA80zA8yWmF&ciY3hL3^BSn+pEgg$GRCcYDLs_&q@o z5x)mxoC9}vZ1fgKpCg^qYFy#QVq;&iZ20)SAu!fZ;|{+MG@-e0+~@?Wt80AV z+CdvPczp?_#qqybVkCD^Ie5f##t~MiAAinBF5gesRTB;$K8x*Le%_b_2X@uCz^Rvw zM13Jv5S)14I9;U4!Q);qP7=Yc#+opA`+Xd%{H4Yy$S`7MkIj_k;HAcF@k+)x-D!X= zD|VrkIC8HqJZh?G3uR|%#WGV(9F%P}_7_`~Uo?^oP@R_<$)(JyWk&JrprWS64`N>; zQ-RPZ%qVBX4enJNKR6Y%+p*%Nk=Q&pmmB>mUN#OBxzM3d_%arHW5kTDF-&MqW$OKcB_qJMB*H*t~Qdi zMI79-%qo%db(oRm#u{T=a9?92eht;RnlV`{oAw%=!qp$vbii*J8Ob%>vFnZGOmO+}8a%>UZ|o^jjN3p5@%0TBdS)Y) zr?Dq$BB6AXvA=k{({us?4PVwam5NP`-(;K?B-khSPfWOF1~;-z7%8na20QBU$o#2z zMm2ngk)-7~y~!v(9ER?%8)x`hqYA?dc3|?G*Nu;gY}D7+_(HeMw37&qfS0!6(!00G zh}o<*<3Ej?jU*Au;L|m&^aVhEZPYK<6yi+XA8jruyC6d>;U*{8(mKvyXRN9HLu=oeA zXD1yw4&JoWDv@^Qk>BK5Mo(Qi+JUyiD8Ym(Bk`v=h0Rs8y_5?z$hcxtN#<^N!%w@&#st2*DWyfbjdR4_*%~QMfd!=U$C@@)Y^vcVI;#jlJL4zp z?KzW?#07X+UuGOAw!i3dO-z$cD16;0x@Z+waIWI_82gDe=Io(n>g6l?Xr$9So>YwX>uDMfaYuj3XKxYtNtgCN)s=Io{7 z5qblyyhr<*JSz6lZL-HcYA~q#sF8yZf9Ss7m@e{guMzF^^x!2pzl(aO=OLp-Qa7x}%l00k<8Q7<933;* z7EJHb!F^Cx@jKe(+{>$f7gfUQ8EE~#zmYm#5743ZuyLq30=&%g7Ak^*r%gUkc@!t> zOrDJgD3j2BsK;m;apNO+$v&t`;o{zOv{9kj=- z@Q$Nu3&9^ebcmqr1L|5f6LvgGz0u~fn!nJ8Sb3E0<%kdfdB?2Geh+=;N6B~>x8~Y> zn`pROY;_3dd`PX3^B)>X%%}9YahcHBbuZUSO+G66*E_^H1W zXfsdm8RZSqNu$3&1rRF^D(j6tm~MYBevkEpkz|wW-=a1}rx00wuz$D}AvoKjHUiqN z(AV`zBe_1QoixrCn>*jK7V{>ZqQ#A#Q{MMOXx6;ENwtq@(7sQmH@l(oo z_s@*veeD(J+9){l8Fj6_zQWz8*XMN5bZ~`hZ7`@mVR^>aMt8XNxv{M{AH41(Ul^aX z0^a)t-2pjvk1s92?l|zvR-(0oz4R>)b9I7&+btBMo1!t(i#`|GBL*?R>7gFczJ>#sA z$xq zti`0@zO{DH?mShE<}xqXbio({vagPMo?3bwtI@aC3%Z;~EX@yT4ZC0@n`9F$Kcs-P z28)Bt%j_GB!>xb|{mmm#`VC6e_67@K);n;?AE%_?H$*7?7G*#9qA|(}t??JBd%;`2 z8h{Ju+C{oeW0^mU{)WyOg7LvhTWkdx3V^_Gjjb%23WAB>TImf3V=|U+=|K06vQL5; zzoGBe_`T5;P6XGs0nab#KqFQ#od1q4owV<%p||6E<6@DgjiI&en#Knka4%O|1Vh1( zbio|DL{0YYKTuT}5m6fmPyK-NTo8^!K4dRtk|VVJkur(k*rrj#6^oxb(7TBg?BVQ> z#z>J@r=N_uB4qJTRB9bB8=n_(hDM@JTX6uVMZ1Cv=fY)UkOe{rL|map71j%c^;hUl z%)w3LE0OIB69C4bqRV!*LHwurKq)#k{2YjM!`M* zoxL+WeQLKW)L)}EJ>s{nXkF`|lah4wNKn_)@t%I2dXML?(_IB20Wjl+afmn~=i1bU zLcT6&WTX5&ptW7^MjeSQ5i)%M%t zYg@yNU#JbGwna0gXWLpIy-b38ZBd$Bf2I3BVzt#JpCjP?HH%es;8z-9KnNZdCE)B} zJu+rTf1~`KPQ)G0<;|v9b*T6aBUPSBwH{VN9O1ts-QX$*cbM{vv32=`z~GAC>6jtT zTyZ+K{DC(4!Qbg#hTs^Oc*_VD*eS4VJZ=S^cBUw}kbV;sUS~R8x zw#Q*z_9wM2I2#-x`ZgUfb6E_ay#F4xCOP=55nm5fcEOeXn!Twf)ZIbb z@$mzbo!2#($T>8kYgU@ucekTcMGF%Nsc_nxM&VWPrvpuWIoa}rKV3l!q&EEG?zR2k z%6wE;I8RAUnDu`-g46@odqYbrBi0S(_rU4tZEGTNl}HCud+6O0H>>WePzsSA2{v;C z+0OK`*bfAw3t(@0%>rC&0qF{oqv<6JaC?~62X)9(uQs*Y1?u~tN*J0$*>7U8FUsPF zP9|cM@iNDLC@p`e_sNvYzq>+SKOBjJMOI0bJyL56aV{pZ2XInY76yyFa8}ctOwKUO z)s$p~Z^W{LI#)V@oI>mXq_E1(G|Ni8KJHeAu{}6>m_$ztIHgk_rae}OR1U87guoq5 zli#KM!fzhX){9EW8gEky%=I#nV@3pbf^csWG5!%Oi!C9fJ*@1}(E)6?>6W3tsSBL) zF%gH)W=L%>P`BW~>j>qG?mB}1EvhaMscS{m6-OxCKiLkh`_d^~JhZk4jNPMKsd_6O z2PR|AqhYnqpzfj5$9pBNzH;qe0Gt?RRqi>ul#c$;J%1B94dP{+15D(QiG$MvP2^0B zgYN~Jrdy0s%7cZ~v%KL7egWzU)cjVLUIt=_!~HW{S1m zyg!@@Gp&4BnXb2>tb51%WIQ5F#C30O(Q`ER6*(MH?s3DvLbB3}R*)u{ER`__+rjcN zxZdwcblR|iR!|mcT5G`~uV)KR<4~1hy&jM;4wZ|g$-^mN%eJt89BM?5D3f@+4Z~wh z?O^(Nw3jeejY64-E2(}wx?0K6bbvYP>}aanIJjGDD(D>iO>5H%k#_`lg^d|#2b^eQ zA}2Cfc1Xm&m{r>ehE2jwPLHKhie=p)CJU8le7q?gUeCh)bAKFV8nK?#5$0PE?g)1# zBjG#oCgRCsm5!jcHN9Y^3WD*FArZ&3G=Z{juE!CGy5(iPr{OFICz%SZ5O&YOj$BJJ zEwECyvz>`tZ^e;{hr(pa`QrAbRFG2W3~}(VTpaT*DW*Z?ryB4AOe&R8L?W9vZ=@j) zWueO-#`fihWh@V;8 zs-gp(+vavFXQG2;#x5`W(CZ&*AMb1;Cm?-#qLo$Jh3;1ze76`?*utTv{^jFO;N_yO zwD%n8R0+DFIui7rRhs~fJt?mo>uNWvEg%>}X2~WD+RnyF!n0hAo^&;JhQuDGM?`r* zGAW?+FuiC2CWgq(d9_1f=!?v~DV(1+z|2mP-fhH&D zk!Gs2D4PO9`%q!SDx=`h1vnp%^*22Um3>VlXo(2@pw~ha2CV#K`RY%@;rCV4wl^aM z!-Yj?01W7F$|>LUsjL1AuTNRrN-?8jZ~L3vbabM24A0m0gpdKIRbn3y+#5ok)A!5) zv?J!SXjt&5X#`9hh!#@ibI5kuU^=;o+808fN4pGBM?vCXYC0gou%@!x*2?66-A(ZpyY&7CeHQl31nt1M5Eu)Zr%2 z@}VEN!&fcoLPX41$bEti2nSCXNp)qPS8!|TSc&Fd`gl_;Xlv1ud8U$@bBNU&s@CAv zSwD(yKv*^jv?pmF5!?$(pE4~MyT`#}*5dlcb04DRu`C%gzvD9Ny$%t01ch@|Sb<`( za~+0jES+(4r8O4qw1vHZ_Q?4$R@&iZZD7w>6FE6Ra=gq13dd3P;x*BPpZt6cP5pu6 zP&XlKG$gGf1gyvK(3SBfdagFnlz@rTuq=I|sShM=KwsAK&K@?gRqV*2iIfe5pqsuC zyS6IBM6SSb7FTY<;o`0lAH55ka1XI`i#Y23OuE0HejQJ0_|Q9NnS7z`P8(k+ZM0BK zld-H}k|{@I_U3)C6F5}jCT}Ja3K3QRNCvaBS7KD=_9RnV=snpKZ9z2xR!ugM!%b|A z81gf-sZnt)o4P$0rUP$; zl-ErOsK}?vsTq54K9yZ_SyWR~g;luFEKPYcmMeTxg(AbbI#57GrWq@!kOnt+S?`%9 zJ8)HSW$^H-=PdN78kJhx^8J~?Fx6rsHrFAM2s79n#;O>=YYIo)C*=xKk=4P%rrlvq zk%^pLG}BtHVaEuqQyNN=K91Z5+%qMU*E` zbcWk2cj49P5>tc~^me;&ds)wx4%iE-LYA^#aG%O?VO2ScAVO&0l#tf}n^FBwr^Npo@SG?>uLvAns> zv81m;oFHUAM%T{o!Rh2b<TsM|Vj3@E^A1jY&P49|UVImgEuS5Fe0vreP4%N4%IlxPTwCv=UZ1do9*!V( zM|kOZ6S+yriEKPv>jWMzSS?%e0-aA@C3Gp>Xbv62DIRtNO{uD-)UDxVXOE!h4PJ>l zJN-pd8?lQVL0g8ZtMGkP$vRef<8*xf{4#>hzDOmNqc^^f3z=(^G(>1Z%~(cFb2DXf z^T7&eS$v=z(apnSQB+|lLhKlC^nhIq?@ z90&8V%`2!a&B5(f(s+^?j5iWa;EbMGNx3&8ctGwd8cj7fbSksDNnwv1;ksTKsaR9L5o@SU;4~5J0teR6$fdc=8OFb2 zb#%|XLe~_pl2vYX1m}K&#;ns?6S>BCdM#QZ9-m^@m#sDR6vqb3$dLjm7AiMTbC-i3*=XUS>DZSynig8LmH?HTsF)y;0Zj~eZZ?IMKRXPcj9FtK0m3h! zHNja$Od6um+g!HU!oSkN&o-Fr>0N}vN*bBw{n)e-t&_(V`Fg?N&8WTkXao!i$2<5| zN8{v0H0GMet#C+)b+%(+-Z$u*w0nc@UD#+icz%m0%jP zgn7$EUYjf)wKo)kw^8|;xs9GvA;b?>KZ#vA@B_Buzn#h+M;JD8FQ)$APRXtR5tm2f zcB-VtzD-%ZIg0r~%}=;8uD?yKP+m6d9jd$6{EBDw$KIjaCkKz%VImt62miE#8h{9n z0l12Dcl#Kw9IXb!`R9x9?ZCC2bW`N0ovLV1fP-&e!@ZKPX-*;iI%+t}HO*01$TZZ? z!3l~L!troHF^v-^9I@kJM+Dv7`}6S?cc!P?I_<}U>{^}Pe^ zFqlHE(7b1$s)1Mb{1w@_br@aHv^h2*@JF>N%%bu@{kX0lNWWp|&&na)ueDtucsF&( zk$Mt*^m{F)&fHB!#a!kL^NjRZ)?5|^tBj^0@Q%q8Z^2L^xH79lVPI5fPXB@2A^YT% zoA-UkpST+C?6EopiI?AYgpDNu^+daZF{ZG120Rv zi?-qPeO9}M2*fMmG<{~{g%6Zid`Wh|%G4#olmm3@= z$BFQ3omFf&WOeLj*zUy`-@DY<;5>cyF75g7_e^0h{V-iX2*xzVhp9qDFgb-sNGtgD zJv#fG?EE9N^BmmreJicuheqC~y(2(v$=)++~}aNFw%Rkf%qJdceCxMSNc^tbL)cY_-qdtD%6B;7*I_(Y*`@OjU@ z9&liz9$C=I)GxNNhvbu1nJhhNb$C3zvC)82)cru}$#AO*WvcNg8Xs4@_j+5osEt^t z4Slei{DxpN54rUwa(fd|Tf@P6>htnmq@T9RTBYA!Tl|78jUV$WSmvfH<1i@u*wjf> zdmN#wKTiA9V>s=L{E>J0nAKse*Rjezp}{~-VQRo$caT1%?lv#m`l(fplRqf!uPaOa(&S_#ve4%`npqRSGI@#ML;nd6 zgdG>`Jq0k+5V55I0wfR%$=_q_Z|7N5%U7R@b!0*3OfIAyBq*`;^QNUO#OiD22Vv^$ zB|(ntPJ`(!Qpx6nkYIN78x#2!5pR=WnvPHUsI5p}?;lexn<6dQP5_7N#BpYb zP7@3xC=gcPF!iz^oB(!>rbG*H4>q^a)Q5CM=i_1HyyCZTZ`S%}(^?0S*6?;L9KQX- zbX^4NLkT#P0gzU`&lWcSVRB^BZBsGnA=Z}Q;9b)nVr>ro?w)Brl(uBVrsie++*t%H ztUB%pmAhRX)@88GE%hWhHa3h%FUNk-hS38%T_Dceup97e3--EY0UXnDj z0Mqvr;+J(WA3cI{iXVJ@2gzcV$ER}gC+jKhpUIYL0r3oYbLh9HwJN(nUxN+bYET!zI&-W+lOC7yAgfHP6!xWpFvu{A_2P?TChVN|Fq3=U%nVx7fd%pgJ#8&BNAX`^Pa1G9@@ikn3pzNYQj zwFLH@r6lwDbp}jEE?$IX*u!6JA-yCx8hUqO-&s%%09=aBEWIoHEpbtl2$=S5f6u+qG0r5BcS9d$`1F14_JVCILPT~ip`Jx z23vsnCEqd&@V%$@`oqUhQ%+K*GJo(GO~H7RKM016rcKTp&Dx8d=MOVZSRno}nvvU_ z__Qh%hK->O%^t&&MT*s9sDzfyz*kwXSn#-U?A}29>Nusy-}EgQOId$sEF<2`g|Uoi zVoXjWS($fCixbM`jblHOjYtxiw6%0W$Stoe>GKLR4GFhb9#bzNJpULv9 zl%bHh!k1H#g0>UgxQrjsQ|vQ|s!b%r1&>(XT;_77nJYJ3LeFMF7UhA9;IS-5DsvH> zHknNqx#A*tXEGyEelCK`vRQ$MZ5BbhrapM4;PtY3Qz!>qA`eVqQ^m?Ck>rMgSs3l$ zr(C^PPWXTzJ*3v5yr-7~w3^1EMFJzHF>>RR3+X3QSsw`Z#lc9+p{(TPFmgQ-#g)WN zmriHoNtW9TS_>tWG|h#S&!opLe3l;ZDrQj%Ka9unhRKu(F1X+2vLccR9Ucy^mJdM_v%d9n9 zaEUe8^ORW(Q)Z>w0A|Vxhk3uEUD3<2QG$?*3_X;enLWF6gZ=t6O`+xWEhgYfi``?9 zLd)wH76w|v9#?Shu{*lr@jWpxtjBJA-0F&n4mf;OkKJwmAL`x%D$1kn|34tTE*;Ehff->BT}~!j)na)2%>?BfC^x#0n@XEXXd#C&d^A)0^@4 zy$4ou&#uY)Jm-1e^Z%a{3{1bLTr+dcHJ^dP2i!p(KjpKId-8_?!&QGTU|R6BWdY+3 ze-L5KXko z8BM@;^%mTNyl!Ih>yPVJIj2f+hv@;-e$jaRwk+&3H?}^xjCF-my@S?em!C23e_H<;i`(N`wU$&|CqObht!*9K`utdk&Y#j~U=9#O{J| zInl0?k_qyxj6^O!3TnVe3ONFFz@!53BOX$h2aB@6J#i+t6rt z2?c%^&sNY6^LzmD66zSv{b|yln9R|40_fG3aWZnSpV)19WZ=9^Bl{62dA)r^7%o6} z30(!$uHIB|RIEWGx(j9`#{s%>e)Y3Jsyrsv(#zTsVd@0QOW7I4|24Bw0QTA|G_y@iXv1yC@-R0KS*h=0xxj4)VPRbqDDwHXzcbVe-Dx2H?e<&6PkSoYm$VX>5Vrev@@ zJZNEksNh1$q`yIi6~6;(UPSe_lGv{F`#Wl30R>!GPw8ufQ4D5S7s%#PmDE9+;Ot28;&Y+Gt zQJcmIyl@9vPf6M=DW6dZ7M7sC6Ie?=GbQ zyG+>j@D#u)bNNdO3tmQ>yBfqc2aPOW-tmmsGB+BtrE`JP)rOo)HmXe&yGEWFZV{V= z_otng#jghFY==BYkj+BqkHOOFyRBpZ9V9 zD>P(^C}BCoY{nIFG#Qa+_MkbS&9PW=l9EZ37tKgO6M7V!Lpw{%<2ipJ#sl{ZjHxfg z722^c#BTunY?(aELtl!b0HCw38EENOB_rga4}T?w2J);Y9ey3dPm;?(K9mSnf*_y? zV+uI4AR2zPWTHH6BLPiVxpC({-;@aU*MOhN_y0hi3C881ox$>6>Lt8rrPoS?gBZZi z1o@r*tvH&&I17*_Zm=}JE>Y0!66_s{Mqr0iR8-<1|9}Usi@O29&q65t>CVbg@EJfJ z1*kJ&+BCw?T+GN-5YU9(55Q-=%>)GN40~;jvCtbnuy7;4FU7%VB%(P`f~4%>l~mgy zwjTg#g6ibanS2CQNYL8B{K7y8eT>D(dzF2hE9ce-yi)F@P7@{!}7Z zp&I?HXwy$6f*I@`KM>J`$@GqwL_c$&=bl8zE%>R#A1@1vAJ2mVh9(GNqcaDe*-KM~ zunyt@fH?z6|5vkLWJI7TX#V!j>~WLqS8+SnT~ZLygl&4aA7E(a%4g)DInuL{u$HO( zrNldbv4sOY{=3*eyORPM&53+|E*V7azl#fm?ofcFIp3)^7>X~kfUV3QcTW}IG}G4M z%rsjnyCrOx3Hj`ncR`*rAZczi@n7ir9my~Z!RL68;RAA7A(F^z)7w;JGJ=FKgLj!{*n7kMXXu_@m z&b{cmm0IXu;GV%ezyrdh!x|R>s_U`Y%vFn1Yo)bXkRM>731Sf3GokYUdDe%D4kPVO zEvl_LN?v$QKzrX-Ewm{JXniTtPAsYsgC>k!IEQwwwUCPhM)RbH?Zr9Xh(Qxo7WQgk zRSn!(IBj)MPmz}t%rjvY=I}1y&OB+WqZnH91M^Ij77`#0kTW+aMmU{zQVa7gPZGE@ zZ>d3gZ%=W7=Gj?&kGv#2&<bRp5w@6*=&&HKcN80yrv&g>Fx9yt zRH~~wMxGTAXiv*sKr<6Iv7B$#s89>44W2g8W<7b@+p}DJX``#yC;*)a8U!QWOwiqM zl-WYx!yZ)WjNY`?xMh7)KaU+!=^7bIv(lVsr4&KY6JIEkkG8-e!vlewnZfp9!*fhNVyEMN zpq2?88qVGlu*{dX`lFwgNE_hJLTPhfwXi(_ z;jAyul_JB`;qrty{p^V_aomA^Cal-t!og=Qk}&b3f-s3-)epA_PkA^~rH9y$0YnR< z_I_epf{G^WTfjjJmdf0hY{SL+1`#ccW`~Q30E^bA^LuWGtNY2n2Y@t??xf`WzQ;5Z zX`(L%FHKMm0fNR+X~Mh#XW>{8=(7Qod=Jvz_Ty)E+t>TJ15pNIVTrhNH!{+MZ8-2~ zedx5rYuhWD5Nnz`H%aG=y{{mC^_Jw#p|{7@KtG$^U0Jq{Ln z;ZznW4t<2;xU{}BLMblH;HRRWmEu|q&V%X2q3U>vq9({4o~aR+CP<)eKakQq>6>Dl zzwlB4i56$3>_}$6+!=ry&PRLG#Cb5;j8{*PaA7#ES|E-~#2ZXTNE$B0?tqNNA$gze zIoBMeI6f5O0X*}d31%aLFa$HuiJ(46IJE5>e+RW+Ckh~*1)yq<)EciAR0rJ8$aWGI z5AYjJOB2mT;Y=dsU~#>{ljAV8-v*0K27KCQW-14Sv}feb9K!`T+7>g;K%#-iHwN{Y zJzPD=Bmjq_1=8)|X3`u-!`eEVHKr3Y)@B1c*?~#wFf+*jo#sUclEf7dFB~cj z)^u{TI>bzP0MpDRV=+d(-Arh((tPQgG2+z73j|=AlCHf3ZK~97U-4+cd6aB`c+rkHQDPxb7edW;2kU7ZN_ZOSE~99o$v~EY z({4{xKPoRXz-b@JUHDfR$Iuuf8qM2GAW+eSIh4l*5Y44ibq$##OmI8^&}hzdd$9Um zz|QcDxG(zc#4J%D@Q|RT+0*2yYC*^m`vpfp?BI$SJ@F-np7l>SOaLwe8OEfk<=fCJA|KS+CjjZsLvHNU$B?PjD6e@Okp z-9iD6W-6aK!pw(?26oOwO3Dj4geTNZ7C`u@Zc3Wak+~lLXX-0#Rd^=l@{aSoaw3=n!! zr)0{TkJ+?76r{1+DcIPx>pb)OqyL$nr2{R-8EL|r5Y8Nrc2J%#oLfv>I0`M#j5Ba& zUNrd$_2})9tq%F~VeeIY$(asp`NWoT517>*bI_TLl4eg!-@xRWvtF(0N<~<7%A&Z@ zo9pGF9k*{WIMLN|aeC#^fK=ORrre;Z3BrPh21w11lnd2UxBq7Frhplb)r zJ9ETZIQ_m%Ei{)g9_OrmaJR^ysukSL4-B=Z0j|^_wJ~L^8h{n?twuC&2jFu);69RBN8m`tph5}t*qaJ9I z`Z&o?NErOENi_UPb!s;wE$=zlf10iZcu0WKKqTC#eq?+7Sr}BW6}3@3P$xF+3H2U% z3E=mOi3=yDy>H^oIcdTGMtttvMMisYy*dR9HU5{dg*S%mf}(YWKrzaJX=7d%mj(#M zfoVd^!uh8BW8lIuX;_GFR|_A?{lH2SWEGsdF=;}NF!}{i;zBHmc@aTROESr{3y$_@ zzWQ17e!?(B!rfdnZ|Q`1tvnvbi2;uGk{M?p(S#KXLUS6LY3LE1GoMuQ?aTh~YWwQXaVOAVwnu=9_Jq6?+~6Dp zG;X2eNy-Ay2kQ3WVD^piumvz9G5?B26Kpn&X>knNVv~G0{LHCyGDbdl0$?xf6F2S_ z=k49Q#jgYqt-qw2g8j&DFr`W}F`t+o;1s?i$}4VU4@jDVwjIHyRZ#>r@rHNBBMF4+ zW~K?%WAp>6@I6scZS>=OG+_#YUkpWj2xY4B15ud@KMqM#@BrIyq+yo-K&%8H(-I{A zDMB@Nanmy7&Pb9Y(-hRN1Kj|392DE@((&T!Vk|O;)rxaCf^(EwWT%M)g1b||9`#6* zM1#plR`aLAJ>n@GPlg9D;?;yR4Osv|XVUHW!ai}8ZS)h2){M@anI`Pby8S>(1Ca7l zOnSV%ImB)0d>BlAYIYXk5ser%VMS#03#L;C#d8ItA7`eSHb*dVKH4vZ;$cX4Jn+$$ zn5l6i22B|0Jf0DLw%klSBk4@oY4dpS6Hd9hlj9&W7$-vW@Tqw6Y7Es^vgY6cu#o#y z9cd~ioDmUeKFKxW(I-^%G+V3_r!Tb~$3N`VGjx`7Wu zr?3ITEvL!sSsjlE%9)ouqRLG2R;8lK-UvNgU=mvBB?!ndXIztyiBkjhcSo6cFu+5B zdS*wn%Ec3~&a84#&W>{N1PmZEVW#6~GxthSzilL*dC-s-An2uHY~S*T7cD#`?)!Ll zfS`HMIt`}gjaA|_$pZj~=GPe@_=rjGlfY=t9uW@`z%3KjXh!&%a6rhN!98=Ky^Was za;kvCs(c0wY`XX}vd|o;Rx9SmQDFe0JtA)+?hF>1Z~(xajRdqwW}*OhmTtxwQGBH{ zxX^B1+UXjx%DNK=?Tj1vcTEXK#@hB93taAYF`zp#aA^F*Odh$Xnc>zQ=aCblyn~;h zdx1+hy>?O@<6JBNjAl+If*|HkwWrk60F35G57eUbWN$&`6dn_|LdH;CoU}8? z)#2LQ~ioGVWM7Q(fuLGiDc_JoPK*%r-6n zY=T?^HjT5_gvAe>htZz%V!gtdv)9}uKlFkNqBffc0EJCKm#mF--ZsZ}`_4J8wC+oB zdg2#00cZ24Wf#>`lTl;=JKuGlD>sf|KLxNck>7 zjSM$o3g@}PFQRj5m2R-+w?TWiZ5)`kZyf4tMvcg$0PQA-7VZp;n+yG1tPbFbB#(0@ zx-5!i9uQzRdvbmm3Nd4rbg)@1SUe)6#Clt4Qc)c27C_tDAfDS>)WSq3MWgAL#O(-o z2I8#`kGK8!q~0)EG1EdE_~z4@xc+VPJ9WKU-2CZL6u{ohl@*9LT>X{Gs%R5!gm|F< zdlR-h+_{_XwxAxH>8^@WZ0{nx-KAIbCt%)$Edx&uOgCZU1ZR$O6PDJvZ5-7pLJGdX zk^Ss|`5u%WcZqCdxpgfl5MJm~Myi{jcjrJi^_ObF zkPSDi2hgScU0sTBmD+xL@G_iFd?hwAztU|4y_u#0MfUVg#+w7({}qni6(8Znh3v1@ z!Sap>kS+@A%E@+1ROU}en6ff z=uds=tDdmqQuffqkmFteSxl`6c&Jg=#4g31frazxY+9wn9UHO_0>iX*5R{|h1mh;| z3@n@v)rMgUgfhfR1UYZ2f5`0ihld9*PB^vZ&S1m2QppX`;J#SyDql(XSHq@Yu&Bjvy7;e)oQRsL3CH*Nb+Kql5k7KeK`bHXae+`LG8*AJA+pTCWf;{ z*z<8eKr@Din}9b1e)iojGR! z>4eoAFN&qFnaTiL{{j{eAFVeQF8jh=3m4JTY<9rYVQ0}(BkbgOo)7tHQq8mr7ceOoyatpRVyT2^CC{Gc@Bk<(ERLV*n=A3h>M$4f<0wTdmhvX9|YWwuoma+ zsqBX|3G&RlaX&AlpxTV@PmU0P}SI3ni29uU!A3yAb0t8mPS}iCp{t-1^6Ff#mnzI#m&}? z5^k|~0Zx{u0>`uLS(uHUnk|;>o7v*n0iZ>$c4OeatZ|Z;bJI?Z51X|}vsRQlJ2k!J zA)VKXGt-c@qP&dQpoucYJW}ZkfN`B!t5L{Poc)F-h-{w_o!7sK&_hg|n_kD_MPuUp z;_H~#Or3A82d&ElI7uGsG-2{W9C%3+$kNtnL@XT=5G*wCaaZWNovSVRX4tr}@f$VI zS>zwZlwVt^adKK8vT)hTRhg+7pb3)dS66RU=JM4GA5C47xolNP=3_Z403KWjlwel2 z1O;3O2w^tDr!HI7kN>&~!D!xfcVCMXW15~8DO5bOz>C>#(iB)wQC<%#8vd-NuSGa* zY8#5v`8*Y#8V-u_WED?q_FIt6OFeuj$wbw2*&h_KTWuxeFTQ70P@;95H4C zekhM>Hq4VW!9EVUjG1|Oxa^N0H(K+OxFkVcm&j6LD>iHFtz}MRk~k}US#!lo9%x^_ z*gEJ3@!&gY(uEI)`@QnG=t%Nm$IubIglOo5Lh~b`1a{+1&2v5E$zcS^M+(}{pE@>R zsGgc@hxZ9zSJ|@%HfkQWpf?LNql~Tlzu995J?25SaJOcMg-SUnF)=A4BUY6b6B84i z5u1<}9g`LZHeyUndR9z&R6;^#T$Cz3F*PA7F00>wkbZQw0=Slm?`j+(qLQ*wqf%3| z5)(6{lnL=!N>y~KDkdvFCORrzm7WomkrAJfkfq9sRk2O)YJRqg&d7Xp;L=nKgB3|J znX1gF3{`wgd`6rqEjA-HHX|V>Ej2zqH7X%3J}M4nh>u4Z=);dRb0d^V@klK}8Lf(o zO^nTmNsCR7jaEfvrp9C@re%WXm=&Fd5=LjlQ{*1aO_h{U&VrnQ2}zl;v8f3escCWP z@d?VP%$T_JxVU(@B*dsP<5N?W=`m?ar7D#s?bQSgh##a(ic)2yXDZ_|veL4Y(Q&cq zajEg?=?PgGX&LE>iLr@MNFX&aTB)Sh5knb+7|OKNv@BJ6TD&STAtoy>HYz4DAw4cS zDn1n-r&K1ODpZ+DRhm?L+b`Dy#r6vsHaw(X%%JE&QOcx5Ra|ClI{u4|i^+_RO;3zY zQzgVDq$fnhqXtxoS?Td`Q)W`$K24ysO|fCK_i1`qL?k2uXqk|jnh+C}ni!*sSEj`% z6B6U1QxoIk5>i#ls4P`tItrE+&tBNC8D}{l7G*`?jP#6nRYq0<>Oqy6nHZC(ijR&_ zM#rW_XGEdNQxlY#>6vuI>9$bXJjZd;-aIovZVUViiypLO^b?F zrpIS0qoi+J`S{YT>}8KfW`Ty9xuWwUAB`ClGf1UMii$^dq(;YPWn^TfW~8bzGNR*S z6BF?Pu~7+VLse{4W?FoVES(%WU8J$2$PA6Ob60ArL8^p7N*Yz9nQEb={36X{{O?Qt zKNeT4QCJR$8>C8#OHDv8QN}5e3p#Ujd~{}dR(xgxx?^fA`gVM3T&5D`pcS8J`k`;7 z#zseFD&rH<(SOils;v0L#HiS`wD?$Md}?A^Y*boSTvlRc0v-KC(?{xy@o}lK=?Q4H z==8XFq=zn%rA$bTLrbaRQ_)q@V&Y>HGMVC2&Eq{HVw0lcV$elm&;=7!DyeToCnTn& zB`B4Nnb9$-gsk}VjM%KSv<&)$Y3>P+NlHvhh{O0ui;qu_PmGI04MjyKCPXPy(Nm)` z(6ch)P_kHNdss8e+9I0L$~1Wq(J@J}sTg9ZnK7}d^vsMXWqcxfT~@p@K0QGtRd8Hd zR$?j!8wHeW`V9J?hmY+SK7^K^&K}e`$*id;>?xCRkXeB=a3k94G21vW>;5|NWLVJS zM>O)~E)PHVS?DzNNAS;|5BMrb85`{`CK^JRsr>1cqZ&`qs~6ckhxuNyImU@{hIrYK z;kdgEbJl7$SpVY!oC==`_F+d(Xb%4m7XELZ((L)i6j}Od&CGvJjOos3Ub5)_PaxXC zgF~|xF3DU;#g}YAf^jOerBCWKul{2xXnwtB?mvcNU({=QSpIV`y9SMjrXGG?6DMm3 zTK=*PPA0y!QLqosYx-Dt%ht@DTuEu+a(P>HFJ^I3bHGIwovHt&X&ge6hm`u!8*!yh z^k?PEj;w!JX-t1vIQp}y)sODmRVXYFLmouL!;?w{XYXIzdeQBXHTL;C%Irw7sMLmT z4K?84uC>jcQVv#GQ{gTxY*{9k_LXOIu)MVw9hfYpcX_)_FBCQdIE*8a$55H(CM-Rvx@F1j(n76%kFO1H>M#j{sTuyLUo zGfRcN7Ahuz&d)5BZ>1P2<_~LHvZmgHCd?__E=!MHn^U^Y;=`BbmG+>#mB(x-_or$F zv(79{v8I3hT-~4EUQ{aVwU!RI^&ywVr490gt}iZ)wwF24*~e`M2`*cDcvG;KmA#qO z_U_fCa=}0y4?6T?_K%iswjkD0=tiY$N&`E8vwN&mFzcC;ZW~IakCnbj+sgMU@>dMC zVXIDvOBGg%k~`%+7UaZE`II%>#nYJ<4K*leQTjfJ&qX%4 zPMhUmLymrBb@EJ*?EvQPUsmiWcXz8OOQd1<-t=Sv{mQ-+_i!hol{7r2Oz6M6N9dwy zi>Y(93UYOZPQGZRDJ4-VN(t5piHvNHj-jGpouFLg&VC`fe)3{Y2`L{*lNLq^iMaVj z-9x$6Wq6s&ykA}~ov20KnRz*4`eRM$y_mjQkRu^lJ}~zP%><&u%)Eha$71|S?0%{ znNjwsP#9h}kFG2G)HFj{w7yI}I0;3c!fZE`1qpot?k~#|FxE>L1?QFtyA5 zx@e(3QO(m>;HI)4{n?1O5z!-UMfT#%72$vVM9TZE(w9<3sxS!`8Ely4-ZG8QsdoSW zrYD%`H@$l6lGydbW$A)o<~=j7v}}~Ts=4#5mS`U;h|u+9qsq#T$eV{@h@BMD;_d!+ zV>DnsN6X%oCy3UZN;!$TUNl}?CTJ~)|0_N1?}Uqa0dlu)Gu5|z zw0s&NW48%rKlzm>37+U0573K&}cMLwI2Du z)dy1h^&@y`V|>dX>bQK)DgV!E8`fiad8-pCS{iUkucgMG?%PnVpf?{Y55dEBmG;zO z-x5fBHXDV}V`BLK;@PGtC{#hpU3ie2(wE%&6lW#x{{=3IHPUw&b; z2U@1Qor(ul^rfVfW(U@Aqdd@}^Y4)2(`dqrN32-Cj`Dt8j(mxc)6inip1)as#u#!( zm>rGyaIX#9@_o6g%dzdxay!=XLwUeoVzOaB$^NFIcl%n?wx7$t?98%g$tC;z_u$n2 z4ZiuKHJ4z;T+(b!4ZoCEbcR6wcI15x9rouRN`q;fP4jq48F$f%9{8<%-JNpV(NDjX z|JnIxIV%dGSp5F9Erky_r=X5S2)4n$!rq!H$F=y= z22Bl`-Y>Iz|9?>6Ct56ybCLRcN}DDOO4aao=cLic9HYbr($q>%S3 z29V2@Qak$dk5UgRyMce^PCtRmUW+jXI!>RCkbbje1@Bk*Sy26rQd}65e3tDmb!8_$ zs0g>fE#eajs|OdZT0obBD{u^5U$vQS_^9G%Va6)n92ZL|wsF=-ph;LYY%;%0wCEc> zit>7kYmD6$sxZpApz>iA2P(c7<`yJ1inIfC0aP?u7tN9nRcyfsn2Pmu;lcA>G`D9} z1a&-KWlPEKd+=y?c#R|7UsjP|JA2fU?3Jrmzy_fzjBfNeV#A8dDxU2jk2-*EpR5R_ zj>1uj{GrEe^5<7sQAJh7!^YSw_((;*otZe#8$%F6;9bN;*48w)7GoyoxqGY+ovx_v zEpMT-H!9@nXfl4Z7dzWt;U-@oP;q%oH0@v2w17sOasvSHQiU^}nXenkT5nbah+(_h z!Imzrh*MCd8(L(?LY*ra=4x%&;_oXmtY~8f)@F)tLft8MxC_Qt?g1MLs?;eu|E$OjpM*fbA3t+&tr^OT*%47&WrNt|{|q3bQN&Al-p-iPWet8A$1W+`kkV}k7LLep2T zT$R0a6eVrw;YnLYYKPF6FD@uHVr{q#Vr^9Fk|k-W>5B)1goWbaA}obhEzDdg{k1f6 z)q?Ddzx*l%<$rdCdwj;q)cKuZjb|6!+xW-*nXA$lboqCd;Z9zm>2^!-1`-5t4s9B$ z$F-~r6|OYraz!wORGhaZ<)wmCp1&=}jpM(RFrZsiLXq(^C$(4vmM96ziJ2 z^ZTkIDDSQF0hH$!jkgfITO4TRuce@6_w%sJzio-D8l9o;Aw^icBW(8rl_ev3jd>re+$?5wt?_2-TxQHs|A=lu7ogD7w4 z8I<@Ql`|C`uXG`O^N~<0s&!G2A+5-oCcjq=g1+-9%%87Pe^F$_H&ZvxL1$mXbr%>Ikeb(&Q=an}lE;|N*qR0}4dkq!#%(uOAcRzUs zag=zv#=21MAf`xB}XE#(m&q1=;@dOky{eleHDw4qg- zUBnoCVhww&(vz(oUu9>uXjK!cz8WBp$7kTjjiq9ka=kE*n#|Eblsxj76}4}uT44;^ z`2|IV=VK`4g@{l}c`X!VOP{{h?B>R*wGk|DZ`B|Rs(iK4m-_CnIzg3|!|f>UK-H71 z_CVEn3wE}!s=$)kYxgRs&nH!aIjUQGYd>CZY!s)B{-RB|V{ z_v;imozkK4D5k-(s+m+UGSne|XR#H#tf_ie*t!)Ttr|_aYq9X2qpq@L*UPI8%a4*7 zLR1T@sN9>y0c>YYRi!*AVWr2Hp#3T3c;Bc_(N=i9)Sp78_OT=9$$f%omu)|r=fcla zvG6lTs`Dss*AW=f*EP6NVHhTjiOv0CTbqW0XJ0<=OnIBDF+aIh!|m(-5a~0IAlxmi zf!pUDMU5+}t(e!mqfZKEJt(k0D_?c=c^jIy3ByhC+PPSIl2zCz+zE!uYU@jV1ZQy|r~mSW6(f7+W2 z@0a7Vqswe4I8oa!kA>a-eXMk__Eiho_MIVyB@fklSnTf1E?q!(^gUcBy1PIHQ@Hz(bjOPA7QX#mLs$;Sx{S+){5qh zHrUh2je0yz7axtQiq|h#v9FS}JuKMoBenMnjkf$L-3)1hbEcG3?LFkWS?fT#X<9%Q z#%Mnv<;dcmRKL*GfjvJ~`!we9s`CnppP}tVMKiRNKTqXAuDjdNxDRRtWera^#KFmq zD&NFNz$6Iki)uG_np_R(^lRQxFV^~y)=5yH^H@cH8muYTR&Ps-Q?(&?iu7^*l?otJ zmw8#SybSHj7WCd4O)yK&()LD2cXx56wyl+5&8~~Eq2DU8R+?K=2q*x=rebEy8| zY|)LjAPX9@pbnddy;Y9XxLCV|{GaTFEa&&Lrm`j4B=WynhaT&RHUI3TT7TMp^&lP$ zU4@ED3P0#XiQj5*43MquNs-I6-_g9U+jvrVps~*}FdIIt@}fq_jNoBOjKuTYD09@q?8;8~3hufCcy~ z*uvmfCpz(-wusvDkxR+@+Lb-%;*aOBe3}qt&nE5BVm~JR4MC`-u3wY(YbSO7N=Z9x zt=awqQhGd=;#q$i_VYpQdtHC$H)_4;M3J_gzAx4WQQXJcA1U{HXrqUJqIG3If1+)+ zq{;d|PI#V1+er13PB@Tq9h4(3CEBbW)N6-jptPg1WlvRTuUN2kRoVwF>B>><6)N;T z=tvzWPgzk>cqQID`%dpeL#wsdDesteE~Td&^=6(mS}0ibb^2I#@VK@LS{SDQ8%jK{ zeTM9R+3Q1I7qs_Mv=+bdQU+Xa!(-1MYpvM+3tFAE&72_)u)3g|E!u13)&kw9@?X_J z@fMVNL+hvACrERzgv*m@PK<*KOSz(b%8J>2tsQC6*{$-fL-HNEs@49bTV44^o65Tt zmkq10X`4GcRNL7c*f}+pLS5AqXGIAowa%>mTWz={?`5pMUHc4ns$n{NaDduI(B}Ps zGAYlNLoPTT#GS9``eC&6Yo$FU52?o$z`yESoamm+KK7*OAL~TP`-5$1n^NnWKl4Ke zw$rCN#*&Jxv3O4|Ic`OTvGtSkXP4VDXa8#J<>dN%r2~DowK{Z2V?csN*ng#E7jR^De1cq2NrU(x)55eU6u}%bi~q;slTuGvtl@lO9>!FL%bEM z_dHf0XgeT7lUQlYu{VVI4Dw?Nr8L(BQtoIQhv#(h$Cxg@#!yG6Y>$Uq&Kbh~yjX)G zBt2(iPlqqnc(Sq1$0uh|kx$J~Dths_HTz-Z@z+ro?Z>C(d)8XB(;JQ#Lp|B$ZO>Yt zKmLfjqDjp@;ga6cqgZaRqJsyaBSy z1N)Sawb<(z9y|$QT6hqv!XP*S{q%!r8rtV6fzMpDk68Z>stO-5RCRl>f~_ak3gXG==|;ixbSQ>%v<>aL8t(>`?y>$f=hrisfb3w^SFpO(mLeOl z2U?t_181>^El6K+XhPJyH47ejtd9lVn105Nt}U&S&KIzND>@1}@pZ|GF|6g46Z?gH z(Q6h_ONYAHc0#o{*^!tr2{_EI+*K$t1%kq3q?RbcX z?p9(~UX)tu{WHBJO?EG;|L&|W6RwnCqHFr-T%^T(a@}*z zk2;<_KI%TP0AHD*r0w{gnRUb{`Qo!qrsiIJa+1XIJ#YNYCa`TI`ujw ztB%{Tb4922+x*p0YNVu+Q};wt{g)?p)5Z}7Xm(p$uztRJ3X-6pSrOAq__MC|$+JhDhn-_sQ zjAu?@hYh6(+p+h|D>2f?;Tp)Unqf@QcIF35ie6na9`ZxM{?`gx0k z#dJFR)=^((^WB*lmeQy7r-8W<_8%Vn;Y=uN@vVI;hBZ&D{mP!{9<06Jk_-XOwv;!Z z-kL3%UHhmd6%_8Zqduv%er(~q+JQmjdVie_Ygk{~U`>i>7kg4puMeS|AEKSu(@)p_ z6wJ1S)hAi7xDRTf#Zz3U8%%8nEHUM_pYBI_&h@W?so6N1@@8SmP~5B?cIZ&;L0_ty zrgEn|j}|D3HZ-m|JV@v3p3_-Y|z1+1DkzP@QL8UrLFoaA0k|brpD9R4SSB&AQJSzI$;%cbW`o zz8p@K>ke@Lx1alCOC9@TOMTP;`lhnpnFW>B7h2@6gi&)*vy~0G%&Etb#k_he`m(G( zloZo_!AE?d9y;7o)bthbu@=o#;nNUp1z67OZ~p1)!yt9`nop<(xB{b^P3=YO0Sp;=r=E zHcYhw`m13XjJ?m{jDZ@Gu-nb?a-rZi8b;FGwbhWB;gyiPQ=p{DQ$wmmyxQQ*w&pkN zQg*gP$E5nbbYs{>q;|aFXIrXs^1=<>GY!E^dA4Dm#RlOdS@L5zj#x4h zYrYFPlr*AlwDh%T%*J|OR#{LRVL^GP8b;ADMI0vLuNwML<;{ls*%JTr?$LiO%#t=I zc4YE-e;2$_p@3L)u76MJym&K=VC!mWPNfP02Q*45%|MokT-fVa7kgaXxebe4khxStjMRIxw%i3rAFR=H8R` zRG_}#N>(dlJ=wQa7ZSs$a^gV+EB^X|<@C;BA~haEZyF!w|Z?>Y}@}ZK29{+B_)y@CA4F>xzrFu}Nufco^pZ#g6$KE)Is4 z1M^kU?-wA%{V%w%C)Qp(yu+M;V))7@hSTJMjXuyt*FM0i9&GGwMfxwWa+q6qQ9((+ z9Ocp|nw)j#9ohBSjql_5@5FiNMPIhI0;cP{N@|`3G;xfL6V*pu#8&*>Sl(oKB{3b+ z?{;atHA9eBF@Z|0Ra9K%M6PQZGg!srjal*=jZF1w<3~crh6RFu{u_pUomW|brv*YXQLg{z1_G$FkLZ@8GH8RoO2tw4;BMaC=Njje3VS38!mlXL)iA$+Zf#W&9uoArJQ%9Oi9Muh>JXX(RXBka#5O%ITw%I-Ry9oiJ(qK%M#^1we;F@?IlC!J5O`AU z(wp};MaiRble~_lFmnhQ)AW$suh)s_F*G1A%7+R|n?lL|*(f1$udwJ*LX=yoVHDD$ za*{ja&~YG5&T2{|gY^j)nqwOkOqGA0!Bn{>MnxSj_(2~s2>O@o?^QTP8{dRUb6gWP z3&)#qWcE>%Hybgo=@FqeO*2QusHpyuDw2v0V0Noq(6o=)O>9~q7~f$)c;>&nUpQC( zuhz5rO}ho>f47PSb3!h@3(K3vQu3!QczE7t zKkRM(TGfmGDL;9wGSuq#LQDK-Ri}C z3;}repLev$p6cc_`Ov`hCSkQ8wGG2S5KXE~yIHTl@8dZ8v#iDg49lB}MlaxG5=T2MeF!=?%*iOpNSMK?A-o%!YvyIbI-}4DOQZi*$Cr&TH?n(5G*355IKjNr*ymk8{OV|v z@J)BpWEj@jf~V;R|J^7+M-FCh)HJ!u<&>GRWZGFz%KPbmR%4KU=H?Ak2?Bf92-?=5 z5_F??nKz7MqOZJ+sO(O8!ys>pgqpikhN;X$fD>xKnR zcC-~WHaCT`l8a4_LOuvKjgklKQ;?5R<;;?rn{@Jor1_$^CB5+_7FvT^P**?Y-R8 zCQJ6O_GzCteI;}l{&`6OmtapeU+2z7eA%>3UT#AF7)Za@$2*hf*G+<^0kxYzpM2dU z7=WYaCX(CLre5-b7?-8c|L%mj&bDiZbLekT5KUlbZTk(KZj22OZpU#0EEB&RCI? z4YcV=8_I@K@S!G0T46}$qgqu#ZL*OCmwQ-?r zw3lv#P`BJOPlKB^$)WL{v}|d-9o_QPrOF%XE=HgKa5u<<2K(uz%2Se^U4+Q}kjq55 z3(sJ~Je?;af88*#=>LlsPq-m}r5?KHpd;d%_wJkR|Kxg->Fojr;r71J%EpTYqvZ8- z=ROLwLcw^zeesiThunFfVTVT*vIb0{$T$^sfdGC36 zgid}1kHPt>@FCrTsC{D(XVOp5IkS$DI;HSkrdjZTfh>Hf>^|`>oaD#+M(aK_ml|kF%R7P54^PLB){UovPgQp8>NuT-r$>(jwAg+(?sXLvlQokr!5m;dK(=ptjhjvfpVAg(OyDT7|qT3 z5}W1D(1i(u0vV4YpSLeKQ_>r{AQm!5S1B}4cXi@)Rgh3pk7AHVGlWsX&(oC|I$=#? ztWX$vH8}_7r(3}~X*Dhd1bN^TJLCh9SkT@0rF7W1XX*sADV}KkB3&{aT&z>DFS2wg zLO(IqzAf9bQ1^i)Hv=G;0la!Aaa%TMscwxRIE!<1tIgM&7hAeq=W@4P2)Vek3oCW= z#FKK#PJRCdF9)`9t?oGx8>QfsW5?5lC;{D{ttZLHI=`+*dQ z#~VO)uza8M+i~1z`n<)Fl%pgY(i6>iePZgdAnDLJkPhy{J&C+f9MRNgLtplVck|TF z3lznZKK9Ii=7c><_GylCCZ{MIceh=@5&GmQ;nuYFUn+lU)4-e__Xlv-%Hp^kZHQ{_ zw65+<;N|muK%1R;1c!L9wYqXEYKvQEp_kjLdzjUSHs7)_TgcppaRIi#uO%HE>Q>yF zam6jH+954}O<5`$7&@Nf2>6sxD`E7xznORFR(^r9O#IL5z z9s031wf}~)RXUz`qoOgF{Alv>aJ$Y*P5up4NgG24QBo47vD`72aJ>G`$v~=2YPMms z5}T(*{$(5}e++RWMP_r~PGgPW1z0w(|Ea={Dsr3gI{J#{UZk+S5JxwDxrD>zg60Rw z7$X7wrg;_>rQ<3^-mW$U*7AK}#-AAt+q!p}H+6?&2!~=yCOFdAdxs7_)$BlPf2s&% z$Rt}(CrjJ-zuZ5nAC8WeTe^h8eG}f-OaAi6zq9X7(A&|dA=DYMJD%)La3nNLNFy? zXkOnvZg96~AI_WJ#g(si_a+4kyx4q8LG@1k@!U>ajjcF@6xW)EQ{D2ey9swj59~M^ zv|%*tr3hP_PCIp4Uw|Q-=MHz8c}}^~lLFUVNxk!%?{h_KuHffi`1t}qU*hL0{Cv%d)?D3>n+``m zx28w5S07~MrB@wbvUT)xJcy~j8u(nh_9}k9!Ou1Pe2bs!__@K_we24ar01?&n$DD8 zUkY|%uYK2^4Vl!49eam$YXE)I|FSnL`RUSBEbo17>{!_COAlJ`Uq5@jb!q2sEX1-k z++C4Ejhmk-G0hStu1Z7W(cR(1NB3w@L`=j3!dA$rU$Wmw9)jyT-`9zj)uiG zx8NSJRc}wHLt&FLY_86ccFu>%dEv@3585*aJHC^tt*^k!X>yG(&6^A3_Sp;156(~1 zIdi}Gb>ypL7I_TjZR+&KQky~_40KI^P4j6c< z^RTx0HNEvd`fRx_jMlG%J%UbSGrsA$r`RvU7CwA7ZZ-QBuTSabpe zGnkEdw{^WBtp5&a+&d1Clz zfp2;CH$VASjFx|+Po(JwTZLu(BzVJaZi1s!B<`Y z?!2$Kb*$Xk?S_634f?oMc(vi>>-sUY>*LmuW*7_j& z(7_-aaK7vqJOZz9wccwIPuSZa?Iikhn!$#yI~xQ6$qT<|s!4IAv=1l@g55h0J!iT> zZe&3yNen5b7;LG0x*>{&u~uO#&Eq}KT7?QlyrJ|pYZU|s4;^#Zq(Y_8Zys(H#sYde zmRrLD1ryj}cf&B&;c0NSV2`R>2gvtV3?2KNFk%#ewjs2?vUQHUI=eAQ_f@qD=jq@b z#gV?M)l(LQVT_FvI$GW=hX^y+9|;M>O0}(yuqKt(N|>(h_byO=CyCZgmwl@3`C)K)+sZ?I#ZomWEE|!jQmR zVKOwvb@G`#?}61z(^k*FH~X=_Qm05lauARlj!ge!>np-R*`!|#LD*ZgKFmTq^$9{% zF80?C3w&hG9NYrETjISO+F+gRuXm&aH@qDwIRq2L+R@Sl8yo#%w#G+)+LBiJ>A{@x z(+87HZ@rQ(?>_+x-YW`J?E-(;>-p=2bvCjURnuL$>|yuZqpuKp)5sfmC}~?eNb3Fr z_40w6Z(oQJ2)_Ld!(dE`>zc;A|>IHdG7lC^&w@l)jKh)bYZodyp8Khq= z6w*|p?rsQtK-RjFL>)|OrT&=Q`7WdG?9={<%ri>AN66_;b+8-J`dYygsH%iRarz;G zGv8OF$Lk9P@o@9{z5p6LPVeOY*B&){Qs$~vnUqpn;?0(g(|;@`_VhsyHe!PQMKkUM z_rA<|l3pv{6WwVjX7R9IBSduTTiB1=J3JrV&i^|hm z37+U3y(s-<{bTZi6r;wZnz57o+?nSq`rAT8-atcM)mzF-a_2sxEq%ST+?Dd$%7UqF zZw2m_NeYlQEnop}CDz*0?V`8rXjo~iEo*yA|AUYSPyCN}^&bcaEW2j~45lsnfu&oP zj~VTcLjAY$a-$1Ivwp>Tg-}|HjsDS;`*esiJ@kpbH|;;52em|_M}a=YH@1JQ7le>3 z{4?@AjDEJP&!_rAA*0kE{BRBZqaaUmKBRA!N9^|N&GhTc`+3ptuWMW+!*3V5s>UU; zPdds1SkPhpGxpRp)DYbX6s)Y$&m^Z|hT(MeeykM12!n0$5xsCuW`qTL+wcqXA!Lz# z6BL{yxb0RsTCK=`IC6Cvj@yl&4a5A7 zaJZ@ybIxA6%N4|?AJtppN@Y`NC-`vxa6A>iYd%OaSbAGaWwNKYw0b{!Yb9>6og8lH zO^1dXpif!_@W|7{4Iw-gx}?>=Pf;Tb*aKqSjk`hFD_323*uHweXa95-V0OTefi7{IScDQ&-^DT_&A1 z?8ocgu&CLZl{M;9EnJ0AWN{yeH%5{JzfQ%1bo$qEHSYx&rI$Zd>JXEby?Ry1 zg2yFv#ex+8ZX=TsAuAVTuU?W7GBzY*;iC&PGDAis&j4W?(Cv`4$3vncFo|A+OqT( z{WBJHttJX)`gWl0+`i8+$twQ`^yrkOXe9|d$ws#7$IHbOnXb1@=K`~<>kL_+Wms5? zOC7#?`yVcF|8Ak$htA*73#-+;%sPCnSJ1An5tf}JbszMh({?r3xLO*ZvuSO`?Y=<< zKdQ4ZT$OzY{b$<^Qye42Q#94*28#O|iN**@qYGtO8OF)8=9`lq)`q3>9!=P8{C|6M zvfaTDD*u$bZ%O!8M)+{!wjoKL2=73foD6~}GlsUM%T9(AlPG`Jm4sfzGkCf9MZXOd|*(?QVwo^3s_f5ey?jJS8+A zl8pPLt-}0^u@gui1{l@|`2|9LPY5(5lj00;Xl>W`3#+rsAAjJqzB~fN1*mSi?Yh z3jf&v=lXr){bcg;R1zGk0FdiURD2~ln_+Be=`;c^9U55+Jo+_ZH8g3U<1mD zADiZhvWf3zE9MzqkbeipkkAWn{_NMAlG6-$nEQhu`L>WuXW(9`2H{czUq6QY;pfgu zQVk}CWac#?SP+k;qDp5k_C~rPSnRP~!yHF@%dKtMFByhWLWn7L0exs|X^?`g%`!yE z^(fT+J!`)Va;2oX)%NVxBEv(1E@An$gOT#8Nxi)vH-2(VbXu<1?S7tPh?a-$wcId8 z?y`I6K|v36b2fIwZBH8nd4!ChTU8ZWlj{nDAbTz=4g}Na6^4^S+HW81MM2XK3L?hB z9!1VtX^`J9BqS0-{a1-yn>#OCWvCF+9(u43CHHY~VhdIqL~{_StW3SeM0E3V7Ag+l zNK3lGxu_<@f%ZLa(8!bKp(annaiE0%c&)8RqZ}R)5^Ep||`Kd39Qb9=nf1 ze$vOWYu60^LQGi&;a!R`I3jbY!F{@r%{OgnY`Y;sp5p&xu<-gyN+`6WrL*zzqdE*< z2@NHci%tB_P%NxUjm_^$H*yWGY{ZX-pXD*3i14LZKZ_&V?N5U*)!r+z^etY8DkLyZ zyu4#7FhYJY2sH;S;VRje^PF#tC%A62Mbg$O zUbgwu3KeuKxlmZq@^rUNDHMA3)^jq5RQKhHPDhra;IT z7NTfVSW?QKHZSV93YbgYo*F;WUxyYwuc`9?wRWXZQ5{)0jcm=1g0cv7H;X0;HnPTu zf@C#gOfr*YOcWOuaRD?gh-?~7Ok6p#3Y)& zPEPa~6X&bV9?WE4*kAjyq6Gu4SH}KE=uNqGQ(H zEcq?^PC*s!WGn$~!B~A$IGqW{5&2bl76Sr$Ms{Rd7<3rt>^m|gd6V(*30z@)G7dM` z{$z2Zb2ZTcg3?8>C4s2oe6u%s+{7X2k^;*$ocBI$bS9U>h*$~u%h+3Ch*CLA>Mnu8 ztE9*R9!Jk8(Cw7r3;4+*%MdE{_6eZ%7y9-#Re`iK`#10~=}t8}Nv{-Jd;_TDz&S7| z7l2NubwzccOoIB)YRrd*_DV5LP$vuL7?GA?k6uh(2L_+l{+mGRqicI zo8>cwPmAilM3_W&1CFZbd}J?rWyIxpdT`Zpl)icnpPL?U&<2b`aM6Gphq1B$77%i^ z%E=wlSuEx4o3XfYeaRI)txGr>u87i?Ui6cKWQ(&M88d2a>E`#)dHr>Z-d5aNMlo+3 z4W{3&TdtAYl{UwqXVY@ha2Zh6ggJsqN|&H=>_3u{=H(0cwmJTQyZ`jGDdT2j&Pscf zr_>nz&S+f%Y2K~HRenoB6s7wS3_gW->KqVs0oD=o@WZa1hw=YUc=e~f>`3?TTHHFl zJrXV%d9w3zB)zPW3xepHPToPUw_faSGTGU>qzbOh_l7CPQ0r|Y0>cVVd6~T8?43L2 zSoQMLE~1N)vu9?_7%?uFJkxguNOSeFkEXM{$RN+Q6(#AuLH6yOH()WM-hMU6KalyV z10v&earRCf9^V!shdr*K8LH1S~>mMrjSJ9YIImAIcpuaAX^m_14RfWodiUi8x z!dgE+vV_Y1YUy8{u*ei&?+2!+(Q#mWHpmXHqVhY+WeQ^O%m%q9jR}(-$oV(|I6RU- z=cS8{=ukmzX?>U+t9?|Jl1}4;Wa;nA+{jNSXG!J|In72bsQ>qF-`Dr;XYKLmtCbEePuTr&0q?CO3tO*n+^^I&!KFPqWZ~qx-7>Y?)ZY8^Pnw|&JRN4 ziz4KCUH-CwHKDST4^d>YE=>AYygbT=q-~MLPS?RaLrMPLzNW9Oeak(j`%<=^pD)jz z?j-d)YhBV^a=m8V=Ogv`%bM2>0g-#`Bxf5odgJbbJ??aGh1H*OE?C3LJsPnQ?6b#( zw#wG$=ur3`+#esl$CK9h@(3Cp0p#qZmVHX(I+mZ_?<-aKvL>vvo=Qw_OB3s9dlL7j zkVNiM;BjPaLTICbY7)829tOf|qv_*Bevi&4ahIPD;!ux-yGv^AXks$^N#QT@9b5aD z$bn8;EqUg#x5FTvNI8+5$w5-a2(HyiL*C+E&UAV_zeH=aeVuKcoU}1CZURS8YY~Gn z{ZsrR8#xBi+b`^6a66u2BSkJoMpi1jQD`d1P`6YzP<|>W)2LK_l2YD45WO{(cai57 zlq*eV#6|Z94a*0rQ&hwxx3*Wv61n zu%4N@$V{hBjkC{A3RaYqr(z9a-CRI9b{3ISrhDjVi-%jEz zIwDY0Q=6wWcQWtSP-F$V3#~uggvg$XXHwKu7*U_av8w9k7RD6>b|5s|9)`c%J+e8Q zu4O@gLG(!rLco)AJDYuIem2@VGn1XD@ttoy?O=PgVvw)N=%U)hUnN zJlm%?u`-0>wE!bqsO&>_dGMyBYM49}$R;|D?tclVHb;B`_Uf(QpqsSOs%^R=b~d>q z659Iq<$l7aqG_kFxue|0^x|a$)#YLwN}Dh?XBu!MqjXMtvUosaAl;qIQ7~{rAt%t% z-j}?^5XD5P=|lM(X%iDIbciC$QmVCA)A9!NqPdvy`zW$8{82T0SRDcnm@*$7 zT~&z3=6vu?1bsW7U$;SEywaeDYnv;*I<8GeEk$ThNm}1$$nIXT6I~rE{0+N8`Ecv@ z++G?;l>r!x(FPxyuUb+a6d^M&;AvDgUsPNI4Uoiir}@g4QWj#882J99j7y-*dUXMq z)`C9ZpVhH}6Df5>)~^l6-RYSRc`6<4T*v+Lad+|1IQ$}MZ!G5{)|wXaTw1w+v4*HA z&=YwcbEklX=sh8#)1{zgzPX4eYT|@xenRRi@FRl;hqgGWZ9g`sKD*hUe)tGWfHJ}A zgpsd;PLIy~)$B@(KIUr5U&MZ7jyrPrYOQgnJ2mnABk7|O|?Tlr9heGP-IOh-t?R0oJPURflN1c>qG;|RJ|NU?ycZdiY-G%@k%^xe;H(MCZOlb zF^Xh@Z=DdxOtAFRUv~S6x*?QJDEHb5HDe-Oc!(S*VHF%`^h#vBv>LrzS6~GRy?ENs z4`ov*&xD>iyP8u-OF*Y8pm-Uf#^2WP6!KXGbY7tC0*$TYbn3Sn==(}&wOgR6YhjGB z0?4`+UV?Qnkmjx9=`>&s+ViO58MI%Z4OL8(TnSVV*BVUgw(|?rT#3SM>(TtkwLlpg zVE$QwZftSDkMuj!KxOw9xFxfO*~E=;fhV1L&G;f_T*-0 zdU6AvR=XLEzPS-KBDSC|mY+b{zXh6N(FvsCTQQb@3Upea{7pdr*v1n`yBX-~ZBT8Q zKq=L*Nb#au)o7(s_!E#l6>i6vhi^r)TMaUHZbji`HRzn!Z9u(hA(I5!Sc|4G=?7B( z9gv+7NZJ9}sO>;Wbx{1;b|`+P4ujl~%Up1Ft$HlJ3u}S$&8X$J1CHpp z6SY_WJZ|L ztktoaF)D>ZdRZWm={{<*Mrm%>Wn@O$&{4@gnJJlj>M0ah1~F^s68d1UWI;mBbxEw! zh`#DsXer-P@DhlP_sEAxn3Gytg80?dr}vMQ8Oa+&Da7v!)BgOq6wT>gs7ER!GsexY zbrlN3?hfn7^g0cQxzdIungWZPHq59bQUbDQLHa43IqyJk@xoI>$;MdB2w;hM#tKD7 zj_Wv*6c4P_F(==YZY*Q0QlYr$<33wtG-HWxC52+asmpoLU@Ml;MNgsVGge+j4qMn_ zKgsJlGRsiwDirfI4SywO&T8URm(zUYtx(J?x@kr(8nM#!Q&y?kwvGXp3gX7Sx~+SID|-+#TU+9(V?e6wTCoNjxF{5MTSMa+C!RVE zEODQ;LNT?*)R%PAX~)*7QbV8< zpCkLeVvW7jF(-3%O<2aP`U*vZhMTUjjQzSUEU_6>?|-$mN3FhI>X;H)#o3cUoNfNj zpH3xnNliZMTGQQK3$5gG(JjPV3wmxLu7)VD{x_--m)(B#N23Rd)<7#n_R47cA8QoD3!hDFUG7lYNLv%Uk9XsUiB%gg|cZ9DOH z6_J{$Nu`x8aW=5Ez+q8r!COV#_@qr4-7_2{kY|e}8ndeFO%)2G^tGp%G@T91Xx^w& zLwTY(uZO6aXc{0a39ISRm|>+VdcR$vf&7n}7eibhSF%YEVMQ$DGlB?W-{jPAkZ&++ za~QCD^khyhd0?krlEaCbb}UrO(Y~A>VzYbq%xblX%|Z!%a?Q|!k(dSg&a<@ni}`{{ zh9)G@M3*=k8MDk#P-yQXoKa6ZywaF$5#gx=_ zv7opRmhjdP>}LJ^fLb=Nbf~d4%NzljOaHz8q&73w$doP|QL0B5M}cVO2;)LrI@HVy zI`4{1(#7G0vOEl$LTf-g7_2E|)&Sk0Sy6?iq)aw6O$Qla3B*x*4$+NE!J(nzfCrj0 zveZVNS}ewD34;T(POm!Hi7GIi;}_JxMFGp#sH#7S0Fv$a0O zhKw+@AkMNOvt4gFnl-Wyc&pjw^y?30t(Up7c7rdf|7h(EHjrXvduGu#LUM?Y-b8OD zZyeOb&y0K7mLTka$d1)$SR~!70c#);4daX#&zfIam&g`kMgkoUG1R#N6ND|nZpbrBE#<|+5E1j5ryFy}qc$V= z%?)UJpF(4KHL#2vA}%C@w}QI)jI$30?(>Tpd(js&3eB0w4x%_>>s?c~2@U9ClO)BG zyG;$q=j`ZZl|ZXLmFJb3m^$-D8UnWWJu;+L*3knBE#y7WQ)B_rYj$Kl6RVRISKu6I z$RPJcdk}*=4bc>u$*;gLu{h#!uQ_StO-nWTZmS}BR>txe(P2bo&ZIn{_l8WQI-v@M z+1PBGTBg0MZJ9YnSVyq}_rPcuEA`fB&C!hho?K`z8@J#sBL3syHnnynW!M_hsS98@ z4z%Yb5F1aO^%7KCpY*qJVpQjV;^ytTtVheY!7yHH!+p9FL<^TrjQvUuV?bkLMn2gX zvEsq{3Ps$sU7bPCK`h}5IM_W6JDdR#*pWcRI9W_|$=$xNV$5(Zc2XXtJlRHOX=@Ce=fBy6e4=mKV_COJ;^SdC9GcPRZ5wt;ljo3F1tK9ZS5oEDkuk6axN>Xp=>?drHM!tuXylJ`wVcXJrMq$o?RMpyym9T! z+6b-JhSgpRwVTZf2}QBej3-3~bm!wDSv7}8a^!5iPOP}CTRbbC55?aP7lNy;(6Nh30`6;BLLqU8VmHvQf=DVj3Y3X6gXmDAU$2e~#|u0x(7>AuD%zV1Y6Vz>>F?`qGA$s{o!(Zg;xTU?+q8k{ zXi9dd4O!fjx7x^uGau~32jqAkZiXd3T$-*hYOH(T*$2+Sn#B6*6GvYz8ed;tVYn|h zgq^;8_SgY3s(HM(8Ij$sX?M?jwQ8%dH%C7%OpRYtLzKEc%)eoZ&O{2ZA=CVH$$mfH z`3k=v##|VGU%3#n^^WMHwNSwb5&CxA3QjOsHBjx_wo<8|=i=J!=PAju&AeJP3 z19%TJ0=Omb2;k%n!4Q{fF1dhFS(8eCePY^#dlBa*O_?6!f%@{r&&Od;$l?HfGOdXT zV=TK#Ylat_@UF{Eo3XzmnsRfVCH_9xl$-mt?*(v}WA5E`$b3-d>u?jB>)=92>;n11(9*Kw+1G-0_@(IWlm1$6jn+BDsOyteyLT+;#Xg z4`Y9iY|d4c+ng)ljriNA1y4_H(Uz6V6Mw&I!TaGE#M3i__}{yOxGS3BqEL*BYP?*y zS6xyOWI!BRnlmE)Ex7@W5V)r$AEr+QItMpl($xd6bHcL^M42GnHo>~2Dp=Pzc_eoK z3SVE4MZsKtCxctCDzm|m-jeWGX1t;b@eR>u?FNVNan&ImeE+A8nPj?`HM!qPkNgqB zr=W8o+&Hc#Lqrrfc^>l*SirXx52VmX+>P_mkaOO=W@;-7MtVjoE~i7SxS4$v=--;_ zeQ0Yg*PQ}iwdNx5Zo}&hYr{wBt~OjBZ`yGEKY`KOOMP<$v!eSQPGsX-|Ng6PmZG&tDGeD32ZzyNTCyX0rS{PT{&M>aX z>M%}iHuUsb$8Y!8poWI2qg-sP+5rOssid{#17%y=_N@D_+j8gAqFn@2!yQmVaIX$y znflkatH%l*YsdSjYA;-Td*R~SbE!vwQ*1ootvmBftJ@or`|bIzMH*zxPSo#1_soD8 z$+QC>d#11mh})dLm4&SXI(V^$6Ct$w=KOFWeUl8!*5HuI(`A-&OJ}O+M+rtV?C-l*MRu~MXb-VT_TjN4EC<$${gERcL_dYPjpkjDNLZGdxM(m#rWtL^oaApp2#Cdf z>X@?S+*v4*812iN-Gww~rSAGqRogJAx&$l^g^KvQ?zRWqdV9y%5a$@aW%df{p3d#s zv6g6FXEXZQ5IC+793#Fx|JIO9UkCd*F+8fj2Fry%kCmMLA=$)eGn#H*q?YS)_n|>t zHaO1?%?G;LjrVAOo3j53-|j}jD-eDM){}40){Cd}9{pE^sYkKF=F1FV=~aHk2$&~V&@WV05~DOU3qYN z6+8jWJ>>i!QdviURHh(>czgcj0wC3pJnPEm`I@dh7;E!kbXG)U7jhz?~N^s|RX^zGeFwF~ek}Og{CnU_Cts1HVhNkTUY1FK;sX zJ9x)_U})GRV#W7%;jll=XM%m8X?6a%xjg*%k|5LSFR=f#Oc(;9YLC@AXrIr`ZD90x zR~XmjL*PYkYceIlku|Ib4gdRS=TXqUJ?YZZlvE_>%iqB*V!Mc8g>F5x&G2RP0Pxjy z6N+xYiW|1O(_~W7OGWb>$}Hp~d?M2zPCeK&P^jG+i0aUL^~?0+p~BxII*r}23HwVc z-WM8^nx1?uzAQwc*ijXI;y={yR~K54F1_k9man0iKaLLs_3-I@7BqJuQr%TF*NBxG z0v;@{U%g{m-mR(g+d^~V*P9a=6`@dcHGQ~&Sps$-^9^itOo1pJJB~Pc*>gK+qA^|M zT&7FEJCzyB2ZVePGtcbW^q>C4V*f0}#tNdbe55Bc5)dmRLSp;qG2Z-8=>Gk$Y8?m@ zAz9eRmgUZOQ7C->DZR)h8BLNlQ_s3>5{uGQk(^0Hp#)f+Y|`-mJa_R^>+W`tr@66kz<_sTE&9F?`{28TMBy#yz{m z1XbBjMephqnaS^kWg_OsMlP%66-tnternc{1F*NVXLU$>Z8y2Ew}%mLcxuf9ZK_QC zGzKK7zZI+V1-wyYgAv!n6v5-q7_gR^RV!u_*Wc76CKH@#l0Nb4uTSpx=X0GG6!>ey z_k1x4v}B~L!C88}(e%+8J!^>isLQP6L(mF}0CD(%^Z$qmfcwA6K&+eQLN+*NnEOOa zA&GoqR6yp(D<*K9#bzoyvM`aKh{%wUqxraw$tfdAMa$}doP5L_gg7B|Sz9)~Gm>P+^FTjGJv^;;$aW z`?efx)_=9fO}b<>OtxzV+0n$8g$?9ypb@Nt*vZK}gKyX$Op{kUD|D2f!6?IA#LiO_ zdXT5dJo38${dC^9yP~!@Ex%J}NHPa=16>cZMQ+E@i+^U5mna`>&pPrH+UqWt9MH~M ztS4BcfqWJQJ~oOd`59lR9RrL4J!k^MGv1w-K}<~4y!$U7)XAjGT%O#VmqE;K{^{}$ ztukKA2OF@>`vD?&LbSQ=uwx3aK@`|&6!19x^necHU_lyX-?xZ z1NpO1FJgj)e@d-zHw-hQojw=ZlFFgnZx?~<4c&X=2^(fwBE)GJUrD-xOWU!;XPU5J z9uc&JSZrs~*6!MN$?jp?qI1D{t+ji07zT+Ou*>75Odo~9BVQ`16}z^p*76)-P>8RN z-SVz=M_{QqoK)2GMxm=*1m=iJM*Q~j+700<*ob3AROEFk4?S*!&9AAJSN@-r^hu}T zyx0Ti^bjNOLA5-gKQN{`G7R1&KmuDsJf6KtSL=zfh?Q&!3r@^M9Qt)s2QeG)(AftQ z=hZ9MdKhCeH;o&4V_`Uhhr&H;@7;UQ_3dOn((O3Bxj_PVgoFRDq4kgnv zxMJ*JA{w&!^*xfE(S=npj)$4)qg|wS5W#ub2;iqZjE}D%Fzhzs#LhFEgnapohRf*X z)xX_@(O?f%Z0VE^Ajd+m60CyQWl0j8+lVy^lpqbW#&VR0Yn~YEC2F@(?xtZc}XD`Y4#R3k};A;yICXo2IZ}h35-MznAgC? zm&;*NYEJyd>Ds1@%owM^__9D4Afm&8)Zyitj_!vA6-Cgm{rvZJl7#6#` zvlF?t>?cP+wBQ&3^q=|i4`k{$@osk9R-stI@wzXZMc{L?ws_CM! zj7glUVEB8wk84Y8jJouxGF6QgB^)MmLao80gpSetjsm3fZxraOhKLfUCU;>?I!x)x zaKseO+Nml1*xw#gdHU3;ykkMov5|@74au6v!Fo@{%k*oNyhus$R)A)DSJdTOg}q zMRUQ^dGD6O-%U(LDT�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

&0(@Y1i1OPuF%9s;R~ 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 z6SYdetails['key']; } + + /** + * @phpstan-return array{text?: string, token?: string, line?: int, loc?: array{first_line: int, first_column: int, last_line: int, last_column: int}, expected?: string[], key: string} + */ + public function getDetails() + { + return $this->details; + } } diff --git a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php index 575011f1..0c3e93c6 100644 --- a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php +++ b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php @@ -38,6 +38,9 @@ class JsonParser private $vstack; // semantic value stack private $lstack; // location stack + /** + * @phpstan-var array + */ private $symbols = array( 'error' => 2, 'JSONString' => 3, @@ -67,6 +70,9 @@ class JsonParser '$end' => 1, ); + /** + * @phpstan-var array + */ private $terminals_ = array( 2 => "error", 4 => "STRING", @@ -127,6 +133,7 @@ class JsonParser } catch (ParsingException $e) { return $e; } + return null; } /** @@ -303,7 +310,7 @@ class JsonParser 'first_column' => $this->lstack[\count($this->lstack) - ($len ?: 1)]['first_column'], 'last_column' => $this->lstack[\count($this->lstack) - 1]['last_column'], ); - $r = $this->performAction($yyval, $yytext, $yyleng, $yylineno, $action[1], $this->vstack, $this->lstack); + $r = $this->performAction($yyval, $yytext, $yyleng, $yylineno, $action[1], $this->vstack); if (!$r instanceof Undefined) { return $r; @@ -325,8 +332,6 @@ class JsonParser return true; } } - - return true; } protected function parseError($str, $hash) diff --git a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php index 868ee341..455f0f79 100644 --- a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php +++ b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php @@ -19,6 +19,9 @@ namespace Seld\JsonLint; class Lexer { private $EOF = 1; + /** + * @phpstan-var array + */ private $rules = array( 0 => '/\G\s+/', 1 => '/\G-?([0-9]|[1-9][0-9]+)(\.[0-9]+)?([eE][+-]?[0-9]+)?\b/', @@ -199,7 +202,6 @@ class Lexer break; case 1: return 6; - break; case 2: $this->yytext = substr($this->yytext, 1, $this->yyleng-2); diff --git a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php index 6562ef5e..ce2964f4 100644 --- a/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php +++ b/conf/site/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php @@ -15,12 +15,19 @@ class ParsingException extends \Exception { protected $details; + /** + * @param string $message + * @phpstan-param array{text?: string, token?: string, line?: int, loc?: array{first_line: int, first_column: int, last_line: int, last_column: int}, expected?: string[]} $details + */ public function __construct($message, $details = array()) { $this->details = $details; parent::__construct($message); } + /** + * @phpstan-return array{text?: string, token?: string, line?: int, loc?: array{first_line: int, first_column: int, last_line: int, last_column: int}, expected?: string[]} + */ public function getDetails() { return $this->details; diff --git a/conf/site/vendor/symfony/console/Application.php b/conf/site/vendor/symfony/console/Application.php index f3914bb7..80bbf876 100644 --- a/conf/site/vendor/symfony/console/Application.php +++ b/conf/site/vendor/symfony/console/Application.php @@ -494,6 +494,11 @@ class Application implements ResetInterface throw new CommandNotFoundException(sprintf('The command "%s" does not exist.', $name)); } + // When the command has a different name than the one used at the command loader level + if (!isset($this->commands[$name])) { + throw new CommandNotFoundException(sprintf('The "%s" command cannot be found because it is registered under multiple names. Make sure you don\'t set a different name via constructor or "setName()".', $name)); + } + $command = $this->commands[$name]; if ($this->wantHelps) { diff --git a/conf/site/vendor/symfony/console/Descriptor/TextDescriptor.php b/conf/site/vendor/symfony/console/Descriptor/TextDescriptor.php index ef6d8afe..bde620bf 100644 --- a/conf/site/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/conf/site/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -212,7 +212,7 @@ class TextDescriptor extends Descriptor // calculate max. width based on available commands per namespace $width = $this->getColumnWidth(array_merge(...array_values(array_map(function ($namespace) use ($commands) { return array_intersect($namespace['commands'], array_keys($commands)); - }, $namespaces)))); + }, array_values($namespaces))))); if ($describedNamespace) { $this->writeText(sprintf('Available commands for the "%s" namespace:', $describedNamespace), $options); diff --git a/conf/site/vendor/symfony/console/Helper/Table.php b/conf/site/vendor/symfony/console/Helper/Table.php index 7f3d4a3b..fee5a416 100644 --- a/conf/site/vendor/symfony/console/Helper/Table.php +++ b/conf/site/vendor/symfony/console/Helper/Table.php @@ -562,6 +562,9 @@ class Table if (0 === $lineKey) { $rows[$rowKey][$column] = $line; } else { + if (!\array_key_exists($rowKey, $unmergedRows) || !\array_key_exists($lineKey, $unmergedRows[$rowKey])) { + $unmergedRows[$rowKey][$lineKey] = $this->copyRow($rows, $rowKey); + } $unmergedRows[$rowKey][$lineKey][$column] = $line; } } @@ -573,8 +576,8 @@ class Table yield $this->fillCells($row); if (isset($unmergedRows[$rowKey])) { - foreach ($unmergedRows[$rowKey] as $row) { - yield $row; + foreach ($unmergedRows[$rowKey] as $unmergedRow) { + yield $this->fillCells($unmergedRow); } } } @@ -658,6 +661,7 @@ class Table private function fillCells($row) { $newRow = []; + foreach ($row as $column => $cell) { $newRow[] = $cell; if ($cell instanceof TableCell && $cell->getColspan() > 1) { diff --git a/conf/site/vendor/symfony/error-handler/DebugClassLoader.php b/conf/site/vendor/symfony/error-handler/DebugClassLoader.php index 4a1101c2..a0c8954c 100644 --- a/conf/site/vendor/symfony/error-handler/DebugClassLoader.php +++ b/conf/site/vendor/symfony/error-handler/DebugClassLoader.php @@ -49,12 +49,9 @@ use ProxyManager\Proxy\ProxyInterface; class DebugClassLoader { private const SPECIAL_RETURN_TYPES = [ - 'mixed' => 'mixed', 'void' => 'void', 'null' => 'null', 'resource' => 'resource', - 'static' => 'object', - '$this' => 'object', 'boolean' => 'bool', 'true' => 'bool', 'false' => 'bool', @@ -69,7 +66,13 @@ class DebugClassLoader 'string' => 'string', 'self' => 'self', 'parent' => 'parent', - ]; + ] + (\PHP_VERSION_ID >= 80000 ? [ + '$this' => 'static', + ] : [ + 'mixed' => 'mixed', + 'static' => 'object', + '$this' => 'object', + ]); private const BUILTIN_RETURN_TYPES = [ 'void' => true, @@ -83,7 +86,10 @@ class DebugClassLoader 'string' => true, 'self' => true, 'parent' => true, - ]; + ] + (\PHP_VERSION_ID >= 80000 ? [ + 'mixed' => true, + 'static' => true, + ] : []); private const MAGIC_METHODS = [ '__set' => 'void', @@ -855,7 +861,7 @@ class DebugClassLoader } } - if ('void' === $normalizedType) { + if ('void' === $normalizedType || (\PHP_VERSION_ID >= 80000 && 'mixed' === $normalizedType)) { $nullable = false; } elseif (!isset(self::BUILTIN_RETURN_TYPES[$normalizedType]) && isset(self::SPECIAL_RETURN_TYPES[$normalizedType])) { // ignore other special return types diff --git a/conf/site/vendor/symfony/filesystem/Filesystem.php b/conf/site/vendor/symfony/filesystem/Filesystem.php index b6df1bd9..d2131c9b 100644 --- a/conf/site/vendor/symfony/filesystem/Filesystem.php +++ b/conf/site/vendor/symfony/filesystem/Filesystem.php @@ -194,7 +194,7 @@ class Filesystem public function chmod($files, int $mode, int $umask = 0000, bool $recursive = false) { foreach ($this->toIterable($files) as $file) { - if (true !== @chmod($file, $mode & ~$umask)) { + if ((\PHP_VERSION_ID < 80000 || \is_int($mode)) && true !== @chmod($file, $mode & ~$umask)) { throw new IOException(sprintf('Failed to chmod file "%s".', $file), 0, null, $file); } if ($recursive && is_dir($file) && !is_link($file)) { diff --git a/conf/site/vendor/symfony/finder/Gitignore.php b/conf/site/vendor/symfony/finder/Gitignore.php index 5ffe585f..dfe0a0a2 100644 --- a/conf/site/vendor/symfony/finder/Gitignore.php +++ b/conf/site/vendor/symfony/finder/Gitignore.php @@ -27,42 +27,56 @@ class Gitignore { $gitignoreFileContent = preg_replace('/^[^\\\r\n]*#.*/m', '', $gitignoreFileContent); $gitignoreLines = preg_split('/\r\n|\r|\n/', $gitignoreFileContent); - $gitignoreLines = array_map('trim', $gitignoreLines); - $gitignoreLines = array_filter($gitignoreLines); - $ignoreLinesPositive = array_filter($gitignoreLines, function (string $line) { - return !preg_match('/^!/', $line); - }); + $positives = []; + $negatives = []; + foreach ($gitignoreLines as $i => $line) { + $line = trim($line); + if ('' === $line) { + continue; + } - $ignoreLinesNegative = array_filter($gitignoreLines, function (string $line) { - return preg_match('/^!/', $line); - }); + if (1 === preg_match('/^!/', $line)) { + $positives[$i] = null; + $negatives[$i] = self::getRegexFromGitignore(preg_replace('/^!(.*)/', '${1}', $line), true); - $ignoreLinesNegative = array_map(function (string $line) { - return preg_replace('/^!(.*)/', '${1}', $line); - }, $ignoreLinesNegative); - $ignoreLinesNegative = array_map([__CLASS__, 'getRegexFromGitignore'], $ignoreLinesNegative); - - $ignoreLinesPositive = array_map([__CLASS__, 'getRegexFromGitignore'], $ignoreLinesPositive); - if (empty($ignoreLinesPositive)) { - return '/^$/'; + continue; + } + $negatives[$i] = null; + $positives[$i] = self::getRegexFromGitignore($line); } - if (empty($ignoreLinesNegative)) { - return sprintf('/%s/', implode('|', $ignoreLinesPositive)); + $index = 0; + $patterns = []; + foreach ($positives as $pattern) { + if (null === $pattern) { + continue; + } + + $negativesAfter = array_filter(\array_slice($negatives, ++$index)); + if ([] !== $negativesAfter) { + $pattern .= sprintf('(?'.$regex.'($|\/.*))'; } } diff --git a/conf/site/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php b/conf/site/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php index 1e435cd2..0632f92a 100644 --- a/conf/site/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php +++ b/conf/site/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php @@ -49,7 +49,7 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte 'env' => isset($this->kernel) ? $this->kernel->getEnvironment() : 'n/a', 'debug' => isset($this->kernel) ? $this->kernel->isDebug() : 'n/a', 'php_version' => PHP_VERSION, - 'php_architecture' => PHP_INT_SIZE * 8, + 'php_architecture' => \PHP_INT_SIZE * 8, 'php_intl_locale' => class_exists('Locale', false) && \Locale::getDefault() ? \Locale::getDefault() : 'n/a', 'php_timezone' => date_default_timezone_get(), 'xdebug_enabled' => \extension_loaded('xdebug'), diff --git a/conf/site/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php b/conf/site/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php index dbffdca2..ba45a2dd 100644 --- a/conf/site/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php +++ b/conf/site/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php @@ -230,13 +230,7 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface --$i; } - if (isset($_SERVER['VAR_DUMPER_FORMAT'])) { - $html = 'html' === $_SERVER['VAR_DUMPER_FORMAT']; - } else { - $html = !\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && stripos($h[$i], 'html'); - } - - if ($html) { + if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && stripos($h[$i], 'html')) { $dumper = new HtmlDumper('php://output', $this->charset); $dumper->setDisplayOptions(['fileLinkFormat' => $this->fileLinkFormat]); } else { diff --git a/conf/site/vendor/symfony/http-kernel/HttpClientKernel.php b/conf/site/vendor/symfony/http-kernel/HttpClientKernel.php index 4d20e969..a5e207d5 100644 --- a/conf/site/vendor/symfony/http-kernel/HttpClientKernel.php +++ b/conf/site/vendor/symfony/http-kernel/HttpClientKernel.php @@ -58,6 +58,10 @@ final class HttpClientKernel implements HttpKernelInterface $response = new Response($response->getContent(!$catch), $response->getStatusCode(), $response->getHeaders(!$catch)); + $response->headers->remove('X-Body-File'); + $response->headers->remove('X-Body-Eval'); + $response->headers->remove('X-Content-Digest'); + $response->headers = new class($response->headers->all()) extends ResponseHeaderBag { protected function computeCacheControlValue(): string { diff --git a/conf/site/vendor/symfony/http-kernel/Kernel.php b/conf/site/vendor/symfony/http-kernel/Kernel.php index a906fdb8..c90c77ae 100644 --- a/conf/site/vendor/symfony/http-kernel/Kernel.php +++ b/conf/site/vendor/symfony/http-kernel/Kernel.php @@ -73,11 +73,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private static $freshCache = []; - const VERSION = '5.1.3'; - const VERSION_ID = 50103; + const VERSION = '5.1.5'; + const VERSION_ID = 50105; const MAJOR_VERSION = 5; const MINOR_VERSION = 1; - const RELEASE_VERSION = 3; + const RELEASE_VERSION = 5; const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '01/2021'; diff --git a/conf/site/vendor/symfony/mime/Part/DataPart.php b/conf/site/vendor/symfony/mime/Part/DataPart.php index 17e3e3c0..5d1d9106 100644 --- a/conf/site/vendor/symfony/mime/Part/DataPart.php +++ b/conf/site/vendor/symfony/mime/Part/DataPart.php @@ -59,7 +59,7 @@ class DataPart extends TextPart if (false === is_readable($path)) { throw new InvalidArgumentException(sprintf('Path "%s" is not readable.', $path)); } - + if (false === $handle = @fopen($path, 'r', false)) { throw new InvalidArgumentException(sprintf('Unable to open path "%s".', $path)); } diff --git a/conf/site/vendor/symfony/routing/Loader/AnnotationFileLoader.php b/conf/site/vendor/symfony/routing/Loader/AnnotationFileLoader.php index c183d77f..52c72f6c 100644 --- a/conf/site/vendor/symfony/routing/Loader/AnnotationFileLoader.php +++ b/conf/site/vendor/symfony/routing/Loader/AnnotationFileLoader.php @@ -93,6 +93,11 @@ class AnnotationFileLoader extends FileLoader throw new \InvalidArgumentException(sprintf('The file "%s" does not contain PHP code. Did you forgot to add the " true, T_STRING => true]; + if (\defined('T_NAME_QUALIFIED')) { + $nsTokens[T_NAME_QUALIFIED] = true; + } + for ($i = 0; isset($tokens[$i]); ++$i) { $token = $tokens[$i]; @@ -104,9 +109,9 @@ class AnnotationFileLoader extends FileLoader return $namespace.'\\'.$token[1]; } - if (true === $namespace && T_STRING === $token[0]) { + if (true === $namespace && isset($nsTokens[$token[0]])) { $namespace = $token[1]; - while (isset($tokens[++$i][1]) && \in_array($tokens[$i][0], [T_NS_SEPARATOR, T_STRING])) { + while (isset($tokens[++$i][1], $nsTokens[$tokens[$i][0]])) { $namespace .= $tokens[$i][1]; } $token = $tokens[$i]; diff --git a/conf/site/vendor/symfony/string/AbstractString.php b/conf/site/vendor/symfony/string/AbstractString.php index f2754a56..31e78d19 100644 --- a/conf/site/vendor/symfony/string/AbstractString.php +++ b/conf/site/vendor/symfony/string/AbstractString.php @@ -99,7 +99,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable { $str = clone $this; $str->string = ''; - $i = \PHP_INT_MAX; + $i = PHP_INT_MAX; foreach ((array) $needle as $n) { $n = (string) $n; @@ -111,7 +111,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable } } - if (\PHP_INT_MAX === $i) { + if (PHP_INT_MAX === $i) { return $str; } @@ -168,7 +168,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable { $str = clone $this; $str->string = ''; - $i = \PHP_INT_MAX; + $i = PHP_INT_MAX; foreach ((array) $needle as $n) { $n = (string) $n; @@ -180,7 +180,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable } } - if (\PHP_INT_MAX === $i) { + if (PHP_INT_MAX === $i) { return $str; } @@ -360,7 +360,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); } - $i = \PHP_INT_MAX; + $i = PHP_INT_MAX; foreach ($needle as $n) { $j = $this->indexOf((string) $n, $offset); @@ -370,7 +370,7 @@ abstract class AbstractString implements \Stringable, \JsonSerializable } } - return \PHP_INT_MAX === $i ? null : $i; + return PHP_INT_MAX === $i ? null : $i; } /** diff --git a/conf/site/vendor/symfony/string/ByteString.php b/conf/site/vendor/symfony/string/ByteString.php index 65f12a95..9fb741f5 100644 --- a/conf/site/vendor/symfony/string/ByteString.php +++ b/conf/site/vendor/symfony/string/ByteString.php @@ -356,7 +356,7 @@ class ByteString extends AbstractString public function slice(int $start = 0, int $length = null): parent { $str = clone $this; - $str->string = (string) substr($this->string, $start, $length ?? \PHP_INT_MAX); + $str->string = (string) substr($this->string, $start, $length ?? PHP_INT_MAX); return $str; } @@ -372,14 +372,14 @@ class ByteString extends AbstractString public function splice(string $replacement, int $start = 0, int $length = null): parent { $str = clone $this; - $str->string = substr_replace($this->string, $replacement, $start, $length ?? \PHP_INT_MAX); + $str->string = substr_replace($this->string, $replacement, $start, $length ?? PHP_INT_MAX); return $str; } public function split(string $delimiter, int $limit = null, int $flags = null): array { - if (1 > $limit = $limit ?? \PHP_INT_MAX) { + if (1 > $limit = $limit ?? PHP_INT_MAX) { throw new InvalidArgumentException('Split limit must be a positive integer.'); } diff --git a/conf/site/vendor/symfony/string/CodePointString.php b/conf/site/vendor/symfony/string/CodePointString.php index 8f0034ac..9cc585fe 100644 --- a/conf/site/vendor/symfony/string/CodePointString.php +++ b/conf/site/vendor/symfony/string/CodePointString.php @@ -211,14 +211,14 @@ class CodePointString extends AbstractUnicodeString $str = clone $this; $start = $start ? \strlen(mb_substr($this->string, 0, $start, 'UTF-8')) : 0; $length = $length ? \strlen(mb_substr($this->string, $start, $length, 'UTF-8')) : $length; - $str->string = substr_replace($this->string, $replacement, $start, $length ?? \PHP_INT_MAX); + $str->string = substr_replace($this->string, $replacement, $start, $length ?? PHP_INT_MAX); return $str; } public function split(string $delimiter, int $limit = null, int $flags = null): array { - if (1 > $limit = $limit ?? \PHP_INT_MAX) { + if (1 > $limit = $limit ?? PHP_INT_MAX) { throw new InvalidArgumentException('Split limit must be a positive integer.'); } diff --git a/conf/site/vendor/symfony/string/UnicodeString.php b/conf/site/vendor/symfony/string/UnicodeString.php index 7a81ac6c..54df3c03 100644 --- a/conf/site/vendor/symfony/string/UnicodeString.php +++ b/conf/site/vendor/symfony/string/UnicodeString.php @@ -263,7 +263,7 @@ class UnicodeString extends AbstractUnicodeString public function slice(int $start = 0, int $length = null): AbstractString { $str = clone $this; - $str->string = (string) grapheme_substr($this->string, $start, $length ?? \PHP_INT_MAX); + $str->string = (string) grapheme_substr($this->string, $start, $length ?? PHP_INT_MAX); return $str; } @@ -272,8 +272,8 @@ class UnicodeString extends AbstractUnicodeString { $str = clone $this; $start = $start ? \strlen(grapheme_substr($this->string, 0, $start)) : 0; - $length = $length ? \strlen(grapheme_substr($this->string, $start, $length ?? \PHP_INT_MAX)) : $length; - $str->string = substr_replace($this->string, $replacement, $start, $length ?? \PHP_INT_MAX); + $length = $length ? \strlen(grapheme_substr($this->string, $start, $length ?? PHP_INT_MAX)) : $length; + $str->string = substr_replace($this->string, $replacement, $start, $length ?? PHP_INT_MAX); normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); if (false === $str->string) { @@ -285,7 +285,7 @@ class UnicodeString extends AbstractUnicodeString public function split(string $delimiter, int $limit = null, int $flags = null): array { - if (1 > $limit = $limit ?? \PHP_INT_MAX) { + if (1 > $limit = $limit ?? PHP_INT_MAX) { throw new InvalidArgumentException('Split limit must be a positive integer.'); } diff --git a/conf/site/vendor/symfony/translation/Dumper/PoFileDumper.php b/conf/site/vendor/symfony/translation/Dumper/PoFileDumper.php index 3b181384..0d822818 100644 --- a/conf/site/vendor/symfony/translation/Dumper/PoFileDumper.php +++ b/conf/site/vendor/symfony/translation/Dumper/PoFileDumper.php @@ -53,7 +53,7 @@ class PoFileDumper extends FileDumper $sourceRules = $this->getStandardRules($source); $targetRules = $this->getStandardRules($target); - if (2 == \count($sourceRules) && $targetRules !== []) { + if (2 == \count($sourceRules) && [] !== $targetRules) { $output .= sprintf('msgid "%s"'."\n", $this->escape($sourceRules[0])); $output .= sprintf('msgid_plural "%s"'."\n", $this->escape($sourceRules[1])); foreach ($targetRules as $i => $targetRule) { diff --git a/conf/site/vendor/symfony/translation/Util/XliffUtils.php b/conf/site/vendor/symfony/translation/Util/XliffUtils.php index b5ff4ef4..072b2671 100644 --- a/conf/site/vendor/symfony/translation/Util/XliffUtils.php +++ b/conf/site/vendor/symfony/translation/Util/XliffUtils.php @@ -61,16 +61,22 @@ class XliffUtils { $xliffVersion = static::getVersionNumber($dom); $internalErrors = libxml_use_internal_errors(true); - $disableEntities = libxml_disable_entity_loader(false); + if (LIBXML_VERSION < 20900) { + $disableEntities = libxml_disable_entity_loader(false); + } $isValid = @$dom->schemaValidateSource(self::getSchema($xliffVersion)); if (!$isValid) { - libxml_disable_entity_loader($disableEntities); + if (LIBXML_VERSION < 20900) { + libxml_disable_entity_loader($disableEntities); + } return self::getXmlErrors($internalErrors); } - libxml_disable_entity_loader($disableEntities); + if (LIBXML_VERSION < 20900) { + libxml_disable_entity_loader($disableEntities); + } $dom->normalizeDocument(); diff --git a/conf/site/vendor/symfony/var-dumper/Cloner/VarCloner.php b/conf/site/vendor/symfony/var-dumper/Cloner/VarCloner.php index b5bd252f..bdbe3c2c 100644 --- a/conf/site/vendor/symfony/var-dumper/Cloner/VarCloner.php +++ b/conf/site/vendor/symfony/var-dumper/Cloner/VarCloner.php @@ -98,7 +98,6 @@ class VarCloner extends AbstractCloner case \is_int($v): case \is_float($v): continue 2; - case \is_string($v): if ('' === $v) { continue 2; diff --git a/conf/site/vendor/symfony/var-dumper/Dumper/CliDumper.php b/conf/site/vendor/symfony/var-dumper/Dumper/CliDumper.php index 8ad86c73..14c00886 100644 --- a/conf/site/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ b/conf/site/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -269,6 +269,10 @@ class CliDumper extends AbstractDumper */ public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild) { + if (null === $this->colors) { + $this->colors = $this->supportsColors(); + } + $this->dumpKey($cursor); $attr = $cursor->attr; @@ -283,8 +287,7 @@ class CliDumper extends AbstractDumper } elseif (Cursor::HASH_RESOURCE === $type) { $prefix = $this->style('note', $class.' resource', $attr).($hasChild ? ' {' : ' '); } else { - $unstyledPrefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? 'array:'.$class : ''; - $prefix = $this->style('note', $unstyledPrefix, $attr).($unstyledPrefix ? ' [' : '['); + $prefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? $this->style('note', 'array:'.$class).' [' : '['; } if (($cursor->softRefCount || 0 < $cursor->softRefHandle) && empty($attr['cut_hash'])) { diff --git a/conf/site/vendor/symfony/var-dumper/VarDumper.php b/conf/site/vendor/symfony/var-dumper/VarDumper.php index d336d5d5..febc1e0d 100644 --- a/conf/site/vendor/symfony/var-dumper/VarDumper.php +++ b/conf/site/vendor/symfony/var-dumper/VarDumper.php @@ -53,6 +53,12 @@ class VarDumper public static function setHandler(callable $callable = null) { $prevHandler = self::$handler; + + // Prevent replacing the handler with expected format as soon as the env var was set: + if (isset($_SERVER['VAR_DUMPER_FORMAT'])) { + return $prevHandler; + } + self::$handler = $callable; return $prevHandler;

' . $table->getName() . '
' + . '' . $table->getName() . '
'; - $label .= '' . $columnLabel . ''; - $label .= '' . strtolower($column->getType()) . ''; + $label .= '
' + . '' . $columnLabel . '' + . '' + . '' . strtolower($column->getType()) . '' + . ''; $primaryKey = $table->getPrimaryKey(); if ($primaryKey !== null && in_array($column->getName(), $primaryKey->getColumns())) { $label .= "\xe2\x9c\xb7"; } + $label .= '