velocious 1.0.430 → 1.0.431
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/velocious.js +48 -0
- package/build/bin/velocious.js +39 -34
- package/build/index.js +1 -2
- package/build/src/application.js +214 -187
- package/build/src/authorization/ability.d.ts +24 -23
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +300 -252
- package/build/src/authorization/base-resource.d.ts +20 -26
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +136 -118
- package/build/src/background-jobs/client.js +47 -43
- package/build/src/background-jobs/cron-expression.js +166 -127
- package/build/src/background-jobs/forked-runner-child.js +47 -37
- package/build/src/background-jobs/job-record.js +10 -8
- package/build/src/background-jobs/job-registry.js +84 -72
- package/build/src/background-jobs/job-runner.js +81 -74
- package/build/src/background-jobs/job.js +72 -62
- package/build/src/background-jobs/json-socket.js +70 -65
- package/build/src/background-jobs/main.js +900 -841
- package/build/src/background-jobs/normalize-error.js +11 -12
- package/build/src/background-jobs/scheduler.js +247 -205
- package/build/src/background-jobs/socket-request.js +65 -60
- package/build/src/background-jobs/status-reporter.js +96 -86
- package/build/src/background-jobs/store.js +980 -862
- package/build/src/background-jobs/types.js +3 -2
- package/build/src/background-jobs/web/authorization.js +50 -38
- package/build/src/background-jobs/web/controller.js +268 -232
- package/build/src/background-jobs/web/index.js +40 -36
- package/build/src/background-jobs/web/path-matcher.js +48 -45
- package/build/src/background-jobs/web/registry.js +14 -9
- package/build/src/background-jobs/worker.js +639 -585
- package/build/src/beacon/client.js +293 -264
- package/build/src/beacon/in-process-broker.js +25 -20
- package/build/src/beacon/in-process-client.js +116 -104
- package/build/src/beacon/server.js +126 -110
- package/build/src/beacon/types.js +8 -2
- package/build/src/cli/base-command.js +57 -49
- package/build/src/cli/browser-cli.js +42 -37
- package/build/src/cli/commands/background-jobs-main.js +5 -5
- package/build/src/cli/commands/background-jobs-runner.js +5 -5
- package/build/src/cli/commands/background-jobs-worker.js +5 -5
- package/build/src/cli/commands/beacon.js +5 -5
- package/build/src/cli/commands/console.js +10 -10
- package/build/src/cli/commands/db/base-command.js +76 -71
- package/build/src/cli/commands/db/create.js +61 -53
- package/build/src/cli/commands/db/drop.js +71 -62
- package/build/src/cli/commands/db/migrate.js +15 -13
- package/build/src/cli/commands/db/reset.js +19 -16
- package/build/src/cli/commands/db/rollback.js +13 -12
- package/build/src/cli/commands/db/schema/dump.js +9 -9
- package/build/src/cli/commands/db/schema/load.js +9 -9
- package/build/src/cli/commands/db/seed.js +9 -9
- package/build/src/cli/commands/db/tenants/check.js +35 -32
- package/build/src/cli/commands/db/tenants/create.js +29 -26
- package/build/src/cli/commands/db/tenants/migrate.js +44 -40
- package/build/src/cli/commands/destroy/migration.js +5 -5
- package/build/src/cli/commands/generate/base-models.js +5 -5
- package/build/src/cli/commands/generate/frontend-models.js +9 -9
- package/build/src/cli/commands/generate/migration.js +5 -5
- package/build/src/cli/commands/generate/model.js +5 -5
- package/build/src/cli/commands/init.js +9 -7
- package/build/src/cli/commands/routes.js +6 -6
- package/build/src/cli/commands/run-script.js +9 -9
- package/build/src/cli/commands/runner.js +9 -9
- package/build/src/cli/commands/server.js +6 -6
- package/build/src/cli/commands/test.js +7 -6
- package/build/src/cli/index.js +141 -127
- package/build/src/cli/tenant-database-command-helper.js +185 -154
- package/build/src/cli/use-browser-cli.js +20 -15
- package/build/src/configuration-resolver.js +54 -47
- package/build/src/configuration-types.d.ts +21 -2
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +60 -3
- package/build/src/configuration.js +2547 -2240
- package/build/src/controller.js +407 -363
- package/build/src/current-configuration.js +12 -9
- package/build/src/current.js +75 -70
- package/build/src/database/annotations-async-hooks.js +22 -16
- package/build/src/database/annotations.js +18 -12
- package/build/src/database/drivers/base-column.js +179 -155
- package/build/src/database/drivers/base-columns-index.js +78 -69
- package/build/src/database/drivers/base-foreign-key.js +101 -89
- package/build/src/database/drivers/base-table.js +149 -124
- package/build/src/database/drivers/base.js +1489 -1306
- package/build/src/database/drivers/mssql/column.js +50 -39
- package/build/src/database/drivers/mssql/columns-index.js +3 -2
- package/build/src/database/drivers/mssql/connect-connection.js +9 -11
- package/build/src/database/drivers/mssql/foreign-key.js +9 -8
- package/build/src/database/drivers/mssql/index.js +587 -507
- package/build/src/database/drivers/mssql/options.js +75 -68
- package/build/src/database/drivers/mssql/query-parser.js +3 -2
- package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-database.js +31 -24
- package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/delete.js +16 -14
- package/build/src/database/drivers/mssql/sql/drop-database.js +31 -24
- package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/insert.js +2 -2
- package/build/src/database/drivers/mssql/sql/update.js +28 -24
- package/build/src/database/drivers/mssql/sql/upsert.js +20 -18
- package/build/src/database/drivers/mssql/structure-sql.js +114 -102
- package/build/src/database/drivers/mssql/table.js +96 -81
- package/build/src/database/drivers/mysql/column.js +92 -75
- package/build/src/database/drivers/mysql/columns-index.js +19 -16
- package/build/src/database/drivers/mysql/foreign-key.js +9 -8
- package/build/src/database/drivers/mysql/index.js +457 -396
- package/build/src/database/drivers/mysql/options.js +30 -26
- package/build/src/database/drivers/mysql/query-parser.js +3 -2
- package/build/src/database/drivers/mysql/query.js +29 -26
- package/build/src/database/drivers/mysql/sql/alter-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/create-database.js +28 -23
- package/build/src/database/drivers/mysql/sql/create-index.js +3 -2
- package/build/src/database/drivers/mysql/sql/create-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/delete.js +17 -14
- package/build/src/database/drivers/mysql/sql/drop-database.js +3 -2
- package/build/src/database/drivers/mysql/sql/drop-table.js +3 -2
- package/build/src/database/drivers/mysql/sql/insert.js +3 -2
- package/build/src/database/drivers/mysql/sql/update.js +29 -24
- package/build/src/database/drivers/mysql/sql/upsert.js +10 -8
- package/build/src/database/drivers/mysql/structure-sql.js +88 -79
- package/build/src/database/drivers/mysql/table.js +98 -83
- package/build/src/database/drivers/pgsql/column.js +72 -56
- package/build/src/database/drivers/pgsql/columns-index.js +3 -2
- package/build/src/database/drivers/pgsql/foreign-key.js +9 -8
- package/build/src/database/drivers/pgsql/index.js +438 -377
- package/build/src/database/drivers/pgsql/options.js +28 -25
- package/build/src/database/drivers/pgsql/query-parser.js +3 -2
- package/build/src/database/drivers/pgsql/sql/alter-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/create-database.js +23 -19
- package/build/src/database/drivers/pgsql/sql/create-index.js +3 -2
- package/build/src/database/drivers/pgsql/sql/create-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/delete.js +17 -14
- package/build/src/database/drivers/pgsql/sql/drop-database.js +3 -2
- package/build/src/database/drivers/pgsql/sql/drop-table.js +3 -2
- package/build/src/database/drivers/pgsql/sql/insert.js +3 -2
- package/build/src/database/drivers/pgsql/sql/update.js +29 -24
- package/build/src/database/drivers/pgsql/sql/upsert.js +11 -9
- package/build/src/database/drivers/pgsql/structure-sql.js +120 -108
- package/build/src/database/drivers/pgsql/table.js +77 -60
- package/build/src/database/drivers/sqlite/base.js +478 -405
- package/build/src/database/drivers/sqlite/column.js +69 -54
- package/build/src/database/drivers/sqlite/columns-index.js +27 -22
- package/build/src/database/drivers/sqlite/connection-sql-js.js +42 -35
- package/build/src/database/drivers/sqlite/foreign-key.js +21 -18
- package/build/src/database/drivers/sqlite/index.js +373 -330
- package/build/src/database/drivers/sqlite/index.native.js +64 -55
- package/build/src/database/drivers/sqlite/index.web.js +87 -69
- package/build/src/database/drivers/sqlite/options.js +28 -25
- package/build/src/database/drivers/sqlite/query-parser.js +3 -2
- package/build/src/database/drivers/sqlite/query.js +24 -21
- package/build/src/database/drivers/sqlite/query.native.js +25 -20
- package/build/src/database/drivers/sqlite/query.web.js +37 -30
- package/build/src/database/drivers/sqlite/sql/alter-table.js +179 -159
- package/build/src/database/drivers/sqlite/sql/create-index.js +3 -2
- package/build/src/database/drivers/sqlite/sql/create-table.js +3 -2
- package/build/src/database/drivers/sqlite/sql/delete.js +22 -17
- package/build/src/database/drivers/sqlite/sql/drop-table.js +3 -2
- package/build/src/database/drivers/sqlite/sql/insert.js +3 -2
- package/build/src/database/drivers/sqlite/sql/update.js +29 -24
- package/build/src/database/drivers/sqlite/sql/upsert.js +11 -9
- package/build/src/database/drivers/sqlite/structure-sql.js +52 -49
- package/build/src/database/drivers/sqlite/table-rebuilder.js +75 -62
- package/build/src/database/drivers/sqlite/table.js +125 -102
- package/build/src/database/drivers/structure-sql/utils.js +17 -14
- package/build/src/database/handler.js +10 -9
- package/build/src/database/initializer-from-require-context.js +87 -76
- package/build/src/database/migration/index.js +395 -332
- package/build/src/database/migrator/files-finder.js +50 -40
- package/build/src/database/migrator/types.js +30 -2
- package/build/src/database/migrator.js +526 -454
- package/build/src/database/pool/async-tracked-multi-connection.js +1147 -997
- package/build/src/database/pool/base-methods-forward.js +43 -40
- package/build/src/database/pool/base.js +343 -298
- package/build/src/database/pool/single-multi-use.js +110 -93
- package/build/src/database/query/alter-table-base.js +99 -84
- package/build/src/database/query/base.js +46 -39
- package/build/src/database/query/create-database-base.js +30 -25
- package/build/src/database/query/create-index-base.js +94 -75
- package/build/src/database/query/create-table-base.js +193 -151
- package/build/src/database/query/delete-base.js +16 -14
- package/build/src/database/query/drop-database-base.js +28 -23
- package/build/src/database/query/drop-table-base.js +53 -42
- package/build/src/database/query/from-base.js +33 -30
- package/build/src/database/query/from-plain.js +13 -11
- package/build/src/database/query/from-table.js +15 -13
- package/build/src/database/query/index.js +472 -410
- package/build/src/database/query/insert-base.js +164 -143
- package/build/src/database/query/join-base.js +40 -35
- package/build/src/database/query/join-object.js +153 -128
- package/build/src/database/query/join-plain.js +15 -13
- package/build/src/database/query/join-tracker.js +90 -76
- package/build/src/database/query/model-class-query.js +1370 -1134
- package/build/src/database/query/order-base.js +30 -27
- package/build/src/database/query/order-column.js +53 -44
- package/build/src/database/query/order-plain.js +24 -20
- package/build/src/database/query/preloader/belongs-to.js +258 -210
- package/build/src/database/query/preloader/ensure-model-class-initialized.js +9 -8
- package/build/src/database/query/preloader/has-many.js +301 -240
- package/build/src/database/query/preloader/has-one.js +117 -91
- package/build/src/database/query/preloader/selection.js +129 -117
- package/build/src/database/query/preloader.js +185 -160
- package/build/src/database/query/query-data.js +201 -157
- package/build/src/database/query/select-base.js +27 -25
- package/build/src/database/query/select-plain.js +15 -13
- package/build/src/database/query/select-table-and-column.js +25 -21
- package/build/src/database/query/update-base.js +38 -35
- package/build/src/database/query/upsert-base.js +100 -93
- package/build/src/database/query/where-base.js +35 -32
- package/build/src/database/query/where-combinator.d.ts.map +1 -1
- package/build/src/database/query/where-combinator.js +28 -26
- package/build/src/database/query/where-hash.js +68 -61
- package/build/src/database/query/where-model-class-hash.js +469 -414
- package/build/src/database/query/where-not.js +20 -18
- package/build/src/database/query/where-plain.js +17 -15
- package/build/src/database/query/with-count.js +159 -125
- package/build/src/database/query-parser/base-query-parser.js +37 -32
- package/build/src/database/query-parser/from-parser.js +45 -36
- package/build/src/database/query-parser/group-parser.js +50 -42
- package/build/src/database/query-parser/joins-parser.js +33 -28
- package/build/src/database/query-parser/limit-parser.js +70 -67
- package/build/src/database/query-parser/options.js +82 -75
- package/build/src/database/query-parser/order-parser.js +40 -36
- package/build/src/database/query-parser/select-parser.js +60 -49
- package/build/src/database/query-parser/where-parser.js +41 -36
- package/build/src/database/record/acts-as-list.js +273 -235
- package/build/src/database/record/attachments/download.js +45 -44
- package/build/src/database/record/attachments/handle.js +161 -141
- package/build/src/database/record/attachments/normalize-input.js +138 -128
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +91 -77
- package/build/src/database/record/attachments/storage-drivers/native.js +121 -112
- package/build/src/database/record/attachments/storage-drivers/s3.js +208 -177
- package/build/src/database/record/attachments/store.d.ts +1 -1
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +540 -468
- package/build/src/database/record/index.d.ts +17 -15
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3894 -3361
- package/build/src/database/record/instance-relationships/base.js +268 -234
- package/build/src/database/record/instance-relationships/belongs-to.js +73 -58
- package/build/src/database/record/instance-relationships/has-many.js +264 -225
- package/build/src/database/record/instance-relationships/has-one.js +105 -85
- package/build/src/database/record/record-not-found-error.js +2 -3
- package/build/src/database/record/relationships/base.d.ts +2 -2
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +167 -145
- package/build/src/database/record/relationships/belongs-to.js +51 -44
- package/build/src/database/record/relationships/has-many.js +40 -32
- package/build/src/database/record/relationships/has-one.js +40 -32
- package/build/src/database/record/state-machine.js +208 -156
- package/build/src/database/record/user-module.js +38 -32
- package/build/src/database/record/validators/base.js +24 -22
- package/build/src/database/record/validators/format.js +46 -36
- package/build/src/database/record/validators/presence.js +20 -18
- package/build/src/database/record/validators/uniqueness.js +117 -99
- package/build/src/database/table-data/index.js +231 -199
- package/build/src/database/table-data/table-column.js +382 -338
- package/build/src/database/table-data/table-foreign-key.js +66 -57
- package/build/src/database/table-data/table-index.js +36 -29
- package/build/src/database/table-data/table-reference.js +10 -10
- package/build/src/database/use-database.js +40 -32
- package/build/src/environment-handlers/base.js +544 -484
- package/build/src/environment-handlers/browser.js +294 -241
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +19 -16
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +21 -18
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +29 -22
- package/build/src/environment-handlers/node/cli/commands/beacon.js +19 -16
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +15 -14
- package/build/src/environment-handlers/node/cli/commands/console.js +120 -99
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +39 -34
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +63 -57
- package/build/src/environment-handlers/node/cli/commands/db/seed.js +63 -51
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +40 -32
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +353 -298
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +844 -729
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +38 -34
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +38 -34
- package/build/src/environment-handlers/node/cli/commands/init.js +61 -56
- package/build/src/environment-handlers/node/cli/commands/routes.js +59 -51
- package/build/src/environment-handlers/node/cli/commands/run-script.js +68 -54
- package/build/src/environment-handlers/node/cli/commands/runner.js +74 -56
- package/build/src/environment-handlers/node/cli/commands/server.js +106 -93
- package/build/src/environment-handlers/node/cli/commands/test.js +113 -97
- package/build/src/environment-handlers/node.js +874 -753
- package/build/src/error-logger.js +21 -22
- package/build/src/frontend-model-controller.d.ts +6 -6
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +3288 -2788
- package/build/src/frontend-model-resource/base-resource.d.ts +18 -17
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +869 -759
- package/build/src/frontend-models/base.d.ts +19 -12
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +3602 -3114
- package/build/src/frontend-models/clear-pending-debounced-callback.js +8 -7
- package/build/src/frontend-models/event-hook-models.js +21 -16
- package/build/src/frontend-models/model-registry.js +11 -9
- package/build/src/frontend-models/outgoing-event-buffer.js +17 -10
- package/build/src/frontend-models/preloader.d.ts +6 -6
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +149 -131
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +1855 -1560
- package/build/src/frontend-models/resource-config-validation.js +37 -27
- package/build/src/frontend-models/resource-definition.js +288 -234
- package/build/src/frontend-models/transport-serialization.js +266 -203
- package/build/src/frontend-models/use-created-event.js +7 -5
- package/build/src/frontend-models/use-destroyed-event.js +93 -80
- package/build/src/frontend-models/use-model-class-event.js +91 -79
- package/build/src/frontend-models/use-updated-event.js +97 -84
- package/build/src/frontend-models/websocket-channel.js +441 -381
- package/build/src/frontend-models/websocket-publishers.js +173 -140
- package/build/src/http-client/header.js +14 -13
- package/build/src/http-client/index.js +132 -116
- package/build/src/http-client/request.js +87 -71
- package/build/src/http-client/response.js +140 -122
- package/build/src/http-client/websocket-client.js +17 -15
- package/build/src/http-server/client/index.js +465 -409
- package/build/src/http-server/client/params-to-object.js +135 -124
- package/build/src/http-server/client/request-buffer/form-data-part.js +132 -111
- package/build/src/http-server/client/request-buffer/header.js +16 -15
- package/build/src/http-server/client/request-buffer/index.js +506 -446
- package/build/src/http-server/client/request-parser.js +186 -163
- package/build/src/http-server/client/request-runner.js +259 -226
- package/build/src/http-server/client/request-timing.js +151 -132
- package/build/src/http-server/client/request.js +108 -96
- package/build/src/http-server/client/response.js +235 -213
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +29 -25
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +29 -25
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
- package/build/src/http-server/client/websocket-request.js +137 -114
- package/build/src/http-server/client/websocket-session.js +1657 -1452
- package/build/src/http-server/cookie.js +236 -216
- package/build/src/http-server/development-reloader.js +221 -190
- package/build/src/http-server/index.js +525 -451
- package/build/src/http-server/remote-address.js +50 -38
- package/build/src/http-server/server-client.js +208 -181
- package/build/src/http-server/server-lock.js +167 -153
- package/build/src/http-server/websocket-channel-subscribers.js +93 -81
- package/build/src/http-server/websocket-channel.js +117 -104
- package/build/src/http-server/websocket-connection.js +104 -96
- package/build/src/http-server/websocket-event-log-store.js +404 -350
- package/build/src/http-server/websocket-events-host.js +164 -145
- package/build/src/http-server/websocket-events.js +47 -47
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +14 -13
- package/build/src/http-server/worker-handler/in-process.js +141 -123
- package/build/src/http-server/worker-handler/index.js +349 -313
- package/build/src/http-server/worker-handler/worker-script.js +5 -4
- package/build/src/http-server/worker-handler/worker-thread.js +269 -240
- package/build/src/initializer.js +36 -31
- package/build/src/jobs/mail-delivery.js +15 -13
- package/build/src/logger/base-logger.js +26 -24
- package/build/src/logger/console-logger.js +23 -21
- package/build/src/logger/file-logger.js +31 -29
- package/build/src/logger/outputs/array-output.js +42 -37
- package/build/src/logger/outputs/console-output.js +24 -20
- package/build/src/logger/outputs/file-output.js +48 -43
- package/build/src/logger/outputs/stdout-output.js +48 -39
- package/build/src/logger.js +394 -338
- package/build/src/mailer/backends/smtp.js +163 -134
- package/build/src/mailer/base.js +251 -211
- package/build/src/mailer/delivery.js +64 -56
- package/build/src/mailer/index.js +22 -4
- package/build/src/mailer.js +13 -4
- package/build/src/plugins/sqljs-wasm-route-controller.js +52 -42
- package/build/src/plugins/sqljs-wasm-route.js +38 -28
- package/build/src/record-payload-values.js +28 -25
- package/build/src/routes/app-routes.js +14 -12
- package/build/src/routes/base-route.js +130 -112
- package/build/src/routes/basic-route.js +102 -83
- package/build/src/routes/built-in/debug/controller.js +10 -10
- package/build/src/routes/built-in/errors/controller.js +5 -5
- package/build/src/routes/get-route.js +63 -50
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +80 -66
- package/build/src/routes/index.js +43 -36
- package/build/src/routes/namespace-route.js +47 -38
- package/build/src/routes/plugin-routes.js +124 -107
- package/build/src/routes/post-route.js +62 -51
- package/build/src/routes/resolver.js +494 -422
- package/build/src/routes/resource-route.js +143 -124
- package/build/src/routes/root-route.js +8 -7
- package/build/src/testing/base-expect.js +14 -13
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +405 -329
- package/build/src/testing/browser-test-app.js +29 -23
- package/build/src/testing/expect-to-change.js +50 -41
- package/build/src/testing/expect-utils.js +184 -139
- package/build/src/testing/expect.js +731 -638
- package/build/src/testing/request-client.js +85 -70
- package/build/src/testing/test-files-finder.js +339 -285
- package/build/src/testing/test-filter-parser.js +155 -124
- package/build/src/testing/test-runner.js +1020 -883
- package/build/src/testing/test-suite-splitter.js +142 -114
- package/build/src/testing/test.js +256 -216
- package/build/src/utils/backtrace-cleaner-node.js +69 -62
- package/build/src/utils/backtrace-cleaner.js +216 -188
- package/build/src/utils/ensure-error.js +7 -7
- package/build/src/utils/event-emitter.js +6 -4
- package/build/src/utils/file-exists.js +10 -9
- package/build/src/utils/format-value.js +76 -67
- package/build/src/utils/model-scope.js +31 -27
- package/build/src/utils/nest-callbacks.js +13 -10
- package/build/src/utils/plain-object.js +6 -5
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +563 -449
- package/build/src/utils/rest-args-error.js +6 -5
- package/build/src/utils/singularize-model-name.js +11 -9
- package/build/src/utils/split-sql-statements.js +79 -68
- package/build/src/utils/to-import-specifier.js +30 -24
- package/build/src/utils/with-tracked-stack-async-hooks.js +74 -60
- package/build/src/utils/with-tracked-stack.js +18 -14
- package/build/src/velocious-error.js +30 -27
- package/index.js +1 -0
- package/package.json +10 -4
- package/scripts/clean-build.js +8 -0
- package/scripts/ensure-bin-executable.js +13 -0
- package/scripts/run-tests.js +37 -0
- package/scripts/test-browser.js +486 -0
- package/src/application.js +229 -0
- package/src/authorization/ability.js +329 -0
- package/src/authorization/base-resource.js +143 -0
- package/src/background-jobs/client.js +50 -0
- package/src/background-jobs/cron-expression.js +277 -0
- package/src/background-jobs/forked-runner-child.js +86 -0
- package/src/background-jobs/job-record.js +13 -0
- package/src/background-jobs/job-registry.js +92 -0
- package/src/background-jobs/job-runner.js +107 -0
- package/src/background-jobs/job.js +77 -0
- package/src/background-jobs/json-socket.js +78 -0
- package/src/background-jobs/main.js +926 -0
- package/src/background-jobs/normalize-error.js +26 -0
- package/src/background-jobs/scheduler.js +274 -0
- package/src/background-jobs/socket-request.js +68 -0
- package/src/background-jobs/status-reporter.js +101 -0
- package/src/background-jobs/store.js +994 -0
- package/src/background-jobs/types.js +70 -0
- package/src/background-jobs/web/authorization.js +89 -0
- package/src/background-jobs/web/controller.js +280 -0
- package/src/background-jobs/web/index.js +57 -0
- package/src/background-jobs/web/path-matcher.js +74 -0
- package/src/background-jobs/web/registry.js +49 -0
- package/src/background-jobs/worker.js +683 -0
- package/src/beacon/client.js +330 -0
- package/src/beacon/in-process-broker.js +71 -0
- package/src/beacon/in-process-client.js +139 -0
- package/src/beacon/server.js +148 -0
- package/src/beacon/types.js +55 -0
- package/src/cli/base-command.js +67 -0
- package/src/cli/browser-cli.js +45 -0
- package/src/cli/commands/background-jobs-main.js +7 -0
- package/src/cli/commands/background-jobs-runner.js +7 -0
- package/src/cli/commands/background-jobs-worker.js +7 -0
- package/src/cli/commands/beacon.js +7 -0
- package/src/cli/commands/console.js +12 -0
- package/src/cli/commands/db/base-command.js +82 -0
- package/src/cli/commands/db/create.js +64 -0
- package/src/cli/commands/db/drop.js +75 -0
- package/src/cli/commands/db/migrate.js +17 -0
- package/src/cli/commands/db/reset.js +22 -0
- package/src/cli/commands/db/rollback.js +15 -0
- package/src/cli/commands/db/schema/dump.js +12 -0
- package/src/cli/commands/db/schema/load.js +12 -0
- package/src/cli/commands/db/seed.js +12 -0
- package/src/cli/commands/db/tenants/check.js +38 -0
- package/src/cli/commands/db/tenants/create.js +33 -0
- package/src/cli/commands/db/tenants/migrate.js +49 -0
- package/src/cli/commands/destroy/migration.js +7 -0
- package/src/cli/commands/generate/base-models.js +7 -0
- package/src/cli/commands/generate/frontend-models.js +12 -0
- package/src/cli/commands/generate/migration.js +7 -0
- package/src/cli/commands/generate/model.js +7 -0
- package/src/cli/commands/init.js +11 -0
- package/src/cli/commands/routes.js +7 -0
- package/src/cli/commands/run-script.js +12 -0
- package/src/cli/commands/runner.js +12 -0
- package/src/cli/commands/server.js +7 -0
- package/src/cli/commands/test.js +9 -0
- package/src/cli/index.js +152 -0
- package/src/cli/tenant-database-command-helper.js +198 -0
- package/src/cli/use-browser-cli.js +30 -0
- package/src/configuration-resolver.js +65 -0
- package/src/configuration-types.js +429 -0
- package/src/configuration.js +2590 -0
- package/src/controller.js +421 -0
- package/src/current-configuration.js +31 -0
- package/src/current.js +80 -0
- package/src/database/annotations-async-hooks.js +47 -0
- package/src/database/annotations.js +40 -0
- package/src/database/drivers/base-column.js +182 -0
- package/src/database/drivers/base-columns-index.js +81 -0
- package/src/database/drivers/base-foreign-key.js +104 -0
- package/src/database/drivers/base-table.js +156 -0
- package/src/database/drivers/base.js +1609 -0
- package/src/database/drivers/mssql/column.js +74 -0
- package/src/database/drivers/mssql/columns-index.js +6 -0
- package/src/database/drivers/mssql/connect-connection.js +16 -0
- package/src/database/drivers/mssql/foreign-key.js +12 -0
- package/src/database/drivers/mssql/index.js +590 -0
- package/src/database/drivers/mssql/options.js +79 -0
- package/src/database/drivers/mssql/query-parser.js +6 -0
- package/src/database/drivers/mssql/sql/alter-table.js +4 -0
- package/src/database/drivers/mssql/sql/create-database.js +36 -0
- package/src/database/drivers/mssql/sql/create-index.js +4 -0
- package/src/database/drivers/mssql/sql/create-table.js +4 -0
- package/src/database/drivers/mssql/sql/delete.js +19 -0
- package/src/database/drivers/mssql/sql/drop-database.js +36 -0
- package/src/database/drivers/mssql/sql/drop-table.js +4 -0
- package/src/database/drivers/mssql/sql/insert.js +4 -0
- package/src/database/drivers/mssql/sql/update.js +31 -0
- package/src/database/drivers/mssql/sql/upsert.js +23 -0
- package/src/database/drivers/mssql/structure-sql.js +120 -0
- package/src/database/drivers/mssql/table.js +145 -0
- package/src/database/drivers/mysql/column.js +112 -0
- package/src/database/drivers/mysql/columns-index.js +22 -0
- package/src/database/drivers/mysql/foreign-key.js +12 -0
- package/src/database/drivers/mysql/index.js +473 -0
- package/src/database/drivers/mysql/options.js +34 -0
- package/src/database/drivers/mysql/query-parser.js +6 -0
- package/src/database/drivers/mysql/query.js +37 -0
- package/src/database/drivers/mysql/sql/alter-table.js +6 -0
- package/src/database/drivers/mysql/sql/create-database.js +39 -0
- package/src/database/drivers/mysql/sql/create-index.js +6 -0
- package/src/database/drivers/mysql/sql/create-table.js +6 -0
- package/src/database/drivers/mysql/sql/delete.js +21 -0
- package/src/database/drivers/mysql/sql/drop-database.js +6 -0
- package/src/database/drivers/mysql/sql/drop-table.js +6 -0
- package/src/database/drivers/mysql/sql/insert.js +6 -0
- package/src/database/drivers/mysql/sql/update.js +33 -0
- package/src/database/drivers/mysql/sql/upsert.js +13 -0
- package/src/database/drivers/mysql/structure-sql.js +93 -0
- package/src/database/drivers/mysql/table.js +121 -0
- package/src/database/drivers/pgsql/column.js +90 -0
- package/src/database/drivers/pgsql/columns-index.js +6 -0
- package/src/database/drivers/pgsql/foreign-key.js +12 -0
- package/src/database/drivers/pgsql/index.js +441 -0
- package/src/database/drivers/pgsql/options.js +32 -0
- package/src/database/drivers/pgsql/query-parser.js +6 -0
- package/src/database/drivers/pgsql/sql/alter-table.js +6 -0
- package/src/database/drivers/pgsql/sql/create-database.js +38 -0
- package/src/database/drivers/pgsql/sql/create-index.js +6 -0
- package/src/database/drivers/pgsql/sql/create-table.js +6 -0
- package/src/database/drivers/pgsql/sql/delete.js +21 -0
- package/src/database/drivers/pgsql/sql/drop-database.js +6 -0
- package/src/database/drivers/pgsql/sql/drop-table.js +6 -0
- package/src/database/drivers/pgsql/sql/insert.js +6 -0
- package/src/database/drivers/pgsql/sql/update.js +33 -0
- package/src/database/drivers/pgsql/sql/upsert.js +14 -0
- package/src/database/drivers/pgsql/structure-sql.js +126 -0
- package/src/database/drivers/pgsql/table.js +135 -0
- package/src/database/drivers/sqlite/base.js +509 -0
- package/src/database/drivers/sqlite/column.js +75 -0
- package/src/database/drivers/sqlite/columns-index.js +30 -0
- package/src/database/drivers/sqlite/connection-sql-js.js +46 -0
- package/src/database/drivers/sqlite/foreign-key.js +24 -0
- package/src/database/drivers/sqlite/index.js +394 -0
- package/src/database/drivers/sqlite/index.native.js +72 -0
- package/src/database/drivers/sqlite/index.web.js +99 -0
- package/src/database/drivers/sqlite/options.js +32 -0
- package/src/database/drivers/sqlite/query-parser.js +6 -0
- package/src/database/drivers/sqlite/query.js +35 -0
- package/src/database/drivers/sqlite/query.native.js +35 -0
- package/src/database/drivers/sqlite/query.web.js +49 -0
- package/src/database/drivers/sqlite/sql/alter-table.js +187 -0
- package/src/database/drivers/sqlite/sql/create-index.js +6 -0
- package/src/database/drivers/sqlite/sql/create-table.js +6 -0
- package/src/database/drivers/sqlite/sql/delete.js +26 -0
- package/src/database/drivers/sqlite/sql/drop-table.js +6 -0
- package/src/database/drivers/sqlite/sql/insert.js +6 -0
- package/src/database/drivers/sqlite/sql/update.js +33 -0
- package/src/database/drivers/sqlite/sql/upsert.js +14 -0
- package/src/database/drivers/sqlite/structure-sql.js +56 -0
- package/src/database/drivers/sqlite/table-rebuilder.js +96 -0
- package/src/database/drivers/sqlite/table.js +131 -0
- package/src/database/drivers/structure-sql/utils.js +35 -0
- package/src/database/handler.js +13 -0
- package/src/database/initializer-from-require-context.js +101 -0
- package/src/database/migration/index.js +438 -0
- package/src/database/migrator/files-finder.js +55 -0
- package/src/database/migrator/types.js +31 -0
- package/src/database/migrator.js +557 -0
- package/src/database/pool/async-tracked-multi-connection.js +1164 -0
- package/src/database/pool/base-methods-forward.js +52 -0
- package/src/database/pool/base.js +380 -0
- package/src/database/pool/single-multi-use.js +118 -0
- package/src/database/query/alter-table-base.js +104 -0
- package/src/database/query/base.js +49 -0
- package/src/database/query/create-database-base.js +42 -0
- package/src/database/query/create-index-base.js +117 -0
- package/src/database/query/create-table-base.js +205 -0
- package/src/database/query/delete-base.js +19 -0
- package/src/database/query/drop-database-base.js +38 -0
- package/src/database/query/drop-table-base.js +58 -0
- package/src/database/query/from-base.js +36 -0
- package/src/database/query/from-plain.js +16 -0
- package/src/database/query/from-table.js +18 -0
- package/src/database/query/index.js +533 -0
- package/src/database/query/insert-base.js +172 -0
- package/src/database/query/join-base.js +43 -0
- package/src/database/query/join-object.js +167 -0
- package/src/database/query/join-plain.js +18 -0
- package/src/database/query/join-tracker.js +93 -0
- package/src/database/query/model-class-query.js +1577 -0
- package/src/database/query/order-base.js +33 -0
- package/src/database/query/order-column.js +77 -0
- package/src/database/query/order-plain.js +28 -0
- package/src/database/query/preloader/belongs-to.js +267 -0
- package/src/database/query/preloader/ensure-model-class-initialized.js +18 -0
- package/src/database/query/preloader/has-many.js +316 -0
- package/src/database/query/preloader/has-one.js +123 -0
- package/src/database/query/preloader/selection.js +152 -0
- package/src/database/query/preloader.js +201 -0
- package/src/database/query/query-data.js +305 -0
- package/src/database/query/select-base.js +30 -0
- package/src/database/query/select-plain.js +18 -0
- package/src/database/query/select-table-and-column.js +28 -0
- package/src/database/query/update-base.js +41 -0
- package/src/database/query/upsert-base.js +103 -0
- package/src/database/query/where-base.js +38 -0
- package/src/database/query/where-combinator.js +31 -0
- package/src/database/query/where-hash.js +77 -0
- package/src/database/query/where-model-class-hash.js +505 -0
- package/src/database/query/where-not.js +23 -0
- package/src/database/query/where-plain.js +20 -0
- package/src/database/query/with-count.js +219 -0
- package/src/database/query-parser/base-query-parser.js +40 -0
- package/src/database/query-parser/from-parser.js +49 -0
- package/src/database/query-parser/group-parser.js +55 -0
- package/src/database/query-parser/joins-parser.js +37 -0
- package/src/database/query-parser/limit-parser.js +77 -0
- package/src/database/query-parser/options.js +94 -0
- package/src/database/query-parser/order-parser.js +45 -0
- package/src/database/query-parser/select-parser.js +67 -0
- package/src/database/query-parser/where-parser.js +46 -0
- package/src/database/record/acts-as-list.js +374 -0
- package/src/database/record/attachments/download.js +49 -0
- package/src/database/record/attachments/handle.js +188 -0
- package/src/database/record/attachments/normalize-input.js +213 -0
- package/src/database/record/attachments/storage-drivers/filesystem.js +114 -0
- package/src/database/record/attachments/storage-drivers/native.js +146 -0
- package/src/database/record/attachments/storage-drivers/s3.js +245 -0
- package/src/database/record/attachments/store.js +591 -0
- package/src/database/record/index.js +3970 -0
- package/src/database/record/instance-relationships/base.js +289 -0
- package/src/database/record/instance-relationships/belongs-to.js +84 -0
- package/src/database/record/instance-relationships/has-many.js +284 -0
- package/src/database/record/instance-relationships/has-one.js +117 -0
- package/src/database/record/record-not-found-error.js +3 -0
- package/src/database/record/relationships/base.js +195 -0
- package/src/database/record/relationships/belongs-to.js +57 -0
- package/src/database/record/relationships/has-many.js +46 -0
- package/src/database/record/relationships/has-one.js +46 -0
- package/src/database/record/state-machine.js +278 -0
- package/src/database/record/user-module.js +43 -0
- package/src/database/record/validators/base.js +27 -0
- package/src/database/record/validators/format.js +50 -0
- package/src/database/record/validators/presence.js +24 -0
- package/src/database/record/validators/uniqueness.js +124 -0
- package/src/database/table-data/index.js +241 -0
- package/src/database/table-data/table-column.js +416 -0
- package/src/database/table-data/table-foreign-key.js +69 -0
- package/src/database/table-data/table-index.js +46 -0
- package/src/database/table-data/table-reference.js +13 -0
- package/src/database/use-database.js +48 -0
- package/src/environment-handlers/base.js +561 -0
- package/src/environment-handlers/browser.js +338 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
- package/src/environment-handlers/node/cli/commands/beacon.js +21 -0
- package/src/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
- package/src/environment-handlers/node/cli/commands/console.js +149 -0
- package/src/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
- package/src/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
- package/src/environment-handlers/node/cli/commands/db/seed.js +79 -0
- package/src/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +367 -0
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
- package/src/environment-handlers/node/cli/commands/generate/migration.js +45 -0
- package/src/environment-handlers/node/cli/commands/generate/model.js +45 -0
- package/src/environment-handlers/node/cli/commands/init.js +68 -0
- package/src/environment-handlers/node/cli/commands/routes.js +63 -0
- package/src/environment-handlers/node/cli/commands/run-script.js +85 -0
- package/src/environment-handlers/node/cli/commands/runner.js +84 -0
- package/src/environment-handlers/node/cli/commands/server.js +151 -0
- package/src/environment-handlers/node/cli/commands/test.js +118 -0
- package/src/environment-handlers/node.js +887 -0
- package/src/error-logger.js +30 -0
- package/src/frontend-model-controller.js +3491 -0
- package/src/frontend-model-resource/base-resource.js +935 -0
- package/src/frontend-models/base.js +4004 -0
- package/src/frontend-models/clear-pending-debounced-callback.js +16 -0
- package/src/frontend-models/event-hook-models.js +49 -0
- package/src/frontend-models/model-registry.js +28 -0
- package/src/frontend-models/outgoing-event-buffer.js +51 -0
- package/src/frontend-models/preloader.js +169 -0
- package/src/frontend-models/query.js +2245 -0
- package/src/frontend-models/resource-config-validation.js +56 -0
- package/src/frontend-models/resource-definition.js +399 -0
- package/src/frontend-models/transport-serialization.js +369 -0
- package/src/frontend-models/use-created-event.js +21 -0
- package/src/frontend-models/use-destroyed-event.js +148 -0
- package/src/frontend-models/use-model-class-event.js +164 -0
- package/src/frontend-models/use-updated-event.js +152 -0
- package/src/frontend-models/websocket-channel.js +494 -0
- package/src/frontend-models/websocket-publishers.js +224 -0
- package/src/http-client/header.js +17 -0
- package/src/http-client/index.js +139 -0
- package/src/http-client/request.js +94 -0
- package/src/http-client/response.js +151 -0
- package/src/http-client/websocket-client.js +27 -0
- package/src/http-server/client/index.js +507 -0
- package/src/http-server/client/params-to-object.js +152 -0
- package/src/http-server/client/request-buffer/form-data-part.js +139 -0
- package/src/http-server/client/request-buffer/header.js +19 -0
- package/src/http-server/client/request-buffer/index.js +535 -0
- package/src/http-server/client/request-parser.js +195 -0
- package/src/http-server/client/request-runner.js +321 -0
- package/src/http-server/client/request-timing.js +171 -0
- package/src/http-server/client/request.js +114 -0
- package/src/http-server/client/response.js +251 -0
- package/src/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
- package/src/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
- package/src/http-server/client/uploaded-file/uploaded-file.js +36 -0
- package/src/http-server/client/websocket-request.js +147 -0
- package/src/http-server/client/websocket-session.js +1755 -0
- package/src/http-server/cookie.js +245 -0
- package/src/http-server/development-reloader.js +240 -0
- package/src/http-server/index.js +561 -0
- package/src/http-server/remote-address.js +77 -0
- package/src/http-server/server-client.js +222 -0
- package/src/http-server/server-lock.js +178 -0
- package/src/http-server/websocket-channel-subscribers.js +110 -0
- package/src/http-server/websocket-channel.js +137 -0
- package/src/http-server/websocket-connection.js +118 -0
- package/src/http-server/websocket-event-log-store.js +433 -0
- package/src/http-server/websocket-events-host.js +170 -0
- package/src/http-server/websocket-events.js +50 -0
- package/src/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
- package/src/http-server/worker-handler/in-process.js +155 -0
- package/src/http-server/worker-handler/index.js +370 -0
- package/src/http-server/worker-handler/worker-script.js +6 -0
- package/src/http-server/worker-handler/worker-thread.js +286 -0
- package/src/initializer.js +39 -0
- package/src/jobs/.gitkeep +1 -0
- package/src/jobs/mail-delivery.js +22 -0
- package/src/logger/base-logger.js +34 -0
- package/src/logger/console-logger.js +28 -0
- package/src/logger/file-logger.js +36 -0
- package/src/logger/outputs/array-output.js +50 -0
- package/src/logger/outputs/console-output.js +32 -0
- package/src/logger/outputs/file-output.js +55 -0
- package/src/logger/outputs/stdout-output.js +64 -0
- package/src/logger.js +507 -0
- package/src/mailer/backends/smtp.js +197 -0
- package/src/mailer/base.js +337 -0
- package/src/mailer/delivery.js +70 -0
- package/src/mailer/index.js +24 -0
- package/src/mailer.js +15 -0
- package/src/plugins/sqljs-wasm-route-controller.js +70 -0
- package/src/plugins/sqljs-wasm-route.js +71 -0
- package/src/record-payload-values.js +83 -0
- package/src/routes/app-routes.js +17 -0
- package/src/routes/base-route.js +133 -0
- package/src/routes/basic-route.js +109 -0
- package/src/routes/built-in/debug/controller.js +12 -0
- package/src/routes/built-in/errors/controller.js +7 -0
- package/src/routes/built-in/errors/not-found.ejs +1 -0
- package/src/routes/get-route.js +75 -0
- package/src/routes/hooks/frontend-model-command-route-hook.js +100 -0
- package/src/routes/index.js +50 -0
- package/src/routes/namespace-route.js +51 -0
- package/src/routes/plugin-routes.js +141 -0
- package/src/routes/post-route.js +74 -0
- package/src/routes/resolver.js +535 -0
- package/src/routes/resource-route.js +154 -0
- package/src/routes/root-route.js +11 -0
- package/src/templates/configuration.js +61 -0
- package/src/templates/generate-migration.js +11 -0
- package/src/templates/generate-model.js +6 -0
- package/src/templates/routes.js +11 -0
- package/src/testing/base-expect.js +17 -0
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
- package/src/testing/browser-test-app.js +32 -0
- package/src/testing/expect-to-change.js +55 -0
- package/src/testing/expect-utils.js +269 -0
- package/src/testing/expect.js +763 -0
- package/src/testing/request-client.js +90 -0
- package/src/testing/test-files-finder.js +364 -0
- package/src/testing/test-filter-parser.js +198 -0
- package/src/testing/test-runner.js +1168 -0
- package/src/testing/test-suite-splitter.js +177 -0
- package/src/testing/test.js +370 -0
- package/src/types/external-modules.d.ts +57 -0
- package/src/utils/backtrace-cleaner-node.js +87 -0
- package/src/utils/backtrace-cleaner.js +266 -0
- package/src/utils/ensure-error.js +15 -0
- package/src/utils/event-emitter.js +8 -0
- package/src/utils/file-exists.js +18 -0
- package/src/utils/format-value.js +101 -0
- package/src/utils/model-scope.js +56 -0
- package/src/utils/nest-callbacks.js +22 -0
- package/src/utils/plain-object.js +14 -0
- package/src/utils/ransack.js +859 -0
- package/src/utils/rest-args-error.js +14 -0
- package/src/utils/singularize-model-name.js +18 -0
- package/src/utils/split-sql-statements.js +88 -0
- package/src/utils/to-import-specifier.js +53 -0
- package/src/utils/with-tracked-stack-async-hooks.js +103 -0
- package/src/utils/with-tracked-stack.js +38 -0
- package/src/velocious-error.js +34 -0
- package/tsconfig.json +16 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* Minimal POSIX-style 5-field cron parser used by the background-job
|
|
4
5
|
* scheduler. Supports `*`, single values, ranges (`N-M`), steps
|
|
@@ -11,26 +12,30 @@
|
|
|
11
12
|
* cron semantics: when both fields are restricted (neither `*`), the
|
|
12
13
|
* job fires when EITHER matches. When one is `*` it has no effect.
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
-
const
|
|
15
|
+
|
|
16
|
+
const MONTH_NAMES = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]
|
|
17
|
+
const DAY_NAMES = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]
|
|
18
|
+
|
|
16
19
|
const SHORTCUTS = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
20
|
+
"@hourly": "0 * * * *",
|
|
21
|
+
"@daily": "0 0 * * *",
|
|
22
|
+
"@midnight": "0 0 * * *",
|
|
23
|
+
"@weekly": "0 0 * * 0",
|
|
24
|
+
"@monthly": "0 0 1 * *",
|
|
25
|
+
"@yearly": "0 0 1 1 *",
|
|
26
|
+
"@annually": "0 0 1 1 *"
|
|
27
|
+
}
|
|
28
|
+
|
|
25
29
|
const FIELDS = [
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
]
|
|
30
|
+
{name: "minute", min: 0, max: 59},
|
|
31
|
+
{name: "hour", min: 0, max: 23},
|
|
32
|
+
{name: "dayOfMonth", min: 1, max: 31},
|
|
33
|
+
{name: "month", min: 1, max: 12, names: MONTH_NAMES},
|
|
34
|
+
// Accept 0-7 so ranges like `5-7` (Fri-Sun) work; we normalize 7
|
|
35
|
+
// down to 0 after parsing in `normalizeDayOfWeek` below.
|
|
36
|
+
{name: "dayOfWeek", min: 0, max: 7, names: DAY_NAMES}
|
|
37
|
+
]
|
|
38
|
+
|
|
34
39
|
/**
|
|
35
40
|
* ParsedCron type.
|
|
36
41
|
* @typedef {object} ParsedCron
|
|
@@ -43,51 +48,59 @@ const FIELDS = [
|
|
|
43
48
|
* @property {boolean} dayOfWeekRestricted - True when the dayOfWeek field is not `?`.
|
|
44
49
|
* @property {string} expression - Original expression for diagnostics.
|
|
45
50
|
*/
|
|
51
|
+
|
|
46
52
|
/**
|
|
47
53
|
* Runs the parseCronExpression helper.
|
|
48
54
|
* @param {string} expression - Cron expression or shortcut.
|
|
49
55
|
* @returns {ParsedCron}
|
|
50
56
|
*/
|
|
51
57
|
export function parseCronExpression(expression) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
58
|
+
if (typeof expression !== "string" || !expression.trim()) {
|
|
59
|
+
throw new Error(`Invalid cron expression: ${expression}`)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const trimmed = expression.trim().toLowerCase()
|
|
63
|
+
const expanded = SHORTCUTS[/**
|
|
64
|
+
* Narrows the runtime value to the documented type.
|
|
65
|
+
@type {keyof typeof SHORTCUTS} */ (trimmed)] || trimmed
|
|
66
|
+
const fields = expanded.split(/\s+/)
|
|
67
|
+
|
|
68
|
+
if (fields.length !== 5) {
|
|
69
|
+
throw new Error(`Invalid cron expression "${expression}": expected 5 fields, got ${fields.length}`)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const [minuteField, hourField, dayOfMonthField, monthField, dayOfWeekField] = fields
|
|
73
|
+
const parsed = {
|
|
74
|
+
minute: parseField(minuteField, FIELDS[0], expression),
|
|
75
|
+
hour: parseField(hourField, FIELDS[1], expression),
|
|
76
|
+
dayOfMonth: parseField(dayOfMonthField, FIELDS[2], expression),
|
|
77
|
+
month: parseField(monthField, FIELDS[3], expression),
|
|
78
|
+
// Cron treats both 0 and 7 as Sunday. We accept 7 throughout the
|
|
79
|
+
// parse pass (so `5-7` for Fri-Sun works) and then normalize any
|
|
80
|
+
// 7s down to 0 so the matcher only deals with 0-6.
|
|
81
|
+
dayOfWeek: normalizeDayOfWeek(parseField(dayOfWeekField, FIELDS[4], expression)),
|
|
82
|
+
dayOfMonthRestricted: dayOfMonthField !== "*",
|
|
83
|
+
dayOfWeekRestricted: dayOfWeekField !== "*",
|
|
84
|
+
expression
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return parsed
|
|
78
88
|
}
|
|
89
|
+
|
|
79
90
|
/**
|
|
80
91
|
* Runs normalize day of week.
|
|
81
92
|
* @param {Set<number>} dayOfWeek
|
|
82
93
|
* @returns {Set<number>}
|
|
83
94
|
*/
|
|
84
95
|
function normalizeDayOfWeek(dayOfWeek) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
if (dayOfWeek.has(7)) {
|
|
97
|
+
dayOfWeek.delete(7)
|
|
98
|
+
dayOfWeek.add(0)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return dayOfWeek
|
|
90
102
|
}
|
|
103
|
+
|
|
91
104
|
/**
|
|
92
105
|
* Runs parse field.
|
|
93
106
|
* @param {string} field - Field expression.
|
|
@@ -96,12 +109,15 @@ function normalizeDayOfWeek(dayOfWeek) {
|
|
|
96
109
|
* @returns {Set<number>}
|
|
97
110
|
*/
|
|
98
111
|
function parseField(field, fieldSpec, expression) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
112
|
+
const result = new Set()
|
|
113
|
+
|
|
114
|
+
for (const part of field.split(",")) {
|
|
115
|
+
addPartValues(part, fieldSpec, expression, result)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return result
|
|
104
119
|
}
|
|
120
|
+
|
|
105
121
|
/**
|
|
106
122
|
* Runs add part values.
|
|
107
123
|
* @param {string} part - Single comma-separated chunk.
|
|
@@ -111,19 +127,23 @@ function parseField(field, fieldSpec, expression) {
|
|
|
111
127
|
* @returns {void}
|
|
112
128
|
*/
|
|
113
129
|
function addPartValues(part, fieldSpec, expression, result) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
130
|
+
if (!part) {
|
|
131
|
+
throw new Error(`Invalid ${fieldSpec.name} field in cron expression "${expression}"`)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const [rangePart, stepPart] = part.split("/")
|
|
135
|
+
const step = stepPart === undefined ? 1 : parseStep(stepPart, fieldSpec, expression)
|
|
136
|
+
const [start, end] = parseRange(rangePart, fieldSpec, expression, stepPart !== undefined)
|
|
137
|
+
|
|
138
|
+
for (let value = start; value <= end; value += step) {
|
|
139
|
+
if (value < fieldSpec.min || value > fieldSpec.max) {
|
|
140
|
+
throw new Error(`Value ${value} out of range for ${fieldSpec.name} in cron expression "${expression}"`)
|
|
125
141
|
}
|
|
142
|
+
|
|
143
|
+
result.add(value)
|
|
144
|
+
}
|
|
126
145
|
}
|
|
146
|
+
|
|
127
147
|
/**
|
|
128
148
|
* Runs parse step.
|
|
129
149
|
* @param {string} value - Step value.
|
|
@@ -132,12 +152,15 @@ function addPartValues(part, fieldSpec, expression, result) {
|
|
|
132
152
|
* @returns {number}
|
|
133
153
|
*/
|
|
134
154
|
function parseStep(value, fieldSpec, expression) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
155
|
+
const step = Number(value)
|
|
156
|
+
|
|
157
|
+
if (!Number.isInteger(step) || step <= 0) {
|
|
158
|
+
throw new Error(`Invalid step "${value}" for ${fieldSpec.name} in cron expression "${expression}"`)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return step
|
|
140
162
|
}
|
|
163
|
+
|
|
141
164
|
/**
|
|
142
165
|
* Runs parse range.
|
|
143
166
|
* @param {string} rangePart - Range portion (before ? `/`).
|
|
@@ -147,22 +170,29 @@ function parseStep(value, fieldSpec, expression) {
|
|
|
147
170
|
* @returns {[number, number]}
|
|
148
171
|
*/
|
|
149
172
|
function parseRange(rangePart, fieldSpec, expression, hasStep) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
173
|
+
if (rangePart === "*") {
|
|
174
|
+
return [fieldSpec.min, fieldSpec.max]
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const dashIndex = rangePart.indexOf("-")
|
|
178
|
+
|
|
179
|
+
if (dashIndex === -1) {
|
|
180
|
+
const value = parseValue(rangePart, fieldSpec, expression)
|
|
181
|
+
|
|
182
|
+
// `N/step` is shorthand for `N-max/step` (Vixie cron).
|
|
183
|
+
return [value, hasStep ? fieldSpec.max : value]
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const start = parseValue(rangePart.slice(0, dashIndex), fieldSpec, expression)
|
|
187
|
+
const end = parseValue(rangePart.slice(dashIndex + 1), fieldSpec, expression)
|
|
188
|
+
|
|
189
|
+
if (start > end) {
|
|
190
|
+
throw new Error(`Range start ${start} > end ${end} for ${fieldSpec.name} in cron expression "${expression}"`)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return [start, end]
|
|
165
194
|
}
|
|
195
|
+
|
|
166
196
|
/**
|
|
167
197
|
* Runs parse value.
|
|
168
198
|
* @param {string} rawValue - Raw value (may be a name).
|
|
@@ -171,23 +201,30 @@ function parseRange(rangePart, fieldSpec, expression, hasStep) {
|
|
|
171
201
|
* @returns {number}
|
|
172
202
|
*/
|
|
173
203
|
function parseValue(rawValue, fieldSpec, expression) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
204
|
+
if (!rawValue) {
|
|
205
|
+
throw new Error(`Invalid ${fieldSpec.name} value in cron expression "${expression}"`)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const namedIndex = fieldSpec.names?.indexOf(rawValue)
|
|
209
|
+
|
|
210
|
+
if (typeof namedIndex === "number" && namedIndex !== -1) {
|
|
211
|
+
return namedIndex + fieldSpec.min
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const value = Number(rawValue)
|
|
215
|
+
|
|
216
|
+
if (!Number.isInteger(value)) {
|
|
217
|
+
throw new Error(`Invalid ${fieldSpec.name} value "${rawValue}" in cron expression "${expression}"`)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return value
|
|
186
221
|
}
|
|
222
|
+
|
|
187
223
|
// 5 years of minutes — covers the worst-case legitimate gap, the
|
|
188
224
|
// `0 0 29 2 *` (Feb 29) leap-year-only schedule, with a one-year
|
|
189
225
|
// buffer so we never report a real cron pattern as "never matches".
|
|
190
|
-
const MAX_NEXT_FIRE_ITERATIONS = 5 * 366 * 24 * 60
|
|
226
|
+
const MAX_NEXT_FIRE_ITERATIONS = 5 * 366 * 24 * 60
|
|
227
|
+
|
|
191
228
|
/**
|
|
192
229
|
* Returns the next Date strictly after `from` that satisfies `parsed`.
|
|
193
230
|
* Operates at minute granularity. Bails out with an error after five
|
|
@@ -198,16 +235,20 @@ const MAX_NEXT_FIRE_ITERATIONS = 5 * 366 * 24 * 60;
|
|
|
198
235
|
* @returns {Date}
|
|
199
236
|
*/
|
|
200
237
|
export function nextCronFireDate(parsed, from) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
238
|
+
const candidate = new Date(from.getTime())
|
|
239
|
+
|
|
240
|
+
candidate.setSeconds(0, 0)
|
|
241
|
+
candidate.setMinutes(candidate.getMinutes() + 1)
|
|
242
|
+
|
|
243
|
+
for (let iterations = 0; iterations < MAX_NEXT_FIRE_ITERATIONS; iterations += 1) {
|
|
244
|
+
if (candidateMatches(candidate, parsed)) return candidate
|
|
245
|
+
|
|
246
|
+
candidate.setMinutes(candidate.getMinutes() + 1)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
throw new Error(`Cron expression "${parsed.expression}" never matches`)
|
|
210
250
|
}
|
|
251
|
+
|
|
211
252
|
/**
|
|
212
253
|
* Runs candidate matches.
|
|
213
254
|
* @param {Date} candidate - Candidate Date (in local time).
|
|
@@ -215,24 +256,22 @@ export function nextCronFireDate(parsed, from) {
|
|
|
215
256
|
* @returns {boolean}
|
|
216
257
|
*/
|
|
217
258
|
function candidateMatches(candidate, parsed) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
return true;
|
|
259
|
+
if (!parsed.minute.has(candidate.getMinutes())) return false
|
|
260
|
+
if (!parsed.hour.has(candidate.getHours())) return false
|
|
261
|
+
if (!parsed.month.has(candidate.getMonth() + 1)) return false
|
|
262
|
+
|
|
263
|
+
const dayOfMonthMatch = parsed.dayOfMonth.has(candidate.getDate())
|
|
264
|
+
const dayOfWeekMatch = parsed.dayOfWeek.has(candidate.getDay())
|
|
265
|
+
|
|
266
|
+
// POSIX/Vixie cron OR semantics: when both day fields are
|
|
267
|
+
// restricted, fire when EITHER matches. When only one is
|
|
268
|
+
// restricted, only that one applies.
|
|
269
|
+
if (parsed.dayOfMonthRestricted && parsed.dayOfWeekRestricted) {
|
|
270
|
+
return dayOfMonthMatch || dayOfWeekMatch
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (parsed.dayOfMonthRestricted) return dayOfMonthMatch
|
|
274
|
+
if (parsed.dayOfWeekRestricted) return dayOfWeekMatch
|
|
275
|
+
|
|
276
|
+
return true
|
|
237
277
|
}
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1leHByZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tncm91bmQtam9icy9jcm9uLWV4cHJlc3Npb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7Ozs7OztHQVdHO0FBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3hHLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFFbkUsTUFBTSxTQUFTLEdBQUc7SUFDaEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsUUFBUSxFQUFFLFdBQVc7SUFDckIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsVUFBVSxFQUFFLFdBQVc7SUFDdkIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsV0FBVyxFQUFFLFdBQVc7Q0FDekIsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFHO0lBQ2IsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBQztJQUNqQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFDO0lBQy9CLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUM7SUFDckMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUs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QUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUUvRCwwREFBMEQ7SUFDMUQseURBQXlEO0lBQ3pELHFDQUFxQztJQUNyQyxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5RCxPQUFPLGVBQWUsSUFBSSxjQUFjLENBQUE7SUFDMUMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLG9CQUFvQjtRQUFFLE9BQU8sZUFBZSxDQUFBO0lBQ3ZELElBQUksTUFBTSxDQUFDLG1CQUFtQjtRQUFFLE9BQU8sY0FBYyxDQUFBO0lBRXJELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIE1pbmltYWwgUE9TSVgtc3R5bGUgNS1maWVsZCBjcm9uIHBhcnNlciB1c2VkIGJ5IHRoZSBiYWNrZ3JvdW5kLWpvYlxuICogc2NoZWR1bGVyLiBTdXBwb3J0cyBgKmAsIHNpbmdsZSB2YWx1ZXMsIHJhbmdlcyAoYE4tTWApLCBzdGVwc1xuICogKGAqXFwvTmAgb3IgYE4tTS9OYCksIGNvbW1hLXNlcGFyYXRlZCBsaXN0cywgYW5kIHRoZSBjb21tb25cbiAqIGBAaG91cmx5YC9gQGRhaWx5YC9gQHdlZWtseWAvYEBtb250aGx5YC9gQHllYXJseWAvYEBtaWRuaWdodGBcbiAqIHNob3J0Y3V0cy4gTW9udGggYW5kIGRheS1vZi13ZWVrIG5hbWVzIChgamFuYC1gZGVjYCwgYHN1bmAtYHNhdGAsXG4gKiBjYXNlLWluc2Vuc2l0aXZlKSBhcmUgYWxzbyBhY2NlcHRlZC5cbiAqXG4gKiBGb3IgZGF5LW9mLW1vbnRoICsgZGF5LW9mLXdlZWsgaW50ZXJhY3Rpb24sIGZvbGxvd3MgUE9TSVgvVml4aWVcbiAqIGNyb24gc2VtYW50aWNzOiB3aGVuIGJvdGggZmllbGRzIGFyZSByZXN0cmljdGVkIChuZWl0aGVyIGAqYCksIHRoZVxuICogam9iIGZpcmVzIHdoZW4gRUlUSEVSIG1hdGNoZXMuIFdoZW4gb25lIGlzIGAqYCBpdCBoYXMgbm8gZWZmZWN0LlxuICovXG5cbmNvbnN0IE1PTlRIX05BTUVTID0gW1wiamFuXCIsIFwiZmViXCIsIFwibWFyXCIsIFwiYXByXCIsIFwibWF5XCIsIFwianVuXCIsIFwianVsXCIsIFwiYXVnXCIsIFwic2VwXCIsIFwib2N0XCIsIFwibm92XCIsIFwiZGVjXCJdXG5jb25zdCBEQVlfTkFNRVMgPSBbXCJzdW5cIiwgXCJtb25cIiwgXCJ0dWVcIiwgXCJ3ZWRcIiwgXCJ0aHVcIiwgXCJmcmlcIiwgXCJzYXRcIl1cblxuY29uc3QgU0hPUlRDVVRTID0ge1xuICBcIkBob3VybHlcIjogXCIwICogKiAqICpcIixcbiAgXCJAZGFpbHlcIjogXCIwIDAgKiAqICpcIixcbiAgXCJAbWlkbmlnaHRcIjogXCIwIDAgKiAqICpcIixcbiAgXCJAd2Vla2x5XCI6IFwiMCAwICogKiAwXCIsXG4gIFwiQG1vbnRobHlcIjogXCIwIDAgMSAqICpcIixcbiAgXCJAeWVhcmx5XCI6IFwiMCAwIDEgMSAqXCIsXG4gIFwiQGFubnVhbGx5XCI6IFwiMCAwIDEgMSAqXCJcbn1cblxuY29uc3QgRklFTERTID0gW1xuICB7bmFtZTogXCJtaW51dGVcIiwgbWluOiAwLCBtYXg6IDU5fSxcbiAge25hbWU6IFwiaG91clwiLCBtaW46IDAsIG1heDogMjN9LFxuICB7bmFtZTogXCJkYXlPZk1vbnRoXCIsIG1pbjogMSwgbWF4OiAzMX0sXG4gIHtuYW1lOiBcIm1vbnRoXCIsIG1pbjogMSwgbWF4OiAxMiwgbmFtZXM6IE1PTlRIX05BTUVTfSxcbiAgLy8gQWNjZXB0IDAtNyBzbyByYW5nZXMgbGlrZSBgNS03YCAoRnJpLVN1bikgd29yazsgd2Ugbm9ybWFsaXplIDdcbiAgLy8gZG93biB0byAwIGFmdGVyIHBhcnNpbmcgaW4gYG5vcm1hbGl6ZURheU9mV2Vla2AgYmVsb3cuXG4gIHtuYW1lOiBcImRheU9mV2Vla1wiLCBtaW46IDAsIG1heDogNywgbmFtZXM6IERBWV9OQU1FU31cbl1cblxuLyoqXG4gKiBQYXJzZWRDcm9uIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQYXJzZWRDcm9uXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBtaW51dGUgLSBBbGxvd2VkIG1pbnV0ZSB2YWx1ZXMgKDAtNTkpLlxuICogQHByb3BlcnR5IHtTZXQ8bnVtYmVyPn0gaG91ciAtIEFsbG93ZWQgaG91ciB2YWx1ZXMgKDAtMjMpLlxuICogQHByb3BlcnR5IHtTZXQ8bnVtYmVyPn0gZGF5T2ZNb250aCAtIEFsbG93ZWQgZGF5LW9mLW1vbnRoIHZhbHVlcyAoMS0zMSkuXG4gKiBAcHJvcGVydHkge1NldDxudW1iZXI+fSBtb250aCAtIEFsbG93ZWQgbW9udGggdmFsdWVzICgxLTEyKS5cbiAqIEBwcm9wZXJ0eSB7U2V0PG51bWJlcj59IGRheU9mV2VlayAtIEFsbG93ZWQgZGF5LW9mLXdlZWsgdmFsdWVzICgwLTYsIDA9U3VuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGF5T2ZNb250aFJlc3RyaWN0ZWQgLSBUcnVlIHdoZW4gdGhlIGRheU9mTW9udGggZmllbGQgaXMgbm90IGA/YC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGF5T2ZXZWVrUmVzdHJpY3RlZCAtIFRydWUgd2hlbiB0aGUgZGF5T2ZXZWVrIGZpZWxkIGlzIG5vdCBgP2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXhwcmVzc2lvbiAtIE9yaWdpbmFsIGV4cHJlc3Npb24gZm9yIGRpYWdub3N0aWNzLlxuICovXG5cbi8qKlxuICogUnVucyB0aGUgcGFyc2VDcm9uRXhwcmVzc2lvbiBoZWxwZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiAtIENyb24gZXhwcmVzc2lvbiBvciBzaG9ydGN1dC5cbiAqIEByZXR1cm5zIHtQYXJzZWRDcm9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDcm9uRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiB8fCAhZXhwcmVzc2lvbi50cmltKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3JvbiBleHByZXNzaW9uOiAke2V4cHJlc3Npb259YClcbiAgfVxuXG4gIGNvbnN0IHRyaW1tZWQgPSBleHByZXNzaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IGV4cGFuZGVkID0gU0hPUlRDVVRTWy8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge2tleW9mIHR5cGVvZiBTSE9SVENVVFN9ICovICh0cmltbWVkKV0gfHwgdHJpbW1lZFxuICBjb25zdCBmaWVsZHMgPSBleHBhbmRlZC5zcGxpdCgvXFxzKy8pXG5cbiAgaWYgKGZpZWxkcy5sZW5ndGggIT09IDUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3JvbiBleHByZXNzaW9uIFwiJHtleHByZXNzaW9ufVwiOiBleHBlY3RlZCA1IGZpZWxkcywgZ290ICR7ZmllbGRzLmxlbmd0aH1gKVxuICB9XG5cbiAgY29uc3QgW21pbnV0ZUZpZWxkLCBob3VyRmllbGQsIGRheU9mTW9udGhGaWVsZCwgbW9udGhGaWVsZCwgZGF5T2ZXZWVrRmllbGRdID0gZmllbGRzXG4gIGNvbnN0IHBhcnNlZCA9IHtcbiAgICBtaW51dGU6IHBhcnNlRmllbGQobWludXRlRmllbGQsIEZJRUxEU1swXSwgZXhwcmVzc2lvbiksXG4gICAgaG91cjogcGFyc2VGaWVsZChob3VyRmllbGQsIEZJRUxEU1sxXSwgZXhwcmVzc2lvbiksXG4gICAgZGF5T2ZNb250aDogcGFyc2VGaWVsZChkYXlPZk1vbnRoRmllbGQsIEZJRUxEU1syXSwgZXhwcmVzc2lvbiksXG4gICAgbW9udGg6IHBhcnNlRmllbGQobW9udGhGaWVsZCwgRklFTERTWzNdLCBleHByZXNzaW9uKSxcbiAgICAvLyBDcm9uIHRyZWF0cyBib3RoIDAgYW5kIDcgYXMgU3VuZGF5LiBXZSBhY2NlcHQgNyB0aHJvdWdob3V0IHRoZVxuICAgIC8vIHBhcnNlIHBhc3MgKHNvIGA1LTdgIGZvciBGcmktU3VuIHdvcmtzKSBhbmQgdGhlbiBub3JtYWxpemUgYW55XG4gICAgLy8gN3MgZG93biB0byAwIHNvIHRoZSBtYXRjaGVyIG9ubHkgZGVhbHMgd2l0aCAwLTYuXG4gICAgZGF5T2ZXZWVrOiBub3JtYWxpemVEYXlPZldlZWsocGFyc2VGaWVsZChkYXlPZldlZWtGaWVsZCwgRklFTERTWzRdLCBleHByZXNzaW9uKSksXG4gICAgZGF5T2ZNb250aFJlc3RyaWN0ZWQ6IGRheU9mTW9udGhGaWVsZCAhPT0gXCIqXCIsXG4gICAgZGF5T2ZXZWVrUmVzdHJpY3RlZDogZGF5T2ZXZWVrRmllbGQgIT09IFwiKlwiLFxuICAgIGV4cHJlc3Npb25cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBkYXkgb2Ygd2Vlay5cbiAqIEBwYXJhbSB7U2V0PG51bWJlcj59IGRheU9mV2Vla1xuICogQHJldHVybnMge1NldDxudW1iZXI+fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEYXlPZldlZWsoZGF5T2ZXZWVrKSB7XG4gIGlmIChkYXlPZldlZWsuaGFzKDcpKSB7XG4gICAgZGF5T2ZXZWVrLmRlbGV0ZSg3KVxuICAgIGRheU9mV2Vlay5hZGQoMClcbiAgfVxuXG4gIHJldHVybiBkYXlPZldlZWtcbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIC0gRmllbGQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gV2hvbGUgY3JvbiBleHByZXNzaW9uIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEByZXR1cm5zIHtTZXQ8bnVtYmVyPn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VGaWVsZChmaWVsZCwgZmllbGRTcGVjLCBleHByZXNzaW9uKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBmaWVsZC5zcGxpdChcIixcIikpIHtcbiAgICBhZGRQYXJ0VmFsdWVzKHBhcnQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbiwgcmVzdWx0KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFJ1bnMgYWRkIHBhcnQgdmFsdWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcnQgLSBTaW5nbGUgY29tbWEtc2VwYXJhdGVkIGNodW5rLlxuICogQHBhcmFtIHt7bmFtZTogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIG5hbWVzPzogc3RyaW5nW119fSBmaWVsZFNwZWMgLSBGaWVsZCBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBPcmlnaW5hbCBleHByZXNzaW9uIGZvciBlcnJvcnMuXG4gKiBAcGFyYW0ge1NldDxudW1iZXI+fSByZXN1bHQgLSBBY2N1bXVsYXRvci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZGRQYXJ0VmFsdWVzKHBhcnQsIGZpZWxkU3BlYywgZXhwcmVzc2lvbiwgcmVzdWx0KSB7XG4gIGlmICghcGFydCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke2ZpZWxkU3BlYy5uYW1lfSBmaWVsZCBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgY29uc3QgW3JhbmdlUGFydCwgc3RlcFBhcnRdID0gcGFydC5zcGxpdChcIi9cIilcbiAgY29uc3Qgc3RlcCA9IHN0ZXBQYXJ0ID09PSB1bmRlZmluZWQgPyAxIDogcGFyc2VTdGVwKHN0ZXBQYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24pXG4gIGNvbnN0IFtzdGFydCwgZW5kXSA9IHBhcnNlUmFuZ2UocmFuZ2VQYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24sIHN0ZXBQYXJ0ICE9PSB1bmRlZmluZWQpXG5cbiAgZm9yIChsZXQgdmFsdWUgPSBzdGFydDsgdmFsdWUgPD0gZW5kOyB2YWx1ZSArPSBzdGVwKSB7XG4gICAgaWYgKHZhbHVlIDwgZmllbGRTcGVjLm1pbiB8fCB2YWx1ZSA+IGZpZWxkU3BlYy5tYXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgJHt2YWx1ZX0gb3V0IG9mIHJhbmdlIGZvciAke2ZpZWxkU3BlYy5uYW1lfSBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICAgIH1cblxuICAgIHJlc3VsdC5hZGQodmFsdWUpXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHBhcnNlIHN0ZXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBTdGVwIHZhbHVlLlxuICogQHBhcmFtIHt7bmFtZTogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXJ9fSBmaWVsZFNwZWMgLSBGaWVsZCBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBPcmlnaW5hbCBleHByZXNzaW9uIGZvciBlcnJvcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBwYXJzZVN0ZXAodmFsdWUsIGZpZWxkU3BlYywgZXhwcmVzc2lvbikge1xuICBjb25zdCBzdGVwID0gTnVtYmVyKHZhbHVlKVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihzdGVwKSB8fCBzdGVwIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RlcCBcIiR7dmFsdWV9XCIgZm9yICR7ZmllbGRTcGVjLm5hbWV9IGluIGNyb24gZXhwcmVzc2lvbiBcIiR7ZXhwcmVzc2lvbn1cImApXG4gIH1cblxuICByZXR1cm4gc3RlcFxufVxuXG4vKipcbiAqIFJ1bnMgcGFyc2UgcmFuZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2VQYXJ0IC0gUmFuZ2UgcG9ydGlvbiAoYmVmb3JlID8gYC9gKS5cbiAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBuYW1lcz86IHN0cmluZ1tdfX0gZmllbGRTcGVjIC0gRmllbGQgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gT3JpZ2luYWwgZXhwcmVzc2lvbiBmb3IgZXJyb3JzLlxuICogQHBhcmFtIHtib29sZWFufSBoYXNTdGVwIC0gV2hldGhlciB0aGUgcGFydCBoYWQgYSBgL3N0ZXBgIHN1ZmZpeC5cbiAqIEByZXR1cm5zIHtbbnVtYmVyLCBudW1iZXJdfVxuICovXG5mdW5jdGlvbiBwYXJzZVJhbmdlKHJhbmdlUGFydCwgZmllbGRTcGVjLCBleHByZXNzaW9uLCBoYXNTdGVwKSB7XG4gIGlmIChyYW5nZVBhcnQgPT09IFwiKlwiKSB7XG4gICAgcmV0dXJuIFtmaWVsZFNwZWMubWluLCBmaWVsZFNwZWMubWF4XVxuICB9XG5cbiAgY29uc3QgZGFzaEluZGV4ID0gcmFuZ2VQYXJ0LmluZGV4T2YoXCItXCIpXG5cbiAgaWYgKGRhc2hJbmRleCA9PT0gLTEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlVmFsdWUocmFuZ2VQYXJ0LCBmaWVsZFNwZWMsIGV4cHJlc3Npb24pXG5cbiAgICAvLyBgTi9zdGVwYCBpcyBzaG9ydGhhbmQgZm9yIGBOLW1heC9zdGVwYCAoVml4aWUgY3JvbikuXG4gICAgcmV0dXJuIFt2YWx1ZSwgaGFzU3RlcCA/IGZpZWxkU3BlYy5tYXggOiB2YWx1ZV1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gcGFyc2VWYWx1ZShyYW5nZVBhcnQuc2xpY2UoMCwgZGFzaEluZGV4KSwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuICBjb25zdCBlbmQgPSBwYXJzZVZhbHVlKHJhbmdlUGFydC5zbGljZShkYXNoSW5kZXggKyAxKSwgZmllbGRTcGVjLCBleHByZXNzaW9uKVxuXG4gIGlmIChzdGFydCA+IGVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmFuZ2Ugc3RhcnQgJHtzdGFydH0gPiBlbmQgJHtlbmR9IGZvciAke2ZpZWxkU3BlYy5uYW1lfSBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgcmV0dXJuIFtzdGFydCwgZW5kXVxufVxuXG4vKipcbiAqIFJ1bnMgcGFyc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3VmFsdWUgLSBSYXcgdmFsdWUgKG1heSBiZSBhIG5hbWUpLlxuICogQHBhcmFtIHt7bmFtZTogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIsIG5hbWVzPzogc3RyaW5nW119fSBmaWVsZFNwZWMgLSBGaWVsZCBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBPcmlnaW5hbCBleHByZXNzaW9uIGZvciBlcnJvcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHJhd1ZhbHVlLCBmaWVsZFNwZWMsIGV4cHJlc3Npb24pIHtcbiAgaWYgKCFyYXdWYWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke2ZpZWxkU3BlYy5uYW1lfSB2YWx1ZSBpbiBjcm9uIGV4cHJlc3Npb24gXCIke2V4cHJlc3Npb259XCJgKVxuICB9XG5cbiAgY29uc3QgbmFtZWRJbmRleCA9IGZpZWxkU3BlYy5uYW1lcz8uaW5kZXhPZihyYXdWYWx1ZSlcblxuICBpZiAodHlwZW9mIG5hbWVkSW5kZXggPT09IFwibnVtYmVyXCIgJiYgbmFtZWRJbmRleCAhPT0gLTEpIHtcbiAgICByZXR1cm4gbmFtZWRJbmRleCArIGZpZWxkU3BlYy5taW5cbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gTnVtYmVyKHJhd1ZhbHVlKVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZFNwZWMubmFtZX0gdmFsdWUgXCIke3Jhd1ZhbHVlfVwiIGluIGNyb24gZXhwcmVzc2lvbiBcIiR7ZXhwcmVzc2lvbn1cImApXG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gNSB5ZWFycyBvZiBtaW51dGVzIOKAlCBjb3ZlcnMgdGhlIHdvcnN0LWNhc2UgbGVnaXRpbWF0ZSBnYXAsIHRoZVxuLy8gYDAgMCAyOSAyICpgIChGZWIgMjkpIGxlYXAteWVhci1vbmx5IHNjaGVkdWxlLCB3aXRoIGEgb25lLXllYXJcbi8vIGJ1ZmZlciBzbyB3ZSBuZXZlciByZXBvcnQgYSByZWFsIGNyb24gcGF0dGVybiBhcyBcIm5ldmVyIG1hdGNoZXNcIi5cbmNvbnN0IE1BWF9ORVhUX0ZJUkVfSVRFUkFUSU9OUyA9IDUgKiAzNjYgKiAyNCAqIDYwXG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmV4dCBEYXRlIHN0cmljdGx5IGFmdGVyIGBmcm9tYCB0aGF0IHNhdGlzZmllcyBgcGFyc2VkYC5cbiAqIE9wZXJhdGVzIGF0IG1pbnV0ZSBncmFudWxhcml0eS4gQmFpbHMgb3V0IHdpdGggYW4gZXJyb3IgYWZ0ZXIgZml2ZVxuICogeWVhcnMgb2Ygc2VhcmNoLCB3aGljaCBvbmx5IGhhcHBlbnMgaWYgdGhlIGV4cHJlc3Npb24gbWF0Y2hlcyBub1xuICogcmVhbCB0aW1lIChlLmcuLCBgMCAwIDMxIDIgKmAg4oCUIEZlYiAzMXN0KS5cbiAqIEBwYXJhbSB7UGFyc2VkQ3Jvbn0gcGFyc2VkIC0gUGFyc2VkIGNyb24gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7RGF0ZX0gZnJvbSAtIFJlZmVyZW5jZSBEYXRlIOKAlCB0aGUgbmV4dCBtYXRjaCBpcyBzdHJpY3RseSBhZnRlciB0aGlzLlxuICogQHJldHVybnMge0RhdGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0Q3JvbkZpcmVEYXRlKHBhcnNlZCwgZnJvbSkge1xuICBjb25zdCBjYW5kaWRhdGUgPSBuZXcgRGF0ZShmcm9tLmdldFRpbWUoKSlcblxuICBjYW5kaWRhdGUuc2V0U2Vjb25kcygwLCAwKVxuICBjYW5kaWRhdGUuc2V0TWludXRlcyhjYW5kaWRhdGUuZ2V0TWludXRlcygpICsgMSlcblxuICBmb3IgKGxldCBpdGVyYXRpb25zID0gMDsgaXRlcmF0aW9ucyA8IE1BWF9ORVhUX0ZJUkVfSVRFUkFUSU9OUzsgaXRlcmF0aW9ucyArPSAxKSB7XG4gICAgaWYgKGNhbmRpZGF0ZU1hdGNoZXMoY2FuZGlkYXRlLCBwYXJzZWQpKSByZXR1cm4gY2FuZGlkYXRlXG5cbiAgICBjYW5kaWRhdGUuc2V0TWludXRlcyhjYW5kaWRhdGUuZ2V0TWludXRlcygpICsgMSlcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgQ3JvbiBleHByZXNzaW9uIFwiJHtwYXJzZWQuZXhwcmVzc2lvbn1cIiBuZXZlciBtYXRjaGVzYClcbn1cblxuLyoqXG4gKiBSdW5zIGNhbmRpZGF0ZSBtYXRjaGVzLlxuICogQHBhcmFtIHtEYXRlfSBjYW5kaWRhdGUgLSBDYW5kaWRhdGUgRGF0ZSAoaW4gbG9jYWwgdGltZSkuXG4gKiBAcGFyYW0ge1BhcnNlZENyb259IHBhcnNlZCAtIFBhcnNlZCBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNhbmRpZGF0ZU1hdGNoZXMoY2FuZGlkYXRlLCBwYXJzZWQpIHtcbiAgaWYgKCFwYXJzZWQubWludXRlLmhhcyhjYW5kaWRhdGUuZ2V0TWludXRlcygpKSkgcmV0dXJuIGZhbHNlXG4gIGlmICghcGFyc2VkLmhvdXIuaGFzKGNhbmRpZGF0ZS5nZXRIb3VycygpKSkgcmV0dXJuIGZhbHNlXG4gIGlmICghcGFyc2VkLm1vbnRoLmhhcyhjYW5kaWRhdGUuZ2V0TW9udGgoKSArIDEpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBkYXlPZk1vbnRoTWF0Y2ggPSBwYXJzZWQuZGF5T2ZNb250aC5oYXMoY2FuZGlkYXRlLmdldERhdGUoKSlcbiAgY29uc3QgZGF5T2ZXZWVrTWF0Y2ggPSBwYXJzZWQuZGF5T2ZXZWVrLmhhcyhjYW5kaWRhdGUuZ2V0RGF5KCkpXG5cbiAgLy8gUE9TSVgvVml4aWUgY3JvbiBPUiBzZW1hbnRpY3M6IHdoZW4gYm90aCBkYXkgZmllbGRzIGFyZVxuICAvLyByZXN0cmljdGVkLCBmaXJlIHdoZW4gRUlUSEVSIG1hdGNoZXMuIFdoZW4gb25seSBvbmUgaXNcbiAgLy8gcmVzdHJpY3RlZCwgb25seSB0aGF0IG9uZSBhcHBsaWVzLlxuICBpZiAocGFyc2VkLmRheU9mTW9udGhSZXN0cmljdGVkICYmIHBhcnNlZC5kYXlPZldlZWtSZXN0cmljdGVkKSB7XG4gICAgcmV0dXJuIGRheU9mTW9udGhNYXRjaCB8fCBkYXlPZldlZWtNYXRjaFxuICB9XG5cbiAgaWYgKHBhcnNlZC5kYXlPZk1vbnRoUmVzdHJpY3RlZCkgcmV0dXJuIGRheU9mTW9udGhNYXRjaFxuICBpZiAocGFyc2VkLmRheU9mV2Vla1Jlc3RyaWN0ZWQpIHJldHVybiBkYXlPZldlZWtNYXRjaFxuXG4gIHJldHVybiB0cnVlXG59XG4iXX0=
|
|
@@ -1,76 +1,86 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
import runJobPayload from "./job-runner.js"
|
|
4
|
+
|
|
5
|
+
let finishing = false
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
8
|
* Runs is job message.
|
|
6
9
|
* @param {?} message - IPC message.
|
|
7
10
|
* @returns {message is {type: "job", payload: import("./types.js").BackgroundJobPayload}} - Whether this is a job message.
|
|
8
11
|
*/
|
|
9
12
|
function isJobMessage(message) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (!message || typeof message !== "object") return false
|
|
14
|
+
|
|
15
|
+
const messageRecord = /**
|
|
16
|
+
* Narrows the runtime value to the documented type.
|
|
17
|
+
@type {{type?: ?, payload?: ?}} */ (message)
|
|
18
|
+
|
|
19
|
+
return messageRecord.type === "job" && Object.hasOwn(messageRecord, "payload")
|
|
16
20
|
}
|
|
21
|
+
|
|
17
22
|
/**
|
|
18
23
|
* Runs finish.
|
|
19
24
|
* @param {number} exitCode - Process exit code.
|
|
20
25
|
* @returns {void}
|
|
21
26
|
*/
|
|
22
27
|
function finish(exitCode) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
finishing = true
|
|
29
|
+
process.exitCode = exitCode
|
|
30
|
+
|
|
31
|
+
if (process.connected && process.disconnect) {
|
|
32
|
+
process.disconnect()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
setImmediate(() => process.exit(exitCode))
|
|
29
36
|
}
|
|
37
|
+
|
|
30
38
|
/**
|
|
31
39
|
* Runs report job finished.
|
|
32
40
|
* @returns {void}
|
|
33
41
|
*/
|
|
34
42
|
function reportJobFinished() {
|
|
35
|
-
|
|
36
|
-
process.send({ type: "job-reported" });
|
|
43
|
+
if (process.send) process.send({type: "job-reported"})
|
|
37
44
|
}
|
|
45
|
+
|
|
38
46
|
/**
|
|
39
47
|
* Runs run job message.
|
|
40
48
|
* @param {?} message - IPC message.
|
|
41
49
|
* @returns {Promise<void>} - Resolves after the payload has run.
|
|
42
50
|
*/
|
|
43
51
|
async function runJobMessage(message) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
if (!isJobMessage(message)) {
|
|
53
|
+
throw new Error("Forked background job runner received invalid payload")
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
await runJobPayload(message.payload)
|
|
48
57
|
}
|
|
58
|
+
|
|
49
59
|
/**
|
|
50
60
|
* Runs handle job message.
|
|
51
61
|
* @param {?} message - IPC message.
|
|
52
62
|
* @returns {Promise<void>} - Resolves after completion is reported.
|
|
53
63
|
*/
|
|
54
64
|
async function handleJobMessage(message) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
+
try {
|
|
66
|
+
await runJobMessage(message)
|
|
67
|
+
reportJobFinished()
|
|
68
|
+
finish(0)
|
|
69
|
+
} catch (error) {
|
|
70
|
+
reportJobFinished()
|
|
71
|
+
console.error("Forked background job runner failed:", error)
|
|
72
|
+
finish(1)
|
|
73
|
+
}
|
|
65
74
|
}
|
|
75
|
+
|
|
66
76
|
for (const signal of ["SIGTERM", "SIGINT"]) {
|
|
67
|
-
|
|
77
|
+
process.once(signal, () => process.exit(1))
|
|
68
78
|
}
|
|
79
|
+
|
|
69
80
|
process.once("disconnect", () => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
if (!finishing) process.exit(0)
|
|
82
|
+
})
|
|
83
|
+
|
|
73
84
|
process.once("message", (message) => {
|
|
74
|
-
|
|
75
|
-
})
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ya2VkLXJ1bm5lci1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvZm9ya2VkLXJ1bm5lci1jaGlsZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0saUJBQWlCLENBQUE7QUFFM0MsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0FBRXJCOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxPQUFPO0lBQzNCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXpELE1BQU0sYUFBYSxHQUFHOzs4REFFb0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRXBFLE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUE7QUFDaEYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxRQUFRO0lBQ3RCLFNBQVMsR0FBRyxJQUFJLENBQUE7SUFDaEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFFM0IsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsaUJBQWlCO0lBQ3hCLElBQUksT0FBTyxDQUFDLElBQUk7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQU87SUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3RDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUFDLE9BQU87SUFDckMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDNUIsaUJBQWlCLEVBQUUsQ0FBQTtRQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDWCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGlCQUFpQixFQUFFLENBQUE7UUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDWCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDN0MsQ0FBQztBQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakMsQ0FBQyxDQUFDLENBQUE7QUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ2xDLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDaEMsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHJ1bkpvYlBheWxvYWQgZnJvbSBcIi4vam9iLXJ1bm5lci5qc1wiXG5cbmxldCBmaW5pc2hpbmcgPSBmYWxzZVxuXG4vKipcbiAqIFJ1bnMgaXMgam9iIG1lc3NhZ2UuXG4gKiBAcGFyYW0gez99IG1lc3NhZ2UgLSBJUEMgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHttZXNzYWdlIGlzIHt0eXBlOiBcImpvYlwiLCBwYXlsb2FkOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JQYXlsb2FkfX0gLSBXaGV0aGVyIHRoaXMgaXMgYSBqb2IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gaXNKb2JNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBtZXNzYWdlUmVjb3JkID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHt7dHlwZT86ID8sIHBheWxvYWQ/OiA/fX0gKi8gKG1lc3NhZ2UpXG5cbiAgcmV0dXJuIG1lc3NhZ2VSZWNvcmQudHlwZSA9PT0gXCJqb2JcIiAmJiBPYmplY3QuaGFzT3duKG1lc3NhZ2VSZWNvcmQsIFwicGF5bG9hZFwiKVxufVxuXG4vKipcbiAqIFJ1bnMgZmluaXNoLlxuICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIC0gUHJvY2VzcyBleGl0IGNvZGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZmluaXNoKGV4aXRDb2RlKSB7XG4gIGZpbmlzaGluZyA9IHRydWVcbiAgcHJvY2Vzcy5leGl0Q29kZSA9IGV4aXRDb2RlXG5cbiAgaWYgKHByb2Nlc3MuY29ubmVjdGVkICYmIHByb2Nlc3MuZGlzY29ubmVjdCkge1xuICAgIHByb2Nlc3MuZGlzY29ubmVjdCgpXG4gIH1cblxuICBzZXRJbW1lZGlhdGUoKCkgPT4gcHJvY2Vzcy5leGl0KGV4aXRDb2RlKSlcbn1cblxuLyoqXG4gKiBSdW5zIHJlcG9ydCBqb2IgZmluaXNoZWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVwb3J0Sm9iRmluaXNoZWQoKSB7XG4gIGlmIChwcm9jZXNzLnNlbmQpIHByb2Nlc3Muc2VuZCh7dHlwZTogXCJqb2ItcmVwb3J0ZWRcIn0pXG59XG5cbi8qKlxuICogUnVucyBydW4gam9iIG1lc3NhZ2UuXG4gKiBAcGFyYW0gez99IG1lc3NhZ2UgLSBJUEMgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHRoZSBwYXlsb2FkIGhhcyBydW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkpvYk1lc3NhZ2UobWVzc2FnZSkge1xuICBpZiAoIWlzSm9iTWVzc2FnZShtZXNzYWdlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZvcmtlZCBiYWNrZ3JvdW5kIGpvYiBydW5uZXIgcmVjZWl2ZWQgaW52YWxpZCBwYXlsb2FkXCIpXG4gIH1cblxuICBhd2FpdCBydW5Kb2JQYXlsb2FkKG1lc3NhZ2UucGF5bG9hZClcbn1cblxuLyoqXG4gKiBSdW5zIGhhbmRsZSBqb2IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7P30gbWVzc2FnZSAtIElQQyBtZXNzYWdlLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgY29tcGxldGlvbiBpcyByZXBvcnRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlSm9iTWVzc2FnZShtZXNzYWdlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcnVuSm9iTWVzc2FnZShtZXNzYWdlKVxuICAgIHJlcG9ydEpvYkZpbmlzaGVkKClcbiAgICBmaW5pc2goMClcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXBvcnRKb2JGaW5pc2hlZCgpXG4gICAgY29uc29sZS5lcnJvcihcIkZvcmtlZCBiYWNrZ3JvdW5kIGpvYiBydW5uZXIgZmFpbGVkOlwiLCBlcnJvcilcbiAgICBmaW5pc2goMSlcbiAgfVxufVxuXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbXCJTSUdURVJNXCIsIFwiU0lHSU5UXCJdKSB7XG4gIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHByb2Nlc3MuZXhpdCgxKSlcbn1cblxucHJvY2Vzcy5vbmNlKFwiZGlzY29ubmVjdFwiLCAoKSA9PiB7XG4gIGlmICghZmluaXNoaW5nKSBwcm9jZXNzLmV4aXQoMClcbn0pXG5cbnByb2Nlc3Mub25jZShcIm1lc3NhZ2VcIiwgKG1lc3NhZ2UpID0+IHtcbiAgdm9pZCBoYW5kbGVKb2JNZXNzYWdlKG1lc3NhZ2UpXG59KVxuIl19
|
|
85
|
+
void handleJobMessage(message)
|
|
86
|
+
})
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
import DatabaseRecord from "../database/record/index.js"
|
|
4
|
+
|
|
3
5
|
export default class BackgroundJobRecord extends DatabaseRecord {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
static tableName() {
|
|
7
|
+
return "background_jobs"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
static primaryKey() {
|
|
11
|
+
return "id"
|
|
12
|
+
}
|
|
10
13
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXJlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZ3JvdW5kLWpvYnMvam9iLXJlY29yZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUE7QUFFeEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBQzdELE1BQU0sQ0FBQyxTQUFTO1FBQ2QsT0FBTyxpQkFBaUIsQ0FBQTtJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgRGF0YWJhc2VSZWNvcmQgZnJvbSBcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhY2tncm91bmRKb2JSZWNvcmQgZXh0ZW5kcyBEYXRhYmFzZVJlY29yZCB7XG4gIHN0YXRpYyB0YWJsZU5hbWUoKSB7XG4gICAgcmV0dXJuIFwiYmFja2dyb3VuZF9qb2JzXCJcbiAgfVxuXG4gIHN0YXRpYyBwcmltYXJ5S2V5KCkge1xuICAgIHJldHVybiBcImlkXCJcbiAgfVxufVxuIl19
|