From 84c0963a13be23c2617653a3a5fae919ace04815 Mon Sep 17 00:00:00 2001 From: Krishnan Subramanian <84348052+krishnan-aot@users.noreply.github.com> Date: Mon, 9 Dec 2024 10:53:35 -0800 Subject: [PATCH] Remove Policy Engine from this repo (#1700) --- policy-engine/.eslintignore | 3 - policy-engine/.eslintrc.cjs | 26 - policy-engine/.gitignore | 1 - policy-engine/.npmignore | 13 - policy-engine/.prettierrc.json | 5 - policy-engine/README.md | 50 - .../docs/Policy_Engine_High_Level.drawio | 272 - .../docs/basic-client-server-flow.md | 70 - .../docs/policy-configuration-reference.md | 420 -- .../docs/validation-result-reference.md | 89 - policy-engine/package-lock.json | 5515 ---------------- policy-engine/package.json | 77 - .../Single Trip Oversize Dimension Set.csv | 214 - policy-engine/src/_examples/_debug-helper.ts | 75 - policy-engine/src/_examples/calculate-cost.ts | 24 - .../src/_examples/get-policy-details.ts | 114 - policy-engine/src/_examples/os-dimensions.csv | 213 - .../src/_examples/output-os-as-csv.ts | 126 - .../src/_examples/update-os-from-csv.ts | 171 - .../src/_examples/validate-invalid-tros.ts | 22 - policy-engine/src/_examples/validate-stos.ts | 19 - policy-engine/src/_examples/validate-tros.ts | 19 - .../permit-app/permit-application.type.ts | 99 - .../src/_test/permit-app/test-stos.ts | 92 - .../src/_test/permit-app/valid-tros-30day.ts | 63 - .../src/_test/permit-app/valid-trow-120day.ts | 72 - .../policy-config/all-event-types.sample.ts | 155 - .../complete-in-progress.sample.ts | 5859 ----------------- .../_test/policy-config/five-types.sample.ts | 1652 ----- .../src/_test/policy-config/master.sample.ts | 826 --- .../src/_test/policy-config/mimimal.sample.ts | 39 - .../stos-vehicle-config.sample.ts | 4826 -------------- .../tros-multiple-cost-rules.sample.ts | 53 - .../tros-no-allowed-vehicles.sample.ts | 60 - .../policy-config/tros-no-params.sample.ts | 55 - .../_test/policy-config/tros-only.sample.ts | 170 - .../src/_test/unit/configuration.spec.ts | 143 - policy-engine/src/_test/unit/cost.spec.ts | 109 - .../src/_test/unit/size-dimension.spec.ts | 67 - policy-engine/src/_test/unit/utility.spec.ts | 50 - .../src/_test/unit/validation.spec.ts | 202 - .../src/enum/accessory-vehicle-type.ts | 4 - policy-engine/src/enum/facts.ts | 9 - policy-engine/src/enum/index.ts | 7 - policy-engine/src/enum/permit-app-info.ts | 16 - policy-engine/src/enum/relative-position.ts | 6 - .../src/enum/validation-result-code.ts | 7 - .../src/enum/validation-result-type.ts | 7 - policy-engine/src/enum/vehicle-types.ts | 4 - policy-engine/src/helper/facts.helper.ts | 120 - policy-engine/src/helper/lists.helper.ts | 61 - .../src/helper/rules-engine.helper.ts | 81 - policy-engine/src/index.ts | 3 - policy-engine/src/policy-engine.ts | 794 --- .../src/rule-operator/custom-operators.ts | 48 - policy-engine/src/types/commodity.ts | 20 - policy-engine/src/types/cost-rule.ts | 4 - policy-engine/src/types/dimension-modifier.ts | 10 - policy-engine/src/types/facts.ts | 10 - policy-engine/src/types/geographic-region.ts | 5 - policy-engine/src/types/identified-object.ts | 4 - policy-engine/src/types/index.ts | 37 - policy-engine/src/types/permit-type.ts | 13 - policy-engine/src/types/policy-definition.ts | 24 - policy-engine/src/types/range-matrix.ts | 11 - .../src/types/region-size-override.ts | 6 - policy-engine/src/types/self-issuable.ts | 3 - policy-engine/src/types/size-dimension.ts | 15 - policy-engine/src/types/vehicle-category.ts | 23 - policy-engine/src/types/vehicle-type.ts | 25 - policy-engine/src/types/vehicle.ts | 28 - policy-engine/src/types/weight-dimension.ts | 23 - policy-engine/src/validation-result.ts | 25 - policy-engine/src/validation-results.ts | 86 - policy-engine/tsconfig.json | 18 - 75 files changed, 23687 deletions(-) delete mode 100644 policy-engine/.eslintignore delete mode 100644 policy-engine/.eslintrc.cjs delete mode 100644 policy-engine/.gitignore delete mode 100644 policy-engine/.npmignore delete mode 100644 policy-engine/.prettierrc.json delete mode 100644 policy-engine/README.md delete mode 100644 policy-engine/docs/Policy_Engine_High_Level.drawio delete mode 100644 policy-engine/docs/basic-client-server-flow.md delete mode 100644 policy-engine/docs/policy-configuration-reference.md delete mode 100644 policy-engine/docs/validation-result-reference.md delete mode 100644 policy-engine/package-lock.json delete mode 100644 policy-engine/package.json delete mode 100644 policy-engine/src/_examples/Single Trip Oversize Dimension Set.csv delete mode 100644 policy-engine/src/_examples/_debug-helper.ts delete mode 100644 policy-engine/src/_examples/calculate-cost.ts delete mode 100644 policy-engine/src/_examples/get-policy-details.ts delete mode 100644 policy-engine/src/_examples/os-dimensions.csv delete mode 100644 policy-engine/src/_examples/output-os-as-csv.ts delete mode 100644 policy-engine/src/_examples/update-os-from-csv.ts delete mode 100644 policy-engine/src/_examples/validate-invalid-tros.ts delete mode 100644 policy-engine/src/_examples/validate-stos.ts delete mode 100644 policy-engine/src/_examples/validate-tros.ts delete mode 100644 policy-engine/src/_test/permit-app/permit-application.type.ts delete mode 100644 policy-engine/src/_test/permit-app/test-stos.ts delete mode 100644 policy-engine/src/_test/permit-app/valid-tros-30day.ts delete mode 100644 policy-engine/src/_test/permit-app/valid-trow-120day.ts delete mode 100644 policy-engine/src/_test/policy-config/all-event-types.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/complete-in-progress.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/five-types.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/master.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/mimimal.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/stos-vehicle-config.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/tros-multiple-cost-rules.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/tros-no-allowed-vehicles.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/tros-no-params.sample.ts delete mode 100644 policy-engine/src/_test/policy-config/tros-only.sample.ts delete mode 100644 policy-engine/src/_test/unit/configuration.spec.ts delete mode 100644 policy-engine/src/_test/unit/cost.spec.ts delete mode 100644 policy-engine/src/_test/unit/size-dimension.spec.ts delete mode 100644 policy-engine/src/_test/unit/utility.spec.ts delete mode 100644 policy-engine/src/_test/unit/validation.spec.ts delete mode 100644 policy-engine/src/enum/accessory-vehicle-type.ts delete mode 100644 policy-engine/src/enum/facts.ts delete mode 100644 policy-engine/src/enum/index.ts delete mode 100644 policy-engine/src/enum/permit-app-info.ts delete mode 100644 policy-engine/src/enum/relative-position.ts delete mode 100644 policy-engine/src/enum/validation-result-code.ts delete mode 100644 policy-engine/src/enum/validation-result-type.ts delete mode 100644 policy-engine/src/enum/vehicle-types.ts delete mode 100644 policy-engine/src/helper/facts.helper.ts delete mode 100644 policy-engine/src/helper/lists.helper.ts delete mode 100644 policy-engine/src/helper/rules-engine.helper.ts delete mode 100644 policy-engine/src/index.ts delete mode 100644 policy-engine/src/policy-engine.ts delete mode 100644 policy-engine/src/rule-operator/custom-operators.ts delete mode 100644 policy-engine/src/types/commodity.ts delete mode 100644 policy-engine/src/types/cost-rule.ts delete mode 100644 policy-engine/src/types/dimension-modifier.ts delete mode 100644 policy-engine/src/types/facts.ts delete mode 100644 policy-engine/src/types/geographic-region.ts delete mode 100644 policy-engine/src/types/identified-object.ts delete mode 100644 policy-engine/src/types/index.ts delete mode 100644 policy-engine/src/types/permit-type.ts delete mode 100644 policy-engine/src/types/policy-definition.ts delete mode 100644 policy-engine/src/types/range-matrix.ts delete mode 100644 policy-engine/src/types/region-size-override.ts delete mode 100644 policy-engine/src/types/self-issuable.ts delete mode 100644 policy-engine/src/types/size-dimension.ts delete mode 100644 policy-engine/src/types/vehicle-category.ts delete mode 100644 policy-engine/src/types/vehicle-type.ts delete mode 100644 policy-engine/src/types/vehicle.ts delete mode 100644 policy-engine/src/types/weight-dimension.ts delete mode 100644 policy-engine/src/validation-result.ts delete mode 100644 policy-engine/src/validation-results.ts delete mode 100644 policy-engine/tsconfig.json diff --git a/policy-engine/.eslintignore b/policy-engine/.eslintignore deleted file mode 100644 index 8ad4d156d..000000000 --- a/policy-engine/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -dist/ -.eslintrc.cjs diff --git a/policy-engine/.eslintrc.cjs b/policy-engine/.eslintrc.cjs deleted file mode 100644 index 6bc11f7f2..000000000 --- a/policy-engine/.eslintrc.cjs +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - project: ['./tsconfig.json'], - tsconfigRootDir : __dirname, - sourceType: 'module', - }, - root: true, - env: { - node: true, - jest: true, - }, - plugins: ['@typescript-eslint'], - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - ignorePatterns: ['.eslintrc.cjs'], - rules: { - // '@typescript-eslint/interface-name-prefix': 'off', - // '@typescript-eslint/explicit-function-return-type': 'off', - // '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, -}; \ No newline at end of file diff --git a/policy-engine/.gitignore b/policy-engine/.gitignore deleted file mode 100644 index 3a264e904..000000000 --- a/policy-engine/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/*.tgz \ No newline at end of file diff --git a/policy-engine/.npmignore b/policy-engine/.npmignore deleted file mode 100644 index 246d8794d..000000000 --- a/policy-engine/.npmignore +++ /dev/null @@ -1,13 +0,0 @@ -docs/ -src/ -coverage/ -**/*.tgz -.eslintignore -.eslintrc.cjs -dist/_test/ -dist/_examples/ -dist/tsconfig.tsbuildinfo -tsconfig.tsbuildinfo -.prettierrc.json -package-lock.json -tsconfig.json \ No newline at end of file diff --git a/policy-engine/.prettierrc.json b/policy-engine/.prettierrc.json deleted file mode 100644 index d641d6b91..000000000 --- a/policy-engine/.prettierrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "endOfLine":"auto" -} \ No newline at end of file diff --git a/policy-engine/README.md b/policy-engine/README.md deleted file mode 100644 index 952caa60b..000000000 --- a/policy-engine/README.md +++ /dev/null @@ -1,50 +0,0 @@ -A JSON-based rules engine to validate onRouteBC permit applications against commercial vehicle policy. - -## Synopsis -```orbc-policy-engine``` is a library designed to compare a commercial vehicle permit application against policy expressed in JSON format, and return a list of policy violations as well as other informational policy messages related to the permit. - -```orbc-policy-engine``` makes use of https://github.com/CacheControl/json-rules-engine for rules engine functionality. Complex rules are modeled by extending the core ```json-rules-engine``` operators and other capabilities. - -## Usage -```js -import Policy from 'orbc-policy-engine'; - -// Instantiate a new Policy object -// policyDefinition is a JSON object of type PolicyDefinition -const policy: Policy = new Policy(policyDefinition); - -// Get list of all available permit types (ID and name) -const permitTypes: Map = policy.getPermitTypes(); - -// Get list of all available commodities (ID and name) -const commodities: Map = policy.getCommodities(); - -// Get list of all available power unit types -const powerUnits: Map = policy.getPowerUnitTypes(); - -// Get list of all available trailer types -const trailers: Map = policy.getTrailerTypes(); - -// Get list of all valid commodities for a given permit type -const commodities: Map = policy.getCommodities(permitTypeId); - -// Get list of all vehicle types valid to be added to a configuration, -// by permit type and commodity. Requires supplying the vehicles already -// added to the configuration, or empty array if starting from scratch -const allowableVehicles: Map = policy.getNextPermittableVehicles( - permitTypeId, - commodityId, - currentConfiguration); - -// Validate a permit application against policy -// permitApplication is a JSON object of type PermitApplication -// A PermitApplication is the standard permitData object wrapped -// in an object with a permitType key. For example: -// { -// permitType: 'TROS', -// permitData: { ... } -// } -// Note this is an async call due to the reliance on json-rules-engine -const results: ValidationResults = await policy.validate(permitApplication); -``` - diff --git a/policy-engine/docs/Policy_Engine_High_Level.drawio b/policy-engine/docs/Policy_Engine_High_Level.drawio deleted file mode 100644 index 9faa50cfb..000000000 --- a/policy-engine/docs/Policy_Engine_High_Level.drawio +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/policy-engine/docs/basic-client-server-flow.md b/policy-engine/docs/basic-client-server-flow.md deleted file mode 100644 index 53be26732..000000000 --- a/policy-engine/docs/basic-client-server-flow.md +++ /dev/null @@ -1,70 +0,0 @@ -# Basic client server flow for policy engine - -## Principles -The policy engine is implemented as a javascript module that can be used server-side with Nodejs, or in the browser. - -When the policy engine is initialized, a JSON file describing policy rules is supplied. When a method of the policy engine is called, it generates its response based on the policy JSON that it was initialized with. - -For example, a policy JSON will include a list of all valid permit types, as well as a list of all valid vehicle types. When the getPermitTypes or getVehicleTypes methods are called, the response will be based on just those permit / vehicle types defined in the JSON. Notably, there are no 'built-in' permit or vehicle types - all are defined exclusively in the JSON. This provides maximum flexibility. - -The most current policy JSON will describe Commercial Vehicle policy as of right now. This current policy JSON will be stored in the onRouteBC SQL Server database in a column in a table. When changes are made to policy, a new row is added to the table and the old policy JSON is end-dated. There is only ever one current policy JSON at any one time. - -It will be possible to retrieve any previous version of policy because all are kept in the database. It is also possible to initialize the policy engine with an arbitrary policy JSON for development and testing purposes. The policy JSON need not be retrieved from the database, the policy engine doesn't care where it comes from. - -Initializing the policy engine with a policy JSON that is __not__ the current version is useful in the scenario where new policy rules are being edited and need to be tested thoroughly before going live. In this scenario, the new policy JSON would be in the database in 'draft' state, and the onRouteBC application launched in a test state that will load the specific draft policy JSON instead of current live policy. - -The policy JSON in the onRouteBC database will be accessible only through a policy API. This API should be used by the backend as well as the frontend to ensure consistency - make sure the entire application is using the same policy. - -Retrieving the current policy JSON could be achieved with a GET request to, for example, /policy/current. - -Retrieving a non-current (draft or expired) policy JSON could be achieved with a GET request to the endpoint with ID, for example, /policy/10042 (where 10042 is the ID of the draft policy JSON in the database). - -The policy engine javascript library will provide methods for various policy-related tasks in onRouteBC. Examples are getting the list of all valid permit types, getting the list of valid trailer types, getting the list of rules applicable for a specific permit type, and a validate method to check a supplied permit application against policy for any violations or warnings. - -Some of these methods are exposed through the policy engine API. For example, a /policy/current/validate method where a policy application JSON is POSTed to it could return an identical result to executing this in the browser in javascript. The policy engine API will simply delegate the call to the policy engine library running in Nodejs in the backend, and package and return the response unmodified. - -In this way, a server-side validation of a permit application can be mandatory before a permit is issued, but intermediate validation steps (such as when the client is filling out the permit application form) can be executed quickly in-browser instead of calling back to the server constantly. - -### Payload Size -The size of the policy JSON will be reduced by relying on default values for weight and size dimensions, the largest part of policy configuration. When transmitting and storing the policy JSON, the 'dehydrated' and unformatted JSON will be used. When the policy engine is initialized with a policy JSON it will rehydrate it with the weight and size dimension defaults. An 'export' method will dehydrate the policy JSON and return the smaller JSON result. - -Rehydration and dehydration on initialization and export simplifies the admin management of policy, since values can be updated directly in the policy engine JSON without having to worry about default values. - -```mermaid -sequenceDiagram - participant browser as Client Browser - participant orbc as onRouteBC - participant policy as Policy Engine API - participant db as SQL Server - browser->>orbc: Log in - orbc->>policy: Request current
policy - note over orbc,policy: e.g. GET /policy/current/ - policy->>db: Get current policy JSON - note over policy,db: TBD, likely will query for most
current active policy JSON based
on columns in policy table - db-->>policy: Return current policy JSON - policy-->>orbc: Return current policy JSON - orbc->>browser: Return page, which includes
policy JSON and client-
side policy engine JS library - browser->>browser: Initialize policy engine
with current policy JSON - browser->>orbc: Request to start permit app - orbc-->>browser: Return application form - browser->>browser: Populate permit type
dropdown from policy
engine - loop As user fills in form - browser->>browser: Validate permit
in browser - note over browser, orbc: Final validation occurs when user
submits completed application. - end - browser->>orbc: Submit application - note over browser,orbc: Include complete permit JSON - orbc->>policy: Validate permit JSON - note over orbc,policy: Include complete permit JSON - policy->>db: Get current policy JSON - db-->>policy: Return current policy JSON - policy->>policy: Initialize policy engine
with current policy JSON - policy->>policy: Validate permit
server-side - note over orbc,policy: Server-side validation should return
identical results to client-side. - policy-->>orbc: Return validation results - alt Permit is valid - note over browser,db: Proceed as normal with sending client to payment page / cart - else Permit is not valid - orbc-->>browser: Return error message - end -``` \ No newline at end of file diff --git a/policy-engine/docs/policy-configuration-reference.md b/policy-engine/docs/policy-configuration-reference.md deleted file mode 100644 index 6b166b782..000000000 --- a/policy-engine/docs/policy-configuration-reference.md +++ /dev/null @@ -1,420 +0,0 @@ -# Policy Configuration Reference - -## Configuration File Structure -Policy rules are defined in the policy configuration JSON object. Rules include checks for validating permit applications against policy, as well as definitions of all permit types, commodity types, vehicle types, vehicle combinations, and permittable dimensions (weight, size, allowable distances, etc.) - -The JSON configuration structure is described by TypeScript types, starting with types/PolicyDefinition. The reference below goes into more detail about what each of the properties is intended to express. - -### Current configuration properties in use -The below properties (link for more details) are used by the current version of the policy engine. - -* [geographicRegions](#geographicRegions) -* [permitTypes](#permitTypes) -* [commonRules](#commonRules) -* [vehicleTypes](#vehicleTypes) -* [commodities](#commodities) - -### Configuration properties for future use -The below properties (link for more details) are for __potential__ future use of the policy engine, and are listed in this documentation for completeness but should not be relied on yet. - -* [version](#version) -* [globalWeightDefaults](#globalWeightDefaults) -* [globalSizeDefaults](#globalSizeDefaults) -* [vehicleCategories](#vehicleCategories) -* [rangeMatrices](#rangeMatrices) - -## Current Configuration Properties - -### geographicRegions -The geographicRegions property defines all of the distinct regions in the province which may have unique policy rules. For example, a vehicle travelling through the Peace region may have different permittable size dimensions than a vehcicle travelling through Lower Mainland. - -Geographic regions are __not__ used when validating permits which do not require routing (e.g. term oversize permits). - -The spatial geometry of the region itself is not stored in the policy configuration; rather, the regions travelled are returned along with the generated route from the external route planner API. The route planner maintains the link between roads and geographic regions which the policy configuration relies on. - -When applying for a permit which requires a route (such as a single trip oversize) the permit applicant will enter their start and destination locations. The external route planner will generate a route appropriate for the vehicle, and will return that route along with the list of all geographic regions the route crosses. - -The structure of the geographicRegions is as follows: - -```js - geographicRegions: [ - { - id: 'LMN', - name: 'Lower Mainland', - }, - { - id: 'KTN', - name: 'Kootenay', - }, - { - id: 'PCE', - name: 'Peace', - }, - ] -``` -Another 'pseudo' geographic region exists which is every area of the province __not__ covered by one of the other named regions. This 'pseudo' region is typically called 'BC Default' but is not explicitly configured as its own region, though it can have its own set of permittable sizes and weights. See the [commodities](#commodities) section below for details on configuring dimensions for BC Default. - -> [!NOTE] -> The IDs assigned to the geographic regions are arbitrary, they need only be unique. When onRouteBC integrates with the route planner, the geographic region IDs may need to be modified to align with the IDs as returned by the route planner API. Alternately, a separate `key` property may be added for this purpose in future. - -### permitTypes -The permitTypes property defines the rules and properties of all the known permit types. The basic structure is: - -```js - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'EXPANDO', - 'FEBGHSE', - 'TRKTRAC', - ], - rules: [ - // ...see rules section... - ], - costRules: [ - //...see cost rules section... - ], - } -``` -Properties of the permit type define whether it requires a driving route, weights, size, and commodity. The term oversize example above does not require any of these. A complex permit such as single trip oversize overweight would require all four. - -The `allowedVehicles` property is required for permit types that are for a single vehicle as opposed to for a vehicle combination (truck and trailers). For permits requiring a vehicle combination such as single trip oversize, the `allowedVehicles` property is not used, instead using configuration inside the commodity property, described in its own section below. - -The `rules` property defines policy rules for the permit type that will be checked during permit validation. There will be many rules for a single permit type, expressing business policy such as 'you may not apply for a permit with a start date in the past', 'the vehicle type being permitted must be one of the allowed vehicles for the permit type', 'a vehicle identification number must be 6 alphanumeric characters', and others. Rules are expressed using the syntax defined by [JSON Rules Engine](https://github.com/cachecontrol/json-rules-engine). See the separate section on [rules](#rules) in this document. - -`costRules` are a special type of rule that define how much a permit costs based on the permit itself. Costs can take into account any property of the permit application such as duration, travel distance, start date, vehicle type, and others. See the separate section on [costRules](#costRules) in this document to understand how they differ from standard [JSON Rules Engine](https://github.com/cachecontrol/json-rules-engine) rules. - -### commonRules -`commonRules` are a collection of standard rules which apply to all permit types. Certain rules such as the requirement to supply a company name for the permit and the requirement to supply a license plate for the permitted vehicle can be configured in this central location. All rules in the `commonRules` array will be validated against any permit in the validation step. - -The basic structure is straightforward, and uses the same rule definition format as the rules defined as part of the permit type. -```js - commonRules: [ - // ...see rules section... - ] -``` - -### vehicleTypes -The `vehicleTypes` property defines all of the known vehicle types, both power units and trailers. The basic structure is: - -```js - vehicleTypes: { - powerUnitTypes: [ - { - id: 'BUSCRUM', - name: 'Buses/Crummies', - category: 'powerunit', - }, - { - id: 'BUSTRLR', - name: 'Inter-City Bus (Pulling Pony Trailer)', - category: 'powerunit', - } - ], - trailerTypes: [ - { - id: 'BOOSTER', - name: 'Boosters', - category: 'accessory', - }, - { - id: 'DBTRBTR', - name: 'Tandem/Tridem Drive B-Train (Super B-Train)', - category: 'trailer', - }, - ], - ] -``` -The example above defines 2 types of power unit and 2 types of trailer that the system knows about. The full configuration will contain all known vehicle types and will be much larger. - -The ID for a vehicle type must be unique in the configuration; that is, a power unit and trailer may not share the same ID. - -> [!NOTE] -> Power unit and trailer types both have a `category` property which is not currently used by the policy engine but will be used for overweight permits when they are developed (different weight allowances when a booster follows a specific category of trailer, for example). - -### commodities -The `commodities` property defines all of the known permittable commodities. In addition to the ID and common name of the commodity, this property defines the allowable vehicle combinations that are allowed to transport the commodity, along with the allowable size and weight of the vehicles. Permittable sizes and weights are configured under `commodities` instead of under `vehicleTypes` because the permittable sizes and weights are dependent on the commodity being carried. - -Here is an example of a single commodity configured in a policy configuration JSON: -```js - commodities: [ - { - id: 'IMCONTN', - name: 'Intermodal Containers', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 27.5, - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - l: 27.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - }, - ], - }, - ], - }, - ], - }, - }, - ] -``` -> [!NOTE] -> The values above do not reflect actual policy, they are for demonstration purposes only. - -#### Size Dimension Set -Size dimensions for a given commodity and vehicle combination are configured in the `size` property of the commodity. - -In the example above, the commodity 'Intermodal Containers' has permittable size dimensions configured. There are two size permittable power unit types for this commodity (TRKTRAC and REGTRCK), with TRKTRAC permitted to pull one of 3 different trailer types. REGTRCK is permitted only to pull the trailer 'NONEXXX', which is a special ID indicating no trailer is being pulled. TODO: link to documentation about 'pseudo' vehicle types and commodity types. - -> [!NOTE] -> Vehicles in the size dimension set are referenced by type. The type must match an ID configured in the `vehicleTypes` property of the policy configuration as a relational data key. - -Size dimensions are configured exclusively on trailers, never on power units. For power units that may be permitted with or without trailers, the special pseudo trailer 'NONEXXX' is used as the configuration point for the power unit on its own. - -There are 5 dimensions that can be configured on a trailer: -* height (defined by `h`) -* length (defined by `l`) -* width (defined by `w`) -* front projection (defined by `fp`) -* rear projection (defined by `rp`) - -When any of these is configured directly on the `sizeDimensions` property it indicates a permittable size for the 'BC Default' geographic area. STACTRN in the example above has permittable maximum sizes for 4 dimensions in BC Default. Configuring separate sizes for other geographic regions is handled with a `regions` property of `sizeDimensions`. HIBOFLT in the example above configures a height and length specific to the PCE geographic region. As with vehicles, the `region` property must match a configured `geographicRegion` ID in the policy configuration file (it is a relational data key). - -If any dimensions are __not__ configured for a trailer, this indicates that the maximum dimension is the __legal__ dimension and extra size is not permitted. - -> [!NOTE] -> The reason `sizeDimensions` is an array instead of a single object is for future flexibility. Size dimensions generally do not need multiple size dimensions for a given trailer; this is for weight dimensions primarily. However, it is possible that in the future a trailer may be permitted extra length if it is following a tridem jeep or has a trailing tridem booster. In this case the configuration will be able to use multiple size dimensions for one trailer. For now however, it can be assumed there will only be a single size dimension in the array. - -##### Jeeps and Boosters -Whether a jeep or a booster is permitted in a vehicle combination for a commodity is configured with the `allowJeep` and `allowBooster` properties. The presence of either a jeep or booster does not change the maximum permittable sizes that have been configured. - -##### Self Issue -Certain vehicle combinations hauling certain commodities may not be 'auto-approved' by the system; they require review by staff. These combinations which are not permitted for self-issuance are indicated with a `selfIssue` value of `false`. - -#### Weight Dimension Set -> [!NOTE] -> Weight dimensions are not configured in the example above because overweight permits have not yet been implemented in the policy engine. - -## rules -Policy rules are defined in `json-rules-engine` format and are validated against permit applications according to the permit type. Rules may be configured as common to all permit types, or specific to permit types. Common policy rules are defined inside the top-level [commonRules](#commonRules) property, while type-specific policy rules are defined inside the `rules` property of the permit type itself, in the top-level [permitTypes](#permitTypes) property. - -The structure of a rule is identical whether configured as common, or permit type-specific. - -Example common and permit type-specific rules are as follows: -```js - commonRules: [ - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.companyName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Company is required', - code: 'field-validation-error', - fieldReference: 'permitData.companyName', - }, - }, - }, - ], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'STINGER', - 'TOWVEHC', - 'TRKTRAC', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - path: '$.permitDuration', - }, - }, - { - not: { - fact: 'permitData', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - path: '$.permitDuration', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - ], - } - ] -``` -A rule consists of a condition (which may itself be multiple separate conditions with a logical operator) and an event that is triggered if the condition evaluates to `true`. Currently in onroute, a true condition always indicates a policy __violation__. In the future, true conditions may indicate other informational messages returned to the calling application, such as a requirement that a supplemental permit is required. See [event](#event) below for more details. - -Refer to the [JSON Rules Engine](https://github.com/cachecontrol/json-rules-engine) documentation about the general structure of rule conditions and events. onRoute-specific notes follow, below. - -### conditions -Facts in conditions are based on the structure of the permit application that will be validated. A permit application will have the following general structure: -```js -{ - permitType: 'TROS', - permitData: { - // ...as saved in the onroute database... - } -} -``` -Due to the structure above, the `fact` property will usually be `permitData` when validating user input from the permit application. The `path` defines what property of `permitData` is being validated. For example, the common rule in the example above is validating `permitData.companyName`. - -#### operators -Besides the default operators from `json-rules-engine`, `onroute-policy-engine` defines additional custom operators: - -* `stringMinimumLength` - returns true if the fact is a string type and has a minimum trimmed length greater than or equal to the supplied value -* `dateLessThan` - returns true if the fact is a date and is earlier than the supplied date value -* `regex` - returns true if the fact matches the supplied regular expression - -#### custom facts -Besides facts that are from the permit application JSON, additional custom facts are available within conditions: - -* `allowedVehicles` - returns an array of vehicle IDs (strings) that are valid for the permit type - * Note this is valid only for permit types that do not require a full vehicle configuration -* `configurationIsValid` - returns true if the vehicle configuration in the permit application is valid as per policy - * Note this is valid only for permit types that require a full vehicle configuration -* `daysInPermitYear` - returns the number of days in the year starting with the permit start date, either 365 or 366 -* `validationDate` - returns the current date at the time of permit validation - -### event -Example: -```js - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, -``` - -Currently in onroute, events define policy violations. For a violation event, the `type` property is always `violation`. The event `params` provide more context about the violation itself: - -* `message` - description of the violation which can be presented to permit applicants -* `code` - type of violation which may be used by the calling application, currently limited to just `field-validation-error` -* `fieldReference` - the field in the permit application which caused the violation, usually but not always the same as the condition fact - -All of these params are technically optional, but omitting them may impact how the calling application (e.g. onroute frontend) can respond to the violation. For example, if the `message` is omitted the frontend can only present a generic error message with no additional context which may not be a good user experience. - -Additional event types which are planned, but not currently used in onroute include: - -* `requirement` -* `warning` -* `information` - -## costRules -The cost of a permit is calculated using a modified type of rule based on the [JSON Rules Engine](https://github.com/cachecontrol/json-rules-engine) rule type. The structure looks like: - -```js - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 30, - }, - }, - ], -``` - -`costRules` are defined as part of the `permitType` definition. Multiple `costRules` may apply to a specific permit type. For example, a permit may have a fixed cost plus a cost per kilometre driven. In such cases, multiple cost rules are defined in the array. - -> [!NOTE] -> `costRules` are defined as facts alone, with no operator or event. Internally during validation, the `onroute-policy-engine` creates a `cost` event with the calculated cost supplied as a `cost` property of the event params. - -There are currently two cost fact types: - -* `fixedCost` - returns the value of the `cost` param without modification -* `costPerMonth` - returns the product of the number of months duration of the permit and the value of the `cost` param - -As more complex cost rules are required, more cost fact types will be implemented in the `onroute-policy-engine` to accomodate these. \ No newline at end of file diff --git a/policy-engine/docs/validation-result-reference.md b/policy-engine/docs/validation-result-reference.md deleted file mode 100644 index 005dfcfaa..000000000 --- a/policy-engine/docs/validation-result-reference.md +++ /dev/null @@ -1,89 +0,0 @@ -# Policy Validation Result Reference - -## Validating a Permit Application -Permits are validated with the policy engine by supplying the permit JSON to the `validate` method of an instantiated policy object. A policy object is instantiated by passing a policy configuration JSON object to the `Policy` constructor. Refer to the Policy Configuration Reference documentation for information about the structure of the policy configuration JSON object. - -The `validate` method returns an object of type `ValidationResults` which has 5 properties: `violations`, `requirements`, `warnings`, `information`, and `cost`. Each of these properties is an array of `ValidationResult` objects. - -Currently in onroute only the `violations` and `cost` properties are used. In the future, `requirements`, `warnings`, and `information` will be added. For now those properties may be ignored. - -### Valid Permit Applications -A valid permit application is one whose `ValidationResults` has an empty `violations` array. That is, no policy violations were found in the permit application. Here is an example: - -```js -{ - "violations": [], - "requirements": [], - "warnings": [], - "information": [], - "cost": [ - { - "type": "cost", - "code": "cost-value", - "message": "Calculated permit cost", - "cost": 30 - } - ] -} -``` - -## Violations -If at least one `ValidationResult` is present in the `violations` property of the result, the permit application has failed the policy check. - -The `ValidationResult` will typically contain information about what the nature of the violation was. Here is an example: - -```js - "violations": [ - { - "type": "violation", - "code": "field-validation-error", - "message": "Duration must be in 30 day increments or a full year", - "fieldReference": "permitData.permitDuration" - } - ], -``` -In the example above, the permit duration in the permit application JSON was 31 days, which is invalid according to the rules specified for the permit type (TROS in this case). - -All of the properties of the violation are configured directly in the policy configuration JSON file, and are taken verbatim from there. To change the message presented for this violation, simply update the policy configuration JSON. - -### type -Violation `ValidationResult` objects will always have a type of `violation`. - -### code -The `code` property indicates the nature of the violation, which may be used by the calling application. For example, a `field-validation-error` may cause the frontend form to highlight the form element and present the message underneath in red text. - -### message -The `message` property is a friendly description of the cause of the violation. - -### fieldReference -The `fieldReference` property indicates the specific field which caused the violation, and can be used in conjunction with `code` to provide context to a user in the frontend. - -## Cost -To calculate the cost of a permit, validate it using the policy engine's `validate` method. The validation result will include a `cost` property specifying the cost of the permit. - -Any permit with a cost greater than zero will have at least one `ValidationResult` in the `cost` array of the `ValidationResults` object. Here is an example of a valid one year term oversize permit: - -```js -{ - "violations": [], - "requirements": [], - "warnings": [], - "information": [], - "cost": [ - { - "type": "cost", - "code": "cost-value", - "message": "Calculated permit cost", - "cost": 360 - } - ] -} -``` -The `type` will always be `cost`, `code` will always be `cost-value`, and `message` will always be `Calculated permit cost`. These may be ignored. - -The `cost` property indicates the permit cost in Canadian dollars, based on the details in the permit application itself. - -It is possible that there are multiple `cost` results. In this case, it is up to the calling application to add all of the `cost` properties together for a final permit cost. - -> [!NOTE] -> The reason there may be multiple `cost` results is that some permit types have both a fixed cost (minimum permit cost) as well as a cost based on kilometres driven. Since these are calculated independently they are added separately to the `cost` array. Typically there is no need for the onroute application to break down the permit cost into its constituent parts so only the sum is used. \ No newline at end of file diff --git a/policy-engine/package-lock.json b/policy-engine/package-lock.json deleted file mode 100644 index a3b850fa3..000000000 --- a/policy-engine/package-lock.json +++ /dev/null @@ -1,5515 +0,0 @@ -{ - "name": "onroute-policy-engine", - "version": "0.2.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "onroute-policy-engine", - "version": "0.2.0", - "license": "Apache-2.0", - "dependencies": { - "dayjs": "^1.11.10", - "json-rules-engine": "^6.5.0" - }, - "devDependencies": { - "@iwsio/json-csv-core": "^1.1.7", - "@types/jest": "^29.5.12", - "@typescript-eslint/eslint-plugin": "^7.5.0", - "csv": "^6.3.10", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "jest": "^29.7.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.7", - "ts-jest": "^29.1.2", - "typescript": "^5.4.3" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@iwsio/json-csv-core": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@iwsio/json-csv-core/-/json-csv-core-1.1.7.tgz", - "integrity": "sha512-vI3Iy26ffmKJHUTSfwJdv4hEFI8vCemMQLDi0iMQBCYmyhsa2m0Fn8dSLy+FlyLnVqZRqyM8/yauwSXGFdnohg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.3.tgz", - "integrity": "sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", - "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/type-utils": "7.5.0", - "@typescript-eslint/utils": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", - "dev": true, - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz", - "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/utils": "7.5.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", - "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csv": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/csv/-/csv-6.3.10.tgz", - "integrity": "sha512-5NYZG4AN2ZUthmNxIudgBEdMPUnbQHu9V4QTzBPqQzUP3KQsFiJo+8HQ0+oVxj1PomIT1/f67VI1QH/hsrZLKA==", - "dev": true, - "dependencies": { - "csv-generate": "^4.4.1", - "csv-parse": "^5.5.6", - "csv-stringify": "^6.5.1", - "stream-transform": "^3.3.2" - }, - "engines": { - "node": ">= 0.1.90" - } - }, - "node_modules/csv-generate": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.4.1.tgz", - "integrity": "sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==", - "dev": true - }, - "node_modules/csv-parse": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.6.tgz", - "integrity": "sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==", - "dev": true - }, - "node_modules/csv-stringify": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.1.tgz", - "integrity": "sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==", - "dev": true - }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.724", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz", - "integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hash-it": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hash-it/-/hash-it-6.0.0.tgz", - "integrity": "sha512-KHzmSFx1KwyMPw0kXeeUD752q/Kfbzhy6dAZrjXV9kAIXGqzGvv8vhkUqj+2MGZldTo0IBpw6v7iWE7uxsvH0w==" - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-rules-engine": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/json-rules-engine/-/json-rules-engine-6.5.0.tgz", - "integrity": "sha512-W8SLmnfQRDNG1Nh3Agz3c9AZzhiZ/cUtjAhyfhujFzVFNBv7cSHm9WaLoRjOdRr/9je7RgLtmbYXFViL3CekPA==", - "dependencies": { - "clone": "^2.1.2", - "eventemitter2": "^6.4.4", - "hash-it": "^6.0.0", - "jsonpath-plus": "^7.2.0", - "lodash.isobjectlike": "^4.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonpath-plus": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.isobjectlike": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isobjectlike/-/lodash.isobjectlike-4.0.0.tgz", - "integrity": "sha512-bbRt0Dief0yqjkTgpvzisSxnsmY3ZgVJvokHL30UE+ytsvnpNfiNaCJL4XBEWek8koQmrwZidBHb7coXC5vXlA==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", - "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", - "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", - "dev": true, - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stream-transform": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.3.2.tgz", - "integrity": "sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==", - "dev": true - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/policy-engine/package.json b/policy-engine/package.json deleted file mode 100644 index 415555bc5..000000000 --- a/policy-engine/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "onroute-policy-engine", - "version": "0.2.0", - "description": "Policy Engine library for commercial vehicle permitting", - "main": "dist/index.js", - "exports": { - ".": "./dist/index.js", - "./types": "./dist/types/index.js", - "./enum": "./dist/enum/index.js" - }, - "types": "dist/index.d.ts", - "private": false, - "scripts": { - "clean": "rimraf dist && rimraf -g *.tgz", - "test": "jest", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "format": "prettier --write \"src/**/*.ts\"", - "build": "tsc", - "clean-build": "rimraf dist && rimraf -g *.tgz && tsc" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/bcgov/onroutebc.git" - }, - "author": "John Fletcher", - "license": "Apache-2.0", - "homepage": "https://github.com/bcgov/onroutebc#readme", - "devDependencies": { - "@iwsio/json-csv-core": "^1.1.7", - "@types/jest": "^29.5.12", - "@typescript-eslint/eslint-plugin": "^7.5.0", - "csv": "^6.3.10", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "jest": "^29.7.0", - "prettier": "^3.2.5", - "rimraf": "^5.0.7", - "ts-jest": "^29.1.2", - "typescript": "^5.4.3" - }, - "dependencies": { - "dayjs": "^1.11.10", - "json-rules-engine": "^6.5.0" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": ".", - "roots": [ - "/src" - ], - "moduleNameMapper": { - "^src/(.*)$": "/src/$1", - "^test/(.*)$": "/test/$1" - }, - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.ts$": "ts-jest" - }, - "collectCoverage": true, - "collectCoverageFrom": [ - "**/*.js" - ], - "coverageDirectory": "./coverage", - "coveragePathIgnorePatterns": [ - "/node_modules/", - "/src/_test/", - ".enum.ts", - ".interface.ts", - "index.ts" - ], - "testEnvironment": "node" - } -} diff --git a/policy-engine/src/_examples/Single Trip Oversize Dimension Set.csv b/policy-engine/src/_examples/Single Trip Oversize Dimension Set.csv deleted file mode 100644 index 3dfa49997..000000000 --- a/policy-engine/src/_examples/Single Trip Oversize Dimension Set.csv +++ /dev/null @@ -1,214 +0,0 @@ -,,,,,,Lower Mainland,,,Kootenay,,,Peace,,,BC Default,,,Projection,,,,, -No Self Issue,Commodity,Power Unit,Trailer,Allow Jeep,Allow Booster,Width,Height,Length,Width,Height,Length,Width,Height,Length,Width,Height,Length,ORBC FP,ORBC RP,Policy Ref,Edit,Notes, -,"Auto Carrier, Campers And Boats (Stinger Steered Transporters Only)",Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,2.6,4.3,25,2.6,4.3,25,2.6,4.88,25,2.6,4.4,25,1,1.2,4.2.7.A.1/4.2.7.B.A/ 5.3.11,,"Loaded dimensions used, equipment itself is less",FP and RP points can vary in CTPM (i.e. rear projection can be from turn centre or bumper or sometimes bunk!) -,Bridge Beams,Truck Tractors,Pole Trailers,X,,2.6,4.15,31,2.6,4.15,31,2.6,4.15,31,2.6,4.15,31,3,6.5,4.5.5,,"OAL could be greater with steering trailers, do we need two categories?", -,Bridge Beams,Truck Tractors,Semi-Trailers,,,3.2,4.3,31,3.2,4.3,31,3.2,5.33,31,3.2,4.3,31,3,6.5,4.2.7.A.13,,"KPLA limit of 18.3 m - impacts other non-reducible loads as well, can this be restricted? TPS currently cannot. (Peace River exempt)", -,Bridge Beams,Truck Tractors,Steering Dolly,,,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,3,6.5,5.3.12.F,,, -,Brushcutters (Peace Only),Truck Tractors,Semi-Trailers,,,2.6,4.15,23,2.6,4.15,23,4.57,5.33,23,2.6,4.15,23,3,6.5,4.2.7.B.B,,tractor semi-trailer could be 23.5 if a tridem , -,Brushcutters (Peace Only),Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,2.6,4.15,23,2.6,4.15,23,4.57,5.33,23,2.6,4.15,23,3,6.5,4.2.7.B.B,,, -,Brushcutters (Peace Only),Trucks,None,,,2.6,4.15,12.5,2.6,4.15,12.5,4.57,5.33,12.5,2.6,4.15,12.5,1,1,4.2.7.B.B,,, -,Brushcutters (Peace Only),Trucks,Pony Trailers,,,2.6,4.15,23,2.6,4.15,23,3.8,5.33,23,2.6,4.15,23,1,1,4.2.7.B.B/5.3.12.G,,, -,Doglogger/Sjostrum Trailers (decked),Truck Tractors,None,,,2.6,4.15,13.5,2.6,4.15,13.5,2.6,4.15,13.5,2.6,4.15,13.5,1,5,4.2.7.A.13,,, -,Empty,Truck Tractors,Logging Trailer - Overwidth Bunks,,,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,0,0,5.3.5.B,,, -,Empty,Picker Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,3,6.5,5.3.8.B.,,, -X,Empty,Picker Truck Tractors,Platform Trailers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3,6.5,,,, -,Empty,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,2.6,4.15,25,2.6,4.15,25,2.6,4.15,27.5,2.6,4.15,25,3,6.5,5.3.9.A./5.3.9.B.,,, -X,Empty,Picker Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3,6.5,,,, -X,Empty,Picker Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3,6.5,,,, -,Empty,Picker Truck,Pony Trailers,,,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,0,0,5.3.9.A,,, -X,Empty,Truck Tractors,Platform Trailers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3,6.5,,,, -,Empty,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,2.6,4.15,31,2.6,4.4,31,2.6,5.33,31,2.6,4.4,31,3,6.5,5.3.12.C.,,, -,Empty,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,2.6,4.15,27.5,2.6,4.4,27.5,2.6,5.33,27.5,2.6,4.4,27.5,3,6.5,5.3.12.B.,,, -,Empty,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.15,31,3.2,4.4,31,3.2,5.33,31,3.2,4.4,31,3,6.5,5.3.12.A.,,, -X,Empty,Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.15,27.5,3.2,4.88,27.5,3.2,5.33,27.5,3.2,4.88,27.5,3,6.5,,,, -X,Empty,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.15,27.5,3.2,4.88,27.5,3.2,5.33,27.5,3.2,4.88,27.5,3,6.5,,,, -,Fixed Equipment,Truck Tractors,Fixed Equipment - Conveyors (Semi-Trailers),X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,4,9.5,5.3.4.F.,,"OAL is not specified, limited by FPK, STWB, RPT", -,Fixed Equipment,Truck Tractors,Fixed Equipment - Counter Flow Asphalt Drum Mixers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.D.,,18.3 KPLA allowed, -,Fixed Equipment,Truck Tractors,Fixed Equipment - Portable Asphalt Baghouses,X,X,4.26,4.72,,4.26,4.72,,4.26,5.33,,4.26,4.72,,3,6.5,5.3.4.E.,,, -,Fixed Equipment,Truck Tractors,Fixed Equipment - Semi-Trailers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.A.,,, -X,Fixed Equipment,Truck Tractors,Fixed Equipment - Wheeler Semi-Trailers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.B.,,, -,Fixed Equipment,Trucks,Fixed Equipment - Conveyors (Pony Trailers),,,3.2,4.3,,3.2,4.3,,3.2,4.3,,3.2,4.3,,4,9.5,5.3.4.F.,,"Check with Barry, does this exist? I don't believe we intended pony trailer to get allowances", -,Fixed Equipment,Trucks,Fixed Equipment - Counter Flow Asphalt Drum Mixers,,,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.D.,,"Check with Barry, does this exist? I don't believe we intended pony trailer to get allowances", -,Fixed Equipment,Trucks,Fixed Equipment - Pony Trailers,,,3.2,4.3,,3.2,4.3,,3.2,4.3,,3.2,4.3,,1,4,5.3.4.C.,,, -,Fixed Equipment,Trucks,Fixed Equipment - Portable Asphalt Baghouses,,,4.26,4.72,,4.26,4.72,,4.26,4.72,,4.26,4.72,,3,6.5,5.3.4.E.,,"Check with Barry, does this exist? I don't believe we intended pony trailer to get allowances", -,Garbage Bins,Trucks,Full Trailers,,,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,3,6.5,4.2.7.A.7,,, -,Garbage Bins,Trucks,None,,,2.6,4.15,12.5,2.6,4.15,12.5,2.6,4.15,12.5,2.6,4.15,12.5,3,6.5,4.2.7.A.7,,, -,Garbage Bins,Trucks,Pony Trailers,,,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,3,6.5,4.2.7.A.7,,, -,"Grader, Tractor Blades, Buckets",Fixed Equipment - Trucks/Graders etc.,None,,,4.4,4.15,12.5,4.4,4.15,12.5,4.4,4.15,12.5,4.4,4.15,12.5,0,0,4.2.7.B.C,,, -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.5,4.3,26,3.5,4.3,26,3.84,4.8,26,3.5,4.3,26,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - B-Trains,,,3.5,4.3,27.5,3.5,4.3,27.5,3.84,4.8,27.5,3.5,4.3,27.5,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,3,6.5,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,3,6.5,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Trucks,Full Trailers,,,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,1,4,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Trucks,None,,,3.5,4.3,12.5,3.5,4.3,12.5,3.84,4.8,12.5,3.5,4.3,12.5,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales (Round) Peace River Only,Trucks,Pony Trailers,,,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,1,4,4.2.7.A.8/4.4.2,,, -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.05,4.3,26,3.05,4.3,26,3.05,4.8,26,3.05,4.3,26,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - B-Trains,,,3.05,4.3,27.5,3.05,4.3,27.5,3.05,4.8,27.5,3.05,4.3,27.5,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.4,23,3,6.5,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,3,6.5,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Trucks,Full Trailers,,,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,1,4,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Trucks,None,,,3.05,4.3,12.5,3.05,4.3,12.5,3.05,4.8,12.5,3.05,4.3,12.5,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Large Rectangular,Trucks,Pony Trailers,,,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,1,4,4.2.7.A.8/4.4.1,,, -,Hay Bales Round,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.5,4.3,26,3.5,4.3,26,3.84,4.8,26,3.5,4.3,26,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Truck Tractors,Semi-Trailers - B-Trains,,,3.5,4.3,27.5,3.5,4.3,27.5,3.84,4.8,27.5,3.5,4.3,27.5,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,3,6.5,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,3,6.5,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Trucks,Full Trailers,,,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,1,4,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Trucks,None,,,3.5,4.3,12.5,3.5,4.3,12.5,3.84,4.8,12.5,3.5,4.3,12.5,1,1,4.2.7.A.8/4.4.2,,, -,Hay Bales Round,Trucks,Pony Trailers,,,3.5,4.3,23,3.5,4.3,23,3.84,4.8,23,3.5,4.3,23,1,4,4.2.7.A.8/4.4.2,,, -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.05,4.3,26,3.05,4.3,26,3.05,4.8,26,3.05,4.3,26,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - B-Trains,,,3.05,4.3,27.5,3.05,4.3,27.5,3.05,4.8,27.5,3.05,4.3,27.5,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,3,6.5,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,3,6.5,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Trucks,Full Trailers,,,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,1,4,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Trucks,None,,,3.05,4.3,12.5,3.05,4.3,12.5,3.05,4.8,12.5,3.05,4.3,12.5,1,1,4.2.7.A.8/4.4.1,,, -,Hay Bales Small Rectangular,Trucks,Pony Trailers,,,3.05,4.3,23,3.05,4.3,23,3.05,4.8,23,3.05,4.3,23,1,4,4.2.7.A.8/4.4.1,,, -,Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback,Truck Tractors,Semi-Trailers - Logging,,,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,1,5,4.5.6.E.,,, -,Intermodal Containers,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,2.6,4.4,26,2.6,4.4,26,2.6,4.4,26,2.6,4.4,26,1,1,4.2.7.A.9,,, -,Intermodal Containers,Truck Tractors,Semi-Trailers - B-Trains,,,2.6,4.4,27.5,2.6,4.4,27.5,2.6,4.4,27.5,2.6,4.4,27.5,1,1,4.2.7.A.9,,, -,Intermodal Containers,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,2.6,4.4,23,2.6,4.4,23,2.6,4.4,23,2.6,4.4,23,1,1,4.2.7.A.9,,, -,Intermodal Containers,Trucks,None,,,2.6,4.4,12.5,2.6,4.4,12.5,2.6,4.4,12.5,2.6,4.4,12.5,1,1,4.2.7.A.9,,, -,Intermodal Containers without Sides,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,4.4,4.72,23,4.4,4.72,23,4.4,4.72,23,4.4,4.72,23,1,1,4.2.7.10/4.2.7.B.D.,,, -,Laminated Beams,Truck Tractors,Pole Trailers,X,X,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,3,6.5,4.5.3,,, -,Laminated Beams,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,2.6,4.15,31,2.6,4.15,31,2.6,4.15,31,2.6,4.15,31,3,6.5,4.5.3,,, -X,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,"Logging Trailer - Full Trailers, Tri Axle, Quad Axle",,,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,10,10,4.5.2,,, -X,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Pole Trailers,X,X,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,8,9,4.5.2,,, -,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Steering Trailers - Manned,X,X,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,10,10,5.3.12.F,,, -,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Steering Trailers - Self/Remote,X,X,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,10,10,5.3.12.F,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Full Trailers,,,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,3,6.5,4.5.1,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Legacy Logging Trailer Combinations,,,2.6,4.15,25,2.6,4.15,25,2.6,4.15,25,2.6,4.15,25,3,5,5.3.7.C.,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Pole Trailers,X,,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,3,6.5,4.5.1,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,2.9,4.15,26,2.9,4.15,26,2.9,4.15,26,2.9,4.15,26,3,6.5,4.5.1,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - B-Trains,,,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,2.9,4.15,27.5,3,6.5,4.5.1,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,,,2.9,4.15,25,2.9,4.15,25,2.9,4.15,25,2.9,4.15,25,3,6.5,4.5.1,,, -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - Logging,,,2.9,4.15,25,2.9,4.15,25,2.9,4.15,25,2.9,4.15,25,3,6.5,4.5.1,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Truck Tractors,Semi-Trailers,X,X,5.0,4.88,31.5,5.0,4.88,31.5,5.0,5.33,36,5.0,4.88,31.5,3.0,7.5,4.3.5,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,5.0,4.88,31.5,5.0,4.88,31.5,5.0,5.33,36,5.0,4.88,31.5,3.0,7.5,4.3.5,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Dollies,,,5.0,4.88,31.5,5.0,4.88,31.5,5.0,5.33,36,5.0,4.88,31.5,1,6.9,4.3,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Float Trailers,,,5.0,4.57,31.5,5.0,4.57,31.5,5.0,5.33,36,5.0,4.57,31.5,1,6.9,4.3.5.F,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Pony Trailers,,,5.0,4.88,31.5,5.0,4.88,31.5,5.0,5.33,36,5.0,4.88,31.5,1,6.9,4.3,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Truck Tractors,Semi-Trailers,X,X,6.0,4.88,31.5,6.0,4.88,31.5,6.1,5.33,36,6.0,4.88,31.5,3.0,7.5,4.3.5,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,6.0,4.88,31.5,6.0,4.88,31.5,6.1,5.33,36,6.0,4.88,31.5,3.0,7.5,4.3.5,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Dollies,,,6.0,4.88,31.5,6.0,4.88,31.5,6.1,5.33,36,6.0,4.88,31.5,1,6.9,4.3,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Float Trailers,,,6.0,4.57,31.5,6.0,4.57,31.5,6.1,5.33,36,6.0,4.57,31.5,1,6.9,4.3.5.F,,, -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Pony Trailers,,,6.0,4.88,31.5,6.0,4.88,31.5,6.1,5.33,36,6.0,4.88,31.5,1,6.9,4.3,,, -,None,Concrete Pumper Trucks,None,,X,2.6,4.15,15.5,2.6,4.15,15.5,2.6,4.15,15.5,2.6,4.15,15.5,3,6.5,5.3.2.A.,,, -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain",Dollies,,,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,10,6.5,5.3.3.B.,,, -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain",None,,,3.8,4.3,14,3.8,4.3,14,3.8,4.3,15,3.8,4.3,14,10,6.5,5.3.3.B.,,, -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - Mobile",Dollies,,,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,10,6.5,5.3.3.A.,,, -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - Mobile",None,,,3.8,4.3,14,3.8,4.3,14,3.8,4.3,15,3.8,4.3,14,10,6.5,5.3.3.A.,,, -,None,Double Decker Buses,None,,,2.6,4.3,12.5,2.6,4.3,12.5,2.6,4.3,12.5,2.6,4.42,12.5,1,1,5.3.1.A,,, -,None,Fixed Equipment - Trucks/Graders etc.,Fixed Equipment - Pony Trailers,,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,1,4,,,, -X,None,Fixed Equipment - Trucks/Graders etc.,None,,,3.5,4.3,12.5,3.5,4.3,12.5,3.5,5.33,12.5,3.5,4.4,12.5,1,1,5.3.4.G.,,, -X,None,Inter-City Bus (Pulling Pony Trailer),Pony Trailers,,,2.6,4.15,20,2.6,4.15,20,2.6,4.15,20,2.6,4.15,20,1,1,5.3.1.B,,, -,None,Logging Trucks - Off-Highway,Semi-Trailers - Logging,,,4.4,4.15,23,4.4,4.15,23,4.4,4.15,23,4.4,4.15,23,3,6.5,5.3.5.A.,,, -X,None,Long Combination Vehicles (LCV) - Rocky Mountain Doubles,Semi-Trailers,,,2.6,4.15,32,2.6,4.15,32,2.6,4.15,31,2.6,4.15,32,1,1,5.3.6.D.,,, -,None,Long Combination Vehicles (LCV) - Turnpike Doubles,Semi-Trailers,,,2.6,4.15,41,2.6,4.15,41,2.6,4.15,41,2.6,4.15,41,1,1,5.3.6.D.,,, -X,None,Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m,Semi-Trailers,X,X,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,1,1,5.3.7.A.,,, -,None,Picker Truck Tractors,None,,,2.6,4.15,16,2.6,4.15,16,2.6,4.15,16,2.6,4.15,16,3,1,5.3.9,,, -,None,Picker Truck Tractors,Semi-Trailers with Crane,X,X,2.6,4.15,25,2.6,4.15,25,2.6,4.15,25,2.6,4.15,25,3,6.5,5.3.9,,, -,None,Picker Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,3,6.5,,,, -,None,Picker Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,3,6.5,,,, -,None,Scrapers,None,,,2.6,4.15,12.5,2.6,4.15,12.5,2.6,4.15,12.5,2.6,4.15,12.5,1,1,5.3.10.A.1),,, -,None,Truck Tractors,Fixed Equipment - Conveyors (Semi-Trailers),X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,4,9.5,,,, -,None,Truck Tractors,Fixed Equipment - Counter Flow Asphalt Drum Mixers,X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,3,6.5,,,, -X,None,Truck Tractors,Fixed Equipment - Portable Asphalt Baghouses,X,X,4.26,4.72,31,4.26,4.72,31,4.26,5.33,31,4.26,4.72,31,3,6.5,,,, -X,None,Truck Tractors,Fixed Equipment - Semi-Trailers,X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,3,6.5,,,, -,None,Truck Tractors,Fixed Equipment - Wheeler Semi-Trailers,X,X,5,4.88,31,5,4.88,31,5,5.33,31,5,4.88,31,3,6.5,,,, -X,None,Truck Tractors,Overdimensional Trailers and Semi-Trailers (For Export),,,3.65,4.15,23,3.65,4.15,23,3.65,4.15,23,3.65,4.15,23,1,1,5.3.12.D.,,, -,None,Truck Tractors,Ready Mix Concrete Pump Semi-Trailers,X,X,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,3,6.5,5.3.2.B.,,, -,None,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,2.6,4.3,23,2.6,4.3,23,2.6,5.33,31,2.6,4.3,31,3,6.5,5.3.12.B.,,, -,None,Truck Tractors,Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units,,,2.6,4.3,23,2.6,4.3,23,2.6,4.3,23,2.6,4.3,23,1,1,5.3.12.H.,,, -,None,Truck Tractors,Semi-Trailers - Non-Tac Short Chassis,,,2.6,4.15,20,2.6,4.15,20,2.6,4.15,20,2.6,4.15,20,5,2.25,5.3.7.D.,,, -,None,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,32,3.2,4.3,27.5,3,6.5,5.3.12.A.,,, -,None,Truck Tractors,Steering Trailers - Manned,X,X,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,2.6,4.15,40,1,1,5.3.12.F.ii),,, -,None,Truck Tractors,Steering Trailers - Self/Remote,X,X,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,2.6,4.15,36,1,1,5.3.12.F.i),,, -,None,Trucks,Fixed Equipment - Conveyors (Pony Trailers),,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,4,9.5,,,, -,None,Trucks,Fixed Equipment - Pony Trailers,,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,1,4,,,, -,None,Trucks,Full Trailers ,,,3.8,4.3,23,3.8,4.3,23,3.8,5.33,23,3.8,4.3,23,1,6.5,5.3.12.G.,,, -,None,Trucks,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles",,,5.0,4.88,31.5,5.0,4.88,31.5,5.0,5.33,36,5.0,4.88,31.5,1,6.9,"4.3.5.A, 4.3.5.B, 4.3.5.C",,, -,None,Trucks,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles",,,6.0,4.88,31.5,6.0,4.88,31.5,6.1,5.33,36,6.0,4.88,31.5,1,6.9,"4.3.5.D, 4.3.5.E",,, -,None,Trucks,None,,,3.2,4.3,16,3.2,4.3,16,3.2,4.4,16,3.2,4.3,16,1,6.5,,,, -,None,Trucks,Overdimensional Trailers and Semi-Trailers (For Export),,,3.65,4.15,23,3.65,4.15,23,3.65,4.15,23,3.65,4.15,23,1,1,5.3.12.D.,,, -,None,Trucks,Park Model Homes with Attached Axles,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4,,, -,None,Trucks,Pony Trailers,,,3.2,4.3,23,3.2,4.3,23,3.2,5.33,23,3.2,4.3,23,1,6.5,5.3.12.G.,,, -,None,Trucks Equipped with Front or Underbody Plow Blades,None,,,3.2,4.15,12.5,3.2,4.15,12.5,3.2,4.15,12.5,3.2,4.15,12.5,1,1,5.3.13,,, -X,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Logging,,,3.8,4.15,27.5,3.8,4.15,27.5,3.8,4.15,27.5,3.8,4.15,27.5,3,6.5,5.3.9.A./5.3.9.B.,,, -X,Non-Reducible Loads,Picker Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B.,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers,X,X,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,3,6.5,5.3.9.A./5.3.9.B.,non compliant vehicle,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,5,4.4,25,5,4.4,25,5,5.33,25,5,4.4,25,3,6.5,5.3.9.A./5.3.9.B.,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,5,4.4,25,5,4.4,25,5,5.33,25,5,4.4,25,3,6.5,5.3.9.A./5.3.9.B.,,, -X,Non-Reducible Loads,Picker Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,3,6.5,5.3.9.A./5.3.9.B.,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Steering Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,,,, -X,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers with Crane,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,,,, -,Non-Reducible Loads,Picker Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,3,6.5,,,, -,Non-Reducible Loads,Picker Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,3,6.5,,,, -X,Non-Reducible Loads,Truck Tractors,Platform Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,5,4.4,26,5,4.4,26,5,5.33,26,5,4.4,26,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - B-Trains,,,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Steering Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Semi-Trailers with Crane,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Non-Reducible Loads,Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Non-Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers,,,2.6,4.88,25,2.6,4.88,25,2.6,5.33,25,2.6,4.88,25,1,1.2,4.2.7.A.2/4.2.7.B.B/ 5.3.11,,, -,Non-Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,2.6,4.88,25,2.6,4.88,25,2.6,5.33,25,2.6,4.88,25,1,1.2,4.2.7.A.2/4.2.7.B.B/ 5.3.11,,, -,Non-Reducible Loads,Trucks,Dollies,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.A.2/4.2.7.B.B/ 5.3.11,,, -,Non-Reducible Loads,Trucks,Full Trailers,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.B.G,,, -,Non-Reducible Loads,Trucks,None,,,5,4.88,16,5,4.88,16,5,5.33,16,5,4.88,16,1,6.5,4.2.7.B.G,,, -,Non-Reducible Loads,Trucks,Pony Trailers,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.B.G,,, -,Oil Field Equipment,Oil and Gas - Bed Trucks,Expando Semi-Trailers,X,X,2.6,4.3,27.5,2.6,4.3,27.5,2.6,4.3,27.5,2.6,4.3,27.5,3,6.5,5.3.8.C.,,, -,Oil Field Equipment,Oil and Gas - Bed Trucks,None,,,3.3,4.3,14,3.3,4.3,14,3.3,4.3,14,3.3,4.3,14,1,5,5.3.8.A.i)/ii),,, -,Oil Field Equipment,Oil and Gas - Bed Trucks,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B.,,, -,Oil Field Equipment,Oil and Gas - Oilfield Sows,None,,,3.2,4.3,15,3.2,4.3,15,3.2,4.3,15,3.2,4.3,15,1,5,5.3.8.D.,,, -,Oil Field Equipment,Oil and Gas - Oilfield Sows,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,25,3.2,4.3,25,3.2,4.3,25,3.2,4.3,25,3,6.5,5.3.8.E.,,, -,Oil Field Equipment,Oil and Gas - Service Rigs,None,,,3.8,4.3,15,3.8,4.3,15,3.8,4.3,15,3.8,4.3,15,10,6.5,5.3.8.F.,,, -,Oil Field Equipment,Oil and Gas - Service Rigs,Pony Trailers,,,3.8,4.3,23,3.8,4.3,23,3.8,4.3,23,3.8,4.3,23,10,6.5,5.3.8.F.i),,, -x,Oil Field Equipment,"Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)",None,,,2.9,4.15,15.5,2.9,4.15,15.5,2.9,4.15,15.5,2.9,4.15,15.5,10,6.5,5.3.8.F.,,, -x,Oil Field Equipment,"Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)",Pony Trailers,,,2.9,4.15,23,2.9,4.15,23,2.9,4.15,23,2.9,4.15,23,10,6.5,5.3.8.F.i),,, -,Oil Field Equipment,Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B.,,, -,Park Model Homes,Trucks,Dollies,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4,,, -,Park Model Homes,Trucks,Float Trailers,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4,,, -,Park Model Homes,Trucks,Pony Trailers,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4,,, -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3,6.5,4.2.5.A.ii)/4.2.7.A.14,,, -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,27.5,3,6.5,4.2.5.A.ii),,, -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Steering Trailers,X,X,3.2,4.3,36,3.2,4.3,36,3.2,4.3,36,3.2,4.3,36,3,6.5,4.2.7.B.H,,, -X,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Steering Trailers - Manned,X,X,3.2,4.3,40,3.2,4.3,40,3.2,4.3,40,3.2,4.3,40,3,6.5,4.2.7.B.H,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - Logging,,,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Picker Truck Tractors,Semi-Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Picker Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Reducible Loads,Truck Tractors,Platform Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.2,4.3,26,3.2,4.3,26,3.2,5.33,26,3.2,4.3,26,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - B-Trains,,,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers - Steering Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Reducible Loads,Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Reducible Loads,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Semi-Trailers with Crane,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Reducible Loads,Truck Tractors,Steering Trailers - Manned,X,X,3.2,4.3,40,3.2,4.3,40,3.2,5.33,40,3.2,4.3,40,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors,Steering Trailers - Self/Remote,X,X,3.2,4.3,36,3.2,4.3,36,3.2,5.33,36,3.2,4.3,36,3,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers,,,2.6,4.3,25,2.6,4.3,25,2.6,5.33,25,2.6,4.3,25,1,1.2,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,2.6,4.3,25,2.6,4.3,25,2.6,5.33,25,2.6,4.3,25,1,1.2,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Trucks,Dollies,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Trucks,Full Trailers,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Trucks,None,,,3.2,4.3,16,3.2,4.3,16,3.2,4.4,16,3.2,4.3,16,1,6.5,4.2.4/4.2.5i)/4.2.6,,, -,Reducible Loads,Trucks,Pony Trailers,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6,,, -X,Scraper on Dollies,Truck Tractors,Dollies,X,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,1,5.3.10.B.,,, -,Tandem Jeep/Pole Trailer Loaded on Logging Truck,Truck Tractors,None,,,2.9,4.3,12.5,2.9,4.3,12.5,2.9,4.3,12.5,2.9,4.3,12.5,1,5,4.2.7.A.6/4.5.6.C.,,, -,Tandem Jeep/Pole Trailer Loaded on Logging Truck,Trucks,None,,,2.9,4.3,12.5,2.9,4.3,12.5,2.9,4.3,12.5,2.9,4.3,12.5,1,5,4.2.7.A.6/4.5.6.C.,,, -,Tow Trucks And Disabled Vehicles,Tow Vehicles,None,,,2.6,4.3,27.5,2.6,4.3,27.5,2.6,4.3,27.5,2.6,4.3,27.5,1,1,5.3.14,,, -,Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck,Truck Tractors,None,,,2.6,4.3,13.5,2.6,4.3,13.5,2.6,4.3,13.5,2.6,4.3,13.5,1,5,4.2.7.A.6/4.5.6.D.,,, -,Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck,Trucks,None,,,2.6,4.3,13.5,2.6,4.3,13.5,2.6,4.3,13.5,2.6,4.3,13.5,1,5,4.2.7.A.6/4.5.6.D.,,, -,"Wood Chips, Residuals",Truck Tractors,Semi-Trailers - B-Trains,,,2.6,4.45,27.5,2.6,4.45,27.5,2.6,4.45,27.5,2.6,4.45,27.5,1,1,4.2.7.A.16/4.5.4,,, diff --git a/policy-engine/src/_examples/_debug-helper.ts b/policy-engine/src/_examples/_debug-helper.ts deleted file mode 100644 index 9431db5c8..000000000 --- a/policy-engine/src/_examples/_debug-helper.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { completePolicyConfig } from '../_test/policy-config/complete-in-progress.sample'; - -function start() { - const policy: Policy = new Policy(completePolicyConfig); - console.log(JSON.stringify(policy.policyDefinition)); - /* - - console.log('***ALL COMMODITIES***'); - const allCommodities = policy.getCommodities(); - console.log( - JSON.stringify(Array.from(allCommodities.entries()), null, ' '), - ); - - console.log('***COMMODITIES FOR STOS***'); - const stosCommodities = policy.getCommodities('STOS'); - console.log( - JSON.stringify(Array.from(stosCommodities.entries()), null, ' '), - ); - - console.log('***POWER UNITS PERMITTABLE FOR STOS AND EMPTY COMMODITY***'); - const puTypesEmpty = policy.getPermittablePowerUnitTypes('STOS', 'EMPTYXX'); - console.log(JSON.stringify(Array.from(puTypesEmpty.entries()), null, ' ')); - - console.log( - '***POWER UNITS PERMITTABLE FOR STOS AND BRIDGE BEAMS COMMODITY***', - ); - const puTypesBridgeBeams = policy.getPermittablePowerUnitTypes( - 'STOS', - 'BRGBEAM', - ); - console.log( - JSON.stringify(Array.from(puTypesBridgeBeams.entries()), null, ' '), - ); - - console.log( - '***PERMITTABLE NEXT VEHICLES WITH EMPTY CONFIGURATION, STOS AND EMPTY***', - ); - const vehicleTypes1 = policy.getNextPermittableVehicles( - 'STOS', - 'EMPTYXX', - [], - ); - console.log(JSON.stringify(Array.from(vehicleTypes1.entries()), null, ' ')); - - console.log( - '***PERMITTABLE NEXT VEHICLES WITH TRUCK TRACTOR AND JEEP, STOS AND EMPTY***', - ); - const vehicleTypes2 = policy.getNextPermittableVehicles('STOS', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - ]); - console.log(JSON.stringify(Array.from(vehicleTypes2.entries()), null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX***', - ); - const sizeDimension = policy.getSizeDimension('STOS', 'EMPTYXX', ['TRKTRAC', 'JEEPSRG', 'HIBOEXP']); - console.log(JSON.stringify(sizeDimension, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX IN PEACE***', - ); - const sizeDimensionPeace = policy.getSizeDimension('STOS', 'EMPTYXX', ['TRKTRAC', 'JEEPSRG', 'HIBOEXP'], ['PCE']); - console.log(JSON.stringify(sizeDimensionPeace, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX IN PEACE,BC DEFAULT***', - ); - const sizeDimensionPeaceBC = policy.getSizeDimension('STOS', 'EMPTYXX', ['TRKTRAC', 'JEEPSRG', 'HIBOEXP'], ['PCE','BCD']); - console.log(JSON.stringify(sizeDimensionPeaceBC, null, ' ')); - */ -} - -start(); diff --git a/policy-engine/src/_examples/calculate-cost.ts b/policy-engine/src/_examples/calculate-cost.ts deleted file mode 100644 index 809395471..000000000 --- a/policy-engine/src/_examples/calculate-cost.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { PermitAppInfo } from 'onroute-policy-engine/enum'; -import { masterPolicyConfig } from '../_test/policy-config/master.sample'; -import { validTros30Day } from '../_test/permit-app/valid-tros-30day'; -import dayjs from 'dayjs'; - -async function start() { - const policy: Policy = new Policy(masterPolicyConfig); - const today = dayjs(); - - // Set startDate to today - validTros30Day.permitData.startDate = today.format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set duration to full year (365 or 366 depending on leap year) - const oneYearDuration: number = today.add(1, 'year').diff(today, 'day'); - console.log('Setting TROS permit duration to ' + oneYearDuration); - validTros30Day.permitData.permitDuration = oneYearDuration; - - const validationResult2 = await policy.validate(validTros30Day); - console.log(JSON.stringify(validationResult2, null, ' ')); -} - -start(); diff --git a/policy-engine/src/_examples/get-policy-details.ts b/policy-engine/src/_examples/get-policy-details.ts deleted file mode 100644 index 9065c208d..000000000 --- a/policy-engine/src/_examples/get-policy-details.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { completePolicyConfig } from '../_test/policy-config/complete-in-progress.sample'; - -function start() { - const policy: Policy = new Policy(completePolicyConfig); - - console.log('***ALL PERMIT TYPES***'); - const allPermitTypes = policy.getPermitTypes(); - console.log( - JSON.stringify(Array.from(allPermitTypes.entries()), null, ' '), - ); - - console.log('***ALL COMMODITIES***'); - const allCommodities = policy.getCommodities(); - console.log( - JSON.stringify(Array.from(allCommodities.entries()), null, ' '), - ); - - console.log('***COMMODITIES FOR STOS***'); - const stosCommodities = policy.getCommodities('STOS'); - console.log( - JSON.stringify(Array.from(stosCommodities.entries()), null, ' '), - ); - - console.log('***POWER UNITS PERMITTABLE FOR STOS AND EMPTY COMMODITY***'); - const puTypesEmpty = policy.getPermittablePowerUnitTypes('STOS', 'EMPTYXX'); - console.log(JSON.stringify(Array.from(puTypesEmpty.entries()), null, ' ')); - - console.log( - '***POWER UNITS PERMITTABLE FOR STOS AND BRIDGE BEAMS COMMODITY***', - ); - const puTypesBridgeBeams = policy.getPermittablePowerUnitTypes( - 'STOS', - 'BRGBEAM', - ); - console.log( - JSON.stringify(Array.from(puTypesBridgeBeams.entries()), null, ' '), - ); - - console.log( - '***PERMITTABLE NEXT VEHICLES WITH EMPTY CONFIGURATION, STOS AND EMPTY***', - ); - const vehicleTypes1 = policy.getNextPermittableVehicles( - 'STOS', - 'EMPTYXX', - [], - ); - console.log(JSON.stringify(Array.from(vehicleTypes1.entries()), null, ' ')); - - console.log( - '***PERMITTABLE NEXT VEHICLES WITH TRUCK TRACTOR AND JEEP, STOS AND EMPTY***', - ); - const vehicleTypes2 = policy.getNextPermittableVehicles('STOS', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - ]); - console.log(JSON.stringify(Array.from(vehicleTypes2.entries()), null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX***', - ); - const sizeDimension = policy.getSizeDimension('STOS', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - 'HIBOEXP', - ]); - console.log(JSON.stringify(sizeDimension, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX IN PEACE***', - ); - const sizeDimensionPeace = policy.getSizeDimension( - 'STOS', - 'EMPTYXX', - ['TRKTRAC', 'JEEPSRG', 'HIBOEXP'], - ['PCE'], - ); - console.log(JSON.stringify(sizeDimensionPeace, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, HIBOEXP, STOS AND EMPTYXX IN PEACE,BC DEFAULT***', - ); - const sizeDimensionPeaceBC = policy.getSizeDimension( - 'STOS', - 'EMPTYXX', - ['TRKTRAC', 'JEEPSRG', 'HIBOEXP'], - ['PCE', 'BCD'], - ); - console.log(JSON.stringify(sizeDimensionPeaceBC, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, STWHELR, STOS AND EMPTYXX IN BC DEFAULT***', - ); - const sizeDimensionBC = policy.getSizeDimension( - 'STOS', - 'EMPTYXX', - ['TRKTRAC', 'JEEPSRG', 'STWHELR'], - ['BCD'], - ); - console.log(JSON.stringify(sizeDimensionBC, null, ' ')); - - console.log( - '***MAX SIZE FOR TRUCK TRACTOR, JEEP, STWHELR, STOS AND EMPTYXX IN PEACE***', - ); - const sizeDimensionStwhelrPce = policy.getSizeDimension( - 'STOS', - 'EMPTYXX', - ['TRKTRAC', 'JEEPSRG', 'STWHELR'], - ['PCE'], - ); - console.log(JSON.stringify(sizeDimensionStwhelrPce, null, ' ')); -} - -start(); diff --git a/policy-engine/src/_examples/os-dimensions.csv b/policy-engine/src/_examples/os-dimensions.csv deleted file mode 100644 index 5472487ef..000000000 --- a/policy-engine/src/_examples/os-dimensions.csv +++ /dev/null @@ -1,213 +0,0 @@ -No Self Issue,Commodity,Power Unit,Trailer,Allow Jeep,Allow Booster,LMN - Width,LMN - Height,LMN - Length,KTN - Width,KTN - Height,KTN - Length,PCE - Width,PCE - Height,PCE - Length,BCD - Width,BCD - Height,BCD - Length,ORBC FP,ORBC RP,"Policy Ref" -,"Auto Carrier, Campers And Boats (Stinger Steered Transporters Only)",Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,,4.3,25,,4.3,25,,4.88,25,,4.4,25,1,1.2,4.2.7.A.1/4.2.7.B.A/ 5.3.11 -,Bridge Beams,Truck Tractors,Pole Trailers,X,,,,31,,,31,,,31,,,31,3,6.5,4.5.5 -,Bridge Beams,Truck Tractors,Semi-Trailers,,,,,31,,,31,,,31,,,31,3,6.5,4.2.7.A.13 -,Bridge Beams,Truck Tractors,Steering Dolly,,,,,36,,,36,,,36,,,36,3,6.5,5.3.12.F -,Brushcutters (Peace Only),Truck Tractors,Semi-Trailers,,,,,,,,,4.57,5.33,,,,,3,6.5,4.2.7.B.B -,Brushcutters (Peace Only),Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,,,,,,,4.57,5.33,,,,,3,6.5,4.2.7.B.B -,Brushcutters (Peace Only),Trucks,None,,,,,,,,,4.57,5.33,,,,,,,4.2.7.B.B -,Brushcutters (Peace Only),Trucks,Pony Trailers,,,,,,,,,3.8,5.33,,,,,,,4.2.7.B.B/5.3.12.G -,Doglogger/Sjostrum Trailers (decked),Truck Tractors,None,,,,,13.5,,,13.5,,,13.5,,,13.5,,5,4.2.7.A.13 -,Empty,Truck Tractors,Logging Trailer - Overwidth Bunks,,,3.2,,,3.2,,,3.2,,,3.2,,,0,0,5.3.5.B -,Empty,Picker Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,3.2,4.15,23,3,6.5,5.3.8.B. -X,Empty,Picker Truck Tractors,Platform Trailers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,,, -,Empty,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,,4.15,,,4.15,,,4.15,27.5,,4.15,25,3,6.5,5.3.9.A./5.3.9.B. -X,Empty,Picker Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,,, -X,Empty,Picker Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,,, -,Empty,Picker Truck,Pony Trailers,,,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,2.6,4.15,23,,,5.3.9.A -X,Empty,Truck Tractors,Platform Trailers,X,X,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,,, -,Empty,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,,4.15,31,,,31,,,31,,,31,3,6.5,5.3.12.C. -,Empty,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,,4.15,27.5,,,27.5,,,27.5,,,27.5,3,6.5,5.3.12.B. -,Empty,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.15,31,3.2,,31,3.2,,31,3.2,,31,3,6.5,5.3.12.A. -X,Empty,Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.15,27.5,3.2,4.88,27.5,3.2,5.33,27.5,3.2,4.88,27.5,,, -X,Empty,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.15,27.5,3.2,4.88,27.5,3.2,5.33,27.5,3.2,4.88,27.5,,, -,Fixed Equipment,Truck Tractors,Fixed Equipment - Conveyors (Semi-Trailers),X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,4,9.5,5.3.4.F. -,Fixed Equipment,Truck Tractors,Fixed Equipment - Counter Flow Asphalt Drum Mixers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.D. -,Fixed Equipment,Truck Tractors,Fixed Equipment - Portable Asphalt Baghouses,X,X,4.26,4.72,,4.26,4.72,,4.26,5.33,,4.26,4.72,,3,6.5,5.3.4.E. -,Fixed Equipment,Truck Tractors,Fixed Equipment - Semi-Trailers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.A. -X,Fixed Equipment,Truck Tractors,Fixed Equipment - Wheeler Semi-Trailers,X,X,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.B. -,Fixed Equipment,Trucks,Fixed Equipment - Conveyors (Pony Trailers),,,3.2,4.3,,3.2,4.3,,3.2,4.3,,3.2,4.3,,4,9.5,5.3.4.F. -,Fixed Equipment,Trucks,Fixed Equipment - Counter Flow Asphalt Drum Mixers,,,3.8,4.72,,3.8,4.72,,3.8,5.33,,3.8,4.72,,3,6.5,5.3.4.D. -,Fixed Equipment,Trucks,Fixed Equipment - Pony Trailers,,,3.2,4.3,,3.2,4.3,,3.2,4.3,,3.2,4.3,,,4,5.3.4.C. -,Fixed Equipment,Trucks,Fixed Equipment - Portable Asphalt Baghouses,,,4.26,4.72,,4.26,4.72,,4.26,4.72,,4.26,4.72,,3,6.5,5.3.4.E. -,Garbage Bins,Trucks,Full Trailers,,,,,,,,,,,,,,,3,6.5,4.2.7.A.7 -,Garbage Bins,Trucks,None,,,,,,,,,,,,,,,3,6.5,4.2.7.A.7 -,Garbage Bins,Trucks,Pony Trailers,,,,,,,,,,,,,,,3,6.5,4.2.7.A.7 -,"Grader, Tractor Blades, Buckets",Fixed Equipment - Trucks/Graders etc.,None,,,4.4,,,4.4,,,4.4,,,4.4,,,,,4.2.7.B.C -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.5,4.3,26,3.5,4.3,26,3.84,4.8,26,3.5,4.3,26,,,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - B-Trains,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,3,6.5,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,3,6.5,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Trucks,Full Trailers,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,4,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Trucks,None,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,,4.2.7.A.8/4.4.2 -,Hay Bales (Round) Peace River Only,Trucks,Pony Trailers,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,4,4.2.7.A.8/4.4.2 -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.05,4.3,26,3.05,4.3,26,3.05,4.8,26,3.05,4.3,26,,,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - B-Trains,,,3.05,4.3,27.5,3.05,4.3,27.5,3.05,4.8,27.5,3.05,4.3,27.5,,,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.4,,3,6.5,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,3,6.5,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Trucks,Full Trailers,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,4,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Trucks,None,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,,4.2.7.A.8/4.4.1 -,Hay Bales Large Rectangular,Trucks,Pony Trailers,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,4,4.2.7.A.8/4.4.1 -,Hay Bales Round,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.5,4.3,26,3.5,4.3,26,3.84,4.8,26,3.5,4.3,26,,,4.2.7.A.8/4.4.2 -,Hay Bales Round,Truck Tractors,Semi-Trailers - B-Trains,,,3.5,4.3,27.5,3.5,4.3,27.5,3.84,4.8,27.5,3.5,4.3,27.5,,,4.2.7.A.8/4.4.2 -,Hay Bales Round,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,3,6.5,4.2.7.A.8/4.4.2 -,Hay Bales Round,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,3,6.5,4.2.7.A.8/4.4.2 -,Hay Bales Round,Trucks,Full Trailers,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,4,4.2.7.A.8/4.4.2 -,Hay Bales Round,Trucks,None,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,,4.2.7.A.8/4.4.2 -,Hay Bales Round,Trucks,Pony Trailers,,,3.5,4.3,,3.5,4.3,,3.84,4.8,,3.5,4.3,,,4,4.2.7.A.8/4.4.2 -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.05,4.3,26,3.05,4.3,26,3.05,4.8,26,3.05,4.3,26,,,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - B-Trains,,,3.05,4.3,27.5,3.05,4.3,27.5,3.05,4.8,27.5,3.05,4.3,27.5,,,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,3,6.5,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,3,6.5,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Trucks,Full Trailers,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,4,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Trucks,None,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,,4.2.7.A.8/4.4.1 -,Hay Bales Small Rectangular,Trucks,Pony Trailers,,,3.05,4.3,,3.05,4.3,,3.05,4.8,,3.05,4.3,,,4,4.2.7.A.8/4.4.1 -,Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback,Truck Tractors,Semi-Trailers - Logging,,,,,,,,,,,,,,,,5,4.5.6.E. -,Intermodal Containers,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,,4.4,26,,4.4,26,,4.4,26,,4.4,26,,,4.2.7.A.9 -,Intermodal Containers,Truck Tractors,Semi-Trailers - B-Trains,,,,4.4,27.5,,4.4,27.5,,4.4,27.5,,4.4,27.5,,,4.2.7.A.9 -,Intermodal Containers,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,,4.4,,,4.4,,,4.4,,,4.4,,,,4.2.7.A.9 -,Intermodal Containers,Trucks,None,,,,4.4,,,4.4,,,4.4,,,4.4,,,,4.2.7.A.9 -,Intermodal Containers without Sides,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,4.4,4.72,,4.4,4.72,,4.4,4.72,,4.4,4.72,,,,4.2.7.10/4.2.7.B.D. -,Laminated Beams,Truck Tractors,Pole Trailers,X,X,,,40,,,40,,,40,,,40,3,6.5,4.5.3 -,Laminated Beams,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,,,31,,,31,,,31,,,31,3,6.5,4.5.3 -X,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,"Logging Trailer - Full Trailers, Tri Axle, Quad Axle",,,,,40,,,40,,,40,,,40,10,10,4.5.2 -X,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Pole Trailers,X,X,,,40,,,40,,,40,,,40,8,9,4.5.2 -,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Steering Trailers - Manned,X,X,,,40,,,40,,,40,,,40,10,10,5.3.12.F -,"Logs, Poles And Boomsticks (Over 20.1)",Truck Tractors,Steering Trailers - Self/Remote,X,X,,,36,,,36,,,36,,,36,10,10,5.3.12.F -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Full Trailers,,,2.9,,27.5,2.9,,27.5,2.9,,27.5,2.9,,27.5,3,6.5,4.5.1 -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Legacy Logging Trailer Combinations,,,2.6,,25,2.6,,25,2.6,,25,2.6,,25,3,5,5.3.7.C. -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Pole Trailers,X,,2.9,,27.5,2.9,,27.5,2.9,,27.5,2.9,,27.5,3,6.5,4.5.1 -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,2.9,,26,2.9,,26,2.9,,26,2.9,,26,3,6.5,4.5.1 -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - B-Trains,,,2.9,,27.5,2.9,,27.5,2.9,,27.5,2.9,,27.5,3,6.5,4.5.1 -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,,,2.9,,25,2.9,,25,2.9,,25,2.9,,25,3,6.5,4.5.1 -,"Logs, Poles And Boomsticks (Up To 20.1)",Truck Tractors,Semi-Trailers - Logging,,,2.9,,25,2.9,,25,2.9,,25,2.9,,25,3,6.5,4.5.1 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Truck Tractors,Semi-Trailers,X,X,,4.88,,,4.88,,,5.33,36,,4.88,31.5,3.0,7.5,4.3.5 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,,4.88,,,4.88,,,5.33,36,,4.88,31.5,3.0,7.5,4.3.5 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Dollies,,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,4.3 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Float Trailers,,,,4.57,,,4.57,,,5.33,36,,4.57,31.5,1,6.9,4.3.5.F -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)",Trucks,Pony Trailers,,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,4.3 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Truck Tractors,Semi-Trailers,X,X,,4.88,,,4.88,,,5.33,36,,4.88,31.5,3.0,7.5,4.3.5 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,,4.88,,,4.88,,,5.33,36,,4.88,31.5,3.0,7.5,4.3.5 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Dollies,,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,4.3 -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Float Trailers,,,,4.57,,,4.57,,,5.33,36,,4.57,31.5,1,6.9,4.3.5.F -X,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)",Trucks,Pony Trailers,,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,4.3 -,None,Concrete Pumper Trucks,None,,X,,,15.5,,,15.5,,,15.5,,,15.5,3,6.5,5.3.2.A. -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain",Dollies,,,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,10,6.5,5.3.3.B. -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain",None,,,3.8,4.3,14,3.8,4.3,14,3.8,4.3,15,3.8,4.3,14,10,6.5,5.3.3.B. -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - Mobile",Dollies,,,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,3.8,4.3,25,10,6.5,5.3.3.A. -,None,"Cranes, Rubber-Tired Loaders, Firetrucks - Mobile",None,,,3.8,4.3,14,3.8,4.3,14,3.8,4.3,15,3.8,4.3,14,10,6.5,5.3.3.A. -,None,Double Decker Buses,None,,,,4.3,,,4.3,,,4.3,,,4.42,,,,5.3.1.A -,None,Fixed Equipment - Trucks/Graders etc.,Fixed Equipment - Pony Trailers,,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,,4, -X,None,Fixed Equipment - Trucks/Graders etc.,None,,,3.5,4.3,,3.5,4.3,,3.5,5.33,,3.5,4.4,12.5,,,5.3.4.G. -X,None,Inter-City Bus (Pulling Pony Trailer),Pony Trailers,,,,,,,,,,,,,,,,,5.3.1.B -,None,Logging Trucks - Off-Highway,Semi-Trailers - Logging,,,4.4,,,4.4,,,4.4,,,4.4,,,3,6.5,5.3.5.A. -X,None,Long Combination Vehicles (LCV) - Rocky Mountain Doubles,Semi-Trailers,,,,,32,,,32,,,31,,,32,,,5.3.6.D. -,None,Long Combination Vehicles (LCV) - Turnpike Doubles,Semi-Trailers,,,,,41,,,41,,,41,,,41,,,5.3.6.D. -X,None,Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m,Semi-Trailers,X,X,,,,,,,,,,2.6,4.15,23,,,5.3.7.A. -,None,Picker Truck Tractors,None,,,,,16,,,16,,,16,2.6,4.15,16,3,,5.3.9 -,None,Picker Truck Tractors,Semi-Trailers with Crane,X,X,,,25,,,25,,,25,2.6,4.15,25,3,6.5,5.3.9 -,None,Picker Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,,, -,None,Picker Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,,, -,None,Scrapers,None,,,,,,,,,,,,,,12.5,,,5.3.10.A.1) -,None,Truck Tractors,Fixed Equipment - Conveyors (Semi-Trailers),X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,4,9.5, -,None,Truck Tractors,Fixed Equipment - Counter Flow Asphalt Drum Mixers,X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,3,6.5, -X,None,Truck Tractors,Fixed Equipment - Portable Asphalt Baghouses,X,X,4.26,4.72,31,4.26,4.72,31,4.26,5.33,31,4.26,4.72,31,3,6.5, -X,None,Truck Tractors,Fixed Equipment - Semi-Trailers,X,X,3.8,4.72,31,3.8,4.72,31,3.8,5.33,31,3.8,4.72,31,3,6.5, -,None,Truck Tractors,Fixed Equipment - Wheeler Semi-Trailers,X,X,5,4.88,31,5,4.88,31,5,5.33,31,5,4.88,31,,, -X,None,Truck Tractors,Overdimensional Trailers and Semi-Trailers (For Export),,,3.65,,,3.65,,,3.65,,,3.65,,,,,5.3.12.D. -,None,Truck Tractors,Ready Mix Concrete Pump Semi-Trailers,X,X,,,,,,,,,,,,,3,6.5,5.3.2.B. -,None,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,,4.3,,,4.3,,,5.33,,,4.3,31,3,6.5,5.3.12.B. -,None,Truck Tractors,Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units,,,,4.3,,,4.3,,,4.3,,,4.3,,,,5.3.12.H. -,None,Truck Tractors,Semi-Trailers - Non-Tac Short Chassis,,,,,,,,,,,,,,,,,5.3.7.D. -,None,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,32,3.2,4.3,27.5,3,6.5,5.3.12.A. -,None,Truck Tractors,Steering Trailers - Manned,X,X,,,40,,,40,,,40,,4.15,40,,,5.3.12.F.ii) -,None,Truck Tractors,Steering Trailers - Self/Remote,X,X,,,36,,,36,,,36,,,36,,,5.3.12.F.i) -,None,Trucks,Fixed Equipment - Conveyors (Pony Trailers),,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,4,9.5, -,None,Trucks,Fixed Equipment - Pony Trailers,,,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,,4, -,None,Trucks,Full Trailers ,,,3.8,4.3,,3.8,4.3,,3.8,5.33,,3.8,4.3,,,6.5,5.3.12.G. -,None,Trucks,"Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles",,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,"4.3.5.A, 4.3.5.B, 4.3.5.C" -,None,Trucks,"Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles",,,,4.88,,,4.88,,,5.33,36,,4.88,31.5,1,6.9,"4.3.5.D, 4.3.5.E" -,None,Trucks,None,,,3.2,4.3,16,3.2,4.3,16,3.2,4.4,16,3.2,4.3,16,1,6.5, -,None,Trucks,Overdimensional Trailers and Semi-Trailers (For Export),,,3.65,,,3.65,,,3.65,,,3.65,,,,,5.3.12.D. -,None,Trucks,Park Model Homes with Attached Axles,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4 -,None,Trucks,Pony Trailers,,,3.2,4.3,,3.2,4.3,,3.2,5.33,,3.2,4.3,,,6.5,5.3.12.G. -,None,Trucks Equipped with Front or Underbody Plow Blades,None,,,3.2,,,3.2,,,3.2,,,3.2,,,,,5.3.13 -X,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Logging,,,3.8,4.15,27.5,3.8,4.15,27.5,3.8,4.15,27.5,3.8,4.15,27.5,,,5.3.9.A./5.3.9.B. -X,Non-Reducible Loads,Picker Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B. -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers,X,X,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,3,,5.3.9.A./5.3.9.B. -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,5,4.4,25,5,4.4,25,5,5.33,25,5,4.4,25,3,,5.3.9.A./5.3.9.B. -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,5,4.4,25,5,4.4,25,5,5.33,25,5,4.4,25,3,,5.3.9.A./5.3.9.B. -X,Non-Reducible Loads,Picker Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,3,,5.3.9.A./5.3.9.B. -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Steering Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,, -X,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,, -,Non-Reducible Loads,Picker Truck Tractors,Semi-Trailers with Crane,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,, -,Non-Reducible Loads,Picker Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,,, -,Non-Reducible Loads,Picker Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,,, -X,Non-Reducible Loads,Truck Tractors,Platform Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,5,4.4,26,5,4.4,26,5,5.33,26,5,4.4,26,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - B-Trains,,,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,5,4.4,27.5,5,4.4,27.5,5,5.33,27.5,5,4.4,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -X,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Steering Trailers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Semi-Trailers with Crane,X,X,5,4.88,27.5,5,4.88,27.5,5,5.33,27.5,5,4.88,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Steering Trailers - Manned,X,X,5,4.88,40,5,4.88,40,5,5.33,40,5,4.88,40,,,4.2.4/4.2.5i)/4.2.6 -,Non-Reducible Loads,Truck Tractors,Steering Trailers - Self/Remote,X,X,5,4.88,36,5,4.88,36,5,5.33,36,5,4.88,36,,,4.2.4/4.2.5i)/4.2.6 -X,Non-Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers,,,,4.88,25,,4.88,25,,5.33,25,,4.88,25,1,1.2,4.2.7.A.2/4.2.7.B.B/ 5.3.11 -,Non-Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,,4.88,25,,4.88,25,,5.33,25,,4.88,25,1,1.2,4.2.7.A.2/4.2.7.B.B/ 5.3.11 -,Non-Reducible Loads,Trucks,Dollies,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.A.2/4.2.7.B.B/ 5.3.11 -,Non-Reducible Loads,Trucks,Full Trailers,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.B.G -,Non-Reducible Loads,Trucks,None,,,5,4.88,16,5,4.88,16,5,5.33,16,5,4.88,16,1,6.5,4.2.7.B.G -,Non-Reducible Loads,Trucks,Pony Trailers,,,5,4.88,25,5,4.88,25,5,5.33,25,5,4.88,25,1,6.5,4.2.7.B.G -,Oil Field Equipment,Oil and Gas - Bed Trucks,Expando Semi-Trailers,X,X,,4.3,27.5,,4.3,27.5,,4.3,27.5,,4.3,27.5,3,6.5,5.3.8.C. -,Oil Field Equipment,Oil and Gas - Bed Trucks,None,,,3.3,4.3,14,3.3,4.3,14,3.3,4.3,14,3.3,4.3,14,,5,5.3.8.A.i)/ii) -,Oil Field Equipment,Oil and Gas - Bed Trucks,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B. -,Oil Field Equipment,Oil and Gas - Oilfield Sows,None,,,3.2,4.3,15,3.2,4.3,15,3.2,4.3,15,3.2,4.3,15,,5,5.3.8.D. -,Oil Field Equipment,Oil and Gas - Oilfield Sows,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,25,3.2,4.3,25,3.2,4.3,25,3.2,4.3,25,3,6.5,5.3.8.E. -,Oil Field Equipment,Oil and Gas - Service Rigs,None,,,3.8,4.3,15,3.8,4.3,15,3.8,4.3,15,3.8,4.3,15,10,6.5,5.3.8.F. -,Oil Field Equipment,Oil and Gas - Service Rigs,Pony Trailers,,,3.8,4.3,23,3.8,4.3,23,3.8,4.3,23,3.8,4.3,23,10,6.5,5.3.8.F.i) -x,Oil Field Equipment,"Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)",None,,,2.9,4.15,15.5,2.9,4.15,15.5,2.9,4.15,15.5,2.9,4.15,15.5,10,6.5,5.3.8.F. -x,Oil Field Equipment,"Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)",Pony Trailers,,,2.9,4.15,23,2.9,4.15,23,2.9,4.15,23,2.9,4.15,23,10,6.5,5.3.8.F.i) -,Oil Field Equipment,Truck Tractors,Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers,X,X,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3.3,4.3,23,3,6.5,5.3.8.B. -,Park Model Homes,Trucks,Dollies,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4 -,Park Model Homes,Trucks,Float Trailers,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4 -,Park Model Homes,Trucks,Pony Trailers,,,4.4,4.88,31.5,4.4,4.88,31.5,4.4,5.33,31.5,4.4,4.88,31.5,3.0,6.9,4.3.4 -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3.2,4.3,31,3,6.5,4.2.5.A.ii)/4.2.7.A.14 -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,27.5,3.2,4.3,27.5,3,6.5,4.2.5.A.ii) -,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Semi-Trailers - Steering Trailers,X,X,3.2,4.3,36,3.2,4.3,36,3.2,4.3,36,3.2,4.3,36,3,6.5,4.2.7.B.H -X,"Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)",Truck Tractors,Steering Trailers - Manned,X,X,3.2,4.3,40,3.2,4.3,40,3.2,4.3,40,3.2,4.3,40,3,6.5,4.2.7.B.H -,Reducible Loads,Truck Tractors,Semi-Trailers - Logging,,,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,3.2,4.15,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Picker Truck Tractors,Semi-Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Picker Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Picker Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,3,,4.2.4/4.2.5i)/4.2.6 -X,Reducible Loads,Truck Tractors,Platform Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers - A-Trains and C-Trains,,,3.2,4.3,26,3.2,4.3,26,3.2,5.33,26,3.2,4.3,26,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers - B-Trains,,,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Expandos,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers - Hiboys/Flat Decks,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,"Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.",X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers - Steering Trailers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -X,Reducible Loads,Truck Tractors,Semi-Trailers - Wheelers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -X,Reducible Loads,Truck Tractors,Semi-Trailers - Wide Wheelers,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Semi-Trailers with Crane,X,X,3.2,4.3,27.5,3.2,4.3,27.5,3.2,5.33,27.5,3.2,4.3,27.5,,,4.2.4/4.2.5i)/4.2.6 -X,Reducible Loads,Truck Tractors,Steering Trailers - Manned,X,X,3.2,4.3,40,3.2,4.3,40,3.2,5.33,40,3.2,4.3,40,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors,Steering Trailers - Self/Remote,X,X,3.2,4.3,36,3.2,4.3,36,3.2,5.33,36,3.2,4.3,36,,,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers,,,,4.3,25,,4.3,25,,5.33,25,,4.3,25,1,1.2,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Truck Tractors - Stinger Steered,Semi-Trailers - Stinger Steered Automobile Transporters,,,,4.3,25,,4.3,25,,5.33,25,,4.3,25,1,1.2,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Trucks,Dollies,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Trucks,Full Trailers,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Trucks,None,,,3.2,4.3,16,3.2,4.3,16,3.2,4.4,16,3.2,4.3,16,1,6.5,4.2.4/4.2.5i)/4.2.6 -,Reducible Loads,Trucks,Pony Trailers,,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,1,6.5,4.2.4/4.2.5i)/4.2.6 -X,Scraper on Dollies,Truck Tractors,Dollies,X,,3.2,4.3,25,3.2,4.3,25,3.2,4.4,25,3.2,4.3,25,,,5.3.10.B. -,Tandem Jeep/Pole Trailer Loaded on Logging Truck,Truck Tractors,None,,,2.9,4.3,,2.9,4.3,,2.9,4.3,,2.9,4.3,,,5,4.2.7.A.6/4.5.6.C. -,Tandem Jeep/Pole Trailer Loaded on Logging Truck,Trucks,None,,,2.9,4.3,,2.9,4.3,,2.9,4.3,,2.9,4.3,,,5,4.2.7.A.6/4.5.6.C. -,Tow Trucks And Disabled Vehicles,Tow Vehicles,None,,,,4.3,27.5,,4.3,27.5,,4.3,27.5,,4.3,27.5,,,5.3.14 -,Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck,Truck Tractors,None,,,,4.3,13.5,,4.3,13.5,,4.3,13.5,,4.3,13.5,,5,4.2.7.A.6/4.5.6.D. -,Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck,Trucks,None,,,,4.3,13.5,,4.3,13.5,,4.3,13.5,,4.3,13.5,,5,4.2.7.A.6/4.5.6.D. -,"Wood Chips, Residuals",Truck Tractors,Semi-Trailers - B-Trains,,,,4.45,27.5,,4.45,27.5,,4.45,27.5,,4.45,27.5,,,4.2.7.A.16/4.5.4 diff --git a/policy-engine/src/_examples/output-os-as-csv.ts b/policy-engine/src/_examples/output-os-as-csv.ts deleted file mode 100644 index 1d8222ca4..000000000 --- a/policy-engine/src/_examples/output-os-as-csv.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { completePolicyConfig } from '../_test/policy-config/complete-in-progress.sample'; -import { Policy } from '../policy-engine'; -import { TrailerSize } from '../types'; -import { toCsv } from '@iwsio/json-csv-core'; - -// json-csv-core options object -const options = { - fields: [ - { name: 'noSelfIssue', label: 'No Self Issue', transform: (v: boolean) => v ? 'X' : '' }, - { name: 'commodity', label: 'Commodity' }, - { name: 'powerUnit', label: 'Power Unit' }, - { name: 'trailer', label: 'Trailer' }, - { name: 'jeep', label: 'Allow Jeep', transform: (v: boolean) => v ? 'X' : '' }, - { name: 'booster', label: 'Allow Booster', transform: (v: boolean) => v ? 'X' : '' }, - { name: 'lmn.width', label: 'LMN - Width' }, - { name: 'lmn.height', label: 'LMN - Height' }, - { name: 'lmn.length', label: 'LMN - Length' }, - { name: 'ktn.width', label: 'KTN - Width' }, - { name: 'ktn.height', label: 'KTN - Height' }, - { name: 'ktn.length', label: 'KTN - Length' }, - { name: 'pce.width', label: 'PCE - Width' }, - { name: 'pce.height', label: 'PCE - Height' }, - { name: 'pce.length', label: 'PCE - Length' }, - { name: 'bcd.width', label: 'BCD - Width' }, - { name: 'bcd.height', label: 'BCD - Height' }, - { name: 'bcd.length', label: 'BCD - Length' }, - { name: 'fp', label: 'ORBC FP' }, - { name: 'rp', label: 'ORBC RP' }, - ], -}; - -/** - * Converts the size dimensions stored in the complete policy json to csv - * format matching the format used by business SMEs to verify the size - * dimensions match official policy. - * @param pol Policy with the size dimension set to convert - * @returns CSV string matching input size dimension set format - */ -function sizeDimensionSestToCsv( - pol: Policy, -): string | null { - const sizeDimensionSet: Array = []; - - pol.policyDefinition.commodities.forEach((commodity) => { - const commodityName = commodity.name; - commodity.size?.powerUnits?.forEach((powerUnit) => { - const powerUnitName = pol.getPowerUnitTypes().get(powerUnit.type); - powerUnit.trailers.forEach((trailer) => { - const trailerName = pol.getTrailerTypes().get(trailer.type); - - let bcDefaultDimensions; - if (trailer.sizeDimensions && trailer.sizeDimensions.length > 0) { - const dim = trailer.sizeDimensions[0]; - bcDefaultDimensions = { - bcd: { - width: dim.w, - height: dim.h, - length: dim.l, - }, - fp: dim.fp, - rp: dim.rp, - } - } - - let dimensionSetEntry = { - noSelfIssue: !trailer.selfIssue, - commodity: commodityName, - powerUnit: powerUnitName, - trailer: trailerName, - jeep: trailer.jeep, - booster: trailer.booster, - lmn: getDimensionsForRegion(trailer, 'LMN'), - ktn: getDimensionsForRegion(trailer, 'KTN'), - pce: getDimensionsForRegion(trailer, 'PCE'), - ...bcDefaultDimensions, - }; - - sizeDimensionSet.push(dimensionSetEntry); - }); - }); - }); - - const csvString = toCsv(sizeDimensionSet, options); - return csvString; -} - -/** - * Extracts the dimensions for the trailer as it applies to the supplied - * region, supplying BC Default values if no region configuration is available. - * @param trailer Trailer size dimensions for the region - * @param dimRegion Region the size dimensions are for - must match a region - * id as stored in the policy configuration JSON - * @returns object with width, height, and length for policy specific to the - * region. Defaults to width, height, and length for bc default if no specific - * region values are configured for the trailer. - */ -function getDimensionsForRegion(trailer: TrailerSize, dimRegion: string): any { - if (trailer.sizeDimensions && trailer.sizeDimensions.length > 0) { - const dim = trailer.sizeDimensions[0]; - if (dim.regions && dim.regions.length > 0) { - const region = dim.regions.find((r) => r.region == dimRegion); - if (region) { - return { - width: region.w ?? dim.w, - height: region.h ?? dim.h, - length: region.l ?? dim.l, - } - } - } - - // Use BC Default if region not configured - return { - width: dim.w, - height: dim.h, - length: dim.l, - } - } - - // No dimensions in the input, return nothing - return null; -} - -const policy = new Policy(completePolicyConfig); -const csv = sizeDimensionSestToCsv(policy); - -console.log(csv); \ No newline at end of file diff --git a/policy-engine/src/_examples/update-os-from-csv.ts b/policy-engine/src/_examples/update-os-from-csv.ts deleted file mode 100644 index b61e795bf..000000000 --- a/policy-engine/src/_examples/update-os-from-csv.ts +++ /dev/null @@ -1,171 +0,0 @@ -import * as fs from 'fs'; -import { parse } from 'csv-parse'; -import { completePolicyConfig } from '../_test/policy-config/complete-in-progress.sample'; -import { Policy } from '../policy-engine'; -import { getIdFromName } from '../helper/lists.helper'; -import { RegionSizeOverride, SizeDimension, TrailerSize } from '../types'; - -type DimensionEntry = { - commodity: string; - powerUnit: string; - trailer: TrailerSize; -}; - -enum ColumnNumbers { - NoSelfIssue = 0, - Commodity = 1, - PowerUnit = 2, - Trailer = 3, - AllowJeep = 4, - AllowBooster = 5, - FirstWidth = 6, - DefaultWidth = 15, - FrontProjection = 18, - RearProjection = 19, -} - -function csvRowToObject( - row: Array, - pol: Policy, -): DimensionEntry | null { - const commodityId = getIdFromName( - pol.policyDefinition.commodities, - row[ColumnNumbers.Commodity], - ); - const puId = getIdFromName( - pol.policyDefinition.vehicleTypes.powerUnitTypes, - row[ColumnNumbers.PowerUnit].trim(), - ); - const trId = getIdFromName( - pol.policyDefinition.vehicleTypes.trailerTypes, - row[ColumnNumbers.Trailer].trim(), - ); - let entryObject: DimensionEntry | null = null; - if (commodityId && puId && trId) { - entryObject = { - commodity: commodityId, - powerUnit: puId, - trailer: { - type: trId, - jeep: row[ColumnNumbers.AllowJeep] == 'X' || row[ColumnNumbers.AllowJeep] == 'x', - booster: row[ColumnNumbers.AllowBooster] == 'X' || row[ColumnNumbers.AllowBooster] == 'x', - selfIssue: row[ColumnNumbers.NoSelfIssue] != 'X' && row[ColumnNumbers.NoSelfIssue] != 'x', - }, - }; - - const sizeDimension: SizeDimension = {}; - - const fp = parseFloat(row[ColumnNumbers.FrontProjection]); - const rp = parseFloat(row[ColumnNumbers.RearProjection]); - if (!isNaN(fp)) { - sizeDimension.fp = fp; - } - if (!isNaN(rp)) { - sizeDimension.rp = rp; - } - - // Populate the BC Default dimensions - const bcWidth = parseFloat(row[ColumnNumbers.DefaultWidth]); - const bcHeight = parseFloat(row[ColumnNumbers.DefaultWidth + 1]); - const bcLength = parseFloat(row[ColumnNumbers.DefaultWidth + 2]); - if (!isNaN(bcWidth)) sizeDimension.w = bcWidth; - if (!isNaN(bcHeight)) sizeDimension.h = bcHeight; - if (!isNaN(bcLength)) sizeDimension.l = bcLength; - - const regionIds: Array = ['LMN', 'KTN', 'PCE']; - // Populate the 3 region dimensions - for (let i = 0; i < regionIds.length; i++) { - const w = parseFloat(row[ColumnNumbers.FirstWidth + i * 3]); - const h = parseFloat(row[ColumnNumbers.FirstWidth + 1 + i * 3]); - const l = parseFloat(row[ColumnNumbers.FirstWidth + 2 + i * 3]); - if ( - (isNaN(w) || w == sizeDimension.w) && - (isNaN(h) || h == sizeDimension.h) && - (isNaN(l) || l == sizeDimension.l) - ) { - // All values for this region are empty or are the - // same as the BC default values. In this case do not - // include the region in the configuration at all - continue; - } - - if (!sizeDimension.regions) { - sizeDimension.regions = []; - } - - const regionOverride: RegionSizeOverride = { region: regionIds[i] }; - if (!isNaN(w) && w != sizeDimension.w) regionOverride.w = w; - if (!isNaN(h) && h != sizeDimension.h) regionOverride.h = h; - if (!isNaN(l) && l != sizeDimension.l) regionOverride.l = l; - sizeDimension.regions.push(regionOverride); - } - - entryObject.trailer.sizeDimensions = []; - entryObject.trailer.sizeDimensions.push(sizeDimension); - - return entryObject; - } else { - console.log( - `No entry in policy config for commodity '${row[ColumnNumbers.Commodity]}' and/or power unit '${row[ColumnNumbers.PowerUnit]}' and/or trailer '${row[ColumnNumbers.Trailer]}'`, - ); - return null; - } -} - -const policy = new Policy(completePolicyConfig); -policy.policyDefinition.commodities.forEach((c) => { - // Remove each size property from the commodity, will - // be replaced wholesale with the new size. If the configuration - // is not present in the new input, it should be deleted. - if (c.size) delete c.size; -}); - -function processCsvRow(row: any) { - const dimensionEntry = csvRowToObject(row, policy); - if (dimensionEntry) { - const commodity = policy.getCommodityDefinition(dimensionEntry.commodity); - if (commodity) { - // Update the list of power units - if (!commodity.size) { - commodity.size = { powerUnits: [] }; - } - - // Get or create power unit entry - let powerUnit = commodity.size.powerUnits?.find( - (pu) => pu.type == dimensionEntry.powerUnit, - ); - if (!powerUnit) { - // We don't have this power unit yet, create it - powerUnit = { - type: dimensionEntry.powerUnit, - trailers: [], - }; - commodity.size.powerUnits?.push(powerUnit); - } - - const trailer = powerUnit.trailers.find( - (tr) => tr.type == dimensionEntry.trailer.type, - ); - if (!trailer) { - // Create the trailer in configuration - powerUnit.trailers.push(dimensionEntry.trailer); - } else { - console.log( - `*** Duplicate trailer '${trailer.type}' in input for power unit '${powerUnit.type}'`, - ); - } - } - } -} - -fs.createReadStream('./Single Trip Oversize Dimension Set.csv') - .pipe(parse({ delimiter: ',', from_line: 3 })) - .on('data', function (row) { - processCsvRow(row); - }) - .on('end', function () { - console.log( - JSON.stringify(policy.policyDefinition.commodities, null, ' '), - ); - //console.log(JSON.stringify(policy.policyDefinition)); - }); diff --git a/policy-engine/src/_examples/validate-invalid-tros.ts b/policy-engine/src/_examples/validate-invalid-tros.ts deleted file mode 100644 index df493bc29..000000000 --- a/policy-engine/src/_examples/validate-invalid-tros.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { PermitAppInfo } from 'onroute-policy-engine/enum'; -import { masterPolicyConfig } from '../_test/policy-config/master.sample'; -import { validTros30Day } from '../_test/permit-app/valid-tros-30day'; -import dayjs from 'dayjs'; - -async function start() { - const policy: Policy = new Policy(masterPolicyConfig); - - // Set startDate to today - validTros30Day.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - // Set duration to 31 days (an invalid duration) - validTros30Day.permitData.permitDuration = 31; - - const validationResult2 = await policy.validate(validTros30Day); - console.log(JSON.stringify(validationResult2, null, ' ')); -} - -start(); diff --git a/policy-engine/src/_examples/validate-stos.ts b/policy-engine/src/_examples/validate-stos.ts deleted file mode 100644 index d948dd2dd..000000000 --- a/policy-engine/src/_examples/validate-stos.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { PermitAppInfo } from 'onroute-policy-engine/enum'; -import { completePolicyConfig } from '../_test/policy-config/complete-in-progress.sample'; -import { testStos } from '../_test/permit-app/test-stos'; -import dayjs from 'dayjs'; - -async function start() { - const policy: Policy = new Policy(completePolicyConfig); - - // Set startDate to today - testStos.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult2 = await policy.validate(testStos); - console.log(JSON.stringify(validationResult2, null, ' ')); -} - -start(); diff --git a/policy-engine/src/_examples/validate-tros.ts b/policy-engine/src/_examples/validate-tros.ts deleted file mode 100644 index 6dd4df833..000000000 --- a/policy-engine/src/_examples/validate-tros.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { PermitAppInfo } from 'onroute-policy-engine/enum'; -import { masterPolicyConfig } from '../_test/policy-config/master.sample'; -import { validTros30Day } from '../_test/permit-app/valid-tros-30day'; -import dayjs from 'dayjs'; - -async function start() { - const policy: Policy = new Policy(masterPolicyConfig); - - // Set startDate to today - validTros30Day.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult2 = await policy.validate(validTros30Day); - console.log(JSON.stringify(validationResult2, null, ' ')); -} - -start(); diff --git a/policy-engine/src/_test/permit-app/permit-application.type.ts b/policy-engine/src/_test/permit-app/permit-application.type.ts deleted file mode 100644 index 8f47ff50f..000000000 --- a/policy-engine/src/_test/permit-app/permit-application.type.ts +++ /dev/null @@ -1,99 +0,0 @@ -type PermitMailingAddress = { - addressLine1: string; - addressLine2?: string | null; - city: string; - provinceCode: string; - countryCode: string; - postalCode: string; -}; - -type PermitContactDetails = { - firstName: string; - lastName: string; - phone1: string; - phone1Extension?: string | null; - phone2?: string | null; - phone2Extension?: string | null; - email: string; - additionalEmail?: string | null; - fax?: string | null; -}; - -type PermitVehicleDetails = { - vehicleId?: string | null; - unitNumber?: string | null; - vin: string; - plate: string; - make?: string | null; - year?: number | null; - countryCode: string; - provinceCode: string; - vehicleType: string; - vehicleSubType: string; - licensedGVW?: number | null; - saveVehicle?: boolean | null; -}; - -type PermitCommodity = { - description: string; - condition: string; - conditionLink: string; - checked: boolean; - disabled: boolean; -}; - -type PermitData = { - companyName: string; - doingBusinessAs?: string; - clientNumber: string; - permitDuration: number; - commodities: Array; - contactDetails: PermitContactDetails; - mailingAddress: PermitMailingAddress; - vehicleDetails: PermitVehicleDetails; - feeSummary?: string | null; - startDate: string; - expiryDate?: string | null; - permittedCommodity?: PermittedCommodity | null; - vehicleConfiguration?: VehicleConfiguration | null; - permittedRoute?: PermittedRoute | null; - applicationNotes?: string | null; -}; - -type PermittedCommodity = { - commodityType: string; - loadDescription: string; -}; - -type VehicleInConfiguration = { - vehicleSubType: string; -}; - -type VehicleConfiguration = { - overallLength?: number; - overallWidth?: number; - overallHeight?: number; - frontProjection?: number; - rearProjection?: number; - trailers?: Array | null; -}; - -type PermittedRoute = { - manualRoute?: ManualRoute | null; - routeDetails?: string | null; -}; - -type ManualRoute = { - highwaySequence: Array; - origin: string; - destination: string; - exitPoint?: string; - totalDistance?: number; -}; - -type PermitApplication = { - permitData: PermitData; - permitType: string; -}; - -export default PermitApplication; diff --git a/policy-engine/src/_test/permit-app/test-stos.ts b/policy-engine/src/_test/permit-app/test-stos.ts deleted file mode 100644 index 8905363e8..000000000 --- a/policy-engine/src/_test/permit-app/test-stos.ts +++ /dev/null @@ -1,92 +0,0 @@ -import PermitApplication from './permit-application.type'; - -export const testStos: PermitApplication = { - permitType: 'STOS', - permitData: { - companyName: 'Sonic Delivery Services', - clientNumber: 'B3-000102-466', - permitDuration: 7, - commodities: [ - { - description: 'General Permit Conditions', - condition: 'CVSE-1000', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1251', - checked: true, - disabled: true, - }, - { - description: 'Permit Scope and Limitation', - condition: 'CVSE-1070', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1261', - checked: true, - disabled: true, - }, - ], - contactDetails: { - firstName: 'Chief', - lastName: 'Baker', - phone1: '(250) 555-1234', - phone1Extension: null, - phone2: '(250) 555-4321', - phone2Extension: null, - email: 'chief.baker@gov.bc.ca', - additionalEmail: 'baker.chief@gov.bc.ca', - fax: null, - }, - mailingAddress: { - addressLine1: '940 Blanshard', - addressLine2: null, - city: 'Victoria', - provinceCode: 'BC', - countryCode: 'CA', - postalCode: 'V8B1A2', - }, - permittedCommodity: { - commodityType: 'EMPTYXX', - loadDescription: 'empty', - }, - vehicleConfiguration: { - overallLength: 25, - overallWidth: 3, - overallHeight: 4.1, - frontProjection: 1, - rearProjection: 1, - trailers: [ - { - vehicleSubType: 'JEEPSRG', - }, - { - vehicleSubType: 'PLATFRM', - }, - ], - }, - permittedRoute: { - manualRoute: { - origin: 'Victoria, BC', - destination: 'Prince George, BC', - highwaySequence: ['1', '5'], - }, - routeDetails: 'Just driving here', - }, - vehicleDetails: { - vehicleId: '101', - unitNumber: '321', - vin: '654321', - plate: 'D654321', - make: 'Custom', - year: 2010, - countryCode: 'CA', - provinceCode: 'BC', - vehicleType: 'powerUnit', - vehicleSubType: 'TRKTRAC', - licensedGVW: 40000, - saveVehicle: false, - }, - feeSummary: '30', - startDate: '2024-04-18', - expiryDate: '2024-05-17', - applicationNotes: 'Call for credit card payment', - }, -}; diff --git a/policy-engine/src/_test/permit-app/valid-tros-30day.ts b/policy-engine/src/_test/permit-app/valid-tros-30day.ts deleted file mode 100644 index 0683c7598..000000000 --- a/policy-engine/src/_test/permit-app/valid-tros-30day.ts +++ /dev/null @@ -1,63 +0,0 @@ -import PermitApplication from './permit-application.type'; - -export const validTros30Day: PermitApplication = { - permitType: 'TROS', - permitData: { - companyName: 'Sonic Delivery Services', - clientNumber: 'B3-000102-466', - permitDuration: 30, - commodities: [ - { - description: 'General Permit Conditions', - condition: 'CVSE-1000', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1251', - checked: true, - disabled: true, - }, - { - description: 'Permit Scope and Limitation', - condition: 'CVSE-1070', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1261', - checked: true, - disabled: true, - }, - ], - contactDetails: { - firstName: 'Chief', - lastName: 'Baker', - phone1: '(250) 555-1234', - phone1Extension: null, - phone2: '(250) 555-4321', - phone2Extension: null, - email: 'chief.baker@gov.bc.ca', - additionalEmail: 'baker.chief@gov.bc.ca', - fax: null, - }, - mailingAddress: { - addressLine1: '940 Blanshard', - addressLine2: null, - city: 'Victoria', - provinceCode: 'BC', - countryCode: 'CA', - postalCode: 'V8B1A2', - }, - vehicleDetails: { - vehicleId: '101', - unitNumber: '321', - vin: '654321', - plate: 'D654321', - make: 'Custom', - year: 2010, - countryCode: 'CA', - provinceCode: 'BC', - vehicleType: 'trailer', - vehicleSubType: 'SEMITRL', - saveVehicle: false, - }, - feeSummary: '30', - startDate: '2024-04-18', - expiryDate: '2024-05-17', - }, -}; diff --git a/policy-engine/src/_test/permit-app/valid-trow-120day.ts b/policy-engine/src/_test/permit-app/valid-trow-120day.ts deleted file mode 100644 index 71f228f31..000000000 --- a/policy-engine/src/_test/permit-app/valid-trow-120day.ts +++ /dev/null @@ -1,72 +0,0 @@ -import PermitApplication from './permit-application.type'; - -export const validTrow120Day: PermitApplication = { - permitType: 'TROW', - permitData: { - companyName: 'Chief, Master', - doingBusinessAs: 'DBA test 1233', - clientNumber: 'B3-000102-187', - permitDuration: 120, - commodities: [ - { - description: 'General Permit Conditions', - condition: 'CVSE-1000', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1251', - checked: true, - disabled: true, - }, - { - description: 'Permit Scope and Limitation', - condition: 'CVSE-1070', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1261', - checked: true, - disabled: true, - }, - { - description: 'Highways and Restrictive Load Limits', - condition: 'CVSE-1011', - conditionLink: - 'https://www.th.gov.bc.ca/forms/getForm.aspx?formId=1258', - checked: true, - disabled: true, - }, - ], - contactDetails: { - firstName: 'Arbiter', - lastName: 'Flood', - phone1: '(250) 555-1234', - phone1Extension: null, - phone2: null, - phone2Extension: null, - email: 'arbiter.flood@gov.bc.ca', - additionalEmail: 'flood.arbiter@gov.bc.ca', - fax: null, - }, - mailingAddress: { - addressLine1: '1000 Main Street', - addressLine2: null, - city: 'Victoria', - provinceCode: 'BC', - countryCode: 'CA', - postalCode: 'V8V 8V8', - }, - vehicleDetails: { - vehicleId: '108', - unitNumber: '-', - vin: '898989', - plate: 'V6R4E3', - make: 'FORD', - year: 2007, - countryCode: 'US', - provinceCode: 'ME', - vehicleType: 'powerUnit', - vehicleSubType: 'GRADERS', - saveVehicle: false, - }, - feeSummary: '120', - startDate: '2024-05-15', - expiryDate: '2024-09-11', - }, -}; diff --git a/policy-engine/src/_test/policy-config/all-event-types.sample.ts b/policy-engine/src/_test/policy-config/all-event-types.sample.ts deleted file mode 100644 index f57f0ac74..000000000 --- a/policy-engine/src/_test/policy-config/all-event-types.sample.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const allEventTypes: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - ], - rules: [ - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 31, - }, - }, - event: { - type: 'violation', - params: { - message: 'Violation A', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 32, - }, - }, - event: { - type: 'requirement', - params: { - message: 'Requirement A', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 33, - }, - }, - event: { - type: 'warning', - params: { - message: 'Warning A', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 34, - }, - }, - event: { - type: 'information', - params: { - message: 'Message A', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 35, - }, - }, - event: { - type: 'information', - params: { - invalid_message: 'Message B', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 35, - }, - }, - event: { - type: 'information', - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: 36, - }, - }, - event: { - type: '__invalid', - params: { - message: 'Invalid A', - }, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/policy-config/complete-in-progress.sample.ts b/policy-engine/src/_test/policy-config/complete-in-progress.sample.ts deleted file mode 100644 index 1c8ee270a..000000000 --- a/policy-engine/src/_test/policy-config/complete-in-progress.sample.ts +++ /dev/null @@ -1,5859 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const completePolicyConfig: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [ - { - id: 'LMN', - name: 'Lower Mainland', - }, - { - id: 'KTN', - name: 'Kootenay', - }, - { - id: 'PCE', - name: 'Peace', - }, - ], - rangeMatrices: [ - { - id: 'annualFeeCV', - name: 'Annual licensing fee for commercial vehicle', - matrix: [ - { min: 0, max: 500, value: 42 }, - { min: 501, max: 1000, value: 49 }, - { min: 1001, max: 1500, value: 60 }, - { min: 1501, max: 2000, value: 74 }, - { min: 2001, max: 2500, value: 85 }, - { min: 2501, max: 3000, value: 97 }, - { min: 3001, max: 3500, value: 108 }, - { min: 3501, max: 4000, value: 127 }, - { min: 4001, max: 4500, value: 147 }, - { min: 4501, max: 5000, value: 173 }, - { min: 5001, max: 5500, value: 193 }, - { min: 5501, max: 6000, value: 213 }, - { min: 6001, max: 6500, value: 230 }, - { min: 6501, max: 7000, value: 250 }, - { min: 7001, max: 7500, value: 266 }, - { min: 7501, max: 8000, value: 292 }, - { min: 8001, max: 8500, value: 320 }, - { min: 8501, max: 9000, value: 347 }, - { min: 9001, max: 9500, value: 376 }, - { min: 9501, max: 10000, value: 395 }, - { min: 10001, max: 10500, value: 416 }, - { min: 10501, max: 11000, value: 437 }, - { min: 11001, max: 11500, value: 450 }, - { min: 11501, max: 12000, value: 469 }, - { min: 12001, max: 12500, value: 488 }, - { min: 12501, max: 13000, value: 502 }, - { min: 13001, max: 13500, value: 526 }, - { min: 13501, max: 14000, value: 553 }, - { min: 14001, max: 14500, value: 580 }, - { min: 14501, max: 15000, value: 607 }, - { min: 15001, max: 15500, value: 638 }, - { min: 15501, max: 16000, value: 680 }, - { min: 16001, max: 16500, value: 721 }, - { min: 16501, max: 17000, value: 761 }, - { min: 17001, max: 17500, value: 806 }, - { min: 17501, max: 18000, value: 837 }, - { min: 18001, max: 18500, value: 861 }, - { min: 18501, max: 19000, value: 890 }, - { min: 19001, max: 19500, value: 917 }, - { min: 19501, max: 20000, value: 944 }, - { min: 20001, max: 20500, value: 977 }, - { min: 20501, max: 21000, value: 1003 }, - { min: 21001, max: 21500, value: 1030 }, - { min: 21501, max: 22000, value: 1057 }, - { min: 22001, max: 22500, value: 1084 }, - { min: 22501, max: 23000, value: 1111 }, - { min: 23001, max: 23500, value: 1140 }, - { min: 23501, max: 24000, value: 1170 }, - { min: 24001, max: 24500, value: 1199 }, - { min: 24501, max: 25000, value: 1239 }, - { min: 25001, max: 25500, value: 1285 }, - { min: 25501, max: 26000, value: 1326 }, - { min: 26001, max: 26500, value: 1367 }, - { min: 26501, max: 27000, value: 1395 }, - { min: 27001, max: 27500, value: 1424 }, - { min: 27501, max: 28000, value: 1450 }, - { min: 28001, max: 28500, value: 1479 }, - { min: 28501, max: 29000, value: 1505 }, - { min: 29001, max: 29500, value: 1534 }, - { min: 29501, max: 30000, value: 1565 }, - { min: 30001, max: 31000, value: 1591 }, - { min: 31001, max: 32000, value: 1644 }, - { min: 32001, max: 33000, value: 1696 }, - { min: 33001, max: 34000, value: 1751 }, - { min: 34001, max: 35000, value: 1805 }, - { min: 35001, max: 36000, value: 1890 }, - { min: 36001, max: 37000, value: 2018 }, - { min: 37001, max: 38000, value: 2088 }, - { min: 38001, max: 39000, value: 2159 }, - { min: 39001, max: 40000, value: 2229 }, - { min: 40001, max: 41000, value: 2300 }, - { min: 41001, max: 42000, value: 2373 }, - { min: 42001, max: 43000, value: 2445 }, - { min: 43001, max: 44000, value: 2514 }, - { min: 44001, max: 45000, value: 2585 }, - { min: 45001, max: 46000, value: 2690 }, - { min: 46001, max: 47000, value: 2799 }, - { min: 47001, max: 48000, value: 2871 }, - { min: 48001, max: 49000, value: 2940 }, - { min: 49001, max: 50000, value: 3012 }, - { min: 50001, max: 51000, value: 3061 }, - { min: 51001, max: 52000, value: 3127 }, - { min: 52001, max: 53000, value: 3192 }, - { min: 53001, max: 54000, value: 3257 }, - { min: 54001, max: 55000, value: 3322 }, - { min: 55001, max: 56000, value: 3387 }, - { min: 56001, max: 57000, value: 3452 }, - { min: 57001, max: 58000, value: 3516 }, - { min: 58001, max: 59000, value: 3581 }, - { min: 59001, max: 60000, value: 3647 }, - { min: 60001, max: 61000, value: 3710 }, - { min: 61001, max: 62000, value: 3775 }, - { min: 62001, max: 63000, value: 3840 }, - { min: 63001, max: 63500, value: 3905 }, - ], - }, - { - id: 'annualFeePassenger', - name: 'Annual licensing fee for commercial passenger vehicle', - matrix: [ - { min: 0, max: 500, value: 40 }, - { min: 501, max: 1000, value: 47 }, - { min: 1001, max: 1500, value: 57 }, - { min: 1501, max: 2000, value: 70 }, - { min: 2001, max: 2500, value: 81 }, - { min: 2501, max: 3000, value: 92 }, - { min: 3001, max: 3500, value: 103 }, - { min: 3501, max: 4000, value: 121 }, - { min: 4001, max: 4500, value: 140 }, - { min: 4501, max: 5000, value: 165 }, - { min: 5001, max: 5500, value: 184 }, - { min: 5501, max: 6000, value: 203 }, - { min: 6001, max: 6500, value: 219 }, - { min: 6501, max: 7000, value: 238 }, - { min: 7001, max: 7500, value: 253 }, - { min: 7501, max: 8000, value: 278 }, - { min: 8001, max: 8500, value: 305 }, - { min: 8501, max: 9000, value: 330 }, - { min: 9001, max: 9500, value: 358 }, - { min: 9501, max: 10000, value: 376 }, - { min: 10001, max: 10500, value: 396 }, - { min: 10501, max: 11000, value: 416 }, - { min: 11001, max: 11500, value: 429 }, - { min: 11501, max: 12000, value: 447 }, - { min: 12001, max: 12500, value: 465 }, - { min: 12501, max: 13000, value: 478 }, - { min: 13001, max: 13500, value: 501 }, - { min: 13501, max: 14000, value: 527 }, - { min: 14001, max: 14500, value: 552 }, - { min: 14501, max: 15000, value: 578 }, - { min: 15001, max: 15500, value: 608 }, - { min: 15501, max: 16000, value: 648 }, - { min: 16001, max: 16500, value: 687 }, - { min: 16501, max: 17000, value: 725 }, - { min: 17001, max: 17500, value: 768 }, - { min: 17501, max: 18000, value: 797 }, - { min: 18001, max: 18500, value: 820 }, - { min: 18501, max: 19000, value: 848 }, - { min: 19001, max: 19500, value: 873 }, - { min: 19501, max: 20000, value: 899 }, - { min: 20001, max: 20500, value: 930 }, - { min: 20501, max: 21000, value: 955 }, - { min: 21001, max: 21500, value: 981 }, - { min: 21501, max: 22000, value: 1007 }, - { min: 22001, max: 22500, value: 1032 }, - { min: 22501, max: 23000, value: 1058 }, - { min: 23001, max: 23500, value: 1086 }, - { min: 23501, max: 24000, value: 1114 }, - { min: 24001, max: 24500, value: 1142 }, - { min: 24501, max: 25000, value: 1180 }, - { min: 25001, max: 25500, value: 1224 }, - { min: 25501, max: 26000, value: 1263 }, - { min: 26001, max: 26500, value: 1302 }, - { min: 26501, max: 27000, value: 1329 }, - { min: 27001, max: 27500, value: 1356 }, - { min: 27501, max: 28000, value: 1381 }, - { min: 28001, max: 28500, value: 1409 }, - { min: 28501, max: 29000, value: 1433 }, - { min: 29001, max: 29500, value: 1461 }, - { min: 29501, max: 30000, value: 1490 }, - { min: 30001, max: 31000, value: 1516 }, - { min: 31001, max: 32000, value: 1569 }, - { min: 32001, max: 33000, value: 1621 }, - { min: 33001, max: 34000, value: 1676 }, - { min: 34001, max: 35000, value: 1730 }, - { min: 35001, max: 36000, value: 1815 }, - { min: 36001, max: 37000, value: 1943 }, - { min: 37001, max: 38000, value: 2013 }, - { min: 38001, max: 39000, value: 2084 }, - { min: 39001, max: 40000, value: 2154 }, - { min: 40001, max: 41000, value: 2225 }, - { min: 41001, max: 42000, value: 2298 }, - { min: 42001, max: 43000, value: 2370 }, - { min: 43001, max: 44000, value: 2439 }, - { min: 44001, max: 45000, value: 2510 }, - { min: 45001, max: 46000, value: 2615 }, - { min: 46001, max: 47000, value: 2724 }, - { min: 47001, max: 48000, value: 2796 }, - { min: 48001, max: 49000, value: 2865 }, - { min: 49001, max: 50000, value: 2937 }, - { min: 50001, max: 51000, value: 2986 }, - { min: 51001, max: 52000, value: 3052 }, - { min: 52001, max: 53000, value: 3117 }, - { min: 53001, max: 54000, value: 3182 }, - { min: 54001, max: 55000, value: 3247 }, - { min: 55001, max: 56000, value: 3312 }, - { min: 56001, max: 57000, value: 3377 }, - { min: 57001, max: 58000, value: 3441 }, - { min: 58001, max: 59000, value: 3506 }, - { min: 59001, max: 60000, value: 3572 }, - { min: 60001, max: 61000, value: 3635 }, - { min: 61001, max: 62000, value: 3700 }, - { min: 62001, max: 63000, value: 3765 }, - { min: 63001, max: 63500, value: 3830 }, - ], - }, - { - id: 'annualFeeIndustrial', - name: 'Annual licensing fee for an industrial machine', - matrix: [ - { min: 0, max: 2000, value: 45 }, - { min: 2001, max: 5000, value: 69 }, - { min: 5001, max: 7000, value: 110 }, - { min: 7001, max: 9000, value: 164 }, - { min: 9001, max: 11000, value: 216 }, - { min: 11001, value: 260 }, - ], - }, - { - id: 'annualFeeFarm', - name: 'Annual licensing fee for farm vehicle', - matrix: [ - { min: 0, max: 500, value: 30 }, - { min: 501, max: 1000, value: 40 }, - { min: 1001, max: 1500, value: 47 }, - { min: 1501, max: 2000, value: 55 }, - { min: 2001, max: 2500, value: 77 }, - { min: 2501, max: 3000, value: 101 }, - { min: 3001, max: 3500, value: 142 }, - { min: 3501, max: 4000, value: 181 }, - { min: 4001, max: 4500, value: 207 }, - { min: 4501, max: 5000, value: 243 }, - { min: 5001, max: 5500, value: 278 }, - { min: 5501, max: 6000, value: 322 }, - { min: 6001, max: 6500, value: 355 }, - { min: 6501, max: 7000, value: 396 }, - { min: 7001, max: 7500, value: 427 }, - { min: 7501, max: 8000, value: 473 }, - { min: 8001, max: 8500, value: 524 }, - { min: 8501, max: 9000, value: 558 }, - { min: 9001, max: 9500, value: 596 }, - { min: 9501, max: 10000, value: 633 }, - { min: 10001, max: 10500, value: 669 }, - { min: 10501, max: 11000, value: 711 }, - { min: 11001, max: 11500, value: 744 }, - { min: 11501, max: 12000, value: 784 }, - { min: 12001, max: 12500, value: 824 }, - { min: 12501, max: 13000, value: 863 }, - { min: 13001, max: 13500, value: 883 }, - { min: 13501, max: 14000, value: 899 }, - { min: 14001, max: 14500, value: 919 }, - { min: 14501, max: 15000, value: 940 }, - { min: 15001, max: 15500, value: 960 }, - { min: 15501, max: 16000, value: 979 }, - { min: 16001, max: 16500, value: 997 }, - { min: 16501, max: 17000, value: 1017 }, - { min: 17001, max: 17500, value: 1036 }, - { min: 17501, max: 18000, value: 1056 }, - { min: 18001, max: 18500, value: 1076 }, - { min: 18501, max: 19000, value: 1096 }, - { min: 19001, max: 19500, value: 1114 }, - { min: 19501, max: 20000, value: 1134 }, - { min: 20001, max: 20500, value: 1154 }, - { min: 20501, max: 21000, value: 1174 }, - { min: 21001, max: 21500, value: 1192 }, - { min: 21501, max: 22000, value: 1211 }, - { min: 22001, max: 22500, value: 1231 }, - { min: 22501, max: 23000, value: 1251 }, - { min: 23001, max: 23500, value: 1270 }, - { min: 23501, max: 24000, value: 1289 }, - { min: 24001, max: 24400, value: 1309 }, - ], - }, - ], - commonRules: [ - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.companyName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Company is required', - code: 'field-validation-error', - fieldReference: 'permitData.companyName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.firstName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact first name is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.firstName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.lastName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact last name is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.lastName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.phone1', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact phone number is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.phone1', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.email', - }, - }, - event: { - type: 'violation', - params: { - message: 'Company contact email is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.email', - }, - }, - }, - { - conditions: { - any: [ - { - fact: 'permitData', - operator: 'dateLessThan', - value: { - fact: 'validationDate', - }, - path: '$.startDate', - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Permit start date cannot be in the past', - code: 'field-validation-error', - fieldReference: 'permitData.startDate', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'regex', - value: '^[a-zA-Z0-9]{6}$', - path: '$.vehicleDetails.vin', - }, - }, - event: { - type: 'violation', - params: { - message: - 'Vehicle Identification Number (vin) must be 6 alphanumeric characters', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vin', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.plate', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle plate is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.plate', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.make', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle make is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.make', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'greaterThan', - value: 1900, - path: '$.vehicleDetails.year', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle year is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.year', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.countryCode', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle country of registration is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.countryCode', - }, - }, - }, - ], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'BOOSTER', - 'DOLLIES', - 'EXPANDO', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'FLOATTR', - 'FULLLTL', - 'HIBOEXP', - 'HIBOFLT', - 'JEEPSRG', - 'LOGDGLG', - 'LOGFULL', - 'LOGNTAC', - 'LOGOWBK', - 'LOGSMEM', - 'LOGTNDM', - 'LOGTRIX', - 'ODTRLEX', - 'OGOSFDT', - 'PLATFRM', - 'POLETRL', - 'PONYTRL', - 'REDIMIX', - 'SEMITRL', - 'STBTRAN', - 'STCHIPS', - 'STCRANE', - 'STINGAT', - 'STLOGNG', - 'STNTSHC', - 'STREEFR', - 'STSDBDK', - 'STSTNGR', - 'STWHELR', - 'STWIDWH', - 'BUSTRLR', - 'CONCRET', - 'DDCKBUS', - 'GRADERS', - 'LOGGING', - 'LOGOFFH', - 'LWBTRCT', - 'OGBEDTK', - 'OGOILSW', - 'PICKRTT', - 'PLOWBLD', - 'REGTRCK', - 'STINGER', - 'TOWVEHC', - 'TRKTRAC', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - path: '$.permitDuration', - }, - }, - { - not: { - fact: 'permitData', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - path: '$.permitDuration', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 30, - }, - }, - ], - }, - { - id: 'TROW', - name: 'Term Overweight', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'DOLLIES', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'REDIMIX', - 'CONCRET', - 'CRAFTAT', - 'CRAFTMB', - 'GRADERS', - 'MUNFITR', - 'OGOILSW', - 'OGSERVC', - 'OGSRRAH', - 'PICKRTT', - 'TOWVEHC', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - }, - }, - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 100, - }, - }, - ], - }, - { - id: 'STOS', - name: 'Single Trip Oversize', - routingRequired: true, - weightDimensionRequired: false, - sizeDimensionRequired: true, - commodityRequired: true, - allowedCommodities: ['EMPTYXX', 'BRGBEAM', 'AUTOCRR', 'BRSHCUT'], - allowedVehicles: [ - 'DOLLIES', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'REDIMIX', - 'CONCRET', - 'CRAFTAT', - 'CRAFTMB', - 'GRADERS', - 'MUNFITR', - 'OGOILSW', - 'OGSERVC', - 'OGSRRAH', - 'PICKRTT', - 'TOWVEHC', - ], - rules: [ - { - conditions: { - any: [ - { - not: { - fact: 'permitData', - operator: 'lessThanInclusive', - value: 7, - path: '$.permitDuration', - }, - }, - { - not: { - fact: 'permitData', - operator: 'greaterThan', - value: 0, - path: '$.permitDuration', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be 7 days or less', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'configurationIsValid', - operator: 'equal', - value: true, - }, - }, - event: { - type: 'violation', - params: { - message: - 'Vehicle configuration is not permittable for this commodity', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleConfiguration.trailers', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.permittedCommodity.loadDescription', - }, - }, - event: { - type: 'violation', - params: { - message: 'Commodity load description is required', - code: 'field-validation-error', - fieldReference: 'permitData.permittedCommodity.loadDescription', - }, - }, - }, - ], - costRules: [ - { - fact: 'fixedCost', - params: { - cost: 15, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - vehicleCategories: { - trailerCategories: [ - { - id: 'trailer', - name: 'Default trailer category', - }, - { - id: 'accessory', - name: 'Accessory trailer such as jeep or booster, to be used alongside other trailers. Not permittable on its own as a trailer in a combination.', - }, - { - id: 'pseudo', - name: 'Placeholder for a trailer in a combination with no trailer (such as when a brushcutter is permitted with no trailer).', - }, - ], - powerUnitCategories: [ - { - id: 'powerunit', - name: 'Default power unit category', - }, - ], - }, - vehicleTypes: { - powerUnitTypes: [ - { - id: 'BUSCRUM', - name: 'Buses/Crummies', - category: 'powerunit', - }, - { - id: 'BUSTRLR', - name: 'Inter-City Bus (Pulling Pony Trailer)', - category: 'powerunit', - }, - { - id: 'CONCRET', - name: 'Concrete Pumper Trucks', - category: 'powerunit', - }, - { - id: 'CRAFTAT', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain', - category: 'powerunit', - }, - { - id: 'CRAFTMB', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - Mobile', - category: 'powerunit', - }, - { - id: 'DDCKBUS', - name: 'Double Decker Buses', - category: 'powerunit', - }, - { - id: 'FARMVEH', - name: 'Farm Vehicles', - category: 'powerunit', - }, - { - id: 'GRADERS', - name: 'Fixed Equipment - Trucks/Graders etc.', - category: 'powerunit', - }, - { - id: 'LCVRMDB', - name: 'Long Combination Vehicles (LCV) - Rocky Mountain Doubles', - category: 'powerunit', - }, - { - id: 'LCVTPDB', - name: 'Long Combination Vehicles (LCV) - Turnpike Doubles', - category: 'powerunit', - }, - { - id: 'LOGGING', - name: 'Logging Trucks', - category: 'powerunit', - }, - { - id: 'LOGOFFH', - name: 'Logging Trucks - Off-Highway', - category: 'powerunit', - }, - { - id: 'LWBTRCT', - name: 'Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m', - category: 'powerunit', - }, - { - id: 'MUNFITR', - name: 'Municipal Fire Trucks', - category: 'powerunit', - }, - { - id: 'OGBEDTK', - name: 'Oil and Gas - Bed Trucks', - category: 'powerunit', - }, - { - id: 'OGOILSW', - name: 'Oil and Gas - Oilfield Sows', - category: 'powerunit', - }, - { - id: 'OGSERVC', - name: 'Oil and Gas - Service Rigs', - category: 'powerunit', - }, - { - id: 'OGSRRAH', - name: 'Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)', - category: 'powerunit', - }, - { - id: 'PICKRTT', - name: 'Picker Truck Tractors', - category: 'powerunit', - }, - { - id: 'PLOWBLD', - name: 'Trucks Equipped with Front or Underbody Plow Blades', - category: 'powerunit', - }, - { - id: 'PUTAXIS', - name: 'Taxis', - category: 'powerunit', - }, - { - id: 'REGTRCK', - name: 'Trucks', - category: 'powerunit', - }, - { - id: 'SCRAPER', - name: 'Scrapers', - category: 'powerunit', - }, - { - id: 'SPAUTHV', - name: 'Specially Authorized Vehicles', - category: 'powerunit', - }, - { - id: 'STINGER', - name: 'Truck Tractors - Stinger Steered', - category: 'powerunit', - }, - { - id: 'TOWVEHC', - name: 'Tow Vehicles', - category: 'powerunit', - }, - { - id: 'TRKTRAC', - name: 'Truck Tractors', - category: 'powerunit', - }, - ], - trailerTypes: [ - { - id: 'BOOSTER', - name: 'Boosters', - category: 'accessory', - }, - { - id: 'DBTRBTR', - name: 'Tandem/Tridem Drive B-Train (Super B-Train)', - category: 'trailer', - }, - { - id: 'DOLLIES', - name: 'Dollies', - category: 'trailer', - }, - { - id: 'EXPANDO', - name: 'Expando Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEBGHSE', - name: 'Fixed Equipment - Portable Asphalt Baghouses', - category: 'trailer', - }, - { - id: 'FECVYER', - name: 'Fixed Equipment - Conveyors (Semi-Trailers)', - category: 'trailer', - }, - { - id: 'FECVYPT', - name: 'Fixed Equipment - Conveyors (Pony Trailers)', - category: 'trailer', - }, - { - id: 'FEDRMMX', - name: 'Fixed Equipment - Counter Flow Asphalt Drum Mixers', - category: 'trailer', - }, - { - id: 'FEPNYTR', - name: 'Fixed Equipment - Pony Trailers', - category: 'trailer', - }, - { - id: 'FESEMTR', - name: 'Fixed Equipment - Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEWHELR', - name: 'Fixed Equipment - Wheeler Semi-Trailers', - category: 'wheeler', - }, - { - id: 'FLOATTR', - name: 'Float Trailers', - category: 'wheeler', - }, - { - id: 'FULLLTL', - name: 'Full Trailers', - category: 'trailer', - }, - { - id: 'HIBOEXP', - name: 'Semi-Trailers - Hiboys/Expandos', - category: 'trailer', - }, - { - id: 'HIBOFLT', - name: 'Semi-Trailers - Hiboys/Flat Decks', - category: 'trailer', - }, - { - id: 'JEEPSRG', - name: 'Jeeps', - category: 'accessory', - }, - { - id: 'LOGDGLG', - name: 'Legacy Logging Trailer Combinations - Tandem Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGLGCY', - name: 'Legacy Logging Trailer Combinations', - category: 'trailer', - }, - { - id: 'LOGFULL', - name: 'Logging Trailer - Full Trailers, Tri Axle, Quad Axle', - category: 'trailer', - }, - { - id: 'LOGNTAC', - name: 'Legacy Logging Trailer Combinations - Non-TAC B-Trains', - category: 'trailer', - }, - { - id: 'LOGOWBK', - name: 'Logging Trailer - Overwidth Bunks', - category: 'trailer', - }, - { - id: 'LOGSMEM', - name: 'Logging Semi-Trailer - Empty, 3.2 m Bunks', - category: 'trailer', - }, - { - id: 'LOGTNDM', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tandem Axle Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGTRIX', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tri Axle Trailers', - category: 'trailer', - }, - { - id: 'MHMBSHG', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'MHMBSHL', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'ODTRLEX', - name: 'Overdimensional Trailers and Semi-Trailers (For Export)', - category: 'trailer', - }, - { - id: 'OGOSFDT', - name: 'Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers', - category: 'trailer', - }, - { - id: 'PLATFRM', - name: 'Platform Trailers', - category: 'trailer', - }, - { - id: 'PMHWAAX', - name: 'Park Model Homes with Attached Axles', - category: 'trailer', - }, - { - id: 'POLETRL', - name: 'Pole Trailers', - category: 'trailer', - }, - { - id: 'PONYTRL', - name: 'Pony Trailers', - category: 'trailer', - }, - { - id: 'REDIMIX', - name: 'Ready Mix Concrete Pump Semi-Trailers', - category: 'trailer', - }, - { - id: 'SEMITRL', - name: 'Semi-Trailers', - category: 'trailer', - }, - { - id: 'STACTRN', - name: 'Semi-Trailers - A-Trains and C-Trains', - category: 'trailer', - }, - { - id: 'STBTRAN', - name: 'Semi-Trailers - B-Trains', - category: 'trailer', - }, - { - id: 'STCHIPS', - name: 'Semi-Trailers - Walled B-Trains (Chip Trucks)', - category: 'trailer', - }, - { - id: 'STCRANE', - name: 'Semi-Trailers with Crane', - category: 'trailer', - }, - { - id: 'STINGAT', - name: 'Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STLOGNG', - name: 'Semi-Trailers - Logging', - category: 'trailer', - }, - { - id: 'STNTSHC', - name: 'Semi-Trailers - Non-Tac Short Chassis', - category: 'trailer', - }, - { - id: 'STREEFR', - name: 'Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units', - category: 'trailer', - }, - { - id: 'STROPRT', - name: 'Steering Trailers - Manned', - category: 'trailer', - }, - { - id: 'STRSELF', - name: 'Steering Trailers - Self/Remote', - category: 'trailer', - }, - { - id: 'STSDBDK', - name: 'Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.', - category: 'trailer', - }, - { - id: 'STSTEER', - name: 'Semi-Trailers - Steering Trailers', - category: 'trailer', - }, - { - id: 'STSTNGR', - name: 'Semi-Trailers - Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STWDTAN', - name: 'Semi-Trailers - Spread Tandems', - category: 'trailer', - }, - { - id: 'STWHELR', - name: 'Semi-Trailers - Wheelers', - category: 'trailer', - }, - { - id: 'STWIDWH', - name: 'Semi-Trailers - Wide Wheelers', - category: 'trailer', - }, - { - id: 'NONEXXX', - name: 'None', - category: 'pseudo', - }, - ], - }, - commodities: [ - { - "id": "NONEXXX", - "name": "None", - "size": { - "powerUnits": [ - { - "type": "CONCRET", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 15.5 - } - ] - } - ] - }, - { - "type": "CRAFTAT", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 25 - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 14, - "regions": [ - { - "region": "PCE", - "l": 15 - } - ] - } - ] - } - ] - }, - { - "type": "CRAFTMB", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 25 - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 14, - "regions": [ - { - "region": "PCE", - "l": 15 - } - ] - } - ] - } - ] - }, - { - "type": "DDCKBUS", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.42, - "l": 12.5, - "regions": [ - { - "region": "LMN", - "h": 4.3 - }, - { - "region": "KTN", - "h": 4.3 - }, - { - "region": "PCE", - "h": 4.3 - } - ] - } - ] - } - ] - }, - { - "type": "GRADERS", - "trailers": [ - { - "type": "FEPNYTR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.2, - "h": 4.3, - "l": 31 - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.4, - "l": 12.5, - "regions": [ - { - "region": "LMN", - "h": 4.3 - }, - { - "region": "KTN", - "h": 4.3 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "BUSTRLR", - "trailers": [ - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 20 - } - ] - } - ] - }, - { - "type": "LOGOFFH", - "trailers": [ - { - "type": "STLOGNG", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 4.4, - "h": 4.15, - "l": 23 - } - ] - } - ] - }, - { - "type": "LCVRMDB", - "trailers": [ - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 32, - "regions": [ - { - "region": "PCE", - "l": 31 - } - ] - } - ] - } - ] - }, - { - "type": "LCVTPDB", - "trailers": [ - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 41 - } - ] - } - ] - }, - { - "type": "LWBTRCT", - "trailers": [ - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 23 - } - ] - } - ] - }, - { - "type": "PICKRTT", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 16 - } - ] - }, - { - "type": "STCRANE", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 25 - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 40, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 36, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "SCRAPER", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 12.5 - } - ] - } - ] - }, - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "FECVYER", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 4, - "rp": 9.5, - "w": 3.8, - "h": 4.72, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEDRMMX", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEBGHSE", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 4.26, - "h": 4.72, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FESEMTR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEWHELR", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "ODTRLEX", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.65, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "REDIMIX", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.3, - "l": 31, - "regions": [ - { - "region": "LMN", - "l": 23 - }, - { - "region": "KTN", - "l": 23 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STREEFR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.3, - "l": 23 - } - ] - }, - { - "type": "STNTSHC", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 5, - "rp": 2.25, - "w": 2.6, - "h": 4.15, - "l": 20 - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "l": 32 - } - ] - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 40 - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 36 - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FECVYPT", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 4, - "rp": 9.5, - "w": 3.2, - "h": 4.3, - "l": 31 - } - ] - }, - { - "type": "FEPNYTR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.2, - "h": 4.3, - "l": 31 - } - ] - }, - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "MHMBSHL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 5, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "MHMBSHG", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 6, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 16, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - }, - { - "type": "ODTRLEX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.65, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "PMHWAAX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.9, - "w": 4.4, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "PLOWBLD", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.2, - "h": 4.15, - "l": 12.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "DOGLOGG", - "name": "Doglogger/Sjostrum Trailers (decked)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.6, - "h": 4.15, - "l": 13.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "GRTBBUK", - "name": "Grader, Tractor Blades, Buckets", - "size": { - "powerUnits": [ - { - "type": "GRADERS", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 0, - "rp": 0, - "w": 4.4, - "h": 4.15, - "l": 12.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "HAYRACK", - "name": "Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STLOGNG", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.6, - "h": 4.15, - "l": 23 - } - ] - } - ] - } - ] - } - }, - { - "id": "IMCONTN", - "name": "Intermodal Containers", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.4, - "l": 26 - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.4, - "l": 27.5 - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.4, - "l": 23 - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.4, - "l": 12.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "IMCONWS", - "name": "Intermodal Containers without Sides", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 4.4, - "h": 4.72, - "l": 23 - } - ] - } - ] - } - ] - } - }, - { - "id": "LPBOOMS", - "name": "Logs, Poles And Boomsticks (Up To 20.1)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "LOGLGCY", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 5, - "w": 2.6, - "h": 4.15, - "l": 25 - } - ] - }, - { - "type": "POLETRL", - "jeep": true, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 26 - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "HIBOFLT", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 25 - } - ] - }, - { - "type": "STLOGNG", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 25 - } - ] - } - ] - } - ] - } - }, - { - "id": "LPBOOML", - "name": "Logs, Poles And Boomsticks (Over 20.1)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "LOGFULL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 10, - "rp": 10, - "w": 2.6, - "h": 4.15, - "l": 40 - } - ] - }, - { - "type": "POLETRL", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 8, - "rp": 9, - "w": 2.6, - "h": 4.15, - "l": 40 - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 10, - "w": 2.6, - "h": 4.15, - "l": 40 - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 10, - "w": 2.6, - "h": 4.15, - "l": 36 - } - ] - } - ] - } - ] - } - }, - { - "id": "MFHOMES", - "name": "Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 7.5, - "w": 5, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 7.5, - "w": 5, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 5, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "FLOATTR", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 5, - "h": 4.57, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 5, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33, - "l": 36 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "MFHOMEL", - "name": "Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 7.5, - "w": 6, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 7.5, - "w": 6, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 6, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "FLOATTR", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 6, - "h": 4.57, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.9, - "w": 6, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "w": 6.1, - "h": 5.33, - "l": 36 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "PARKMHS", - "name": "Park Model Homes", - "size": { - "powerUnits": [ - { - "type": "REGTRCK", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.9, - "w": 4.4, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FLOATTR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.9, - "w": 4.4, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.9, - "w": 4.4, - "h": 4.88, - "l": 31.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "PIPESTL", - "name": "Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 31 - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5 - } - ] - }, - { - "type": "STSTEER", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 36 - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 40 - } - ] - } - ] - } - ] - } - }, - { - "id": "REDUCBL", - "name": "Reducible Loads", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STLOGNG", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "PLATFRM", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 26, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSTEER", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWHELR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWIDWH", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STCRANE", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 40, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 36, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "PICKRTT", - "trailers": [ - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "STINGER", - "trailers": [ - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1.2, - "w": 2.6, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSTNGR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1.2, - "w": 2.6, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - }, - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 16, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "SCRAPER", - "name": "Scraper on Dollies", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "DOLLIES", - "jeep": true, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.2, - "h": 4.3, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 4.4 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "OILFILD", - "name": "Oil Field Equipment", - "size": { - "powerUnits": [ - { - "type": "OGBEDTK", - "trailers": [ - { - "type": "EXPANDO", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.3, - "l": 27.5 - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 3.3, - "h": 4.3, - "l": 14 - } - ] - }, - { - "type": "OGOSFDT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.3, - "h": 4.3, - "l": 23 - } - ] - } - ] - }, - { - "type": "OGOILSW", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 3.2, - "h": 4.3, - "l": 15 - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 25 - } - ] - } - ] - }, - { - "type": "OGSERVC", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 15 - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 3.8, - "h": 4.3, - "l": 23 - } - ] - } - ] - }, - { - "type": "OGSRRAH", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 15.5 - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 10, - "rp": 6.5, - "w": 2.9, - "h": 4.15, - "l": 23 - } - ] - } - ] - }, - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "OGOSFDT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.3, - "h": 4.3, - "l": 23 - } - ] - } - ] - } - ] - } - }, - { - "id": "JPTRLOG", - "name": "Tandem Jeep/Pole Trailer Loaded on Logging Truck", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.9, - "h": 4.3, - "l": 12.5 - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.9, - "h": 4.3, - "l": 12.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "TOWDISB", - "name": "Tow Trucks And Disabled Vehicles", - "size": { - "powerUnits": [ - { - "type": "TOWVEHC", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.3, - "l": 27.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "TRQDLOG", - "name": "Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.6, - "h": 4.3, - "l": 13.5 - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 5, - "w": 2.6, - "h": 4.3, - "l": 13.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "WOODCHP", - "name": "Wood Chips, Residuals", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.45, - "l": 27.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "EMPTYXX", - "name": "Empty", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "LOGOWBK", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 0, - "rp": 0, - "w": 3.2, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "PLATFRM", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.4, - "l": 31, - "regions": [ - { - "region": "LMN", - "h": 4.15 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.4, - "l": 27.5, - "regions": [ - { - "region": "LMN", - "h": 4.15 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.4, - "l": 31, - "regions": [ - { - "region": "LMN", - "h": 4.15 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWHELR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "LMN", - "h": 4.15 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWIDWH", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "LMN", - "h": 4.15 - }, - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "PICKRTT", - "trailers": [ - { - "type": "OGOSFDT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "PLATFRM", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 25, - "regions": [ - { - "region": "PCE", - "l": 27.5 - } - ] - } - ] - }, - { - "type": "STWHELR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "STWIDWH", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.15, - "l": 27.5 - } - ] - } - ] - } - ] - } - }, - { - "id": "GRBBINS", - "name": "Garbage Bins", - "size": { - "powerUnits": [ - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 23 - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 12.5 - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 23 - } - ] - } - ] - } - ] - } - }, - { - "id": "LAMBEAM", - "name": "Laminated Beams", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "POLETRL", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 40 - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 31 - } - ] - } - ] - } - ] - } - }, - { - "id": "HAYLREC", - "name": "Hay Bales Large Rectangular", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 26, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.05, - "h": 4.4, - "l": 23, - "regions": [ - { - "region": "LMN", - "h": 4.3 - }, - { - "region": "KTN", - "h": 4.3 - }, - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 12.5, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "HAYROND", - "name": "Hay Bales Round", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 26, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 12.5, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "HAYSREC", - "name": "Hay Bales Small Rectangular", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 26, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.05, - "h": 4.3, - "l": 12.5, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.05, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "h": 4.8 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "BRGBEAM", - "name": "Bridge Beams", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "POLETRL", - "jeep": true, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 31 - } - ] - }, - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.2, - "h": 4.3, - "l": 31, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "NONREDU", - "name": "Non-Reducible Loads", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STLOGNG", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.15, - "l": 27.5 - } - ] - }, - { - "type": "PLATFRM", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 26, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSTEER", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWHELR", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWIDWH", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STCRANE", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 40, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 36, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "PICKRTT", - "trailers": [ - { - "type": "OGOSFDT", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.3, - "h": 4.3, - "l": 23 - } - ] - }, - { - "type": "SEMITRL", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOEXP", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.4, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSTEER", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWHELR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STWIDWH", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STCRANE", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STROPRT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 40, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STRSELF", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 36, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "STINGER", - "trailers": [ - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1.2, - "w": 2.6, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSTNGR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1.2, - "w": 2.6, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "DOLLIES", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 16, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 6.5, - "w": 5, - "h": 4.88, - "l": 25, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "AUTOCRR", - "name": "Auto Carrier, Campers And Boats (Stinger Steered Transporters Only)", - "size": { - "powerUnits": [ - { - "type": "STINGER", - "trailers": [ - { - "type": "STSTNGR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1.2, - "w": 2.6, - "h": 4.4, - "l": 25, - "regions": [ - { - "region": "LMN", - "h": 4.3 - }, - { - "region": "KTN", - "h": 4.3 - }, - { - "region": "PCE", - "h": 4.88 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "HAYRNPR", - "name": "Hay Bales (Round) Peace River Only", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "STACTRN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 26, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STBTRAN", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 27.5, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "HIBOFLT", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FULLLTL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 3.5, - "h": 4.3, - "l": 12.5, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.5, - "h": 4.3, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.84, - "h": 4.8 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "BRSHCUT", - "name": "Brushcutters (Peace Only)", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "SEMITRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 4.57, - "h": 5.33 - } - ] - } - ] - }, - { - "type": "STSDBDK", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 2.6, - "h": 4.15, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 4.57, - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "NONEXXX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 12.5, - "regions": [ - { - "region": "PCE", - "w": 4.57, - "h": 5.33 - } - ] - } - ] - }, - { - "type": "PONYTRL", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 1, - "w": 2.6, - "h": 4.15, - "l": 23, - "regions": [ - { - "region": "PCE", - "w": 3.8, - "h": 5.33 - } - ] - } - ] - } - ] - } - ] - } - }, - { - "id": "FIXEDEQ", - "name": "Fixed Equipment", - "size": { - "powerUnits": [ - { - "type": "TRKTRAC", - "trailers": [ - { - "type": "FECVYER", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 4, - "rp": 9.5, - "w": 3.8, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEDRMMX", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEBGHSE", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 4.26, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FESEMTR", - "jeep": true, - "booster": true, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEWHELR", - "jeep": true, - "booster": true, - "selfIssue": false, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - } - ] - }, - { - "type": "REGTRCK", - "trailers": [ - { - "type": "FECVYPT", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 4, - "rp": 9.5, - "w": 3.2, - "h": 4.3 - } - ] - }, - { - "type": "FEDRMMX", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 3.8, - "h": 4.72, - "regions": [ - { - "region": "PCE", - "h": 5.33 - } - ] - } - ] - }, - { - "type": "FEPNYTR", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 1, - "rp": 4, - "w": 3.2, - "h": 4.3 - } - ] - }, - { - "type": "FEBGHSE", - "jeep": false, - "booster": false, - "selfIssue": true, - "sizeDimensions": [ - { - "fp": 3, - "rp": 6.5, - "w": 4.26, - "h": 4.72 - } - ] - } - ] - } - ] - } - } - ], - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, -}; diff --git a/policy-engine/src/_test/policy-config/five-types.sample.ts b/policy-engine/src/_test/policy-config/five-types.sample.ts deleted file mode 100644 index 3d35daa04..000000000 --- a/policy-engine/src/_test/policy-config/five-types.sample.ts +++ /dev/null @@ -1,1652 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const fiveTypes: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [ - { - id: 'LMN', - name: 'Lower Mainland', - }, - { - id: 'KTN', - name: 'Kootenay', - }, - { - id: 'PCE', - name: 'Peace', - }, - ], - commonRules: [ - { - conditions: { - not: { - fact: 'permitData', - path: '$.companyName', - operator: 'stringMinimumLength', - value: 1, - }, - }, - event: { - type: 'violation', - params: { - message: 'Company is required', - }, - }, - }, - { - conditions: { - any: [ - { - fact: 'permitData', - path: '$.startDate', - operator: 'dateLessThan', - value: { - fact: 'validationDate', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Permit start date cannot be in the past', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vin', - operator: 'regex', - value: '^[a-zA-Z0-9]{6}$', - }, - }, - event: { - type: 'violation', - params: { - message: - 'Vehicle Identification Number (vin) must be 6 alphanumeric characters', - }, - }, - }, - ], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - }, - }, - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - }, - }, - }, - ], - }, - { - id: 'TROW', - name: 'Term Overweight', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - ], - }, - { - id: 'STOW', - name: 'Single Trip Overweight', - routingRequired: true, - weightDimensionRequired: true, - sizeDimensionRequired: false, - commodityRequired: true, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - 'pickertrucktractor', - 'poletrailer', - 'hiboyexpando', - 'deck', - ], - allowedCommodities: [ - 'bridgebeams', - 'empty', - 'fixed', - 'intermodalcontainers', - 'laminatedbeams', - ], - }, - { - id: 'STOS', - name: 'Single Trip Oversize', - routingRequired: true, - weightDimensionRequired: false, - sizeDimensionRequired: true, - commodityRequired: true, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - 'poletrailer', - 'hiboyexpando', - ], - allowedCommodities: ['NONEXXX', 'DOGLOGG', 'GRTBBUK'], - }, - { - id: 'STWS', - name: 'Single Trip Oversize Overweight', - routingRequired: true, - weightDimensionRequired: true, - commodityRequired: true, - sizeDimensionRequired: true, - allowedVehicles: [ - 'trucktractor', - 'truck', - 'semi', - 'platform', - 'ogoilfieldsemi', - 'poletrailer', - 'hiboyexpando', - ], - allowedCommodities: ['bridgebeams', 'empty', 'fixed', 'laminatedbeams'], - }, - ], - globalWeightDefaults: { - powerUnits: [ - { - axles: 11, - saLegal: 6000, - saPermittable: 9100, - daLegal: 9100, - daPermittable: 11000, - }, - { - axles: 12, - saLegal: 6000, - saPermittable: 9100, - daLegal: 17000, - daPermittable: 23000, - }, - { - axles: 13, - saLegal: 7300, - saPermittable: 9100, - daLegal: 24000, - daPermittable: 28000, - }, - { - axles: 22, - saLegal: 17000, - saPermittable: 17000, - daLegal: 17000, - daPermittable: 23000, - }, - { - axles: 23, - saLegal: 13600, - saPermittable: 15200, - daLegal: 24000, - daPermittable: 28000, - }, - { - axles: 33, - saLegal: 24000, - saPermittable: 24000, - daLegal: 24000, - daPermittable: 28000, - }, - ], - trailers: [ - { - axles: 1, - legal: 9100, - permittable: 11000, - }, - { - axles: 2, - legal: 17000, - permittable: 23000, - }, - { - axles: 3, - legal: 24000, - permittable: 28000, - }, - ], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [ - { - id: 'semitrailer', - name: 'Semi-Trailer', - defaultWeightDimensions: [ - { - axles: 1, - }, - { - axles: 2, - }, - { - axles: 3, - legal: 24000, - permittable: 29000, - }, - { - axles: 3, - modifiers: [ - { - position: 'after', - type: 'booster', - axles: 2, - }, - ], - legal: 24000, - permittable: 28000, - }, - { - axles: 3, - modifiers: [ - { - position: 'after', - type: 'booster', - axles: 3, - }, - ], - legal: 24000, - permittable: 28000, - }, - ], - }, - { - id: 'wheeler', - name: 'Wheeler', - defaultWeightDimensions: [ - { - axles: 1, - }, - { - axles: 2, - }, - { - axles: 3, - legal: 24000, - permittable: 29000, - }, - { - axles: 3, - modifiers: [ - { - position: 'after', - type: 'booster', - axles: 2, - }, - ], - legal: 24000, - permittable: 28000, - }, - { - axles: 3, - modifiers: [ - { - position: 'after', - type: 'booster', - axles: 3, - }, - ], - legal: 24000, - permittable: 28000, - }, - ], - }, - ], - powerUnitCategories: [ - { - id: 'powerunit', - name: 'Power Unit', - }, - ], - }, - vehicleTypes: { - powerUnitTypes: [ - { - id: 'BUSCRUM', - name: 'Buses/Crummies', - category: 'powerunit', - }, - { - id: 'BUSTRLR', - name: 'Inter-City Bus (Pulling Pony Trailer)', - category: 'powerunit', - }, - { - id: 'CONCRET', - name: 'Concrete Pumper Trucks', - category: 'powerunit', - }, - { - id: 'CRAFTAT', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain', - category: 'powerunit', - }, - { - id: 'CRAFTMB', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - Mobile', - category: 'powerunit', - }, - { - id: 'DDCKBUS', - name: 'Double Decker Buses', - category: 'powerunit', - }, - { - id: 'FARMVEH', - name: 'Farm Vehicles', - category: 'powerunit', - }, - { - id: 'GRADERS', - name: 'Fixed Equipment - Trucks/Graders etc.', - category: 'powerunit', - }, - { - id: 'LCVRMDB', - name: 'Long Combination Vehicles (LCV) - Rocky Mountain Doubles', - category: 'powerunit', - }, - { - id: 'LCVTPDB', - name: 'Long Combination Vehicles (LCV) - Turnpike Doubles', - category: 'powerunit', - }, - { - id: 'LOGGING', - name: 'Logging Trucks', - category: 'powerunit', - }, - { - id: 'LOGOFFH', - name: 'Logging Trucks - Off-Highway', - category: 'powerunit', - }, - { - id: 'LWBTRCT', - name: 'Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m', - category: 'powerunit', - }, - { - id: 'MUNFITR', - name: 'Municipal Fire Trucks', - category: 'powerunit', - }, - { - id: 'OGBEDTK', - name: 'Oil and Gas - Bed Trucks', - category: 'powerunit', - }, - { - id: 'OGOILSW', - name: 'Oil and Gas - Oilfield Sows', - category: 'powerunit', - }, - { - id: 'OGSERVC', - name: 'Oil and Gas - Service Rigs', - category: 'powerunit', - }, - { - id: 'OGSRRAH', - name: 'Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)', - category: 'powerunit', - }, - { - id: 'PICKRTT', - name: 'Picker Truck Tractors', - category: 'powerunit', - }, - { - id: 'PLOWBLD', - name: 'Trucks Equipped with Front or Underbody Plow Blades', - category: 'powerunit', - }, - { - id: 'PUTAXIS', - name: 'Taxis', - category: 'powerunit', - }, - { - id: 'REGTRCK', - name: 'Trucks', - category: 'powerunit', - }, - { - id: 'SCRAPER', - name: 'Scrapers', - category: 'powerunit', - }, - { - id: 'SPAUTHV', - name: 'Specially Authorized Vehicles', - category: 'powerunit', - }, - { - id: 'STINGER', - name: 'Truck Tractors - Stinger Steered', - category: 'powerunit', - }, - { - id: 'TOWVEHC', - name: 'Tow Vehicles', - category: 'powerunit', - }, - { - id: 'TRKTRAC', - name: 'Truck Tractors', - category: 'powerunit', - }, - ], - trailerTypes: [ - { - id: 'BOOSTER', - name: 'Boosters', - category: 'accessory', - }, - { - id: 'DBTRBTR', - name: 'Tandem/Tridem Drive B-Train (Super B-Train)', - category: 'trailer', - }, - { - id: 'DOLLIES', - name: 'Dollies', - category: 'trailer', - }, - { - id: 'EXPANDO', - name: 'Expando Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEBGHSE', - name: 'Fixed Equipment - Portable Asphalt Baghouses', - category: 'trailer', - }, - { - id: 'FECVYER', - name: 'Fixed Equipment - Conveyors (Semi-Trailers)', - category: 'trailer', - }, - { - id: 'FECVYPT', - name: 'Fixed Equipment - Conveyors (Pony Trailers)', - category: 'trailer', - }, - { - id: 'FEDRMMX', - name: 'Fixed Equipment - Counter Flow Asphalt Drum Mixers', - category: 'trailer', - }, - { - id: 'FEPNYTR', - name: 'Fixed Equipment - Pony Trailers', - category: 'trailer', - }, - { - id: 'FESEMTR', - name: 'Fixed Equipment - Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEWHELR', - name: 'Fixed Equipment - Wheeler Semi-Trailers', - category: 'wheeler', - }, - { - id: 'FLOATTR', - name: 'Float Trailers', - category: 'wheeler', - }, - { - id: 'FULLLTL', - name: 'Full Trailers', - category: 'trailer', - }, - { - id: 'HIBOEXP', - name: 'Semi-Trailers - Hiboys/Expandos', - category: 'trailer', - }, - { - id: 'HIBOFLT', - name: 'Semi-Trailers - Hiboys/Flat Decks', - category: 'trailer', - }, - { - id: 'JEEPSRG', - name: 'Jeeps', - category: 'accessory', - }, - { - id: 'LOGDGLG', - name: 'Legacy Logging Trailer Combinations - Tandem Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGLGCY', - name: 'Legacy Logging Trailer Combinations', - category: 'trailer', - }, - { - id: 'LOGFULL', - name: 'Logging Trailer - Full Trailers, Tri Axle, Quad Axle', - category: 'trailer', - }, - { - id: 'LOGNTAC', - name: 'Legacy Logging Trailer Combinations - Non-TAC B-Trains', - category: 'trailer', - }, - { - id: 'LOGOWBK', - name: 'Logging Trailer - Overwidth Bunks', - category: 'trailer', - }, - { - id: 'LOGSMEM', - name: 'Logging Semi-Trailer - Empty, 3.2 m Bunks', - category: 'trailer', - }, - { - id: 'LOGTNDM', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tandem Axle Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGTRIX', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tri Axle Trailers', - category: 'trailer', - }, - { - id: 'MHMBSHG', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'MHMBSHL', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'ODTRLEX', - name: 'Overdimensional Trailers and Semi-Trailers (For Export)', - category: 'trailer', - }, - { - id: 'OGOSFDT', - name: 'Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers', - category: 'trailer', - }, - { - id: 'PLATFRM', - name: 'Platform Trailers', - category: 'trailer', - }, - { - id: 'PMHWAAX', - name: 'Park Model Homes with Attached Axles', - category: 'trailer', - }, - { - id: 'POLETRL', - name: 'Pole Trailers', - category: 'trailer', - }, - { - id: 'PONYTRL', - name: 'Pony Trailers', - category: 'trailer', - }, - { - id: 'REDIMIX', - name: 'Ready Mix Concrete Pump Semi-Trailers', - category: 'trailer', - }, - { - id: 'SEMITRL', - name: 'Semi-Trailers', - category: 'trailer', - }, - { - id: 'STACTRN', - name: 'Semi-Trailers - A-Trains and C-Trains', - category: 'trailer', - }, - { - id: 'STBTRAN', - name: 'Semi-Trailers - B-Trains', - category: 'trailer', - }, - { - id: 'STCHIPS', - name: 'Semi-Trailers - Walled B-Trains (Chip Trucks)', - category: 'trailer', - }, - { - id: 'STCRANE', - name: 'Semi-Trailers with Crane', - category: 'trailer', - }, - { - id: 'STINGAT', - name: 'Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STLOGNG', - name: 'Semi-Trailers - Logging', - category: 'trailer', - }, - { - id: 'STNTSHC', - name: 'Semi-Trailers - Non-Tac Short Chassis', - category: 'trailer', - }, - { - id: 'STREEFR', - name: 'Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units', - category: 'trailer', - }, - { - id: 'STROPRT', - name: 'Steering Trailers - Manned', - category: 'trailer', - }, - { - id: 'STRSELF', - name: 'Steering Trailers - Self/Remote', - category: 'trailer', - }, - { - id: 'STSDBDK', - name: 'Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.', - category: 'trailer', - }, - { - id: 'STSTEER', - name: 'Semi-Trailers - Steering Trailers', - category: 'trailer', - }, - { - id: 'STSTNGR', - name: 'Semi-Trailers - Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STWDTAN', - name: 'Semi-Trailers - Spread Tandems', - category: 'trailer', - }, - { - id: 'STWHELR', - name: 'Semi-Trailers - Wheelers', - category: 'trailer', - }, - { - id: 'STWIDWH', - name: 'Semi-Trailers - Wide Wheelers', - category: 'trailer', - }, - { - id: 'NONEXXX', - name: 'None', - category: 'pseudo', - }, - ], - }, - commodities: [ - { - id: 'NONEXXX', - name: 'None', - size: { - powerUnits: [ - { - type: 'CONCRET', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 15.5, - }, - ], - }, - ], - }, - { - type: 'CRAFTAT', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 25, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 14, - regions: [ - { - region: 'PCE', - l: 15, - }, - ], - }, - ], - }, - ], - }, - { - type: 'CRAFTMB', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 25, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 14, - regions: [ - { - region: 'PCE', - l: 15, - }, - ], - }, - ], - }, - ], - }, - { - type: 'DDCKBUS', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.42, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 4.3, - }, - ], - }, - ], - }, - ], - }, - { - type: 'GRADERS', - trailers: [ - { - type: 'FEPNYTR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.5, - h: 4.4, - l: 12.5, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'BUSTRLR', - trailers: [ - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [{}], - }, - ], - }, - { - type: 'LOGOFFH', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.4, - }, - ], - }, - ], - }, - { - type: 'LCVRMDB', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - l: 32, - regions: [ - { - region: 'PCE', - l: 31, - }, - ], - }, - ], - }, - ], - }, - { - type: 'LCVTPDB', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - l: 41, - }, - ], - }, - ], - }, - { - type: 'LWBTRCT', - trailers: [ - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 2.6, - h: 4.15, - l: 23, - }, - ], - }, - ], - }, - { - type: 'PICKRTT', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 2.6, - h: 4.15, - l: 16, - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 25, - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 40, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 36, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'SCRAPER', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - l: 12.5, - }, - ], - }, - ], - }, - { - type: 'TRKTRAC', - trailers: [ - { - type: 'FECVYER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEDRMMX', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEBGHSE', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.26, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FESEMTR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEWHELR', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'ODTRLEX', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.65, - }, - ], - }, - { - type: 'REDIMIX', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - h: 4.3, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STREEFR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.3, - }, - ], - }, - { - type: 'STNTSHC', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [{}], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - l: 32, - }, - ], - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - h: 4.15, - l: 40, - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - l: 36, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FECVYPT', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FEPNYTR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 6.5, - w: 3.8, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'MHMBSHL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'MHMBSHG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 16, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'ODTRLEX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.65, - }, - ], - }, - { - type: 'PMHWAAX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.9, - w: 4.4, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 6.5, - w: 3.2, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'PLOWBLD', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'DOGLOGG', - name: 'Doglogger/Sjostrum Trailers (decked)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - l: 13.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'GRTBBUK', - name: 'Grader, Tractor Blades, Buckets', - size: { - powerUnits: [ - { - type: 'GRADERS', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 4.4, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYRACK', - name: 'Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - h: 4.15, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'IMCONTN', - name: 'Intermodal Containers', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - l: 26, - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - l: 27.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - }, - ], - }, - ], - }, - ], - }, - }, - ], -}; diff --git a/policy-engine/src/_test/policy-config/master.sample.ts b/policy-engine/src/_test/policy-config/master.sample.ts deleted file mode 100644 index 79de8f4a3..000000000 --- a/policy-engine/src/_test/policy-config/master.sample.ts +++ /dev/null @@ -1,826 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const masterPolicyConfig: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [ - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.companyName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Company is required', - code: 'field-validation-error', - fieldReference: 'permitData.companyName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.firstName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact first name is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.firstName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.lastName', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact last name is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.lastName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.phone1', - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact phone number is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.phone1', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.contactDetails.email', - }, - }, - event: { - type: 'violation', - params: { - message: 'Company contact email is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.email', - }, - }, - }, - { - conditions: { - any: [ - { - fact: 'permitData', - operator: 'dateLessThan', - value: { - fact: 'validationDate', - }, - path: '$.startDate', - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Permit start date cannot be in the past', - code: 'field-validation-error', - fieldReference: 'permitData.startDate', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'regex', - value: '^[a-zA-Z0-9]{6}$', - path: '$.vehicleDetails.vin', - }, - }, - event: { - type: 'violation', - params: { - message: - 'Vehicle Identification Number (vin) must be 6 alphanumeric characters', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vin', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.plate', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle plate is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.plate', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.make', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle make is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.make', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'greaterThan', - value: 1900, - path: '$.vehicleDetails.year', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle year is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.year', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'stringMinimumLength', - value: 1, - path: '$.vehicleDetails.countryCode', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle country of registration is required', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.countryCode', - }, - }, - }, - ], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'BOOSTER', - 'DOLLIES', - 'EXPANDO', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'FLOATTR', - 'FULLLTL', - 'HIBOEXP', - 'HIBOFLT', - 'JEEPSRG', - 'LOGDGLG', - 'LOGFULL', - 'LOGNTAC', - 'LOGOWBK', - 'LOGSMEM', - 'LOGTNDM', - 'LOGTRIX', - 'ODTRLEX', - 'OGOSFDT', - 'PLATFRM', - 'POLETRL', - 'PONYTRL', - 'REDIMIX', - 'SEMITRL', - 'STBTRAN', - 'STCHIPS', - 'STCRANE', - 'STINGAT', - 'STLOGNG', - 'STNTSHC', - 'STREEFR', - 'STSDBDK', - 'STSTNGR', - 'STWHELR', - 'STWIDWH', - 'BUSTRLR', - 'CONCRET', - 'DDCKBUS', - 'GRADERS', - 'LOGGING', - 'LOGOFFH', - 'LWBTRCT', - 'OGBEDTK', - 'OGOILSW', - 'PICKRTT', - 'PLOWBLD', - 'REGTRCK', - 'STINGER', - 'TOWVEHC', - 'TRKTRAC', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - path: '$.permitDuration', - }, - }, - { - not: { - fact: 'permitData', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - path: '$.permitDuration', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - path: '$.vehicleDetails.vehicleSubType', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 30, - }, - }, - ], - }, - { - id: 'TROW', - name: 'Term Overweight', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [ - 'DOLLIES', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'REDIMIX', - 'CONCRET', - 'CRAFTAT', - 'CRAFTMB', - 'GRADERS', - 'MUNFITR', - 'OGOILSW', - 'OGSERVC', - 'OGSRRAH', - 'PICKRTT', - 'TOWVEHC', - ], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - path: '$.permitDuration', - }, - }, - { - not: { - fact: 'permitData', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - path: '$.permitDuration', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - path: '$.vehicleDetails.vehicleSubType', - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 100, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [ - { - id: 'BUSCRUM', - name: 'Buses/Crummies', - category: 'powerunit', - }, - { - id: 'BUSTRLR', - name: 'Intercity Buses (Pulling Pony Trailers)', - category: 'powerunit', - }, - { - id: 'CONCRET', - name: 'Concrete Pumper Trucks', - category: 'powerunit', - }, - { - id: 'CRAFTAT', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain', - category: 'powerunit', - }, - { - id: 'CRAFTMB', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - Mobile', - category: 'powerunit', - }, - { - id: 'DDCKBUS', - name: 'Double Decker Buses', - category: 'powerunit', - }, - { - id: 'FARMVEH', - name: 'Farm Vehicles', - category: 'powerunit', - }, - { - id: 'GRADERS', - name: 'Fixed Equipment - Trucks/Graders etc.', - category: 'powerunit', - }, - { - id: 'LCVRMDB', - name: 'Long Combination Vehicles (LCV) - Rocky Mountain Doubles', - category: 'powerunit', - }, - { - id: 'LCVTPDB', - name: 'Long Combination Vehicles (LCV) - Turnpike Doubles', - category: 'powerunit', - }, - { - id: 'LOGGING', - name: 'Logging Trucks', - category: 'powerunit', - }, - { - id: 'LOGOFFH', - name: 'Logging Trucks - Off-Highway', - category: 'powerunit', - }, - { - id: 'LWBTRCT', - name: 'Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m', - category: 'powerunit', - }, - { - id: 'MUNFITR', - name: 'Municipal Fire Trucks', - category: 'powerunit', - }, - { - id: 'OGBEDTK', - name: 'Oil and Gas - Bed Trucks', - category: 'powerunit', - }, - { - id: 'OGOILSW', - name: 'Oil and Gas - Oilfield Sows', - category: 'powerunit', - }, - { - id: 'OGSERVC', - name: 'Oil and Gas - Service Rigs', - category: 'powerunit', - }, - { - id: 'OGSRRAH', - name: 'Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)', - category: 'powerunit', - }, - { - id: 'PICKRTT', - name: 'Picker Truck Tractors', - category: 'powerunit', - }, - { - id: 'PLOWBLD', - name: 'Trucks Equipped with Front or Underbody Plow Blades', - category: 'powerunit', - }, - { - id: 'PUTAXIS', - name: 'Taxis', - category: 'powerunit', - }, - { - id: 'REGTRCK', - name: 'Trucks', - category: 'powerunit', - }, - { - id: 'SCRAPER', - name: 'Scrapers', - category: 'powerunit', - }, - { - id: 'SPAUTHV', - name: 'Specially Authorized Vehicles', - category: 'powerunit', - }, - { - id: 'STINGER', - name: 'Truck Tractors - Stinger Steered', - category: 'powerunit', - }, - { - id: 'TOWVEHC', - name: 'Tow Vehicles', - category: 'powerunit', - }, - { - id: 'TRKTRAC', - name: 'Truck Tractors', - category: 'powerunit', - }, - ], - trailerTypes: [ - { - id: 'BOOSTER', - name: 'Boosters', - category: 'trailer', - }, - { - id: 'DBTRBTR', - name: 'Tandem/Tridem Drive B-Train (Super B-Train)', - category: 'trailer', - }, - { - id: 'DOLLIES', - name: 'Dollies', - category: 'trailer', - }, - { - id: 'EXPANDO', - name: 'Expando Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEBGHSE', - name: 'Fixed Equipment - Portable Asphalt Baghouses', - category: 'trailer', - }, - { - id: 'FECVYER', - name: 'Fixed Equipment - Conveyors', - category: 'trailer', - }, - { - id: 'FEDRMMX', - name: 'Fixed Equipment - Counter Flow Asphalt Drum Mixers', - category: 'trailer', - }, - { - id: 'FEPNYTR', - name: 'Fixed Equipment - Pony Trailers', - category: 'trailer', - }, - { - id: 'FESEMTR', - name: 'Fixed Equipment - Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEWHELR', - name: 'Fixed Equipment - Wheeler Semi-Trailers', - category: 'wheeler', - }, - { - id: 'FLOATTR', - name: 'Float Trailers', - category: 'wheeler', - }, - { - id: 'FULLLTL', - name: 'Full Trailers', - category: 'trailer', - }, - { - id: 'HIBOEXP', - name: 'Semi-Trailers - Hiboys/Expandos', - category: 'trailer', - }, - { - id: 'HIBOFLT', - name: 'Semi-Trailers - Hiboys/Flat Decks', - category: 'trailer', - }, - { - id: 'JEEPSRG', - name: 'Jeeps', - category: 'trailer', - }, - { - id: 'LOGDGLG', - name: 'Legacy Logging Trailer Combinations - Tandem Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGFULL', - name: 'Logging Trailers - Full Trailers, Tri Axle, Quad Axle', - category: 'trailer', - }, - { - id: 'LOGNTAC', - name: 'Legacy Logging Trailer Combinations - Non-TAC B-Trains', - category: 'trailer', - }, - { - id: 'LOGOWBK', - name: 'Logging Trailers - Overwidth Bunks', - category: 'trailer', - }, - { - id: 'LOGSMEM', - name: 'Logging Semi-Trailer - Empty, 3.2 m Bunks', - category: 'trailer', - }, - { - id: 'LOGTNDM', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tandem Axle Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGTRIX', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tri Axle Trailers', - category: 'trailer', - }, - { - id: 'MHMBSHG', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'MHMBSHL', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'ODTRLEX', - name: 'Overdimensional Trailers and Semi-Trailers (For Export)', - category: 'trailer', - }, - { - id: 'OGOSFDT', - name: 'Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers', - category: 'trailer', - }, - { - id: 'PLATFRM', - name: 'Platform Trailers', - category: 'trailer', - }, - { - id: 'PMHWAAX', - name: 'Park Model Homes with Attached Axles', - category: 'trailer', - }, - { - id: 'POLETRL', - name: 'Pole Trailers', - category: 'trailer', - }, - { - id: 'PONYTRL', - name: 'Pony Trailers', - category: 'trailer', - }, - { - id: 'REDIMIX', - name: 'Ready Mix Concrete Pump Semi-Trailers', - category: 'trailer', - }, - { - id: 'SEMITRL', - name: 'Semi-Trailers', - category: 'trailer', - }, - { - id: 'STACTRN', - name: 'Semi-Trailers - A-Trains and C-Trains', - category: 'trailer', - }, - { - id: 'STBTRAN', - name: 'Semi-Trailers - B-Trains', - category: 'trailer', - }, - { - id: 'STCHIPS', - name: 'Semi-Trailers - Walled B-Trains (Chip Trucks)', - category: 'trailer', - }, - { - id: 'STCRANE', - name: 'Semi-Trailers with Crane', - category: 'trailer', - }, - { - id: 'STINGAT', - name: 'Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STLOGNG', - name: 'Semi-Trailers - Logging', - category: 'trailer', - }, - { - id: 'STNTSHC', - name: 'Semi-Trailers - Non-Tac Short Chassis', - category: 'trailer', - }, - { - id: 'STREEFR', - name: 'Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units', - category: 'trailer', - }, - { - id: 'STROPRT', - name: 'Steering Trailers - Manned', - category: 'trailer', - }, - { - id: 'STRSELF', - name: 'Steering Trailers - Self/Remote', - category: 'trailer', - }, - { - id: 'STSDBDK', - name: 'Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.', - category: 'trailer', - }, - { - id: 'STSTEER', - name: 'Semi-Trailers - Steering Trailers', - category: 'trailer', - }, - { - id: 'STSTNGR', - name: 'Semi-Trailers - Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STWDTAN', - name: 'Semi-Trailers - Spread Tandems', - category: 'trailer', - }, - { - id: 'STWHELR', - name: 'Semi-Trailers - Wheelers', - category: 'trailer', - }, - { - id: 'STWIDWH', - name: 'Semi-Trailers - Wide Wheelers', - category: 'trailer', - }, - ], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/policy-config/mimimal.sample.ts b/policy-engine/src/_test/policy-config/mimimal.sample.ts deleted file mode 100644 index e59c577ea..000000000 --- a/policy-engine/src/_test/policy-config/mimimal.sample.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const minimalPolicyDef: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [], - rules: [], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/policy-config/stos-vehicle-config.sample.ts b/policy-engine/src/_test/policy-config/stos-vehicle-config.sample.ts deleted file mode 100644 index 8218335d5..000000000 --- a/policy-engine/src/_test/policy-config/stos-vehicle-config.sample.ts +++ /dev/null @@ -1,4826 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const stosPolicyConfig: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [ - { - id: 'LMN', - name: 'Lower Mainland', - }, - { - id: 'KTN', - name: 'Kootenay', - }, - { - id: 'PCE', - name: 'Peace', - }, - { - id: 'BCD', - name: 'BC Default', - }, - ], - commonRules: [], - permitTypes: [ - { - id: 'STOS', - name: 'Single Trip Oversize', - routingRequired: true, - weightDimensionRequired: false, - sizeDimensionRequired: true, - commodityRequired: true, - allowedCommodities: ['EMPTYXX', 'BRGBEAM', 'AUTOCRR', 'BRSHCUT'], - allowedVehicles: [ - 'DOLLIES', - 'FEBGHSE', - 'FECVYER', - 'FEDRMMX', - 'FEPNYTR', - 'FESEMTR', - 'FEWHELR', - 'REDIMIX', - 'CONCRET', - 'CRAFTAT', - 'CRAFTMB', - 'GRADERS', - 'MUNFITR', - 'OGOILSW', - 'OGSERVC', - 'OGSRRAH', - 'PICKRTT', - 'TOWVEHC', - ], - rules: [ - { - conditions: { - any: [ - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'lessThanInclusive', - value: 7, - }, - }, - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'greaterThan', - value: 0, - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be 7 days or less', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - costRules: [ - { - fact: 'fixedCost', - params: { - cost: 15, - }, - }, - ], - }, - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: ['TRKTRAC'], - rules: [], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - vehicleCategories: { - trailerCategories: [ - { - id: 'trailer', - name: 'Default trailer category', - }, - { - id: 'accessory', - name: 'Accessory trailer such as jeep or booster, to be used alongside other trailers. Not permittable on its own as a trailer in a combination.', - }, - { - id: 'pseudo', - name: 'Placeholder for a trailer in a combination with no trailer (such as when a brushcutter is permitted with no trailer).', - }, - ], - powerUnitCategories: [ - { - id: 'powerunit', - name: 'Default power unit category', - }, - ], - }, - vehicleTypes: { - powerUnitTypes: [ - { - id: 'BUSCRUM', - name: 'Buses/Crummies', - category: 'powerunit', - }, - { - id: 'BUSTRLR', - name: 'Inter-City Bus (Pulling Pony Trailer)', - category: 'powerunit', - }, - { - id: 'CONCRET', - name: 'Concrete Pumper Trucks', - category: 'powerunit', - }, - { - id: 'CRAFTAT', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - All Terrain', - category: 'powerunit', - }, - { - id: 'CRAFTMB', - name: 'Cranes, Rubber-Tired Loaders, Firetrucks - Mobile', - category: 'powerunit', - }, - { - id: 'DDCKBUS', - name: 'Double Decker Buses', - category: 'powerunit', - }, - { - id: 'FARMVEH', - name: 'Farm Vehicles', - category: 'powerunit', - }, - { - id: 'GRADERS', - name: 'Fixed Equipment - Trucks/Graders etc.', - category: 'powerunit', - }, - { - id: 'LCVRMDB', - name: 'Long Combination Vehicles (LCV) - Rocky Mountain Doubles', - category: 'powerunit', - }, - { - id: 'LCVTPDB', - name: 'Long Combination Vehicles (LCV) - Turnpike Doubles', - category: 'powerunit', - }, - { - id: 'LOGGING', - name: 'Logging Trucks', - category: 'powerunit', - }, - { - id: 'LOGOFFH', - name: 'Logging Trucks - Off-Highway', - category: 'powerunit', - }, - { - id: 'LWBTRCT', - name: 'Long Wheelbase Truck Tractors Exceeding 6.2 m up to 7.25 m', - category: 'powerunit', - }, - { - id: 'MUNFITR', - name: 'Municipal Fire Trucks', - category: 'powerunit', - }, - { - id: 'OGBEDTK', - name: 'Oil and Gas - Bed Trucks', - category: 'powerunit', - }, - { - id: 'OGOILSW', - name: 'Oil and Gas - Oilfield Sows', - category: 'powerunit', - }, - { - id: 'OGSERVC', - name: 'Oil and Gas - Service Rigs', - category: 'powerunit', - }, - { - id: 'OGSRRAH', - name: 'Oil and Gas - Service Rigs and Rathole Augers Only Equipped with Heavy Front Projected Crane (must exceed 14,000 kg tare weight)', - category: 'powerunit', - }, - { - id: 'PICKRTT', - name: 'Picker Truck Tractors', - category: 'powerunit', - }, - { - id: 'PLOWBLD', - name: 'Trucks Equipped with Front or Underbody Plow Blades', - category: 'powerunit', - }, - { - id: 'PUTAXIS', - name: 'Taxis', - category: 'powerunit', - }, - { - id: 'REGTRCK', - name: 'Trucks', - category: 'powerunit', - }, - { - id: 'SCRAPER', - name: 'Scrapers', - category: 'powerunit', - }, - { - id: 'SPAUTHV', - name: 'Specially Authorized Vehicles', - category: 'powerunit', - }, - { - id: 'STINGER', - name: 'Truck Tractors - Stinger Steered', - category: 'powerunit', - }, - { - id: 'TOWVEHC', - name: 'Tow Vehicles', - category: 'powerunit', - }, - { - id: 'TRKTRAC', - name: 'Truck Tractors', - category: 'powerunit', - }, - ], - trailerTypes: [ - { - id: 'BOOSTER', - name: 'Boosters', - category: 'accessory', - }, - { - id: 'DBTRBTR', - name: 'Tandem/Tridem Drive B-Train (Super B-Train)', - category: 'trailer', - }, - { - id: 'DOLLIES', - name: 'Dollies', - category: 'trailer', - }, - { - id: 'EXPANDO', - name: 'Expando Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEBGHSE', - name: 'Fixed Equipment - Portable Asphalt Baghouses', - category: 'trailer', - }, - { - id: 'FECVYER', - name: 'Fixed Equipment - Conveyors (Semi-Trailers)', - category: 'trailer', - }, - { - id: 'FECVYPT', - name: 'Fixed Equipment - Conveyors (Pony Trailers)', - category: 'trailer', - }, - { - id: 'FEDRMMX', - name: 'Fixed Equipment - Counter Flow Asphalt Drum Mixers', - category: 'trailer', - }, - { - id: 'FEPNYTR', - name: 'Fixed Equipment - Pony Trailers', - category: 'trailer', - }, - { - id: 'FESEMTR', - name: 'Fixed Equipment - Semi-Trailers', - category: 'trailer', - }, - { - id: 'FEWHELR', - name: 'Fixed Equipment - Wheeler Semi-Trailers', - category: 'wheeler', - }, - { - id: 'FLOATTR', - name: 'Float Trailers', - category: 'wheeler', - }, - { - id: 'FULLLTL', - name: 'Full Trailers', - category: 'trailer', - }, - { - id: 'HIBOEXP', - name: 'Semi-Trailers - Hiboys/Expandos', - category: 'trailer', - }, - { - id: 'HIBOFLT', - name: 'Semi-Trailers - Hiboys/Flat Decks', - category: 'trailer', - }, - { - id: 'JEEPSRG', - name: 'Jeeps', - category: 'accessory', - }, - { - id: 'LOGDGLG', - name: 'Legacy Logging Trailer Combinations - Tandem Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGLGCY', - name: 'Legacy Logging Trailer Combinations', - category: 'trailer', - }, - { - id: 'LOGFULL', - name: 'Logging Trailer - Full Trailers, Tri Axle, Quad Axle', - category: 'trailer', - }, - { - id: 'LOGNTAC', - name: 'Legacy Logging Trailer Combinations - Non-TAC B-Trains', - category: 'trailer', - }, - { - id: 'LOGOWBK', - name: 'Logging Trailer - Overwidth Bunks', - category: 'trailer', - }, - { - id: 'LOGSMEM', - name: 'Logging Semi-Trailer - Empty, 3.2 m Bunks', - category: 'trailer', - }, - { - id: 'LOGTNDM', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tandem Axle Pole Trailers, Dogloggers', - category: 'trailer', - }, - { - id: 'LOGTRIX', - name: 'Legacy Logging Trailer Combinations - Single Axle Jeeps, Tri Axle Trailers', - category: 'trailer', - }, - { - id: 'MHMBSHG', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'MHMBSHL', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW) with Attached Axles', - category: 'trailer', - }, - { - id: 'ODTRLEX', - name: 'Overdimensional Trailers and Semi-Trailers (For Export)', - category: 'trailer', - }, - { - id: 'OGOSFDT', - name: 'Oil and Gas - Oversize Oilfield Flat Deck Semi-Trailers', - category: 'trailer', - }, - { - id: 'PLATFRM', - name: 'Platform Trailers', - category: 'trailer', - }, - { - id: 'PMHWAAX', - name: 'Park Model Homes with Attached Axles', - category: 'trailer', - }, - { - id: 'POLETRL', - name: 'Pole Trailers', - category: 'trailer', - }, - { - id: 'PONYTRL', - name: 'Pony Trailers', - category: 'trailer', - }, - { - id: 'REDIMIX', - name: 'Ready Mix Concrete Pump Semi-Trailers', - category: 'trailer', - }, - { - id: 'SEMITRL', - name: 'Semi-Trailers', - category: 'trailer', - }, - { - id: 'STACTRN', - name: 'Semi-Trailers - A-Trains and C-Trains', - category: 'trailer', - }, - { - id: 'STBTRAN', - name: 'Semi-Trailers - B-Trains', - category: 'trailer', - }, - { - id: 'STCHIPS', - name: 'Semi-Trailers - Walled B-Trains (Chip Trucks)', - category: 'trailer', - }, - { - id: 'STCRANE', - name: 'Semi-Trailers with Crane', - category: 'trailer', - }, - { - id: 'STINGAT', - name: 'Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STLOGNG', - name: 'Semi-Trailers - Logging', - category: 'trailer', - }, - { - id: 'STNTSHC', - name: 'Semi-Trailers - Non-Tac Short Chassis', - category: 'trailer', - }, - { - id: 'STREEFR', - name: 'Semi-Trailers - Insulated Vans with Reefer/Refrigeration Units', - category: 'trailer', - }, - { - id: 'STROPRT', - name: 'Steering Trailers - Manned', - category: 'trailer', - }, - { - id: 'STRSELF', - name: 'Steering Trailers - Self/Remote', - category: 'trailer', - }, - { - id: 'STSDBDK', - name: 'Semi-Trailers - Single Drop, Double Drop, Step Decks, Lowbed, Expandos, etc.', - category: 'trailer', - }, - { - id: 'STSTEER', - name: 'Semi-Trailers - Steering Trailers', - category: 'trailer', - }, - { - id: 'STSTNGR', - name: 'Semi-Trailers - Stinger Steered Automobile Transporters', - category: 'trailer', - }, - { - id: 'STWDTAN', - name: 'Semi-Trailers - Spread Tandems', - category: 'trailer', - }, - { - id: 'STWHELR', - name: 'Semi-Trailers - Wheelers', - category: 'trailer', - }, - { - id: 'STWIDWH', - name: 'Semi-Trailers - Wide Wheelers', - category: 'trailer', - }, - { - id: 'NONEXXX', - name: 'None', - category: 'pseudo', - }, - ], - }, - commodities: [ - { - id: 'NONEXXX', - name: 'None', - size: { - powerUnits: [ - { - type: 'CONCRET', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 15.5, - }, - ], - }, - ], - }, - { - type: 'CRAFTAT', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 25, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 14, - regions: [ - { - region: 'PCE', - l: 15, - }, - ], - }, - ], - }, - ], - }, - { - type: 'CRAFTMB', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 25, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 14, - regions: [ - { - region: 'PCE', - l: 15, - }, - ], - }, - ], - }, - ], - }, - { - type: 'DDCKBUS', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.42, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 4.3, - }, - ], - }, - ], - }, - ], - }, - { - type: 'GRADERS', - trailers: [ - { - type: 'FEPNYTR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.5, - h: 4.4, - l: 12.5, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'BUSTRLR', - trailers: [ - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [{}], - }, - ], - }, - { - type: 'LOGOFFH', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.4, - }, - ], - }, - ], - }, - { - type: 'LCVRMDB', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - l: 32, - regions: [ - { - region: 'PCE', - l: 31, - }, - ], - }, - ], - }, - ], - }, - { - type: 'LCVTPDB', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - l: 41, - }, - ], - }, - ], - }, - { - type: 'LWBTRCT', - trailers: [ - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 2.6, - h: 4.15, - l: 23, - }, - ], - }, - ], - }, - { - type: 'PICKRTT', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 2.6, - h: 4.15, - l: 16, - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 25, - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 40, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 36, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'SCRAPER', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - l: 12.5, - }, - ], - }, - ], - }, - { - type: 'TRKTRAC', - trailers: [ - { - type: 'FECVYER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEDRMMX', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEBGHSE', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.26, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FESEMTR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEWHELR', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'ODTRLEX', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.65, - }, - ], - }, - { - type: 'REDIMIX', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - h: 4.3, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STREEFR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.3, - }, - ], - }, - { - type: 'STNTSHC', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [{}], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - l: 32, - }, - ], - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - h: 4.15, - l: 40, - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - l: 36, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FECVYPT', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FEPNYTR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 6.5, - w: 3.8, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'MHMBSHL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'MHMBSHG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 16, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'ODTRLEX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.65, - }, - ], - }, - { - type: 'PMHWAAX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.9, - w: 4.4, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 6.5, - w: 3.2, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'PLOWBLD', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'DOGLOGG', - name: 'Doglogger/Sjostrum Trailers (decked)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - l: 13.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'GRTBBUK', - name: 'Grader, Tractor Blades, Buckets', - size: { - powerUnits: [ - { - type: 'GRADERS', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 4.4, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYRACK', - name: 'Hayrack Semi-Trailer with a Folded Chassis/Empty Piggyback', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - h: 4.15, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'IMCONTN', - name: 'Intermodal Containers', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - l: 26, - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - l: 27.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.4, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'IMCONWS', - name: 'Intermodal Containers without Sides', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 4.4, - h: 4.72, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'LPBOOMS', - name: 'Logs, Poles And Boomsticks (Up To 20.1)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 27.5, - }, - ], - }, - { - type: 'LOGLGCY', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 5, - w: 2.6, - l: 25, - }, - ], - }, - { - type: 'POLETRL', - jeep: true, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 27.5, - }, - ], - }, - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 26, - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 27.5, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 25, - }, - ], - }, - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 2.9, - l: 25, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'LPBOOML', - name: 'Logs, Poles And Boomsticks (Over 20.1)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'LOGFULL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 10, - rp: 10, - l: 40, - }, - ], - }, - { - type: 'POLETRL', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 8, - rp: 9, - l: 40, - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 10, - l: 40, - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 10, - l: 36, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'MFHOMES', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (<= 5.0 m OAW)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 7.5, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 7.5, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'FLOATTR', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.57, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'MFHOMEL', - name: 'Manufactured Homes, Modular Buildings, Structures and Houseboats (> 5.0 m OAW)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 7.5, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 7.5, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'FLOATTR', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.57, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 6.9, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - l: 36, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'PARKMHS', - name: 'Park Model Homes', - size: { - powerUnits: [ - { - type: 'REGTRCK', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.9, - w: 4.4, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FLOATTR', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.9, - w: 4.4, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.9, - w: 4.4, - h: 4.88, - l: 31.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'PIPESTL', - name: 'Pipe And Steel Products (Rebar, Pilings, Reinforcing Steel, Etc.)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 27.5, - }, - ], - }, - { - type: 'STSTEER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 36, - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 40, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'REDUCBL', - name: 'Reducible Loads', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.15, - l: 27.5, - }, - ], - }, - { - type: 'PLATFRM', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 26, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSTEER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWHELR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWIDWH', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 40, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 36, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'PICKRTT', - trailers: [ - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 3.2, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'STINGER', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 1.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSTNGR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 1.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 16, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'SCRAPER', - name: 'Scraper on Dollies', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'DOLLIES', - jeep: true, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.3, - l: 25, - regions: [ - { - region: 'PCE', - h: 4.4, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'OILFILD', - name: 'Oil Field Equipment', - size: { - powerUnits: [ - { - type: 'OGBEDTK', - trailers: [ - { - type: 'EXPANDO', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - h: 4.3, - l: 27.5, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - w: 3.3, - h: 4.3, - l: 14, - }, - ], - }, - { - type: 'OGOSFDT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.3, - h: 4.3, - l: 23, - }, - ], - }, - ], - }, - { - type: 'OGOILSW', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - w: 3.2, - h: 4.3, - l: 15, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 25, - }, - ], - }, - ], - }, - { - type: 'OGSERVC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 15, - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 3.8, - h: 4.3, - l: 23, - }, - ], - }, - ], - }, - { - type: 'OGSRRAH', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 2.9, - h: 4.15, - l: 15.5, - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 10, - rp: 6.5, - w: 2.9, - h: 4.15, - l: 23, - }, - ], - }, - ], - }, - { - type: 'TRKTRAC', - trailers: [ - { - type: 'OGOSFDT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.3, - h: 4.3, - l: 23, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'JPTRLOG', - name: 'Tandem Jeep/Pole Trailer Loaded on Logging Truck', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - w: 2.9, - h: 4.3, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - w: 2.9, - h: 4.3, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'TOWDISB', - name: 'Tow Trucks And Disabled Vehicles', - size: { - powerUnits: [ - { - type: 'TOWVEHC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.3, - l: 27.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'TRQDLOG', - name: 'Tri-Axle or Quad Axle Full Trailer Loaded on Logging Truck', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - h: 4.3, - l: 13.5, - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 5, - h: 4.3, - l: 13.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'WOODCHP', - name: 'Wood Chips, Residuals', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - h: 4.45, - l: 27.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'EMPTYXX', - name: 'Empty', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'LOGOWBK', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 0, - rp: 0, - w: 3.2, - }, - ], - }, - { - type: 'PLATFRM', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 31, - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 27.5, - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - l: 31, - }, - ], - }, - { - type: 'STWHELR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWIDWH', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'PICKRTT', - trailers: [ - { - type: 'OGOSFDT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.2, - h: 4.3, - l: 23, - }, - ], - }, - { - type: 'PLATFRM', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 25, - regions: [ - { - region: 'PCE', - l: 27.5, - }, - ], - }, - ], - }, - { - type: 'STWHELR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWIDWH', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 3.2, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'GRBBINS', - name: 'Garbage Bins', - size: { - powerUnits: [ - { - type: 'REGTRCK', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'LAMBEAM', - name: 'Laminated Beams', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'POLETRL', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 40, - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 31, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYLREC', - name: 'Hay Bales Large Rectangular', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - l: 26, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.05, - h: 4.4, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYROND', - name: 'Hay Bales Round', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - l: 26, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYSREC', - name: 'Hay Bales Small Rectangular', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - l: 26, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.05, - h: 4.3, - regions: [ - { - region: 'PCE', - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'BRGBEAM', - name: 'Bridge Beams', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'POLETRL', - jeep: true, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - l: 31, - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'NONREDU', - name: 'Non-Reducible Loads', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STLOGNG', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - w: 3.8, - h: 4.15, - l: 27.5, - }, - ], - }, - { - type: 'PLATFRM', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.4, - l: 26, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.4, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.4, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.4, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSTEER', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWHELR', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWIDWH', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 40, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 36, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'PICKRTT', - trailers: [ - { - type: 'OGOSFDT', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.3, - h: 4.3, - l: 23, - }, - ], - }, - { - type: 'SEMITRL', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 5, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOEXP', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 5, - h: 4.4, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - w: 5, - h: 4.4, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - w: 5, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSTEER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWHELR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STWIDWH', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STCRANE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 27.5, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STROPRT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 40, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STRSELF', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - w: 5, - h: 4.88, - l: 36, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'STINGER', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: false, - sizeDimensions: [ - { - fp: 1, - rp: 1.2, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSTNGR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 1.2, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'DOLLIES', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 5, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 5, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 5, - h: 4.88, - l: 16, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 6.5, - w: 5, - h: 4.88, - l: 25, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'AUTOCRR', - name: 'Auto Carrier, Campers And Boats (Stinger Steered Transporters Only)', - size: { - powerUnits: [ - { - type: 'STINGER', - trailers: [ - { - type: 'STSTNGR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 1, - rp: 1.2, - h: 4.4, - l: 25, - regions: [ - { - region: 'LMN', - h: 4.3, - }, - { - region: 'KTN', - h: 4.3, - }, - { - region: 'PCE', - h: 4.88, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'HAYRNPR', - name: 'Hay Bales (Round) Peace River Only', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'STACTRN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - l: 26, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STBTRAN', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'HIBOFLT', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FULLLTL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.5, - h: 4.3, - regions: [ - { - region: 'PCE', - w: 3.84, - h: 4.8, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'BRSHCUT', - name: 'Brushcutters (Peace Only)', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'SEMITRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - regions: [ - { - region: 'PCE', - w: 4.57, - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'STSDBDK', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - regions: [ - { - region: 'PCE', - w: 4.57, - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'NONEXXX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - regions: [ - { - region: 'PCE', - w: 4.57, - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'PONYTRL', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - regions: [ - { - region: 'PCE', - w: 3.8, - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - ], - }, - }, - { - id: 'FIXEDEQ', - name: 'Fixed Equipment', - size: { - powerUnits: [ - { - type: 'TRKTRAC', - trailers: [ - { - type: 'FECVYER', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEDRMMX', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEBGHSE', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.26, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FESEMTR', - jeep: true, - booster: true, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEWHELR', - jeep: true, - booster: true, - selfIssue: false, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - ], - }, - { - type: 'REGTRCK', - trailers: [ - { - type: 'FECVYPT', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 4, - rp: 9.5, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FEDRMMX', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 3.8, - h: 4.72, - l: 31, - regions: [ - { - region: 'PCE', - h: 5.33, - }, - ], - }, - ], - }, - { - type: 'FEPNYTR', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - rp: 4, - w: 3.2, - h: 4.3, - l: 31, - }, - ], - }, - { - type: 'FEBGHSE', - jeep: false, - booster: false, - selfIssue: true, - sizeDimensions: [ - { - fp: 3, - rp: 6.5, - w: 4.26, - h: 4.72, - l: 31, - }, - ], - }, - ], - }, - ], - }, - }, - ], - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, -}; diff --git a/policy-engine/src/_test/policy-config/tros-multiple-cost-rules.sample.ts b/policy-engine/src/_test/policy-config/tros-multiple-cost-rules.sample.ts deleted file mode 100644 index 0fadd0709..000000000 --- a/policy-engine/src/_test/policy-config/tros-multiple-cost-rules.sample.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const multipleCostRules: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [], - rules: [], - costRules: [ - { - fact: 'costPerMonth', - params: { - cost: 30, - }, - }, - { - fact: 'fixedCost', - params: { - cost: 15, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, -}; diff --git a/policy-engine/src/_test/policy-config/tros-no-allowed-vehicles.sample.ts b/policy-engine/src/_test/policy-config/tros-no-allowed-vehicles.sample.ts deleted file mode 100644 index 762e7a43d..000000000 --- a/policy-engine/src/_test/policy-config/tros-no-allowed-vehicles.sample.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const trosNoAllowedVehicles: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [], - rules: [ - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/policy-config/tros-no-params.sample.ts b/policy-engine/src/_test/policy-config/tros-no-params.sample.ts deleted file mode 100644 index 252901b81..000000000 --- a/policy-engine/src/_test/policy-config/tros-no-params.sample.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const trosNoParamsSample: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: [], - rules: [ - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/policy-config/tros-only.sample.ts b/policy-engine/src/_test/policy-config/tros-only.sample.ts deleted file mode 100644 index f64cfc16e..000000000 --- a/policy-engine/src/_test/policy-config/tros-only.sample.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { PolicyDefinition } from '../../types/policy-definition'; - -export const trosOnly: PolicyDefinition = { - version: '2024.03.18.001', - geographicRegions: [], - commonRules: [ - { - conditions: { - not: { - fact: 'permitData', - path: '$.companyName', - operator: 'stringMinimumLength', - value: 1, - }, - }, - event: { - type: 'violation', - params: { - message: 'Company is required', - code: 'field-validation-error', - fieldReference: 'permitData.companyName', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.contactDetails.firstName', - operator: 'stringMinimumLength', - value: 1, - }, - }, - event: { - type: 'violation', - params: { - message: 'Contact first name is required', - code: 'field-validation-error', - fieldReference: 'permitData.contactDetails.firstName', - }, - }, - }, - { - conditions: { - any: [ - { - fact: 'permitData', - path: '$.startDate', - operator: 'dateLessThan', - value: { - fact: 'validationDate', - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Permit start date cannot be in the past', - code: 'field-validation-error', - fieldReference: 'permitData.startDate', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vin', - operator: 'regex', - value: '^[a-zA-Z0-9]{6}$', - }, - }, - event: { - type: 'violation', - params: { - message: - 'Vehicle Identification Number (vin) must be 6 alphanumeric characters', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vin', - }, - }, - }, - ], - permitTypes: [ - { - id: 'TROS', - name: 'Term Oversize', - routingRequired: false, - weightDimensionRequired: false, - sizeDimensionRequired: false, - commodityRequired: false, - allowedVehicles: ['TRKTRAK', 'TRUCK', 'SEMITRL', 'PLTFRM', 'OGSEMI'], - rules: [ - { - conditions: { - all: [ - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'in', - value: [30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330], - }, - }, - { - not: { - fact: 'permitData', - path: '$.permitDuration', - operator: 'equal', - value: { - fact: 'daysInPermitYear', - }, - }, - }, - ], - }, - event: { - type: 'violation', - params: { - message: 'Duration must be in 30 day increments or a full year', - code: 'field-validation-error', - fieldReference: 'permitData.permitDuration', - }, - }, - }, - { - conditions: { - not: { - fact: 'permitData', - path: '$.vehicleDetails.vehicleSubType', - operator: 'in', - value: { - fact: 'allowedVehicles', - }, - }, - }, - event: { - type: 'violation', - params: { - message: 'Vehicle type not permittable for this permit type', - code: 'field-validation-error', - fieldReference: 'permitData.vehicleDetails.vehicleSubType', - }, - }, - }, - ], - }, - ], - globalWeightDefaults: { - powerUnits: [], - trailers: [], - }, - globalSizeDefaults: { - fp: 3, - rp: 6.5, - w: 2.6, - h: 4.15, - l: 31, - }, - vehicleCategories: { - trailerCategories: [], - powerUnitCategories: [], - }, - vehicleTypes: { - powerUnitTypes: [], - trailerTypes: [], - }, - commodities: [], -}; diff --git a/policy-engine/src/_test/unit/configuration.spec.ts b/policy-engine/src/_test/unit/configuration.spec.ts deleted file mode 100644 index 25bb33c61..000000000 --- a/policy-engine/src/_test/unit/configuration.spec.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { Policy } from '../../policy-engine'; -import { stosPolicyConfig } from '../policy-config/stos-vehicle-config.sample'; - -describe('Permit Engine Oversize Configuration Functions', () => { - const policy: Policy = new Policy(stosPolicyConfig); - - it('should retrieve all permittable power unit types for STOS', async () => { - const puTypes = policy.getPermittablePowerUnitTypes('STOS', 'EMPTYXX'); - expect(puTypes.size).toBe(2); - expect(puTypes.keys()).toContain('TRKTRAC'); - expect(puTypes.keys()).toContain('PICKRTT'); - }); - - it('should throw an error for invalid permit type', async () => { - expect(() => { - policy.getPermittablePowerUnitTypes('_INVALID', 'EMPTYXX'); - }).toThrow(); - }); - - it('should return an empty map for invalid commodity', async () => { - const puTypes = policy.getPermittablePowerUnitTypes('STOS', '_INVALID'); - expect(puTypes.size).toBe(0); - }); -}); - -describe('Permit Engine Get Next Permittable Vehicles', () => { - const policy: Policy = new Policy(stosPolicyConfig); - - it('should return permittable power units with empty current configuration', async () => { - const vehicles = policy.getNextPermittableVehicles('STOS', 'LAMBEAM', []); - expect(vehicles.size).toBe(1); - expect(vehicles.keys()).toContain('TRKTRAC'); - }); - - it('should return jeep and a trailer when current config is just power unit', async () => { - const vehicles = policy.getNextPermittableVehicles('STOS', 'LAMBEAM', [ - 'TRKTRAC', - ]); - expect(vehicles.size).toBe(3); - expect(vehicles.keys()).toContain('JEEPSRG'); - expect(vehicles.keys()).toContain('POLETRL'); - expect(vehicles.keys()).toContain('HIBOEXP'); - }); - - it('should return jeep and a trailer when current config is power unit and jeep', async () => { - const vehicles = policy.getNextPermittableVehicles('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'JEEPSRG', - ]); - expect(vehicles.size).toBe(3); - expect(vehicles.keys()).toContain('JEEPSRG'); - expect(vehicles.keys()).toContain('POLETRL'); - expect(vehicles.keys()).toContain('HIBOEXP'); - }); - - it('should return booster when current config is power unit and trailer', async () => { - const vehicles = policy.getNextPermittableVehicles('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'POLETRL', - ]); - expect(vehicles.size).toBe(1); - expect(vehicles.keys()).toContain('BOOSTER'); - }); - - it('should return empty map when current configuration is invalid', async () => { - const vehicles = policy.getNextPermittableVehicles('STOS', 'LAMBEAM', [ - 'TRKTRAC', - '_INVALID', - ]); - expect(vehicles.size).toBe(0); - }); -}); - -describe('Permit Engine Configuration Validation', () => { - const policy: Policy = new Policy(stosPolicyConfig); - - it('should return true for a valid configuration with power unit and trailer', async () => { - const isValid = policy.isConfigurationValid('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'POLETRL', - ]); - expect(isValid).toBe(true); - }); - - it('should return true for a valid configuration with power unit and trailer and jeep and booster', async () => { - const isValid = policy.isConfigurationValid('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'JEEPSRG', - 'POLETRL', - 'BOOSTER', - ]); - expect(isValid).toBe(true); - }); - - it('should return false for a configuration out of order', async () => { - const isValid = policy.isConfigurationValid('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'POLETRL', - 'JEEPSRG', - 'BOOSTER', - ]); - expect(isValid).toBe(false); - }); - - it('should throw an error for an invalid permit type', async () => { - expect(() => { - policy.isConfigurationValid('_INVALID', 'LAMBEAM', [ - 'TRKTRAC', - 'POLETRL', - ]); - }).toThrow(); - }); - - it('should throw an error for an invalid commodity', async () => { - expect(() => { - policy.isConfigurationValid('STOS', '_INVALID', ['TRKTRAC', 'POLETRL']); - }).toThrow(); - }); - - it('should return false for a configuration missing a trailer', async () => { - const isValid = policy.isConfigurationValid('STOS', 'LAMBEAM', [ - 'TRKTRAC', - 'JEEPSRG', - ]); - expect(isValid).toBe(false); - }); - - it('should return true for a partial configuration missing a trailer', async () => { - const isValid = policy.isConfigurationValid( - 'STOS', - 'LAMBEAM', - ['TRKTRAC', 'JEEPSRG'], - true, - ); - expect(isValid).toBe(true); - }); - - it('should throw an error for a permit type not requiring commodity', async () => { - expect(() => { - policy.isConfigurationValid('TROS', 'LAMBEAM', ['TRKTRAC']); - }).toThrow(); - }); -}); diff --git a/policy-engine/src/_test/unit/cost.spec.ts b/policy-engine/src/_test/unit/cost.spec.ts deleted file mode 100644 index 5bfce40aa..000000000 --- a/policy-engine/src/_test/unit/cost.spec.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { completePolicyConfig } from '../policy-config/complete-in-progress.sample'; -import { multipleCostRules } from '../policy-config/tros-multiple-cost-rules.sample'; -import { validTros30Day } from '../permit-app/valid-tros-30day'; -import { validTrow120Day } from '../permit-app/valid-trow-120day'; -import { testStos } from '../permit-app/test-stos'; -import dayjs from 'dayjs'; -import { PermitAppInfo } from '../../enum/permit-app-info'; - -describe('Policy Engine Cost Calculator', () => { - const policy: Policy = new Policy(completePolicyConfig); - const multipleCostRulesPolicy = new Policy(multipleCostRules); - - it('should calculate 30 day TROS cost correctly', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.cost).toHaveLength(1); - expect(validationResult.cost[0].cost).toBe(30); - }); - - it('should calculate 31 day TROS cost as 2 months', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set duration to 31 - permit.permitData.permitDuration = 31; - - const validationResult = await policy.validate(permit); - expect(validationResult.cost).toHaveLength(1); - expect(validationResult.cost[0].cost).toBe(60); - }); - - it('should calculate 1 year TROS cost correctly', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - const today = dayjs(); - // Set startDate to today - permit.permitData.startDate = today.format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set duration to full year (365 or 366 depending on leap year) - const oneYearDuration: number = today.add(1, 'year').diff(today, 'day'); - permit.permitData.permitDuration = oneYearDuration; - - const validationResult = await policy.validate(permit); - expect(validationResult.cost).toHaveLength(1); - expect(validationResult.cost[0].cost).toBe(360); - }); - - it('should calculate 120 day TROW cost correctly', async () => { - const permit = JSON.parse(JSON.stringify(validTrow120Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.cost).toHaveLength(1); - expect(validationResult.cost[0].cost).toBe(400); - }); - - it('should calculate STOS cost correctly', async () => { - const permit = JSON.parse(JSON.stringify(testStos)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.cost).toHaveLength(1); - expect(validationResult.cost[0].cost).toBe(15); - }); - - it('should calculate valid TROS with multiple cost rules correctly', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await multipleCostRulesPolicy.validate(permit); - expect(validationResult.cost).toHaveLength(2); - const cost1: number = validationResult.cost[0]?.cost || 0; - const cost2: number = validationResult.cost[1]?.cost || 0; - expect(cost1 + cost2).toBe(45); - }); - - it('should calculate 31 day TROS with multiple cost rules correctly', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set duration to 31 - permit.permitData.permitDuration = 31; - - const validationResult = await multipleCostRulesPolicy.validate(permit); - expect(validationResult.cost).toHaveLength(2); - const cost1: number = validationResult.cost[0]?.cost || 0; - const cost2: number = validationResult.cost[1]?.cost || 0; - expect(cost1 + cost2).toBe(75); - }); -}); diff --git a/policy-engine/src/_test/unit/size-dimension.spec.ts b/policy-engine/src/_test/unit/size-dimension.spec.ts deleted file mode 100644 index 6dbd0438e..000000000 --- a/policy-engine/src/_test/unit/size-dimension.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Policy } from '../../policy-engine'; -import { stosPolicyConfig } from '../policy-config/stos-vehicle-config.sample'; - -describe('Permit Engine Size Dimension Functions', () => { - const policy: Policy = new Policy(stosPolicyConfig); - - it('should assume all regions if none are supplied', async () => { - // This configuration has minimum values pulled from multiple regions - const sizeDimension = policy.getSizeDimension('STOS', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - 'HIBOEXP', - ]); - expect(sizeDimension?.fp).toBe(3); - expect(sizeDimension?.rp).toBe(6.5); - expect(sizeDimension?.l).toBe(31); - expect(sizeDimension?.h).toBeUndefined(); - expect(sizeDimension?.w).toBeUndefined(); - }); - - it('should retrieve correct values for a single specified region', async () => { - const sizeDimension = policy.getSizeDimension( - 'STOS', - 'EMPTYXX', - ['TRKTRAC', 'JEEPSRG', 'PLATFRM'], - ['PCE'], - ); - expect(sizeDimension?.fp).toBeUndefined(); - expect(sizeDimension?.rp).toBeUndefined(); - expect(sizeDimension?.l).toBe(27.5); - expect(sizeDimension?.h).toBe(5.33); - expect(sizeDimension?.w).toBe(3.2); - }); - - it('should throw an error if an invalid permit type is specified', async () => { - expect(() => { - policy.getSizeDimension('_INVALID', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - 'STWHELR', - ]); - }).toThrow(); - }); - - it('should return null if an invalid configuration is specified', async () => { - const sizeDimension = policy.getSizeDimension('STOS', 'EMPTYXX', [ - '_INVALID', - 'JEEPSRG', - 'STWHELR', - ]); - expect(sizeDimension).toBeNull(); - }); - - it('should return null if no dimensionable trailer is specified', async () => { - const sizeDimension = policy.getSizeDimension('STOS', 'EMPTYXX', [ - 'TRKTRAC', - 'JEEPSRG', - ]); - expect(sizeDimension).toBeNull(); - }); - - it('should throw an error if an invalid commodity is specified', async () => { - expect(() => { - policy.getSizeDimension('STOS', '_INVALID', ['TRKTRAC', 'JEEPSRG']); - }).toThrow(); - }); -}); diff --git a/policy-engine/src/_test/unit/utility.spec.ts b/policy-engine/src/_test/unit/utility.spec.ts deleted file mode 100644 index fc1e0a73e..000000000 --- a/policy-engine/src/_test/unit/utility.spec.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { PermitType } from 'onroute-policy-engine/types'; -import { Policy } from 'onroute-policy-engine'; -import { fiveTypes } from '../policy-config/five-types.sample'; - -describe('Permit Engine Utility Functions', () => { - const policy: Policy = new Policy(fiveTypes); - - it('should return the correct number of permit types', async () => { - const permitTypes: Map = policy.getPermitTypes(); - expect(permitTypes.size).toBe(5); - }); - - it('should return the correct number of geographic regions', async () => { - const geographicRegions: Map = - policy.getGeographicRegions(); - expect(geographicRegions.size).toBe(3); - }); - - it('should return the correct number of commodities', async () => { - const commodities: Map = policy.getCommodities(); - expect(commodities.size).toBe(5); - }); - - it('should return the correct number of commodities for a single permit type', async () => { - const commodities: Map = policy.getCommodities('STOS'); - expect(commodities.size).toBe(3); - }); - - it('should return the correct number of power unit types', async () => { - const powerUnitTypes: Map = policy.getPowerUnitTypes(); - expect(powerUnitTypes.size).toBe(27); - }); - - it('should return the correct number of trailer types', async () => { - const trailerTypes: Map = policy.getTrailerTypes(); - expect(trailerTypes.size).toBe(51); - }); - - it('should return a TROS permit type', async () => { - const permitType: PermitType | null = - policy.getPermitTypeDefinition('TROS'); - expect(permitType).not.toBeNull(); - }); - - it('should return null for an unknown permit type', async () => { - const permitType: PermitType | null = - policy.getPermitTypeDefinition('__INVALID'); - expect(permitType).toBeNull(); - }); -}); diff --git a/policy-engine/src/_test/unit/validation.spec.ts b/policy-engine/src/_test/unit/validation.spec.ts deleted file mode 100644 index c4ab0653f..000000000 --- a/policy-engine/src/_test/unit/validation.spec.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { Policy } from 'onroute-policy-engine'; -import { trosOnly } from '../policy-config/tros-only.sample'; -import { trosNoAllowedVehicles } from '../policy-config/tros-no-allowed-vehicles.sample'; -import { completePolicyConfig } from '../policy-config/complete-in-progress.sample'; -import { trosNoParamsSample } from '../policy-config/tros-no-params.sample'; -import { testStos } from '../permit-app/test-stos'; -import { validTros30Day } from '../permit-app/valid-tros-30day'; -import { validTrow120Day } from '../permit-app/valid-trow-120day'; -import { allEventTypes } from '../policy-config/all-event-types.sample'; -import dayjs from 'dayjs'; -import { PermitAppInfo } from '../../enum/permit-app-info'; -import { ValidationResultCode } from '../../enum/validation-result-code'; - -describe('Permit Engine Constructor', () => { - it('should construct without error', () => { - expect(() => new Policy(trosOnly)).not.toThrow(); - }); - - it('should assign policy definition correctly', () => { - const policy: Policy = new Policy(trosOnly); - expect(policy.policyDefinition).toBeTruthy(); - }); -}); - -describe('Policy Engine Validator', () => { - const policy: Policy = new Policy(trosOnly); - - it('should validate TROS successfully', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(0); - }); - - it('should raise violation for start date in the past', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to yesterday - permit.permitData.startDate = dayjs() - .subtract(1, 'day') - .format(PermitAppInfo.PermitDateFormat.toString()); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - }); - - it('should raise violation for invalid permit type', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - permit.permitType = '__INVALID'; - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - }); - - it('should raise violation for invalid vehicle type', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set an invalid vehicle type - permit.permitData.vehicleDetails.vehicleSubType = '__INVALID'; - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - }); - - it('should raise violation if no allowed vehicles are specified', async () => { - const policyNoVehicles: Policy = new Policy(trosNoAllowedVehicles); - const permit = JSON.parse(JSON.stringify(validTros30Day)); - - const validationResult = await policyNoVehicles.validate(permit); - expect(validationResult.violations).toHaveLength(1); - }); - - it('should return the correct validation code', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set an invalid companyName - permit.permitData.companyName = ''; - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - expect(validationResult.violations[0].code).toBe( - ValidationResultCode.FieldValidationError.toString(), - ); - }); - - it('should return the correct field reference', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Set an invalid companyName - permit.permitData.companyName = ''; - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - expect(validationResult.violations[0].fieldReference).toBe( - 'permitData.companyName', - ); - }); -}); - -describe('Master Policy Configuration Validator', () => { - const policy: Policy = new Policy(completePolicyConfig); - - it('should validate TROS successfully', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(0); - }); - - it('should validate TROW successfully', async () => { - const permit = JSON.parse(JSON.stringify(validTrow120Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(0); - }); - - it('should validate STOS successfully', async () => { - const permit = JSON.parse(JSON.stringify(testStos)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(0); - }); - - it('should fail validation for STOS with invalid configuration', async () => { - const permit = JSON.parse(JSON.stringify(testStos)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - // Add an invalid trailer to the configuration list - permit.permitData.vehicleConfiguration.trailers.push({ - vehicleSubType: '_INVALID', - }); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - }); -}); - -describe('Policy Configuration Missing Elements', () => { - const policy: Policy = new Policy(trosNoParamsSample); - - it('should not fail when a validation has no params', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - // Set startDate to today - permit.permitData.startDate = dayjs().format( - PermitAppInfo.PermitDateFormat.toString(), - ); - - const validationResult = await policy.validate(permit); - expect(validationResult.violations).toHaveLength(1); - expect(validationResult.violations[0].message).not.toBeUndefined; - expect(validationResult.violations[0].message).not.toBeNull; - }); -}); - -describe('Permit Engine Validation Results Aggregator', () => { - const policy: Policy = new Policy(allEventTypes); - - it('should process all event types', async () => { - const permit = JSON.parse(JSON.stringify(validTros30Day)); - - const validationResult = await policy.validate(permit); - // Violation 1: expected structure - // Violation 2: unknown event type (defaults to violation) - expect(validationResult.violations).toHaveLength(2); - expect(validationResult.requirements).toHaveLength(1); - expect(validationResult.warnings).toHaveLength(1); - // Information 1: expected structure - // Information 2: params object, but no message property - // Information 3: no params object in the event - expect(validationResult.information).toHaveLength(3); - }); -}); diff --git a/policy-engine/src/enum/accessory-vehicle-type.ts b/policy-engine/src/enum/accessory-vehicle-type.ts deleted file mode 100644 index 4ec6151a1..000000000 --- a/policy-engine/src/enum/accessory-vehicle-type.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum AccessoryVehicleType { - Booster = 'BOOSTER', - Jeep = 'JEEPSRG', -} diff --git a/policy-engine/src/enum/facts.ts b/policy-engine/src/enum/facts.ts deleted file mode 100644 index 7b3765632..000000000 --- a/policy-engine/src/enum/facts.ts +++ /dev/null @@ -1,9 +0,0 @@ -export enum PolicyFacts { - AllowedVehicles = 'allowedVehicles', - DaysInPermitYear = 'daysInPermitYear', - ValidationDate = 'validationDate', - FixedCost = 'fixedCost', - CostPerMonth = 'costPerMonth', - RangeMatrixCostLookup = 'rangeMatrixCostLookup', - ConfigurationIsValid = 'configurationIsValid', -} diff --git a/policy-engine/src/enum/index.ts b/policy-engine/src/enum/index.ts deleted file mode 100644 index ce8278efd..000000000 --- a/policy-engine/src/enum/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { AccessoryVehicleType } from './accessory-vehicle-type'; -export { PolicyFacts } from './facts'; -export { PermitAppInfo } from './permit-app-info'; -export { RelativePosition } from './relative-position'; -export { ValidationResultCode } from './validation-result-code'; -export { ValidationResultType } from './validation-result-type'; -export { VehicleTypes } from './vehicle-types'; diff --git a/policy-engine/src/enum/permit-app-info.ts b/policy-engine/src/enum/permit-app-info.ts deleted file mode 100644 index 8d4eb0121..000000000 --- a/policy-engine/src/enum/permit-app-info.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * This enum represents a subset of commonly-used paths and - * other information in permit applications which may be - * referenced from within source code. - */ -export enum PermitAppInfo { - PermitType = 'permitType', - PermitData = 'permitData', - PermitStartDate = '$.startDate', - PermitDateFormat = 'YYYY-MM-DD', - CompanyName = '$.companyName', - PermitDuration = '$.permitDuration', - PowerUnitType = '$.vehicleDetails.vehicleSubType', - TrailerList = '$.vehicleConfiguration.trailers', - Commodity = '$.permittedCommodity.commodityType', -} diff --git a/policy-engine/src/enum/relative-position.ts b/policy-engine/src/enum/relative-position.ts deleted file mode 100644 index 347f8f26c..000000000 --- a/policy-engine/src/enum/relative-position.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum RelativePosition { - Before = 'before', - After = 'after', - First = 'first', - Last = 'last', -} diff --git a/policy-engine/src/enum/validation-result-code.ts b/policy-engine/src/enum/validation-result-code.ts deleted file mode 100644 index 5938cdb0a..000000000 --- a/policy-engine/src/enum/validation-result-code.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum ValidationResultCode { - PermitTypeUnknown = 'permit-type-unknown', - FieldValidationError = 'field-validation-error', - ConfigurationInvalid = 'configuration-invalid', - GeneralResult = 'general-result', - CostValue = 'cost-value', -} diff --git a/policy-engine/src/enum/validation-result-type.ts b/policy-engine/src/enum/validation-result-type.ts deleted file mode 100644 index 5bcce4d9d..000000000 --- a/policy-engine/src/enum/validation-result-type.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum ValidationResultType { - Violation = 'violation', - Requirement = 'requirement', - Warning = 'warning', - Information = 'information', - Cost = 'cost', -} diff --git a/policy-engine/src/enum/vehicle-types.ts b/policy-engine/src/enum/vehicle-types.ts deleted file mode 100644 index 1a87b0800..000000000 --- a/policy-engine/src/enum/vehicle-types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum VehicleTypes { - PowerUnits = 'powerUnits', - Trailers = 'trailers', -} diff --git a/policy-engine/src/helper/facts.helper.ts b/policy-engine/src/helper/facts.helper.ts deleted file mode 100644 index 352dddbec..000000000 --- a/policy-engine/src/helper/facts.helper.ts +++ /dev/null @@ -1,120 +0,0 @@ -import dayjs from 'dayjs'; -import { Engine } from 'json-rules-engine'; -import { PermitAppInfo, PolicyFacts } from 'onroute-policy-engine/enum'; -import { Policy } from '../policy-engine'; - -/** - * Adds runtime facts for the validation. For example, adds the - * validation date for comparison against startDate of the permit. - * @param engine json-rules-engine Engine instance to add facts to. - */ -export function addRuntimeFacts(engine: Engine, policy: Policy): void { - const today: string = dayjs().format(PermitAppInfo.PermitDateFormat); - engine.addFact(PolicyFacts.ValidationDate, today); - - /** - * Add runtime fact for number of days in the permit year. - * Will be either 365 or 366, for use when comparing against - * duration for 1 year permits. - */ - engine.addFact( - PolicyFacts.DaysInPermitYear, - async function (params, almanac) { - const startDate: string = await almanac.factValue( - PermitAppInfo.PermitData, - {}, - PermitAppInfo.PermitStartDate, - ); - const dateFrom = dayjs(startDate, PermitAppInfo.PermitDateFormat); - const daysInPermitYear = dateFrom.add(1, 'year').diff(dateFrom, 'day'); - return daysInPermitYear; - }, - ); - - /** - * Adds a runtime fact specifying whether the vehicle configuration - * in the permit application is valid for the permit type and - * commodity. Will return true or false. - */ - engine.addFact( - PolicyFacts.ConfigurationIsValid.toString(), - async function (params, almanac) { - const powerUnit: string = await almanac.factValue( - PermitAppInfo.PermitData, - {}, - PermitAppInfo.PowerUnitType, - ); - const trailerList: Array = await almanac.factValue( - PermitAppInfo.PermitData, - {}, - PermitAppInfo.TrailerList, - ); - let fullVehicleConfiguration = []; - fullVehicleConfiguration.push(powerUnit); - fullVehicleConfiguration = fullVehicleConfiguration.concat( - trailerList.map((t) => t.vehicleSubType), - ); - - const permitType: string = await almanac.factValue( - PermitAppInfo.PermitType, - ); - const commodity: string = await almanac.factValue( - PermitAppInfo.PermitData, - {}, - PermitAppInfo.Commodity, - ); - let isValid: boolean; - try { - isValid = policy.isConfigurationValid( - permitType, - commodity, - fullVehicleConfiguration, - ); - } catch (e) { - console.log(`Error validating vehicle configuration: '{e.message}'`); - isValid = false; - } - return isValid; - }, - ); - - /** - * Add runtime fact for a fixed permit cost, the cost supplied - * as a parameter. - */ - engine.addFact(PolicyFacts.FixedCost.toString(), async function (params) { - return params.cost; - }); - - /** - * Add runtime fact for cost per month, where month is defined by - * policy as a 30 day period or portion thereof, except in the - * case of a full year in which case it is 12 months. - */ - engine.addFact( - PolicyFacts.CostPerMonth.toString(), - async function (params, almanac) { - const duration: number = await almanac.factValue( - PermitAppInfo.PermitData, - {}, - PermitAppInfo.PermitDuration, - ); - const daysInPermitYear: number = await almanac.factValue( - PolicyFacts.DaysInPermitYear.toString(), - ); - - let months: number = Math.floor(duration / 30); - const extraDays: number = duration % 30; - - if (extraDays > 0 && duration !== daysInPermitYear) { - // Add an extra month for a partial month unless it is - // a full year. Note this does not handle the case where 2 - // or more years duration is specified, since that is not - // a valid permit and does not warrant considetation. - months++; - } - - return months * params.cost; - }, - ); -} diff --git a/policy-engine/src/helper/lists.helper.ts b/policy-engine/src/helper/lists.helper.ts deleted file mode 100644 index aa927850c..000000000 --- a/policy-engine/src/helper/lists.helper.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { IdentifiedObject } from 'onroute-policy-engine/types'; - -/** - * Extracts a map containing just the ID and name of each of the supplied - * identified objects. - * @param objects List of identified objects to extract id and name from. - * @param filter Optional list of IDs to constrain the map to. Only objects - * with an ID matching one of the elements in the filter will - * be returned. If no filter supplied, all objects will be returned. - * @returns Map of object ID to object name. - */ -export function extractIdentifiedObjects( - objects: Array, - filter?: Array, -): Map { - const objectMap: Map = new Map(); - objects.forEach((o) => { - if (!filter || filter.includes(o.id)) { - objectMap.set(o.id, o.name); - } - }); - return objectMap; -} - -/** - * Intersects two maps containing string id and string description to - * return a new map containing those entries common to both. - * This only checks that the keys are common, not the values. If the - * values are different, this returns the value from the first map. - * If any values in the first map are null or undefined, these will - * be replaced with empty string. - * @param first The first map - * @param second The second map - * @returns New map containing entries common to both input maps - */ -export function intersectIdMaps( - first: Map, - second: Map, -): Map { - const combinedMap = new Map(); - for (const key in first.keys()) { - if (second.has(key)) { - combinedMap.set(key, first.get(key) ?? ''); - } - } - return combinedMap; -} - -export function getIdFromName( - list: Array, - name: string, -): string | null { - let id: string | null = null; - - const identifiedObject = list.find((i) => i.name == name); - if (identifiedObject) { - id = identifiedObject.id; - } - - return id; -} diff --git a/policy-engine/src/helper/rules-engine.helper.ts b/policy-engine/src/helper/rules-engine.helper.ts deleted file mode 100644 index 951964732..000000000 --- a/policy-engine/src/helper/rules-engine.helper.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Engine, RuleProperties } from 'json-rules-engine'; -import { CustomOperators } from '../rule-operator/custom-operators'; -import { Policy } from 'onroute-policy-engine'; -import { PolicyDefinition } from 'onroute-policy-engine/types'; -import { PolicyFacts } from 'onroute-policy-engine/enum'; - -/** - * Gets a json-rules-engine with all onRouteBC custom operators added, - * and all policy rules that apply to all permit types added. - * @param policyDefinition The definition of policy to validate against. - * @returns json-rules-engine Engine instance. - */ -function getEngine(policyDefinition: PolicyDefinition): Engine { - const engine = new Engine([], { - replaceFactsInEventParams: true, - allowUndefinedFacts: true, - }); - CustomOperators.forEach((o) => engine.addOperator(o)); - policyDefinition.commonRules.forEach((r) => engine.addRule(r)); - return engine; -} - -/** - * Creates a json-rules-engine Engine object for each permit type specified in - * the policy definition, added to a Map. All rules specific to each permit type - * will be added to the appropriate Engine instance. - * @param policy orbc-policy-engine Policy object containg current policy definition. - * @returns Map of json-rules-engines, one per permit type, keyed on permit type ID. - */ -export function getRulesEngines(policy: Policy): Map { - const engineMap: Map = new Map(); - - policy.policyDefinition?.permitTypes?.forEach((permitType) => { - const engine = getEngine(policy.policyDefinition); - - permitType.rules?.forEach((r) => engine.addRule(r)); - - // Convert the cost definitions into proper rules so the - // results can be added to the validation run. This takes advantage - // of the replaceFactsInEventParams option for the json-rules-engine - // Engine object. - permitType.costRules?.forEach((c) => { - const costRule: RuleProperties = { - conditions: { - all: [ - { - fact: c.fact, - params: c.params, - operator: 'greaterThanInclusive', - value: 0, - }, - ], - }, - event: { - type: 'cost', - params: { - message: 'Calculated permit cost', - code: 'cost-value', - cost: c, - }, - }, - }; - - engine.addRule(costRule); - }); - - let allowedVehicles: Array; - if (permitType.allowedVehicles && permitType.allowedVehicles.length > 0) { - allowedVehicles = permitType.allowedVehicles; - } else { - // If no allowed vehicles are specified, none are permitted - allowedVehicles = []; - } - // Each permit type should have a list of allowed vehicles configured. - engine.addFact(PolicyFacts.AllowedVehicles.toString(), allowedVehicles); - - engineMap.set(permitType.id, engine); - }); - - return engineMap; -} diff --git a/policy-engine/src/index.ts b/policy-engine/src/index.ts deleted file mode 100644 index 77dc4546b..000000000 --- a/policy-engine/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { Policy } from './policy-engine'; -export { ValidationResult } from './validation-result'; -export { ValidationResults } from './validation-results'; diff --git a/policy-engine/src/policy-engine.ts b/policy-engine/src/policy-engine.ts deleted file mode 100644 index 98ed82270..000000000 --- a/policy-engine/src/policy-engine.ts +++ /dev/null @@ -1,794 +0,0 @@ -import { - PolicyDefinition, - PermitType, - Commodity, - VehicleType, - SizeDimension, - RegionSizeOverride, - TrailerSize, -} from 'onroute-policy-engine/types'; -import { - extractIdentifiedObjects, - intersectIdMaps, -} from './helper/lists.helper'; -import { Engine, EngineResult } from 'json-rules-engine'; -import { getRulesEngines } from './helper/rules-engine.helper'; -import { ValidationResults } from './validation-results'; -import { ValidationResult } from './validation-result'; -import { addRuntimeFacts } from './helper/facts.helper'; -import { - AccessoryVehicleType, - ValidationResultType, - ValidationResultCode, - RelativePosition, - VehicleTypes, -} from 'onroute-policy-engine/enum'; - -/** Class representing commercial vehicle policy. */ -export class Policy { - /** Object representation of policy definition and rules. */ - policyDefinition: PolicyDefinition; - - /** - * Map of json-rules-engine instances, one for each - * permit type defined in the permit definition. Keyed - * on permit type id. - */ - rulesEngines: Map; - - /** - * Creates a new Policy object. - * @param definition Policy definition to validate permits against - */ - constructor(definition: PolicyDefinition) { - this.policyDefinition = definition; - - this.rulesEngines = getRulesEngines(this); - } - - /** - * Validates a permit application against the policy definition. - * @param permit The permit application to validate against policy - * @returns Results of the validation of the permit application - */ - async validate(permit: any): Promise { - const engine = this.rulesEngines.get(permit.permitType); - if (!engine) { - // If the permit type being validated has no configuration in the - // policy definition, there will be no engine for it. Return with - // a single violation result. - const validationResult: ValidationResults = new ValidationResults(); - validationResult.violations.push( - new ValidationResult( - ValidationResultType.Violation, - ValidationResultCode.PermitTypeUnknown, - `Permit type ${permit.permitType} unknown`, - ), - ); - return validationResult; - } else { - // Add facts specific to this run of the validation (e.g. validation - // date for comparison against start date of the permit). - addRuntimeFacts(engine, this); - - // Run the json-rules-engine against the permit facts - const engineResult: EngineResult = await engine.run(permit); - - // Wrap the json-rules-engine result in a ValidationResult object - return new ValidationResults(engineResult); - } - } - - /** - * Gets a list of all configured permit types in the policy definition. - * @returns Map of permit type IDs to permit type names. - */ - getPermitTypes(): Map { - const permitTypes = extractIdentifiedObjects( - this.policyDefinition.permitTypes, - ); - return permitTypes; - } - - /** - * Gets a list of all configured geographic regions in the policy definition. - * @returns Map of geographic region IDs to region names. - */ - getGeographicRegions(): Map { - const geographicRegions = extractIdentifiedObjects( - this.policyDefinition.geographicRegions, - ); - return geographicRegions; - } - - /** - * Gets a list of all configured commodities in the policy definition. - * @param permitTypeId Return only commodities valid for this permit type. - * If not supplied, return all commodities configured in policy. If permit - * type does not require commodity (e.g. 'TROS'), return empty map. - * @returns Map of commodity IDs to commodity names. - */ - getCommodities(permitTypeId?: string): Map { - const permitType = this.getPermitTypeDefinition(permitTypeId); - if (!permitTypeId) { - // Permit type not supplied, return all commodities - return extractIdentifiedObjects(this.policyDefinition.commodities); - } else if (!permitType) { - // Permit type invalid, throw error - throw new Error(`Invalid permit type supplied: '${permitTypeId}'`); - } else if (!permitType.commodityRequired) { - return new Map(); - } else { - // Commodities for oversize permits are those which have at least one - // power unit defined in the size dimension object of the commodity. - const commoditiesForOS = extractIdentifiedObjects( - this.policyDefinition.commodities.filter((c) => { - if (c.size) { - if (c.size.powerUnits) { - if (c.size.powerUnits.length > 0) { - return true; - } - } - } - return false; - }), - permitType.allowedCommodities, - ); - - // TODO when implementing overweight. Stub for now. - const commoditiesForOW: Map = new Map(); - - if ( - permitType.sizeDimensionRequired && - permitType.weightDimensionRequired - ) { - return intersectIdMaps(commoditiesForOS, commoditiesForOW); - } else if (permitType.sizeDimensionRequired) { - return commoditiesForOS; - } else if (permitType.weightDimensionRequired) { - return commoditiesForOW; - } else { - // This permit type requires commodity selection, but does not - // require size or weight dimensions. For these permit types, the - // allowedCommodities must be configured in policy. Return these. - const commodities = extractIdentifiedObjects( - this.policyDefinition.commodities, - permitType.allowedCommodities, - ); - return commodities; - } - } - } - - /** - * Gets a list of all allowable vehicle types for the given permit type - * and commodity. Includes all power units and trailers. - * @param permitTypeId ID of the permit type to get vehicles for - * @param commodityId ID of the commodity to get vehicles for - * @returns Map of two separate maps, one keyed on 'powerUnits' and the - * other keyed on 'trailers'. Each map consists of a string id for the - * vehicle, and a string common name for the vehicle. - */ - getPermittableVehicleTypes( - permitTypeId: string, - commodityId: string, - ): Map> { - if (!permitTypeId || !commodityId) { - throw new Error('Missing permitTypeId and/or commodityId'); - } - - const permitType = this.getPermitTypeDefinition(permitTypeId); - if (!permitType) { - throw new Error(`Invalid permit type: '${permitTypeId}'`); - } - - if (!permitType.commodityRequired) { - // If commodity is not required, this method cannot calculate the - // permittable vehicle types since they will not be configured. - throw new Error( - `Permit type '${permitTypeId}' does not require a commodity`, - ); - } - - let puTypes: Map; - let trTypes: Map; - const allowableCommodities = this.getCommodities(permitTypeId); - - if (!allowableCommodities.has(commodityId)) { - // If the commodity is not allowed for the permit type, no power - // units or trailers are allowed. - puTypes = new Map(); - trTypes = new Map(); - } else { - const commodity = this.getCommodityDefinition(commodityId); - if (!commodity) { - throw new Error( - `Commodity id '${commodityId}' is not correctly configured in the policy definition`, - ); - } - - const puTypeIdsOS: Array | undefined = - commodity.size?.powerUnits?.map((p) => p.type); - const trTypeIdsOS: Array | undefined = []; - commodity.size?.powerUnits?.forEach((pu) => { - const trForPu = pu.trailers.map((t) => t.type); - if (trForPu) trTypeIdsOS.concat(trForPu); - }); - // TODO: implement along with overweight permits. Stub for now. - const puTypeIdsOW: Array = []; - const trTypeIdsOW: Array = []; - - const puTypesOS = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.powerUnitTypes, - puTypeIdsOS, - ); - const trTypesOS = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.trailerTypes, - trTypeIdsOS, - ); - const puTypesOW = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.powerUnitTypes, - puTypeIdsOW, - ); - const trTypesOW = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.trailerTypes, - trTypeIdsOW, - ); - - if ( - permitType.sizeDimensionRequired && - permitType.weightDimensionRequired - ) { - puTypes = intersectIdMaps(puTypesOS, puTypesOW); - trTypes = intersectIdMaps(trTypesOS, trTypesOW); - } else if (permitType.sizeDimensionRequired) { - puTypes = puTypesOS; - trTypes = trTypesOS; - } else if (permitType.weightDimensionRequired) { - puTypes = puTypesOW; - trTypes = trTypesOW; - } else { - // This permit type requires commodity selection, but does not - // require size or weight dimensions. For these permit types, the - // allowedVehicles must be configured in policy. Return all power - // units and trailers from this list. - puTypes = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.powerUnitTypes, - permitType.allowedVehicles, - ); - trTypes = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.trailerTypes, - permitType.allowedVehicles, - ); - } - } - - const vehicleTypes = new Map>(); - vehicleTypes.set(VehicleTypes.PowerUnits, puTypes); - vehicleTypes.set(VehicleTypes.Trailers, trTypes); - - return vehicleTypes; - } - - /** - * Gets a list of all allowable power unit types for the given permit type - * and commodity. - * @param permitTypeId ID of the permit type to get power units for - * @param commodityId ID of the commodity to get power units for - * @returns Map of power unit IDs to power unit names. - */ - getPermittablePowerUnitTypes( - permitTypeId: string, - commodityId: string, - ): Map { - const vehicleTypes = this.getPermittableVehicleTypes( - permitTypeId, - commodityId, - ); - const puTypes = vehicleTypes.get(VehicleTypes.PowerUnits); - return puTypes ?? new Map(); - } - - /** - * Gets the next permittable vehicles based on the supplied permit type, - * commodity, and current configuration. - * If the permit type does not require commodity or if the commodity - * is not valid for the permit type, this will return an empty map - * (meaning no vehicles are permittable). - * @param permitTypeId ID of the permit type to get vehicles for - * @param commodityId ID of the commodity to get vehicles for - * @param currentConfiguration Current vehicle configuration to which will be - * added the next permittable vehicle - * @returns Map of vehicle ID to vehicle name. Includes both power units and - * trailers in a single return value (if applicable). - */ - getNextPermittableVehicles( - permitTypeId: string, - commodityId: string, - currentConfiguration: Array, - ): Map { - if (!permitTypeId || !commodityId || !currentConfiguration) { - throw new Error( - 'Missing permitTypeId and/or commodityId and/or currentConfiguration', - ); - } - - const permitType = this.getPermitTypeDefinition(permitTypeId); - if (!permitType) { - throw new Error(`Invalid permit type: '${permitTypeId}'`); - } - - if (!permitType.commodityRequired) { - // If commodity is not required, this method cannot calculate the - // permittable vehicle types since they will not be configured. - throw new Error( - `Permit type '${permitTypeId}' does not require a commodity`, - ); - } - - const commodity = this.getCommodityDefinition(commodityId); - if (!commodity) { - throw new Error(`Invalid commodity type: '${commodityId}'`); - } - - if ( - !this.isConfigurationValid( - permitTypeId, - commodityId, - currentConfiguration, - true, - ) - ) { - // Invalid configuration, no vehicles permitted - return new Map(); - } - - let vehicleTypes = new Map(); - let vehicleTypeIds: Array | undefined; - const allVehicles: Array = - this.policyDefinition.vehicleTypes.powerUnitTypes.concat( - this.policyDefinition.vehicleTypes.trailerTypes, - ); - - if (currentConfiguration.length == 0) { - // The current configuration is empty, so return only the - // allowable power units. - vehicleTypeIds = commodity.size?.powerUnits?.map((p) => p.type); - } else { - const powerUnit = commodity.size?.powerUnits?.find( - (p) => p.type == currentConfiguration[0], - ); - const trailerIds = powerUnit?.trailers.map((t) => t.type); - if (currentConfiguration.length == 1) { - // Just a power unit, return the list of trailerIds for the - // power unit, plus jeep if any of the trailer Ids allow - // a jeep. - if ( - powerUnit?.trailers && - powerUnit?.trailers.filter((t) => t.jeep).length > 0 - ) { - trailerIds?.push(AccessoryVehicleType.Jeep); - } - vehicleTypeIds = trailerIds; - } else { - const lastVehicleId = - currentConfiguration[currentConfiguration.length - 1]; - switch (lastVehicleId) { - case AccessoryVehicleType.Jeep: - // If there is one jeep, there can be more - trailerIds?.push(AccessoryVehicleType.Jeep); - vehicleTypeIds = trailerIds; - break; - case AccessoryVehicleType.Booster: - // If there is one booster, there can be more - vehicleTypeIds = [AccessoryVehicleType.Booster]; - break; - default: - { - const trailer = powerUnit?.trailers.find( - (t) => t.type == lastVehicleId, - ); - if (trailer && trailer.booster) { - vehicleTypeIds = [AccessoryVehicleType.Booster]; - } else { - vehicleTypeIds = new Array(); - } - } - break; - } - } - } - - vehicleTypes = extractIdentifiedObjects(allVehicles, vehicleTypeIds); - - return vehicleTypes; - } - - /** - * Returns whether the supplied configuration is valid for the given permit type - * and commodity. If the permit type does not require a commodity, this method - * will return false. This will not validate incomplete configurations - if the - * current configuration has only a power unit this will return false even if the - * power unit is acceptable because there is no trailer which is mandatory. - * If this is called for a permit type that does not require commodity, or with - * a commodity not permitted for the permit type, it will return false. - * @param permitTypeId ID of the permit type to validate the configuration against - * @param commodityId ID of the commodity used for the configuration - * @param currentConfiguration Current vehicle configuration to validate - * @param validatePartial Whether to validate a partial configuration (e.g. one - * that does not include a trailer). This will just return whether or not there - * are any invalid vehicles in the configuration. If true, an empty current - * configuration will return true from this method. - */ - isConfigurationValid( - permitTypeId: string, - commodityId: string, - currentConfiguration: Array, - validatePartial: boolean = false, - ): boolean { - if (!permitTypeId || !commodityId || !currentConfiguration) { - throw new Error( - 'Missing permitTypeId and/or commodityId and/or currentConfiguration', - ); - } - - const permitType = this.getPermitTypeDefinition(permitTypeId); - if (!permitType) { - throw new Error(`Invalid permit type: '${permitTypeId}'`); - } - - if (!permitType.commodityRequired) { - // If commodity is not required, this method cannot calculate the - // permittable vehicle types since they will not be configured. - throw new Error( - `Permit type '${permitTypeId}' does not require a commodity`, - ); - } - - const commodity = this.getCommodityDefinition(commodityId); - if (!commodity) { - throw new Error(`Invalid commodity type: '${commodityId}'`); - } - - if (currentConfiguration.length == 0) { - // The current configuration is empty. Fine for partial, but - // invalid as a complete configuration. - return validatePartial; - } - - const powerUnit = commodity.size?.powerUnits?.find( - (p) => p.type == currentConfiguration[0], - ); - if (!powerUnit) { - // The power unit is not allowed for the commodity - return false; - } - - let trailerIds = powerUnit.trailers.map((t) => t.type); - let jeepAllowed: boolean = true; - let trailerAllowed: boolean = true; - let boosterAllowed: boolean = false; - - for (let i = 1; i < currentConfiguration.length; i++) { - switch (currentConfiguration[i]) { - case AccessoryVehicleType.Jeep: - if (!jeepAllowed) { - return false; - } - // Filter allowed trailers to only those that allow jeeps - trailerIds = powerUnit.trailers - .filter((t) => t.jeep) - .map((t) => t.type); - break; - case AccessoryVehicleType.Booster: - if (!boosterAllowed) { - return false; - } - break; - default: - if (!trailerAllowed) { - return false; - } - { - const trailer = powerUnit.trailers.find( - (t) => t.type == currentConfiguration[i], - ); - if (!trailer || !trailerIds.includes(currentConfiguration[i])) { - // This trailer is not permitted for this power unit - return false; - } - jeepAllowed = false; - trailerAllowed = false; - boosterAllowed = trailer.booster; - } - break; - } - } - // We are still here, so configuration is valid. If there is a trailer - // it is a valid final configuration, otherwise it is a valid partial - // configuration. - return !trailerAllowed || validatePartial; - } - - /** - * Gets the maximum size dimensions for a given permit type, commodity, - * and vehicle configuration. A vehicle configuration's size dimension is - * dictated by the configuration on the trailer. For configurations that - * are just a power unit, a pseudo trailer type 'NONE' is used and the - * size dimension is configured on that. Accessory category trailers - * (e.g. jeeps and boosters) are not used for configuration since they - * do not impact the size dimension in policy. - * @param permitTypeId ID of the permit type to get size dimension for - * @param commodityId ID of the commodity to get size dimension for - * @param currentConfiguration Current vehicle configuration to get size dimension for - * @param regions List of regions the vehicle will be traveling in. If not - * supplied this defaults to the most restrictive size dimension (if multiple - * are configured). - * @returns SizeDimension for the given permit type, commodity, and configuration - */ - getSizeDimension( - permitTypeId: string, - commodityId: string, - configuration: Array, - regions?: Array, - ): SizeDimension | null { - // Initialize the sizeDimension with global defaults - let sizeDimension: SizeDimension | null = null; - - // Validate that the configuration is permittable - if (this.isConfigurationValid(permitTypeId, commodityId, configuration)) { - // Get the power unit that has the size configuration - const commodity = this.getCommodityDefinition(commodityId); - const powerUnit = commodity?.size?.powerUnits?.find( - (pu) => pu.type == configuration[0], - ); - if (!powerUnit) { - throw new Error( - `Configuration error: could not find power unit '${configuration[0]}'`, - ); - } - - // Get the last trailer in the configuration that can be used for size calculations - const sizeTrailer: string | undefined = Array.from(configuration) - .reverse() - .find((vehicleId) => { - const trailerType = - this.policyDefinition.vehicleTypes.trailerTypes?.find( - (v) => v.id == vehicleId, - ); - return !trailerType?.ignoreForSizeDimensions; - }); - - if (sizeTrailer) { - // Get the trailer size dimension array for the commodity - const trailer: TrailerSize | undefined = powerUnit.trailers?.find( - (t) => t.type == sizeTrailer, - ); - - let sizeDimensions: Array; - - if ( - trailer && - trailer.sizeDimensions && - trailer.sizeDimensions.length > 0 - ) { - sizeDimensions = trailer.sizeDimensions; - } else { - sizeDimensions = new Array(); - } - - const sizeDimensionConfigured = this.selectCorrectSizeDimension( - sizeDimensions, - configuration, - sizeTrailer, - ); - - if (sizeDimensionConfigured) { - // Adjust the size dimensions for the regions travelled, if needed - if (!regions) { - // If we are not provided a list of regions, assume we are - // traveling through all regions (will take the most restrictive - // of all dimensions in all cases). - console.log('Assuming all regions for size dimension lookup'); - regions = this.policyDefinition.geographicRegions.map((g) => g.id); - } else { - console.log(`Using '${regions}' as regions for size lookup`); - } - const valueOverrides: Array = []; - regions?.forEach((r) => { - let valueOverride: RegionSizeOverride; - // Check to see if this region has specific size dimensions - const regionOverride = sizeDimensionConfigured.regions?.find( - (cr) => cr.region == r, - ); - if (!regionOverride) { - // The region travelled does not have an override, so it assumes - // the dimensions of the bc default. - valueOverride = { - region: r, - h: sizeDimensionConfigured.h, - w: sizeDimensionConfigured.w, - l: sizeDimensionConfigured.l, - }; - } else { - // There is a region override with one or more dimensions. Use this - // value preferentially, using default dimension if not supplied - valueOverride = { - region: r, - h: regionOverride.h ?? sizeDimensionConfigured.h, - w: regionOverride.w ?? sizeDimensionConfigured.w, - l: regionOverride.l ?? sizeDimensionConfigured.l, - }; - } - valueOverrides.push(valueOverride); - }); - - // At this point we have a complete set of size dimensions for each of - // the regions that will be traversed. Take the minimum value of each - // dimension for the final value. - const minimumOverrides = valueOverrides.reduce( - (accumulator, currentValue) => { - if (typeof currentValue.h !== 'undefined') { - if (typeof accumulator.h === 'undefined') { - accumulator.h = currentValue.h; - } else { - accumulator.h = Math.min(accumulator.h, currentValue.h); - } - } - if (typeof currentValue.w !== 'undefined') { - if (typeof accumulator.w === 'undefined') { - accumulator.w = currentValue.w; - } else { - accumulator.w = Math.min(accumulator.w, currentValue.w); - } - } - if (typeof currentValue.l !== 'undefined') { - if (typeof accumulator.l === 'undefined') { - accumulator.l = currentValue.l; - } else { - accumulator.l = Math.min(accumulator.l, currentValue.l); - } - } - return accumulator; - }, - { region: '' }, - ); - - sizeDimension = { - rp: sizeDimensionConfigured.rp, - fp: sizeDimensionConfigured.fp, - h: minimumOverrides.h, - w: minimumOverrides.w, - l: minimumOverrides.l, - }; - } else { - console.log('Size dimension not configured for trailer'); - } - } else { - console.log('Could not locate trailer to use for size dimension'); - } - } else { - console.log('Configuration is invalid, returning null size dimension'); - } - - return sizeDimension; - } - - /** - * Selects the correct size dimension from a list of potential candidates, based - * on the modifier of each dimension. If none of the modifiers match, returns - * null. - * @param sizeDimensions Size dimension options to choose from - * @param currentConfiguration The full vehicle configuration - */ - selectCorrectSizeDimension( - sizeDimensions: Array, - configuration: Array, - sizeTrailer: string, - ): SizeDimension | null { - let matchingDimension: SizeDimension | null = null; - - if (sizeDimensions?.length > 0 && configuration?.length > 0) { - for (const sizeDimension of sizeDimensions) { - if (!sizeDimension.modifiers) { - // This dimension has no modifiers, so it is the default if none of - // the other specific modifiers match. - matchingDimension = sizeDimension; - console.log('Using default size dimension, no modifiers specified'); - } else { - const sizeTrailerIndex = configuration.findIndex( - (c) => sizeTrailer == c, - ); - const isMatch: boolean | undefined = sizeDimension.modifiers?.every( - (m) => { - if (!m.type) { - return false; - } - switch (m.position) { - case RelativePosition.First.toString(): - return configuration[0] == m.type; - case RelativePosition.Last.toString(): - return configuration[configuration.length - 1] == m.type; - case RelativePosition.Before.toString(): - return configuration[sizeTrailerIndex - 1] == m.type; - case RelativePosition.After.toString(): - return configuration[sizeTrailerIndex + 1] == m.type; - default: - return false; - } - }, - ); - // As soon as we find a dimension with matching modifiers, - // set it and return it. - if (isMatch) { - matchingDimension = sizeDimension; - break; - } - } - } - } else { - console.log( - 'Either size dimensions or configuration array is null, no matching dimension returned', - ); - } - return matchingDimension; - } - - /** - * Gets a list of all configured power unit types in the policy definition. - * @returns Map of power unit type IDs to power unit type names. - */ - getPowerUnitTypes(): Map { - const powerUnitTypes = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.powerUnitTypes, - ); - return powerUnitTypes; - } - - /** - * Gets a list of all configured trailer types in the policy definition. - * @returns Map of trailer type IDs to trailer type names. - */ - getTrailerTypes(): Map { - const trailerTypes = extractIdentifiedObjects( - this.policyDefinition.vehicleTypes.trailerTypes, - ); - return trailerTypes; - } - - /** - * Gets a full PermitType definition by ID. - * @param type Type ID of the permit definition to return. - * @returns PermitType definition for the supplied ID. - */ - getPermitTypeDefinition(type?: string): PermitType | null { - let permitType: PermitType | undefined; - if (this.policyDefinition.permitTypes) { - permitType = this.policyDefinition.permitTypes.find((p) => p.id === type); - } - - if (permitType) { - return permitType; - } else { - return null; - } - } - - /** - * Gets a full Commodity definition by ID - * @param type Type ID of the commodity to return. - * @returns Commodity definition for the supplied ID. - */ - getCommodityDefinition(type?: string): Commodity | null { - let commodity: Commodity | undefined; - if (this.policyDefinition.commodities) { - commodity = this.policyDefinition.commodities.find((c) => c.id === type); - } - - if (commodity) { - return commodity; - } else { - return null; - } - } -} diff --git a/policy-engine/src/rule-operator/custom-operators.ts b/policy-engine/src/rule-operator/custom-operators.ts deleted file mode 100644 index 297c38726..000000000 --- a/policy-engine/src/rule-operator/custom-operators.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Operator } from 'json-rules-engine'; -import { PermitAppInfo } from 'onroute-policy-engine/enum'; -import dayjs from 'dayjs'; - -function stringValidator(a: any): boolean { - return typeof a === 'string'; -} - -function dateStringValidator(a: any): boolean { - const d = dayjs(a, PermitAppInfo.PermitDateFormat.toString()); - return d.isValid(); -} - -const CustomOperators: Array = []; - -CustomOperators.push( - new Operator( - 'stringMinimumLength', - (a: string, b: number) => { - if (!a) return false; - - return a.trim().length >= b; - }, - stringValidator, - ), -); - -CustomOperators.push( - new Operator( - 'dateLessThan', - (a: string, b: string) => { - const firstDate = dayjs(a, PermitAppInfo.PermitDateFormat.toString()); - const secondDate = dayjs(b, PermitAppInfo.PermitDateFormat.toString()); - return firstDate.diff(secondDate) < 0; - }, - dateStringValidator, - ), -); - -CustomOperators.push( - new Operator( - 'regex', - (a: string, b: string) => RegExp(b).exec(a) !== null, - stringValidator, - ), -); - -export { CustomOperators }; diff --git a/policy-engine/src/types/commodity.ts b/policy-engine/src/types/commodity.ts deleted file mode 100644 index b5bbd8ca2..000000000 --- a/policy-engine/src/types/commodity.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { - IdentifiedObject, - VehicleSizeConfiguration, - PowerUnitWeight, - TrailerWeight, -} from 'onroute-policy-engine/types'; - -export type Commodity = IdentifiedObject & { - size?: CommoditySize; - weight?: CommodityWeight; -}; - -export type CommoditySize = { - powerUnits?: Array; -}; - -export type CommodityWeight = { - powerUnits?: Array; - trailers?: Array; -}; diff --git a/policy-engine/src/types/cost-rule.ts b/policy-engine/src/types/cost-rule.ts deleted file mode 100644 index d910c1ebf..000000000 --- a/policy-engine/src/types/cost-rule.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type CostRule = { - fact: string; - params: Record; -}; diff --git a/policy-engine/src/types/dimension-modifier.ts b/policy-engine/src/types/dimension-modifier.ts deleted file mode 100644 index 2669d54ca..000000000 --- a/policy-engine/src/types/dimension-modifier.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { SelfIssuable } from 'onroute-policy-engine/types'; - -export type DimensionModifier = SelfIssuable & { - position: string; - type?: string; - category?: string; - axles?: number; - minInterAxleSpacing?: number; - maxInterAxleSpacing?: number; -}; diff --git a/policy-engine/src/types/facts.ts b/policy-engine/src/types/facts.ts deleted file mode 100644 index 20d65eec9..000000000 --- a/policy-engine/src/types/facts.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type PermitFacts = { - companyName?: string; - duration?: number; - permitType?: string; - startDate?: string; - vehicleIdentificationNumber?: string; - vehiclePlate?: string; - vehicleType?: string; - app?: object; -}; diff --git a/policy-engine/src/types/geographic-region.ts b/policy-engine/src/types/geographic-region.ts deleted file mode 100644 index 254770c6b..000000000 --- a/policy-engine/src/types/geographic-region.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IdentifiedObject } from 'onroute-policy-engine/types'; - -export type GeographicRegion = IdentifiedObject & { - description?: string; -}; diff --git a/policy-engine/src/types/identified-object.ts b/policy-engine/src/types/identified-object.ts deleted file mode 100644 index f774902cf..000000000 --- a/policy-engine/src/types/identified-object.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type IdentifiedObject = { - id: string; - name: string; -}; diff --git a/policy-engine/src/types/index.ts b/policy-engine/src/types/index.ts deleted file mode 100644 index 2dc59cd8f..000000000 --- a/policy-engine/src/types/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -export { Commodity, CommoditySize, CommodityWeight } from './commodity'; -export { CostRule } from './cost-rule'; -export { DimensionModifier } from './dimension-modifier'; -export { PermitFacts } from './facts'; -export { GeographicRegion } from './geographic-region'; -export { IdentifiedObject } from './identified-object'; -export { PermitType } from './permit-type'; -export { PolicyDefinition } from './policy-definition'; -export { Matrix, RangeMatrix } from './range-matrix'; -export { RegionSizeOverride } from './region-size-override'; -export { SelfIssuable } from './self-issuable'; -export { SizeDimension } from './size-dimension'; -export { - VehicleCategory, - PowerUnitCategory, - TrailerCategory, - VehicleCategories, -} from './vehicle-category'; -export { - VehicleType, - PowerUnitType, - TrailerType, - VehicleTypes, -} from './vehicle-type'; -export { - Vehicle, - VehicleSizeConfiguration, - TrailerSize, - PowerUnitWeight, - TrailerWeight, -} from './vehicle'; -export { - WeightDimension, - PowerUnitWeightDimension, - TrailerWeightDimension, - DefaultWeightDimensions, -} from './weight-dimension'; diff --git a/policy-engine/src/types/permit-type.ts b/policy-engine/src/types/permit-type.ts deleted file mode 100644 index 1a5280c4a..000000000 --- a/policy-engine/src/types/permit-type.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { RuleProperties } from 'json-rules-engine'; -import { CostRule, IdentifiedObject } from 'onroute-policy-engine/types'; - -export type PermitType = IdentifiedObject & { - routingRequired: boolean; - weightDimensionRequired: boolean; - sizeDimensionRequired: boolean; - commodityRequired: boolean; - allowedVehicles: Array; - allowedCommodities?: Array; - rules?: Array; - costRules?: Array; -}; diff --git a/policy-engine/src/types/policy-definition.ts b/policy-engine/src/types/policy-definition.ts deleted file mode 100644 index 4efcb78a1..000000000 --- a/policy-engine/src/types/policy-definition.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - GeographicRegion, - PermitType, - DefaultWeightDimensions, - VehicleTypes, - Commodity, - SizeDimension, - VehicleCategories, - RangeMatrix, -} from 'onroute-policy-engine/types'; -import { RuleProperties } from 'json-rules-engine'; - -export type PolicyDefinition = { - version: string; - geographicRegions: Array; - permitTypes: Array; - commonRules: Array; - globalWeightDefaults: DefaultWeightDimensions; - globalSizeDefaults: SizeDimension; - vehicleCategories: VehicleCategories; - vehicleTypes: VehicleTypes; - commodities: Array; - rangeMatrices?: Array; -}; diff --git a/policy-engine/src/types/range-matrix.ts b/policy-engine/src/types/range-matrix.ts deleted file mode 100644 index 145178ef6..000000000 --- a/policy-engine/src/types/range-matrix.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IdentifiedObject } from 'onroute-policy-engine/types'; - -export type RangeMatrix = IdentifiedObject & { - matrix: Matrix[]; -}; - -export type Matrix = { - min?: number; - max?: number; - value: number; -}; diff --git a/policy-engine/src/types/region-size-override.ts b/policy-engine/src/types/region-size-override.ts deleted file mode 100644 index 92c17e028..000000000 --- a/policy-engine/src/types/region-size-override.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type RegionSizeOverride = { - region: string; - w?: number; - h?: number; - l?: number; -}; diff --git a/policy-engine/src/types/self-issuable.ts b/policy-engine/src/types/self-issuable.ts deleted file mode 100644 index fcc8ab81c..000000000 --- a/policy-engine/src/types/self-issuable.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type SelfIssuable = { - selfIssue?: boolean; -}; diff --git a/policy-engine/src/types/size-dimension.ts b/policy-engine/src/types/size-dimension.ts deleted file mode 100644 index 942c0db08..000000000 --- a/policy-engine/src/types/size-dimension.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { - DimensionModifier, - RegionSizeOverride, - SelfIssuable, -} from 'onroute-policy-engine/types'; - -export type SizeDimension = SelfIssuable & { - fp?: number; - rp?: number; - w?: number; - h?: number; - l?: number; - modifiers?: Array; - regions?: Array; -}; diff --git a/policy-engine/src/types/vehicle-category.ts b/policy-engine/src/types/vehicle-category.ts deleted file mode 100644 index 65912b6f9..000000000 --- a/policy-engine/src/types/vehicle-category.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { - IdentifiedObject, - SizeDimension, - PowerUnitWeightDimension, - TrailerWeightDimension, -} from 'onroute-policy-engine/types'; - -export type VehicleCategory = IdentifiedObject & { - defaultSizeDimensions?: SizeDimension; -}; - -export type PowerUnitCategory = VehicleCategory & { - defaultWeightDimensions?: Array; -}; - -export type TrailerCategory = VehicleCategory & { - defaultWeightDimensions?: Array; -}; - -export type VehicleCategories = { - powerUnitCategories: Array; - trailerCategories: Array; -}; diff --git a/policy-engine/src/types/vehicle-type.ts b/policy-engine/src/types/vehicle-type.ts deleted file mode 100644 index faef34df4..000000000 --- a/policy-engine/src/types/vehicle-type.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - IdentifiedObject, - SizeDimension, - PowerUnitWeightDimension, - TrailerWeightDimension, -} from 'onroute-policy-engine/types'; - -export type VehicleType = IdentifiedObject & { - category: string; - defaultSizeDimensions?: SizeDimension; - ignoreForSizeDimensions?: boolean; -}; - -export type PowerUnitType = VehicleType & { - defaultWeightDimensions?: Array; -}; - -export type TrailerType = VehicleType & { - defaultWeightDimensions?: Array; -}; - -export type VehicleTypes = { - powerUnitTypes: Array; - trailerTypes: Array; -}; diff --git a/policy-engine/src/types/vehicle.ts b/policy-engine/src/types/vehicle.ts deleted file mode 100644 index 4d557feb0..000000000 --- a/policy-engine/src/types/vehicle.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - SelfIssuable, - SizeDimension, - PowerUnitWeightDimension, - TrailerWeightDimension, -} from 'onroute-policy-engine/types'; - -export type Vehicle = SelfIssuable & { - type: string; -}; - -export type VehicleSizeConfiguration = Vehicle & { - trailers: Array; -}; - -export type TrailerSize = Vehicle & { - sizeDimensions?: Array; - jeep: boolean; - booster: boolean; -}; - -export type PowerUnitWeight = Vehicle & { - weightDimensions?: Array; -}; - -export type TrailerWeight = Vehicle & { - weightDimensions?: Array; -}; diff --git a/policy-engine/src/types/weight-dimension.ts b/policy-engine/src/types/weight-dimension.ts deleted file mode 100644 index df22b7ce8..000000000 --- a/policy-engine/src/types/weight-dimension.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { DimensionModifier, SelfIssuable } from 'onroute-policy-engine/types'; - -export type WeightDimension = SelfIssuable & { - axles: number; - modifiers?: Array; -}; - -export type PowerUnitWeightDimension = WeightDimension & { - saLegal?: number; - saPermittable?: number; - daLegal?: number; - daPermittable?: number; -}; - -export type TrailerWeightDimension = WeightDimension & { - legal?: number; - permittable?: number; -}; - -export type DefaultWeightDimensions = { - powerUnits: Array; - trailers: Array; -}; diff --git a/policy-engine/src/validation-result.ts b/policy-engine/src/validation-result.ts deleted file mode 100644 index 9face0a63..000000000 --- a/policy-engine/src/validation-result.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Represents a single validation result when a permit application is - * validated against policy. A single validation run can result in multiple - * validation result messages. - */ -export class ValidationResult { - /** - * Creates a new ValidationResult from the supplied type, code, and message. - * - * @param type type of result, one of the ValidationResultType enum - * @param code code for identifying common categories of results - * @param message text message describing the result - */ - constructor(type: string, code: string, message: string) { - this.type = type; - this.code = code; - this.message = message; - } - - type: string; - code: string; - message: string; - fieldReference?: string; - cost?: number; -} diff --git a/policy-engine/src/validation-results.ts b/policy-engine/src/validation-results.ts deleted file mode 100644 index 99fd395bc..000000000 --- a/policy-engine/src/validation-results.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { EngineResult } from 'json-rules-engine'; -import { ValidationResultType } from './enum/validation-result-type'; -import { ValidationResultCode } from './enum/validation-result-code'; -import { ValidationResult } from './validation-result'; - -/** Represents the results of a permit application validation against policy */ -export class ValidationResults { - /** Array of policy violations found during validation. */ - violations: Array = []; - /** - * Array of additional requirements found during validation. For example, - * a permit may require that other additional permits be applied for in - * order to be legal. - */ - requirements: Array = []; - /** Array of policy warnings found during validation. */ - warnings: Array = []; - /** - * Array of policy messages found during validation. These should be - * considered informational only and do not impact the validity of the - * permit. - */ - information: Array = []; - /** - * Array of cost messages, based on cost rules. If there are more than - * one cost message, all should be summed to get the total permit cost. - */ - cost: Array = []; - - /** - * Creates a new ValidationResults from the json-rules-engine result. - * Populates the violations, requirements, warnings, and messages arrays - * based on the events in the json-rules-engine result. - * @param engineResult json-rules-engine run result. - */ - constructor(engineResult?: EngineResult) { - if (engineResult) { - engineResult.events.forEach((e) => { - const message: string = - e.params?.message ?? - `Unknown message: params=${JSON.stringify(e.params)}`; - const code: string = - e.params?.code ?? ValidationResultCode.GeneralResult; - const type: string = - e.type ?? ValidationResultType.Violation.toString(); - - const result: ValidationResult = new ValidationResult( - type, - code, - message, - ); - result.fieldReference = e.params?.fieldReference; - result.cost = e.params?.cost; - - switch (type) { - case ValidationResultType.Violation: - this.violations.push(result); - break; - case ValidationResultType.Requirement: - this.requirements.push(result); - break; - case ValidationResultType.Warning: - this.warnings.push(result); - break; - case ValidationResultType.Information: - this.information.push(result); - break; - case ValidationResultType.Cost: - this.cost.push(result); - break; - default: - // Treat any unknown validation event as a violation since - // it is an unexpected scenario. - console.log('Unknown validation event encountered'); - this.violations.push( - new ValidationResult( - ValidationResultType.Violation, - ValidationResultCode.GeneralResult, - 'Unknown validation event encountered', - ), - ); - } - }); - } - } -} diff --git a/policy-engine/tsconfig.json b/policy-engine/tsconfig.json deleted file mode 100644 index 1fb473208..000000000 --- a/policy-engine/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "module": "nodenext", - "strict": true, - "allowUnreachableCode": false, - "declaration": true, - "outDir": "dist", - "target": "es2017", - "incremental": true, - "skipLibCheck": true, - "esModuleInterop": true, - "rootDir": "./src" - }, - "include": [ - "src/**/*", - "**/*.spec.ts", - "src/_test/permit-app/permit-application.type.ts" ] -} \ No newline at end of file