@checkdigit/eslint-plugin 6.5.0 → 6.6.0-PR.66-fba9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,6 +13,7 @@ Copyright (c) 2021-2023 [Check Digit, LLC](https://checkdigit.com)
13
13
  - `@checkdigit/require-assert-predicate-rejects-throws`
14
14
  - `@checkdigit/object-literal-response`
15
15
  - `@checkdigit/no-test-import`
16
+ - `@checkdigit/no-side-effects`
16
17
  - `@checkdigit/no-promise-instance-method`
17
18
 
18
19
  ## Configurations
@@ -25,91 +25,7 @@ __export(src_exports, {
25
25
  module.exports = __toCommonJS(src_exports);
26
26
 
27
27
  // package.json
28
- var package_default = {
29
- name: "@checkdigit/eslint-plugin",
30
- version: "6.5.0",
31
- description: "Check Digit eslint plugins",
32
- keywords: [
33
- "eslint",
34
- "eslintplugin"
35
- ],
36
- homepage: "https://github.com/checkdigit/eslint-plugin#readme",
37
- bugs: {
38
- url: "https://github.com/checkdigit/eslint-plugin/issues"
39
- },
40
- repository: {
41
- type: "git",
42
- url: "https://github.com/checkdigit/eslint-plugin"
43
- },
44
- license: "MIT",
45
- author: "Check Digit, LLC",
46
- sideEffects: false,
47
- type: "module",
48
- exports: {
49
- ".": {
50
- types: "./dist-types/index.d.ts",
51
- require: "./dist-cjs/index.cjs",
52
- import: "./dist-mjs/index.mjs",
53
- default: "./dist-mjs/index.mjs"
54
- }
55
- },
56
- files: [
57
- "src",
58
- "dist-types",
59
- "dist-cjs",
60
- "dist-mjs",
61
- "!src/**/*.test.ts",
62
- "!src/**/*.spec.ts",
63
- "!dist-types/**/*.test.d.ts",
64
- "!dist-types/**/*.spec.d.ts",
65
- "!dist-cjs/**/*.test.cjs",
66
- "!dist-cjs/**/*.spec.cjs",
67
- "!dist-mjs/**/*.test.mjs",
68
- "!dist-mjs/**/*.spec.mjs",
69
- "SECURITY.md"
70
- ],
71
- scripts: {
72
- "build:dist-cjs": 'rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo "module.exports = module.exports.default;" >> dist-cjs/index.cjs && node dist-cjs/index.cjs',
73
- "build:dist-mjs": "rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs",
74
- "build:dist-types": "rimraf dist-types && npx builder --type=types --outDir=dist-types",
75
- "ci:compile": "tsc --noEmit",
76
- "ci:coverage": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=true',
77
- "ci:lint": "npm run lint",
78
- "ci:style": "npm run prettier",
79
- "ci:test": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=false',
80
- lint: "eslint --max-warnings 0 --ignore-path .gitignore .",
81
- "lint:fix": "eslint --ignore-path .gitignore . --fix",
82
- prepublishOnly: "npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs",
83
- prettier: "prettier --ignore-path .gitignore --list-different .",
84
- "prettier:fix": "prettier --ignore-path .gitignore --write .",
85
- test: "npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"
86
- },
87
- prettier: "@checkdigit/prettier-config",
88
- jest: {
89
- preset: "@checkdigit/jest-config"
90
- },
91
- devDependencies: {
92
- "@checkdigit/jest-config": "^6.0.2",
93
- "@checkdigit/prettier-config": "^5.5.0",
94
- "@checkdigit/typescript-config": "6.0.0",
95
- "@types/eslint": "^8.56.10",
96
- "@typescript-eslint/eslint-plugin": "^7.16.0",
97
- "@typescript-eslint/parser": "^7.16.0",
98
- "eslint-config-prettier": "^9.1.0",
99
- "eslint-plugin-eslint-plugin": "^6.2.0",
100
- "eslint-plugin-import": "^2.29.1",
101
- "eslint-plugin-no-only-tests": "^3.1.0",
102
- "eslint-plugin-no-secrets": "^1.0.2",
103
- "eslint-plugin-node": "^11.1.0",
104
- "eslint-plugin-sonarjs": "0.24.0"
105
- },
106
- peerDependencies: {
107
- eslint: ">=8 <9"
108
- },
109
- engines: {
110
- node: ">=20.13"
111
- }
112
- };
28
+ var package_default = { name: "@checkdigit/eslint-plugin", version: "6.6.0-PR.66-fba9", description: "Check Digit eslint plugins", keywords: ["eslint", "eslintplugin"], homepage: "https://github.com/checkdigit/eslint-plugin#readme", bugs: { url: "https://github.com/checkdigit/eslint-plugin/issues" }, repository: { type: "git", url: "https://github.com/checkdigit/eslint-plugin" }, license: "MIT", author: "Check Digit, LLC", sideEffects: false, type: "module", exports: { ".": { types: "./dist-types/index.d.ts", require: "./dist-cjs/index.cjs", import: "./dist-mjs/index.mjs", default: "./dist-mjs/index.mjs" } }, files: ["src", "dist-types", "dist-cjs", "dist-mjs", "!src/**/*.test.ts", "!src/**/*.spec.ts", "!dist-types/**/*.test.d.ts", "!dist-types/**/*.spec.d.ts", "!dist-cjs/**/*.test.cjs", "!dist-cjs/**/*.spec.cjs", "!dist-mjs/**/*.test.mjs", "!dist-mjs/**/*.spec.mjs", "SECURITY.md"], scripts: { "build:dist-cjs": 'rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo "module.exports = module.exports.default;" >> dist-cjs/index.cjs && node dist-cjs/index.cjs', "build:dist-mjs": "rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs", "build:dist-types": "rimraf dist-types && npx builder --type=types --outDir=dist-types", "ci:compile": "tsc --noEmit", "ci:coverage": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=true', "ci:lint": "npm run lint", "ci:style": "npm run prettier", "ci:test": 'NODE_OPTIONS="--disable-warning ExperimentalWarning --experimental-vm-modules" jest --coverage=false', lint: "eslint --max-warnings 0 --ignore-path .gitignore .", "lint:fix": "eslint --ignore-path .gitignore . --fix", prepublishOnly: "npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs", prettier: "prettier --ignore-path .gitignore --list-different .", "prettier:fix": "prettier --ignore-path .gitignore --write .", test: "npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style" }, prettier: "@checkdigit/prettier-config", jest: { preset: "@checkdigit/jest-config" }, devDependencies: { "@checkdigit/jest-config": "^6.0.2", "@checkdigit/prettier-config": "^5.5.0", "@checkdigit/typescript-config": "6.0.0", "@types/eslint": "^8.56.10", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "@typescript-eslint/rule-tester": "^7.13.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-eslint-plugin": "^6.2.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-no-only-tests": "^3.1.0", "eslint-plugin-no-secrets": "^1.0.2", "eslint-plugin-node": "^11.1.0", "eslint-plugin-sonarjs": "0.24.0" }, peerDependencies: { eslint: ">=8 <9" }, engines: { node: ">=20.13" } };
113
29
 
114
30
  // src/get-documentation-url.ts
115
31
  function getDocumentationUrl(ruleId3) {
@@ -415,6 +331,60 @@ var no_card_numbers_default = {
415
331
  }
416
332
  };
417
333
 
334
+ // src/no-side-effects.ts
335
+ function isAwaitExpression(statement) {
336
+ return statement.type === "ExpressionStatement" && statement.expression.type === "AwaitExpression";
337
+ }
338
+ function isCallExpressionCalleeMemberExpression(statement, excludedIdentifiers) {
339
+ return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "MemberExpression" && statement.expression.callee.object.type === "Identifier" && !excludedIdentifiers.includes(statement.expression.callee.object.name);
340
+ }
341
+ function isVariableDeclarationAwaitExpression(node) {
342
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "AwaitExpression";
343
+ }
344
+ function isVariableDeclarationIdentifier(node, excludedIdentifiers) {
345
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "CallExpression" && node.declarations[0].init.callee.type === "Identifier" && !excludedIdentifiers.includes(node.declarations[0].init.callee.name);
346
+ }
347
+ function isVariableDeclarationMemberExpression(node) {
348
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "CallExpression" && node.declarations[0].init.callee.type === "MemberExpression" && (node.declarations[0].init.callee.object.type === "NewExpression" && node.declarations[0].init.callee.object.callee.type === "Identifier" || node.declarations[0].init.callee.object.type === "Identifier");
349
+ }
350
+ var no_side_effects_default = {
351
+ meta: {
352
+ type: "problem",
353
+ docs: {
354
+ description: "Ensure no side effects can occur at the module-level",
355
+ url: "https://github.com/checkdigit/eslint-plugin"
356
+ },
357
+ schema: [
358
+ {
359
+ type: "object",
360
+ properties: {
361
+ excludedIdentifiers: {
362
+ type: "array",
363
+ items: { type: "string" }
364
+ }
365
+ },
366
+ additionalProperties: false
367
+ }
368
+ ]
369
+ },
370
+ create(context) {
371
+ const options = context.options[0] ?? {};
372
+ const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
373
+ return {
374
+ Program(node) {
375
+ node.body.forEach((statement) => {
376
+ if (isAwaitExpression(statement) || isCallExpressionCalleeMemberExpression(statement, excludedIdentifiers) || isVariableDeclarationAwaitExpression(statement) || isVariableDeclarationIdentifier(statement, excludedIdentifiers) || isVariableDeclarationMemberExpression(statement)) {
377
+ context.report({
378
+ node: statement,
379
+ message: "No side effects can occur at the module-level"
380
+ });
381
+ }
382
+ });
383
+ }
384
+ };
385
+ }
386
+ };
387
+
418
388
  // src/no-test-import.ts
419
389
  var DEFAULT_OPTIONS2 = { testFilePattern: "\\.(test|spec)(\\.\\w+)?$" };
420
390
  var NO_TEST_IMPORT = "NO_TEST_IMPORT";
@@ -883,6 +853,7 @@ var src_default = {
883
853
  "require-strict-assert": require_strict_assert_default,
884
854
  "no-test-import": no_test_import_default,
885
855
  "no-wallaby-comment": no_wallaby_comment_default,
856
+ "no-side-effects": no_side_effects_default,
886
857
  "regular-expression-comment": regular_expression_comment_default,
887
858
  "require-assert-predicate-rejects-throws": require_assert_predicate_rejects_throws_default,
888
859
  "object-literal-response": object_literal_response_default,
@@ -897,6 +868,7 @@ var src_default = {
897
868
  "@checkdigit/no-uuid": "error",
898
869
  "@checkdigit/require-strict-assert": "error",
899
870
  "@checkdigit/no-wallaby-comment": "error",
871
+ "@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log", "promisify"] }],
900
872
  "@checkdigit/regular-expression-comment": "error",
901
873
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
902
874
  "@checkdigit/object-literal-response": "error",
@@ -912,6 +884,7 @@ var src_default = {
912
884
  "@checkdigit/no-uuid": "error",
913
885
  "@checkdigit/require-strict-assert": "error",
914
886
  "@checkdigit/no-wallaby-comment": "off",
887
+ "@checkdigit/no-side-effects": "error",
915
888
  "@checkdigit/regular-expression-comment": "error",
916
889
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
917
890
  "@checkdigit/object-literal-response": "error",
@@ -922,5 +895,5 @@ var src_default = {
922
895
  }
923
896
  }
924
897
  };
925
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3BhY2thZ2UuanNvbiIsICIuLi9zcmMvZ2V0LWRvY3VtZW50YXRpb24tdXJsLnRzIiwgIi4uL3NyYy9pbnZhbGlkLWpzb24tc3RyaW5naWZ5LnRzIiwgIi4uL3NyYy9uby1wcm9taXNlLWluc3RhbmNlLW1ldGhvZC50cyIsICIuLi9zcmMvZmlsZS1wYXRoLWNvbW1lbnQudHMiLCAiLi4vc3JjL25vLWNhcmQtbnVtYmVycy50cyIsICIuLi9zcmMvbm8tdGVzdC1pbXBvcnQudHMiLCAiLi4vc3JjL25vLXV1aWQudHMiLCAiLi4vc3JjL25vLXdhbGxhYnktY29tbWVudC50cyIsICIuLi9zcmMvb2JqZWN0LWxpdGVyYWwtcmVzcG9uc2UudHMiLCAiLi4vc3JjL3JlZ3VsYXItZXhwcmVzc2lvbi1jb21tZW50LnRzIiwgIi4uL3NyYy9yZXF1aXJlLWFzc2VydC1wcmVkaWNhdGUtcmVqZWN0cy10aHJvd3MudHMiLCAiLi4vc3JjL3JlcXVpcmUtc3RyaWN0LWFzc2VydC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLGFBQWU7QUFBQSxFQUNmLFVBQVk7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFVBQVk7QUFBQSxFQUNaLE1BQVE7QUFBQSxJQUNOLEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxZQUFjO0FBQUEsSUFDWixNQUFRO0FBQUEsSUFDUixLQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsU0FBVztBQUFBLEVBQ1gsUUFBVTtBQUFBLEVBQ1YsYUFBZTtBQUFBLEVBQ2YsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLElBQ1QsS0FBSztBQUFBLE1BQ0gsT0FBUztBQUFBLE1BQ1QsU0FBVztBQUFBLE1BQ1gsUUFBVTtBQUFBLE1BQ1Ys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
898
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3BhY2thZ2UuanNvbiIsICIuLi9zcmMvZ2V0LWRvY3VtZW50YXRpb24tdXJsLnRzIiwgIi4uL3NyYy9pbnZhbGlkLWpzb24tc3RyaW5naWZ5LnRzIiwgIi4uL3NyYy9uby1wcm9taXNlLWluc3RhbmNlLW1ldGhvZC50cyIsICIuLi9zcmMvZmlsZS1wYXRoLWNvbW1lbnQudHMiLCAiLi4vc3JjL25vLWNhcmQtbnVtYmVycy50cyIsICIuLi9zcmMvbm8tc2lkZS1lZmZlY3RzLnRzIiwgIi4uL3NyYy9uby10ZXN0LWltcG9ydC50cyIsICIuLi9zcmMvbm8tdXVpZC50cyIsICIuLi9zcmMvbm8td2FsbGFieS1jb21tZW50LnRzIiwgIi4uL3NyYy9vYmplY3QtbGl0ZXJhbC1yZXNwb25zZS50cyIsICIuLi9zcmMvcmVndWxhci1leHByZXNzaW9uLWNvbW1lbnQudHMiLCAiLi4vc3JjL3JlcXVpcmUtYXNzZXJ0LXByZWRpY2F0ZS1yZWplY3RzLXRocm93cy50cyIsICIuLi9zcmMvcmVxdWlyZS1zdHJpY3QtYXNzZXJ0LnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSx3QkFBQyxNQUFPLDZCQUE0QixTQUFVLG9CQUFtQixhQUFjLDhCQUE2QixVQUFXLENBQUMsVUFBUyxjQUFjLEdBQUUsVUFBVyxzREFBcUQsTUFBTyxFQUFDLEtBQU0scURBQW9ELEdBQUUsWUFBYSxFQUFDLE1BQU8sT0FBTSxLQUFNLDhDQUE2QyxHQUFFLFNBQVUsT0FBTSxRQUFTLG9CQUFtQixhQUFjLE9BQU0sTUFBTyxVQUFTLFNBQVUsRUFBQyxLQUFJLEVBQUMsT0FBUSwyQkFBMEIsU0FBVSx3QkFBdUIsUUFBUyx3QkFBdUIsU0FBVSx1QkFBc0IsRUFBQyxHQUFFLE9BQVEsQ0FBQyxPQUFNLGNBQWEsWUFBVyxZQUFXLHFCQUFvQixxQkFBb0IsOEJBQTZCLDhCQUE2QiwyQkFBMEIsMkJBQTBCLDJCQUEwQiwyQkFBMEIsYUFBYSxHQUFFLFNBQVUsRUFBQyxrQkFBaUIsOE5BQStOLGtCQUFpQix5R0FBd0csb0JBQW1CLHFFQUFvRSxjQUFhLGdCQUFlLGVBQWMsdUdBQXdHLFdBQVUsZ0JBQWUsWUFBVyxvQkFBbUIsV0FBVSx3R0FBeUcsTUFBTyxzREFBcUQsWUFBVywyQ0FBMEMsZ0JBQWlCLGdGQUErRSxVQUFXLHdEQUF1RCxnQkFBZSwrQ0FBOEMsTUFBTywrRUFBOEUsR0FBRSxVQUFXLCtCQUE4QixNQUFPLEVBQUMsUUFBUywwQkFBeUIsR0FBRSxpQkFBa0IsRUFBQywyQkFBMEIsVUFBUywrQkFBOEIsVUFBUyxpQ0FBZ0MsU0FBUSxpQkFBZ0IsWUFBVyxvQ0FBbUMsV0FBVSw2QkFBNEIsV0FBVSxrQ0FBaUMsV0FBVSwwQkFBeUIsVUFBUywrQkFBOEIsVUFBUyx3QkFBdUIsV0FBVSwrQkFBOEIsVUFBUyw0QkFBMkIsVUFBUyxzQkFBcUIsV0FBVSx5QkFBd0IsU0FBUSxHQUFFLGtCQUFtQixFQUFDLFFBQVMsU0FBUSxHQUFFLFNBQVUsRUFBQyxNQUFPLFVBQVMsRUFBQzs7O0FDSWpxRixTQUFSLG9CQUFxQ0EsU0FBd0I7QUFDbEUsU0FBTyxHQUFHLGdCQUFZLFdBQVcsR0FBRyxVQUFVLGdCQUFZLE9BQU8sZUFBZUEsT0FBTTtBQUN4Rjs7O0FDS08sSUFBTSxTQUFTO0FBQ3RCLElBQU0seUJBQXlCO0FBQy9CLElBQU0sa0JBQWtCLENBQUMsZUFBZTtBQUV4QyxJQUFPLGlDQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUNFO0FBQUEsTUFDRixLQUFLLG9CQUFvQixNQUFNO0FBQUEsSUFDakM7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsVUFDTCxhQUFhO0FBQUEsVUFDYixNQUFNO0FBQUEsVUFDTixVQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixDQUFDLHNCQUFzQixHQUFHO0FBQUEsSUFDNUI7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULGdCQUFnQjtBQUFBLEVBQ2xCO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLFVBQVcsUUFBUSxRQUFRLENBQUMsS0FBSztBQUN2QyxVQUFNLCtCQUErQixRQUFRLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxRQUFRLEdBQUcsQ0FBQztBQUVwRixXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQU07QUFDbkIsWUFDRSxLQUFLLE9BQU8sU0FBUyxzQkFDckIsS0FBSyxPQUFPLE9BQU8sU0FBUyxnQkFDNUIsS0FBSyxPQUFPLE9BQU8sU0FBUyxVQUM1QixLQUFLLE9BQU8sU0FBUyxTQUFTLGdCQUM5QixLQUFLLE9BQU8sU0FBUyxTQUFTLGFBQzlCO0FBQ0EsZ0JBQU0sV0FBVyxLQUFLLFVBQVUsQ0FBQztBQUNqQyxjQUFJLGFBQWEsVUFBYSxTQUFTLFNBQVMsY0FBYztBQUM1RCx5Q0FBNkIsS0FBSyxDQUFDLGdDQUFnQztBQUNqRSxrQkFBSSw0QkFBNEIsS0FBSyxTQUFTLElBQUksR0FBRztBQUNuRCx3QkFBUSxPQUFPO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQSxXQUFXO0FBQUEsa0JBQ1gsTUFBTTtBQUFBLG9CQUNKLGVBQWUsU0FBUztBQUFBLGtCQUMxQjtBQUFBLGtCQUNBLFNBQVM7QUFBQSxvQkFDUDtBQUFBLHNCQUNFLFdBQVc7QUFBQSxzQkFDWCxNQUFNO0FBQUEsd0JBQ0osZUFBZSxTQUFTO0FBQUEsc0JBQzFCO0FBQUEsc0JBQ0EsSUFBSSxPQUFPO0FBQ1QsK0JBQU8sTUFBTSxZQUFZLE1BQU0sVUFBVSxTQUFTLElBQUksR0FBRztBQUFBLHNCQUMzRDtBQUFBLG9CQUNGO0FBQUEsa0JBQ0Y7QUFBQSxnQkFDRixDQUFDO0FBQ0QsdUJBQU87QUFBQSxjQUNUO0FBQ0EscUJBQU87QUFBQSxZQUNULENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUN4RU8sSUFBTUMsVUFBUztBQUNmLElBQU0sa0NBQWtDO0FBQ3hDLElBQU0sMkNBQTJDO0FBRXhELElBQU8scUNBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQ0U7QUFBQSxNQUNGLEtBQUssb0JBQW9CQSxPQUFNO0FBQUEsSUFDakM7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsK0JBQStCLEdBQUc7QUFBQSxNQUNuQyxDQUFDLHdDQUF3QyxHQUFHO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxpQkFBaUIsTUFBTTtBQUNyQixZQUFJLEtBQUssU0FBUyxTQUFTLGdCQUFnQixDQUFDLFFBQVEsU0FBUyxTQUFTLEVBQUUsU0FBUyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3BHLGtCQUFRLE9BQU87QUFBQSxZQUNiO0FBQUEsWUFDQSxXQUNFLEtBQUssU0FBUyxTQUFTLFNBQ25CLGtDQUNBO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUNqQ0EsSUFBTyw0QkFBUTtBQUFBLEVBQ2IsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLE1BQ2IsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLFlBQVksUUFBUSxXQUFXLFNBQVMsRUFBRSxDQUFDO0FBQ2pELFVBQU0sZUFBZSxRQUFRLFNBQVMsTUFBTSxNQUFNLEVBQUUsQ0FBQztBQUVyRCxRQUFJLGNBQWMsVUFBYSxpQkFBaUIsUUFBVztBQUN6RCxhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxDQUFDLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDL0IsVUFBSSxVQUFVLFdBQVcsSUFBSSxHQUFHO0FBQzlCLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULElBQUksT0FBdUI7QUFDekIsbUJBQU8sTUFBTSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLFlBQVk7QUFBQTtBQUFBLENBQU07QUFBQSxVQUNyRTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsT0FBTztBQUNMLGdCQUFRLE9BQU87QUFBQSxVQUNiLEtBQUs7QUFBQSxZQUNILE9BQU87QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNWO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULElBQUksT0FBdUI7QUFDekIsbUJBQU8sTUFBTSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLFlBQVk7QUFBQTtBQUFBLENBQU07QUFBQSxVQUNyRTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLE9BQU87QUFDTCxZQUFNLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxFQUFFLENBQUM7QUFDOUMsVUFBSSxpQkFBaUIsZUFBZTtBQUNsQyxnQkFBUSxPQUFPO0FBQUEsVUFDYixLQUFLO0FBQUEsWUFDSCxPQUFPO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDVjtBQUFBLFlBQ0EsS0FBSztBQUFBLGNBQ0gsTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1Y7QUFBQSxVQUNGO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVCxJQUFJLE9BQXVCO0FBQ3pCLG1CQUFPLE1BQU0saUJBQWlCLENBQUMsR0FBRyxVQUFVLE1BQU0sR0FBRyxNQUFNLFlBQVksRUFBRTtBQUFBLFVBQzNFO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7OztBQzVFQSxJQUFNLG9CQUFvQjtBQUMxQixJQUFNLHFCQUFxQjtBQUMzQixJQUFNLGtCQUFrQjtBQUN4QixJQUFNLG1CQUFtQjtBQUFBLEVBQ3ZCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFQSxTQUFTLFVBQVUsWUFBb0I7QUFDckMsU0FDRSxXQUNHLE1BQU0sRUFBRSxFQUNSLFFBQVEsRUFDUixJQUFJLENBQUMsVUFBVSxTQUFTLE9BQU8sRUFBRSxDQUFDLEVBQ2xDLE9BQU8sQ0FBQyxlQUFlLGNBQWMsVUFBVTtBQUM5QyxRQUFJLFFBQVE7QUFDWixRQUFJLFFBQVEsTUFBTSxHQUFHO0FBQ25CLGVBQVM7QUFFVCxVQUFJLFFBQVEsR0FBRztBQUNiLGdCQUFTLFFBQVEsS0FBTTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUNBLFdBQU8sZ0JBQWdCO0FBQUEsRUFDekIsR0FBRyxDQUFDLElBQ0osT0FDRjtBQUVKO0FBRUEsU0FBUyxvQkFBb0IsT0FBZSxTQUEyQixNQUFhLEtBQXNCO0FBQ3hHLFFBQU0sVUFBVSxNQUFNLE1BQU0sZUFBZTtBQUMzQyxNQUFJLFlBQVksTUFBTTtBQUNwQjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLGNBQWMsUUFBUTtBQUFBLElBQzFCLENBQUMsVUFDQyxVQUFVLEtBQUssS0FDZixDQUFDLGlCQUFpQixTQUFTLEtBQUs7QUFBQSxJQUVoQyxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQ3JCLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FDckIsQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUNyQixDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQ3JCLENBQUMsTUFBTSxXQUFXLEdBQUc7QUFBQSxFQUN6QjtBQUNBLE1BQUksWUFBWSxXQUFXLEdBQUc7QUFDNUIsVUFBTSxhQUFhLFlBQVksQ0FBQztBQUNoQyxRQUFJLGVBQWUsUUFBVztBQUM1QixVQUFJLFNBQVMsUUFBVztBQUN0QixnQkFBUSxPQUFPO0FBQUEsVUFDYixXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsWUFDSixRQUFRO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFdBQVcsUUFBUSxRQUFXO0FBQzVCLGdCQUFRLE9BQU87QUFBQSxVQUNiLFdBQVc7QUFBQSxVQUNYLE1BQU07QUFBQSxZQUNKLFFBQVE7QUFBQSxVQUNWO0FBQUEsVUFDQSxLQUFLO0FBQUEsWUFDSCxPQUFPLElBQUk7QUFBQSxZQUNYLEtBQUssSUFBSTtBQUFBLFVBQ1g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUFBLEVBQ0YsV0FBVyxZQUFZLFNBQVMsR0FBRztBQUNqQyxRQUFJLFNBQVMsUUFBVztBQUN0QixjQUFRLE9BQU87QUFBQSxRQUNiLFdBQVc7QUFBQSxRQUNYLE1BQU07QUFBQSxVQUNKLFNBQVMsUUFBUSxLQUFLLElBQUk7QUFBQSxRQUM1QjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILFdBQVcsUUFBUSxRQUFXO0FBQzVCLGNBQVEsT0FBTztBQUFBLFFBQ2IsV0FBVztBQUFBLFFBQ1gsTUFBTTtBQUFBLFVBQ0osU0FBUyxRQUFRLEtBQUssSUFBSTtBQUFBLFFBQzVCO0FBQUEsUUFDQSxLQUFLO0FBQUEsVUFDSCxPQUFPLElBQUk7QUFBQSxVQUNYLEtBQUssSUFBSTtBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTywwQkFBUTtBQUFBLEVBQ2IsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLE1BQ2IsS0FBSztBQUFBLElBQ1A7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsaUJBQWlCLEdBQUc7QUFBQSxNQUNyQixDQUFDLGtCQUFrQixHQUFHO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUMzQixVQUFNLFdBQVcsV0FBVyxlQUFlO0FBRTNDLGFBQVMsUUFBUSxDQUFDLFlBQVk7QUFDNUIsVUFBSSxRQUFRLFFBQVEsVUFBYSxRQUFRLFFBQVEsTUFBTTtBQUNyRCw0QkFBb0IsUUFBUSxPQUFPLFNBQVMsUUFBVyxRQUFRLEdBQUc7QUFBQSxNQUNwRTtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxNQUNMLFFBQVEsTUFBTTtBQUNaLFlBQUksS0FBSyxVQUFVLFFBQVc7QUFDNUI7QUFBQSxRQUNGO0FBQ0EsWUFBSSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVU7QUFDcEU7QUFBQSxRQUNGO0FBQ0EsY0FBTSxRQUFRLE9BQU8sS0FBSyxLQUFLO0FBQy9CLDRCQUFvQixPQUFPLFNBQVMsSUFBSTtBQUFBLE1BQzFDO0FBQUEsTUFDQSxnQkFBZ0IsTUFBTTtBQUNwQixZQUFJLE9BQU8sS0FBSyxNQUFNLFdBQVcsVUFBVTtBQUN6QztBQUFBLFFBQ0Y7QUFDQSw0QkFBb0IsS0FBSyxNQUFNLFFBQVEsU0FBUyxJQUFJO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUN0SUEsU0FBUyxrQkFBa0IsV0FBMEI7QUFDbkQsU0FBTyxVQUFVLFNBQVMseUJBQXlCLFVBQVUsV0FBVyxTQUFTO0FBQ25GO0FBR0EsU0FBUyx1Q0FBdUMsV0FBaUIscUJBQXdDO0FBQ3ZHLFNBQ0UsVUFBVSxTQUFTLHlCQUNuQixVQUFVLFdBQVcsU0FBUyxvQkFDOUIsVUFBVSxXQUFXLE9BQU8sU0FBUyxzQkFDckMsVUFBVSxXQUFXLE9BQU8sT0FBTyxTQUFTLGdCQUM1QyxDQUFDLG9CQUFvQixTQUFTLFVBQVUsV0FBVyxPQUFPLE9BQU8sSUFBSTtBQUV6RTtBQUdBLFNBQVMscUNBQXFDLE1BQXFCO0FBQ2pFLFNBQ0UsS0FBSyxTQUFTLHlCQUNkLEtBQUssYUFBYSxTQUFTLEtBQzNCLEtBQUssYUFBYSxDQUFDLEdBQUcsT0FBTyxVQUM3QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxnQkFDakMsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFVBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsU0FBUyxRQUM5QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssU0FBUztBQUV2QztBQUdBLFNBQVMsZ0NBQWdDLE1BQVkscUJBQXdDO0FBQzNGLFNBQ0UsS0FBSyxTQUFTLHlCQUNkLEtBQUssYUFBYSxTQUFTLEtBQzNCLEtBQUssYUFBYSxDQUFDLEdBQUcsT0FBTyxVQUM3QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxnQkFDakMsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFVBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsU0FBUyxRQUM5QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssU0FBUyxvQkFDbkMsS0FBSyxhQUFhLENBQUMsRUFBRSxLQUFLLE9BQU8sU0FBUyxnQkFDMUMsQ0FBQyxvQkFBb0IsU0FBUyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJO0FBRXZFO0FBR0EsU0FBUyxzQ0FBc0MsTUFBcUI7QUFDbEUsU0FDRSxLQUFLLFNBQVMseUJBQ2QsS0FBSyxhQUFhLFNBQVMsS0FDM0IsS0FBSyxhQUFhLENBQUMsR0FBRyxPQUFPLFVBQzdCLEtBQUssYUFBYSxDQUFDLEVBQUUsR0FBRyxTQUFTLGdCQUNqQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLFNBQVMsVUFDOUIsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFFBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxTQUFTLG9CQUNuQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxTQUFTLHVCQUN4QyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVMsbUJBQ2pELEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxPQUFPLE9BQU8sT0FBTyxTQUFTLGdCQUN4RCxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVM7QUFFdkQ7QUFFQSxJQUFPLDBCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLHFCQUFxQjtBQUFBLFlBQ25CLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLFNBQVM7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHNCQUFzQjtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sVUFBd0IsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3JELFVBQU0sc0JBQXNCLFFBQVEsb0JBQW9CLFNBQVMsSUFBSSxRQUFRLHNCQUFzQixDQUFDO0FBRXBHLFdBQU87QUFBQSxNQUNMLFFBQVEsTUFBTTtBQUNaLGFBQUssS0FBSyxRQUFRLENBQUMsY0FBYztBQUMvQixjQUNFLGtCQUFrQixTQUFTLEtBQzNCLHVDQUF1QyxXQUFXLG1CQUFtQixLQUNyRSxxQ0FBcUMsU0FBUyxLQUM5QyxnQ0FBZ0MsV0FBVyxtQkFBbUIsS0FDOUQsc0NBQXNDLFNBQVMsR0FDL0M7QUFDQSxvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUN0R0EsSUFBTUMsbUJBQWtCLEVBQUUsaUJBQWlCLDRCQUE0QjtBQUNoRSxJQUFNLGlCQUFpQjtBQUU5QixJQUFPLHlCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUNFO0FBQUEsTUFDRixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLGlCQUFpQjtBQUFBLFlBQ2YsYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBQUEsUUFDQSxzQkFBc0I7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsY0FBYyxHQUFHO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLFVBQVUsRUFBRSxHQUFHQSxrQkFBaUIsR0FBSSxRQUFRLFFBQVEsQ0FBQyxFQUE4QjtBQUN6RixVQUFNLGlCQUFpQixJQUFJLE9BQU8sUUFBUSxpQkFBaUIsR0FBRztBQUU5RCxXQUFPO0FBQUEsTUFDTCxrQkFBa0IsTUFBTTtBQUN0QixZQUFJLE9BQU8sS0FBSyxPQUFPLFVBQVUsWUFBWSxlQUFlLEtBQUssS0FBSyxPQUFPLEtBQUssR0FBRztBQUNuRixrQkFBUSxPQUFPO0FBQUEsWUFDYjtBQUFBLFlBQ0EsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLGNBQ0osZ0JBQWdCLFFBQVE7QUFBQSxjQUN4QixtQkFBbUIsS0FBSyxPQUFPO0FBQUEsY0FDL0IsaUJBQWlCLFFBQVE7QUFBQSxZQUMzQjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDckRBLElBQU0sYUFBYTtBQUNuQixJQUFNLGNBQWM7QUFDcEIsSUFBTSxZQUFZO0FBRWxCLFNBQVMsYUFBYSxPQUFlLFNBQTJCLE1BQWEsS0FBc0I7QUFDakcsUUFBTSxVQUFVLE1BQU0sTUFBTSxTQUFTO0FBQ3JDLE1BQUksWUFBWSxNQUFNO0FBQ3BCO0FBQUEsRUFDRjtBQUNBLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsUUFBSSxTQUFTLFFBQVc7QUFDdEIsY0FBUSxPQUFPO0FBQUEsUUFDYixXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsVUFDSixNQUFNLFFBQVEsQ0FBQztBQUFBLFFBQ2pCO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsV0FBVyxRQUFRLFFBQVc7QUFDNUIsY0FBUSxPQUFPO0FBQUEsUUFDYixXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsVUFDSixNQUFNLFFBQVEsQ0FBQztBQUFBLFFBQ2pCO0FBQUEsUUFDQSxLQUFLO0FBQUEsVUFDSCxPQUFPLElBQUk7QUFBQSxVQUNYLEtBQUssSUFBSTtBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixXQUFXLFFBQVEsU0FBUyxHQUFHO0FBQzdCLFFBQUksU0FBUyxRQUFXO0FBQ3RCLGNBQVEsT0FBTztBQUFBLFFBQ2IsV0FBVztBQUFBLFFBQ1gsTUFBTTtBQUFBLFVBQ0osT0FBTyxRQUFRLEtBQUssSUFBSTtBQUFBLFFBQzFCO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsV0FBVyxRQUFRLFFBQVc7QUFDNUIsY0FBUSxPQUFPO0FBQUEsUUFDYixXQUFXO0FBQUEsUUFDWCxNQUFNO0FBQUEsVUFDSixPQUFPLFFBQVEsS0FBSyxJQUFJO0FBQUEsUUFDMUI7QUFBQSxRQUNBLEtBQUs7QUFBQSxVQUNILE9BQU8sSUFBSTtBQUFBLFVBQ1gsS0FBSyxJQUFJO0FBQUEsUUFDWDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFPLGtCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxVQUFVLEdBQUc7QUFBQSxNQUNkLENBQUMsV0FBVyxHQUFHO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxVQUFNLGFBQWEsUUFBUTtBQUMzQixVQUFNLFdBQVcsV0FBVyxlQUFlO0FBRTNDLGFBQVMsUUFBUSxDQUFDLFlBQVk7QUFDNUIsVUFBSSxRQUFRLFFBQVEsVUFBYSxRQUFRLFFBQVEsTUFBTTtBQUNyRCxxQkFBYSxRQUFRLE9BQU8sU0FBUyxRQUFXLFFBQVEsR0FBRztBQUFBLE1BQzdEO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTztBQUFBLE1BQ0wsUUFBUSxNQUFNO0FBQ1osWUFBSSxLQUFLLFVBQVUsUUFBVztBQUM1QjtBQUFBLFFBQ0Y7QUFDQSxZQUFJLE9BQU8sS0FBSyxVQUFVLFVBQVU7QUFDbEM7QUFBQSxRQUNGO0FBQ0EsY0FBTSxRQUFRLEtBQUs7QUFDbkIscUJBQWEsT0FBTyxTQUFTLElBQUk7QUFBQSxNQUNuQztBQUFBLE1BQ0EsZ0JBQWdCLE1BQU07QUFDcEIsWUFBSSxPQUFPLEtBQUssTUFBTSxXQUFXLFVBQVU7QUFDekM7QUFBQSxRQUNGO0FBQ0EscUJBQWEsS0FBSyxNQUFNLFFBQVEsU0FBUyxJQUFJO0FBQUEsTUFDL0M7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUM5RkEsSUFBTSxlQUFlO0FBQ3JCLElBQU0sZUFBZTtBQUNyQixTQUFTLHFCQUFxQixTQUEyQixZQUF3QixPQUFlLEtBQW1CO0FBQ2pILFVBQVEsT0FBTztBQUFBLElBQ2IsS0FBSztBQUFBLE1BQ0gsT0FBTyxXQUFXLGdCQUFnQixLQUFLO0FBQUEsTUFDdkMsS0FBSyxXQUFXLGdCQUFnQixHQUFHO0FBQUEsSUFDckM7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULEtBQUssQ0FBQyxVQUFVLE1BQU0sWUFBWSxDQUFDLE9BQU8sR0FBRyxDQUFDO0FBQUEsRUFDaEQsQ0FBQztBQUNIO0FBRUEsU0FBUyxtQkFBbUIsU0FBMkIsWUFBd0IsU0FBd0I7QUFDckcsTUFBSSxRQUFRLEtBQUs7QUFDZixVQUFNLE9BQU8sV0FBVyxTQUFTLEVBQUUsUUFBUSxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBQzdELFFBQUksU0FBUyxRQUFXO0FBQ3RCLFVBQUk7QUFDSixjQUFRLFFBQVEsYUFBYSxLQUFLLElBQUksT0FBTyxNQUFNO0FBQ2pELGNBQU0sUUFBUSxXQUFXLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxJQUFJLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxDQUFDO0FBQzlGLGNBQU0sTUFBTSxXQUFXLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxJQUFJLE1BQU0sTUFBTSxRQUFRLFFBQVEsSUFBSSxJQUFJLE9BQU8sQ0FBQztBQUN2Ryw2QkFBcUIsU0FBUyxZQUFZLE9BQU8sR0FBRztBQUFBLE1BQ3REO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsb0JBQW9CLFNBQTJCLFlBQXdCLFNBQXdCO0FBQ3RHLFFBQU0sZ0JBQWdCLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDOUMsUUFBTSxvQkFBb0I7QUFDMUIsZ0JBQWMsUUFBUSxDQUFDLGlCQUFpQjtBQUN0QyxRQUFJLFlBQVksUUFBUSxLQUFLLE1BQU0sUUFBUTtBQUMzQyxVQUFNLFVBQVUsUUFBUSxLQUFLLElBQUksUUFBUTtBQUN6QyxRQUFJO0FBQ0osV0FBTyxRQUFRLFFBQVEsUUFBUSxhQUFhLEtBQUssWUFBWSxPQUFPLE1BQU07QUFDeEUsVUFBSSxRQUFRO0FBQ1osVUFBSSxNQUFNO0FBQ1YsWUFBTSxzQkFBc0Isa0JBQWtCLEtBQUssUUFBUSxNQUFNLEtBQUssQ0FBQztBQUN2RSxVQUFJLHFCQUFxQjtBQUN2QixnQkFBUSxXQUFXLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxJQUFJLE1BQU0sTUFBTSxRQUFRLFFBQVEsSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUNyRyxjQUFNLFdBQVcsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLElBQUksSUFBSSxNQUFNLFFBQVEsUUFBUSxJQUFJLElBQUksT0FBTyxDQUFDO0FBQUEsTUFDakcsT0FBTztBQUNMLFlBQUksYUFBYTtBQUNqQixlQUFPLGFBQWEsU0FBUztBQUMzQixnQkFBTSxPQUFPLFdBQVcsU0FBUyxFQUFFLFNBQVM7QUFDNUMsY0FBSSxNQUFNLFNBQVMsTUFBTSxLQUFLLEtBQUssT0FBTztBQUN4Qyx5QkFBYTtBQUNiO0FBQUEsVUFDRjtBQUNBO0FBQUEsUUFDRjtBQUNBLGdCQUFRLFdBQVcsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLEdBQUcsUUFBUSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUM7QUFDN0YsY0FBTSxXQUFXLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQUEsTUFDdEU7QUFDQSwyQkFBcUIsU0FBUyxZQUFZLE9BQU8sR0FBRztBQUFBLElBQ3REO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxJQUFPLDZCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUNFO0FBQUEsTUFDRixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLE9BQU8sU0FBMkI7QUFDaEMsVUFBTSxhQUFhLFFBQVE7QUFDM0IsVUFBTSxXQUFXLFdBQVcsZUFBZTtBQUMzQyxhQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzVCLFVBQUksUUFBUSxTQUFTLFFBQVE7QUFDM0IsMkJBQW1CLFNBQVMsWUFBWSxPQUFPO0FBQUEsTUFDakQsT0FBTztBQUNMLDRCQUFvQixTQUFTLFlBQVksT0FBTztBQUFBLE1BQ2xEO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNGOzs7QUNsRk8sSUFBTSxvQ0FBb0M7QUFDMUMsSUFBTSx1REFDWDtBQUNLLElBQU0sZ0RBQWdEO0FBRzdELElBQU0scUJBQXFCLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBR2xFLElBQU0seUJBQXlCO0FBQUEsRUFDN0I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFQSxJQUFPLGtDQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUNFO0FBQUEsTUFDRixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxpQ0FBaUMsR0FBRztBQUFBLE1BQ3JDLENBQUMsb0RBQW9ELEdBQUc7QUFBQSxNQUN4RCxDQUFDLDZDQUE2QyxHQUFHO0FBQUEsSUFDbkQ7QUFBQSxFQUNGO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUE7QUFBQSxNQUVMLGVBQWUsTUFBc0I7QUFDbkMsWUFBSSxLQUFLLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsZUFBZTtBQUMzRSxnQkFBTSxrQkFBa0IsS0FBSyxVQUFVLENBQUM7QUFHeEMsY0FBSSxtQkFBbUIsZ0JBQWdCLFNBQVMsb0JBQW9CO0FBQ2xFLG9CQUFRLE9BQU87QUFBQSxjQUNiLE1BQU07QUFBQSxjQUNOLFdBQVc7QUFBQSxZQUNiLENBQUM7QUFBQSxVQUNIO0FBR0EsY0FBSSxtQkFBbUIsZ0JBQWdCLFNBQVMsb0JBQW9CO0FBQ2xFLGtCQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFBQSxjQUN6QyxDQUFDLGFBQ0MsU0FBUyxTQUFTLGNBQWMsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLFNBQVMsSUFBSSxTQUFTO0FBQUEsWUFDaEc7QUFDQSxnQkFBSSxZQUFZLFVBQWEsUUFBUSxNQUFNLFNBQVMsb0JBQW9CO0FBQ3RFLHNCQUFRLE9BQU87QUFBQSxnQkFDYixNQUFNO0FBQUEsZ0JBQ04sV0FBVztBQUFBLGNBQ2IsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGO0FBR0EsY0FBSSxtQkFBbUIsZ0JBQWdCLFNBQVMsb0JBQW9CO0FBQ2xFLGtCQUFNLFNBQVMsZ0JBQWdCLFdBQVc7QUFBQSxjQUN4QyxDQUFDLGFBQ0MsU0FBUyxTQUFTLGNBQWMsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLFNBQVMsSUFBSSxTQUFTO0FBQUEsWUFDaEc7QUFDQSxnQkFBSTtBQUNKLGdCQUFJLE9BQU8sTUFBTSxTQUFTLG9CQUFvQjtBQUM1QyxxQ0FDRSxPQUFPLE1BQU0sT0FBTyxTQUFTLGdCQUM3QixPQUFPLE1BQU0sT0FBTyxTQUFTLGlCQUM3QixPQUFPLE1BQU0sU0FBUyxTQUFTLGdCQUMvQix1QkFBdUIsU0FBUyxPQUFPLE1BQU0sU0FBUyxJQUFJO0FBQUEsWUFDOUQsV0FBVyxPQUFPLE1BQU0sU0FBUyxXQUFXO0FBQzFDLHFDQUNFLE9BQU8sT0FBTyxNQUFNLFVBQVUsWUFBWSxtQkFBbUIsU0FBUyxPQUFPLE1BQU0sS0FBSztBQUFBLFlBQzVGO0FBQ0EsZ0JBQUkseUJBQXlCLE9BQU87QUFFbEMsb0JBQU0sT0FBTyxnQkFBZ0IsV0FBVztBQUFBLGdCQUN0QyxDQUFDLGFBQ0MsU0FBUyxTQUFTLGNBQWMsU0FBUyxJQUFJLFNBQVMsZ0JBQWdCLFNBQVMsSUFBSSxTQUFTO0FBQUEsY0FDaEc7QUFDQSxrQkFBSSxTQUFTLFFBQVc7QUFDdEI7QUFBQSxjQUNGO0FBRUEsa0JBQUksS0FBSyxNQUFNLFNBQVMsb0JBQW9CO0FBQzFDLHdCQUFRLE9BQU87QUFBQSxrQkFDYixNQUFNO0FBQUEsa0JBQ04sV0FBVztBQUFBLGdCQUNiLENBQUM7QUFBQSxjQUNIO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBQ3ZHQSxJQUFPLHFDQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sV0FBVyxRQUFRLFdBQVcsZUFBZTtBQUNuRCxVQUFNLFFBQVEsUUFBUSxXQUFXLFNBQVM7QUFDMUMsV0FBTztBQUFBLE1BQ0wsUUFBUSxNQUFNO0FBQ1osWUFBSSxLQUFLLE9BQU8sS0FBSyxpQkFBaUIsUUFBUTtBQUM1QyxnQkFBTSx3QkFBd0IsS0FBSyxJQUFJLE1BQU07QUFDN0MsZ0JBQU0sZUFBZSx3QkFBd0I7QUFDN0MsZ0JBQU0sc0JBQXNCLE1BQU0sZUFBZSxDQUFDO0FBR2xELGdCQUFNLHNCQUFzQiwwQkFBMEIsS0FBSyxLQUFLLE1BQU0sTUFBTTtBQUM1RSxjQUFJLHFCQUFxQjtBQUN2QjtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSwyQkFBMkIsU0FBUyxLQUFLLENBQUMsWUFBWTtBQUMxRCxnQkFBSSxDQUFDLFFBQVEsS0FBSztBQUNoQixxQkFBTztBQUFBLFlBQ1Q7QUFFQSxrQkFBTSxvQkFBb0I7QUFFMUIsa0JBQU0sK0JBQStCO0FBQ3JDLGtCQUFNLGFBQWEsa0JBQWtCLEtBQUssUUFBUSxNQUFNLEtBQUssQ0FBQztBQUM5RCxnQkFBSSxRQUFRLFNBQVMsVUFBVSxRQUFRLElBQUksTUFBTSxTQUFTLFFBQVEsSUFBSSxJQUFJLE1BQU07QUFDOUUscUJBQ0csUUFBUSxJQUFJLElBQUksU0FBUyxnQkFDeEIsd0JBQXdCLFVBQ3hCLDZCQUE2QixLQUFLLG1CQUFtQixLQUNyRCxjQUNELFFBQVEsSUFBSSxJQUFJLFNBQVMseUJBQXlCO0FBQUEsWUFFdkQ7QUFDQSxtQkFDRyxRQUFRLElBQUksSUFBSSxTQUFTLGdCQUFnQixjQUN6QyxRQUFRLElBQUksSUFBSSxTQUFTLHlCQUF5QjtBQUFBLFVBRXZELENBQUM7QUFFRCxjQUFJLENBQUMsMEJBQTBCO0FBQzdCLG9CQUFRLE9BQU87QUFBQSxjQUNiO0FBQUEsY0FDQSxTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDekRBLElBQU8sa0RBQVE7QUFBQSxFQUNiLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxNQUNiLEtBQUs7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTyxTQUFTO0FBQ2QsUUFBSSxtQkFBbUI7QUFDdkIsV0FBTztBQUFBLE1BQ0wsa0JBQWtCLE1BQU07QUFDdEIsWUFBSSxLQUFLLE9BQU8sVUFBVSxlQUFlO0FBQ3ZDLGdCQUFNLHdCQUF3QixLQUFLLFdBQVc7QUFBQSxZQUM1QyxDQUFDLGNBQWMsVUFBVSxTQUFTLHFCQUFxQixVQUFVLFNBQVMsU0FBUztBQUFBLFVBQ3JGLEVBQUUsQ0FBQztBQUNILGNBQUksMEJBQTBCLFFBQVc7QUFDdkMsK0JBQW1CLHNCQUFzQixNQUFNO0FBQUEsVUFDakQ7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLE1BQ0EsZUFBZSxNQUFNO0FBQ25CLGNBQU0sU0FBUyxLQUFLO0FBQ3BCLFlBQ0UsT0FBTyxTQUFTLHNCQUNoQixPQUFPLE9BQU8sU0FBUyxnQkFDdkIsT0FBTyxPQUFPLFNBQVMsb0JBQ3ZCLE9BQU8sU0FBUyxTQUFTLGlCQUN4QixPQUFPLFNBQVMsU0FBUyxhQUFhLE9BQU8sU0FBUyxTQUFTLGFBQ2hFLEtBQUssVUFBVSxVQUFVLEdBQ3pCO0FBQ0EsZ0JBQU0sa0JBQWtCLEtBQUssVUFBVSxDQUFDO0FBQ3hDLGNBQ0Usb0JBQW9CLFVBQ25CLGdCQUFnQixTQUFTLHdCQUN4QixnQkFBZ0IsU0FBUyw2QkFDekIsZ0JBQWdCLFNBQVMsc0JBQ3pCLGdCQUFnQixTQUFTLGdCQUN6QixnQkFBZ0IsU0FBUyxhQUN6QixPQUFPLGdCQUFnQixVQUFVLFVBQ25DO0FBQ0Esb0JBQVEsT0FBTztBQUFBLGNBQ2I7QUFBQSxjQUNBLFNBQVM7QUFBQSxjQUNULE1BQU07QUFBQSxnQkFDSixRQUFRLE9BQU8sU0FBUztBQUFBLGNBQzFCO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FDckRBLElBQU0scUJBQXFCO0FBQzNCLElBQU0sY0FBYztBQUVwQixJQUFPLGdDQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sYUFBcUMsQ0FBQztBQUM1QyxXQUFPO0FBQUEsTUFDTCxRQUFRLE1BQU07QUFDWixZQUNFLE9BQU8sS0FBSyxVQUFVLFlBQ3RCLEtBQUssT0FBTyxTQUFTLHVCQUNyQixLQUFLLE9BQU8sV0FBVyxTQUFTLEdBQ2hDO0FBQ0EsZ0JBQU0sa0JBQWtCLEtBQUssT0FBTyxXQUFXLENBQUM7QUFDaEQsY0FBSSxpQkFBaUI7QUFDbkIsdUJBQVcsZ0JBQWdCLE1BQU0sSUFBSSxJQUFJLEtBQUs7QUFBQSxVQUNoRDtBQUNBLGNBQUksS0FBSyxVQUFVLGVBQWUsS0FBSyxVQUFVLG9CQUFvQjtBQUNuRSxrQkFBTSxvQkFBb0IsS0FBSztBQUMvQixrQkFBTSxtQkFBbUIsa0JBQWtCLFdBQVc7QUFBQSxjQUNwRCxDQUFDLGNBQ0MsVUFBVSxTQUFTLDRCQUE0QixVQUFVLFNBQVM7QUFBQSxZQUN0RTtBQUVBLGdCQUFJLHFCQUFxQixRQUFXO0FBQ2xDLG9CQUFNLHlCQUF5QixrQkFBa0IsU0FBUyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxrQkFBSSxpQkFBaUIsaUJBQWlCLFNBQVM7QUFDL0Msa0JBQUksZ0JBQWdCLGVBQWUsaUJBQWlCLE1BQU0sSUFBSTtBQUU5RCxrQkFBSSxLQUFLLFVBQVUsc0JBQXNCLGlCQUFpQixTQUFTLGtCQUFrQixPQUFPLE9BQU87QUFDakcsaUNBQWlCLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxHQUFHLGtCQUFrQixPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLGdDQUFnQixlQUFlLGlCQUFpQixNQUFNLElBQUksWUFBWSxXQUFXO0FBQUEsY0FDbkY7QUFFQSxzQkFBUSxPQUFPO0FBQUEsZ0JBQ2IsTUFBTTtBQUFBLGdCQUNOLFNBQVM7QUFBQSxnQkFDVCxLQUFLLENBQUMsVUFBVSxNQUFNLGlCQUFpQixnQkFBZ0IsYUFBYTtBQUFBLGNBQ3RFLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxlQUFlLE1BQU07QUFDbkIsY0FBTSxTQUFTLEtBQUs7QUFDcEIsWUFDRSxPQUFPLFNBQVMsc0JBQ2hCLE9BQU8sT0FBTyxTQUFTLGdCQUN2QixPQUFPLE9BQU8sU0FBUyxNQUN2QixPQUFPLFNBQVMsU0FBUyxnQkFDekIsT0FBTyxTQUFTLFNBQVMsT0FDeEIsT0FBTyxTQUFTLEtBQUssU0FBUyxRQUFRLEtBQUssT0FBTyxTQUFTLEtBQUssU0FBUyxRQUFRLElBQ2xGO0FBQ0EsZ0JBQU0sWUFBWSxXQUFXLE9BQU8sT0FBTyxJQUFJO0FBQy9DLGNBQUksY0FBYyxlQUFlLGNBQWMsb0JBQW9CO0FBQ2pFLGdCQUFJLHdCQUF3QjtBQUM1QixrQkFBTSxxQkFBcUIsT0FBTyxTQUFTO0FBQzNDLGdCQUFJLHVCQUF1QixVQUFVO0FBQ25DLHNDQUF3QixHQUFHLE9BQU8sT0FBTyxJQUFJO0FBQUEsWUFDL0MsT0FBTztBQUNMLG9CQUFNLGVBQWUsbUJBQW1CLFNBQVMsUUFBUSxJQUNyRCxtQkFBbUIsTUFBTSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQzFDLG1CQUFtQixNQUFNLFFBQVEsRUFBRSxLQUFLLEVBQUU7QUFDOUMsb0JBQU0sb0JBQW9CLEdBQUcsYUFBYSxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxhQUFhLE1BQU0sQ0FBQyxDQUFDO0FBQ3pGLHNDQUF3QixHQUFHLE9BQU8sT0FBTyxJQUFJLElBQUksaUJBQWlCO0FBQUEsWUFDcEU7QUFDQSxvQkFBUSxPQUFPO0FBQUEsY0FDYjtBQUFBLGNBQ0EsU0FBUztBQUFBLGNBQ1QsS0FBSyxDQUFDLFVBQVUsTUFBTSxZQUFZLFFBQVEscUJBQXFCO0FBQUEsWUFDakUsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7OztBZHpFQSxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLG1CQUFtQjtBQUFBLElBQ25CLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLElBQzNCLENBQUMsTUFBMEIsR0FBRztBQUFBLElBQzlCLENBQUNDLE9BQTZCLEdBQUc7QUFBQSxFQUNuQztBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsS0FBSztBQUFBLE1BQ0gsT0FBTztBQUFBLFFBQ0wsK0JBQStCO0FBQUEsUUFDL0IsaUNBQWlDO0FBQUEsUUFDakMsdUJBQXVCO0FBQUEsUUFDdkIscUNBQXFDO0FBQUEsUUFDckMsa0NBQWtDO0FBQUEsUUFDbEMsK0JBQStCLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLFVBQVUsU0FBUyxPQUFPLFdBQVcsRUFBRSxDQUFDO0FBQUEsUUFDekcsMENBQTBDO0FBQUEsUUFDMUMsdURBQXVEO0FBQUEsUUFDdkQsdUNBQXVDO0FBQUEsUUFDdkMsOEJBQThCO0FBQUEsUUFDOUIsQ0FBQyxlQUFlLE1BQTBCLEVBQUUsR0FBRztBQUFBLFFBQy9DLENBQUMsZUFBZUEsT0FBNkIsRUFBRSxHQUFHO0FBQUEsTUFDcEQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFPO0FBQUEsUUFDTCwrQkFBK0I7QUFBQSxRQUMvQixpQ0FBaUM7QUFBQSxRQUNqQyx1QkFBdUI7QUFBQSxRQUN2QixxQ0FBcUM7QUFBQSxRQUNyQyxrQ0FBa0M7QUFBQSxRQUNsQywrQkFBK0I7QUFBQSxRQUMvQiwwQ0FBMEM7QUFBQSxRQUMxQyx1REFBdUQ7QUFBQSxRQUN2RCx1Q0FBdUM7QUFBQSxRQUN2Qyw4QkFBOEI7QUFBQSxRQUM5QixDQUFDLGVBQWUsTUFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlQSxPQUE2QixFQUFFLEdBQUc7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInJ1bGVJZCIsICJydWxlSWQiLCAiREVGQVVMVF9PUFRJT05TIiwgInJ1bGVJZCJdCn0K
926
899
  module.exports = module.exports.default;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "inputs": {
3
3
  "package.json": {
4
- "bytes": 3107,
4
+ "bytes": 2737,
5
5
  "imports": [],
6
6
  "format": "esm",
7
7
  "with": {
@@ -54,6 +54,11 @@
54
54
  "imports": [],
55
55
  "format": "esm"
56
56
  },
57
+ "src/no-side-effects.ts": {
58
+ "bytes": 4327,
59
+ "imports": [],
60
+ "format": "esm"
61
+ },
57
62
  "src/no-test-import.ts": {
58
63
  "bytes": 1874,
59
64
  "imports": [],
@@ -90,7 +95,7 @@
90
95
  "format": "esm"
91
96
  },
92
97
  "src/index.ts": {
93
- "bytes": 2758,
98
+ "bytes": 3007,
94
99
  "imports": [
95
100
  {
96
101
  "path": "src/invalid-json-stringify.ts",
@@ -112,6 +117,11 @@
112
117
  "kind": "import-statement",
113
118
  "original": "./no-card-numbers"
114
119
  },
120
+ {
121
+ "path": "src/no-side-effects.ts",
122
+ "kind": "import-statement",
123
+ "original": "./no-side-effects"
124
+ },
115
125
  {
116
126
  "path": "src/no-test-import.ts",
117
127
  "kind": "import-statement",
@@ -158,10 +168,10 @@
158
168
  "entryPoint": "src/index.ts",
159
169
  "inputs": {
160
170
  "src/index.ts": {
161
- "bytesInOutput": 2012
171
+ "bytesInOutput": 2224
162
172
  },
163
173
  "package.json": {
164
- "bytesInOutput": 3058
174
+ "bytesInOutput": 2828
165
175
  },
166
176
  "src/get-documentation-url.ts": {
167
177
  "bytesInOutput": 146
@@ -178,6 +188,9 @@
178
188
  "src/no-card-numbers.ts": {
179
189
  "bytesInOutput": 3356
180
190
  },
191
+ "src/no-side-effects.ts": {
192
+ "bytesInOutput": 3198
193
+ },
181
194
  "src/no-test-import.ts": {
182
195
  "bytesInOutput": 1458
183
196
  },
@@ -200,7 +213,7 @@
200
213
  "bytesInOutput": 3362
201
214
  }
202
215
  },
203
- "bytes": 57118
216
+ "bytes": 62665
204
217
  }
205
218
  }
206
219
  }
@@ -3,6 +3,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from "./in
3
3
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from "./no-promise-instance-method.mjs";
4
4
  import filePathComment from "./file-path-comment.mjs";
5
5
  import noCardNumbers from "./no-card-numbers.mjs";
6
+ import noSideEffects from "./no-side-effects.mjs";
6
7
  import noTestImport from "./no-test-import.mjs";
7
8
  import noUuid from "./no-uuid.mjs";
8
9
  import noWallabyComment from "./no-wallaby-comment.mjs";
@@ -18,6 +19,7 @@ var src_default = {
18
19
  "require-strict-assert": requireStrictAssert,
19
20
  "no-test-import": noTestImport,
20
21
  "no-wallaby-comment": noWallabyComment,
22
+ "no-side-effects": noSideEffects,
21
23
  "regular-expression-comment": regexComment,
22
24
  "require-assert-predicate-rejects-throws": requireAssertPredicateRejectsThrows,
23
25
  "object-literal-response": objectLiteralResponse,
@@ -32,6 +34,7 @@ var src_default = {
32
34
  "@checkdigit/no-uuid": "error",
33
35
  "@checkdigit/require-strict-assert": "error",
34
36
  "@checkdigit/no-wallaby-comment": "error",
37
+ "@checkdigit/no-side-effects": ["error", { excludedIdentifiers: ["assert", "debug", "log", "promisify"] }],
35
38
  "@checkdigit/regular-expression-comment": "error",
36
39
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
37
40
  "@checkdigit/object-literal-response": "error",
@@ -47,6 +50,7 @@ var src_default = {
47
50
  "@checkdigit/no-uuid": "error",
48
51
  "@checkdigit/require-strict-assert": "error",
49
52
  "@checkdigit/no-wallaby-comment": "off",
53
+ "@checkdigit/no-side-effects": "error",
50
54
  "@checkdigit/regular-expression-comment": "error",
51
55
  "@checkdigit/require-assert-predicate-rejects-throws": "error",
52
56
  "@checkdigit/object-literal-response": "error",
@@ -60,4 +64,4 @@ var src_default = {
60
64
  export {
61
65
  src_default as default
62
66
  };
63
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8sd0JBQXdCLFVBQVUsa0NBQWtDO0FBQzNFLE9BQU8sMkJBQTJCLFVBQVUscUNBQXFDO0FBQ2pGLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sa0JBQWtCO0FBQ3pCLE9BQU8sWUFBWTtBQUNuQixPQUFPLHNCQUFzQjtBQUM3QixPQUFPLDJCQUEyQjtBQUNsQyxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHlDQUF5QztBQUNoRCxPQUFPLHlCQUF5QjtBQUVoQyxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLElBQzNCLENBQUMsMEJBQTBCLEdBQUc7QUFBQSxJQUM5QixDQUFDLDZCQUE2QixHQUFHO0FBQUEsRUFDbkM7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLENBQUMsZUFBZSwwQkFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlLDZCQUE2QixFQUFFLEdBQUc7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLENBQUMsZUFBZSwwQkFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlLDZCQUE2QixFQUFFLEdBQUc7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
67
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFBLE9BQU8sd0JBQXdCLFVBQVUsa0NBQWtDO0FBQzNFLE9BQU8sMkJBQTJCLFVBQVUscUNBQXFDO0FBQ2pGLE9BQU8scUJBQXFCO0FBQzVCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sa0JBQWtCO0FBQ3pCLE9BQU8sWUFBWTtBQUNuQixPQUFPLHNCQUFzQjtBQUM3QixPQUFPLDJCQUEyQjtBQUNsQyxPQUFPLGtCQUFrQjtBQUN6QixPQUFPLHlDQUF5QztBQUNoRCxPQUFPLHlCQUF5QjtBQUVoQyxJQUFPLGNBQVE7QUFBQSxFQUNiLE9BQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLElBQ3JCLG1CQUFtQjtBQUFBLElBQ25CLFdBQVc7QUFBQSxJQUNYLHlCQUF5QjtBQUFBLElBQ3pCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLG1CQUFtQjtBQUFBLElBQ25CLDhCQUE4QjtBQUFBLElBQzlCLDJDQUEyQztBQUFBLElBQzNDLDJCQUEyQjtBQUFBLElBQzNCLENBQUMsMEJBQTBCLEdBQUc7QUFBQSxJQUM5QixDQUFDLDZCQUE2QixHQUFHO0FBQUEsRUFDbkM7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxNQUNILE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLCtCQUErQixDQUFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLFNBQVMsT0FBTyxXQUFXLEVBQUUsQ0FBQztBQUFBLFFBQ3pHLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLENBQUMsZUFBZSwwQkFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlLDZCQUE2QixFQUFFLEdBQUc7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQU87QUFBQSxRQUNMLCtCQUErQjtBQUFBLFFBQy9CLGlDQUFpQztBQUFBLFFBQ2pDLHVCQUF1QjtBQUFBLFFBQ3ZCLHFDQUFxQztBQUFBLFFBQ3JDLGtDQUFrQztBQUFBLFFBQ2xDLCtCQUErQjtBQUFBLFFBQy9CLDBDQUEwQztBQUFBLFFBQzFDLHVEQUF1RDtBQUFBLFFBQ3ZELHVDQUF1QztBQUFBLFFBQ3ZDLDhCQUE4QjtBQUFBLFFBQzlCLENBQUMsZUFBZSwwQkFBMEIsRUFBRSxHQUFHO0FBQUEsUUFDL0MsQ0FBQyxlQUFlLDZCQUE2QixFQUFFLEdBQUc7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,57 @@
1
+ // src/no-side-effects.ts
2
+ function isAwaitExpression(statement) {
3
+ return statement.type === "ExpressionStatement" && statement.expression.type === "AwaitExpression";
4
+ }
5
+ function isCallExpressionCalleeMemberExpression(statement, excludedIdentifiers) {
6
+ return statement.type === "ExpressionStatement" && statement.expression.type === "CallExpression" && statement.expression.callee.type === "MemberExpression" && statement.expression.callee.object.type === "Identifier" && !excludedIdentifiers.includes(statement.expression.callee.object.name);
7
+ }
8
+ function isVariableDeclarationAwaitExpression(node) {
9
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "AwaitExpression";
10
+ }
11
+ function isVariableDeclarationIdentifier(node, excludedIdentifiers) {
12
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "CallExpression" && node.declarations[0].init.callee.type === "Identifier" && !excludedIdentifiers.includes(node.declarations[0].init.callee.name);
13
+ }
14
+ function isVariableDeclarationMemberExpression(node) {
15
+ return node.type === "VariableDeclaration" && node.declarations.length > 0 && node.declarations[0]?.id !== void 0 && node.declarations[0].id.type === "Identifier" && node.declarations[0].init !== void 0 && node.declarations[0].init !== null && node.declarations[0].init.type === "CallExpression" && node.declarations[0].init.callee.type === "MemberExpression" && (node.declarations[0].init.callee.object.type === "NewExpression" && node.declarations[0].init.callee.object.callee.type === "Identifier" || node.declarations[0].init.callee.object.type === "Identifier");
16
+ }
17
+ var no_side_effects_default = {
18
+ meta: {
19
+ type: "problem",
20
+ docs: {
21
+ description: "Ensure no side effects can occur at the module-level",
22
+ url: "https://github.com/checkdigit/eslint-plugin"
23
+ },
24
+ schema: [
25
+ {
26
+ type: "object",
27
+ properties: {
28
+ excludedIdentifiers: {
29
+ type: "array",
30
+ items: { type: "string" }
31
+ }
32
+ },
33
+ additionalProperties: false
34
+ }
35
+ ]
36
+ },
37
+ create(context) {
38
+ const options = context.options[0] ?? {};
39
+ const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
40
+ return {
41
+ Program(node) {
42
+ node.body.forEach((statement) => {
43
+ if (isAwaitExpression(statement) || isCallExpressionCalleeMemberExpression(statement, excludedIdentifiers) || isVariableDeclarationAwaitExpression(statement) || isVariableDeclarationIdentifier(statement, excludedIdentifiers) || isVariableDeclarationMemberExpression(statement)) {
44
+ context.report({
45
+ node: statement,
46
+ message: "No side effects can occur at the module-level"
47
+ });
48
+ }
49
+ });
50
+ }
51
+ };
52
+ }
53
+ };
54
+ export {
55
+ no_side_effects_default as default
56
+ };
57
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXNpZGUtZWZmZWN0cy50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFnQkEsU0FBUyxrQkFBa0IsV0FBMEI7QUFDbkQsU0FBTyxVQUFVLFNBQVMseUJBQXlCLFVBQVUsV0FBVyxTQUFTO0FBQ25GO0FBR0EsU0FBUyx1Q0FBdUMsV0FBaUIscUJBQXdDO0FBQ3ZHLFNBQ0UsVUFBVSxTQUFTLHlCQUNuQixVQUFVLFdBQVcsU0FBUyxvQkFDOUIsVUFBVSxXQUFXLE9BQU8sU0FBUyxzQkFDckMsVUFBVSxXQUFXLE9BQU8sT0FBTyxTQUFTLGdCQUM1QyxDQUFDLG9CQUFvQixTQUFTLFVBQVUsV0FBVyxPQUFPLE9BQU8sSUFBSTtBQUV6RTtBQUdBLFNBQVMscUNBQXFDLE1BQXFCO0FBQ2pFLFNBQ0UsS0FBSyxTQUFTLHlCQUNkLEtBQUssYUFBYSxTQUFTLEtBQzNCLEtBQUssYUFBYSxDQUFDLEdBQUcsT0FBTyxVQUM3QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxnQkFDakMsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFVBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsU0FBUyxRQUM5QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssU0FBUztBQUV2QztBQUdBLFNBQVMsZ0NBQWdDLE1BQVkscUJBQXdDO0FBQzNGLFNBQ0UsS0FBSyxTQUFTLHlCQUNkLEtBQUssYUFBYSxTQUFTLEtBQzNCLEtBQUssYUFBYSxDQUFDLEdBQUcsT0FBTyxVQUM3QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEdBQUcsU0FBUyxnQkFDakMsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFVBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsU0FBUyxRQUM5QixLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssU0FBUyxvQkFDbkMsS0FBSyxhQUFhLENBQUMsRUFBRSxLQUFLLE9BQU8sU0FBUyxnQkFDMUMsQ0FBQyxvQkFBb0IsU0FBUyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJO0FBRXZFO0FBR0EsU0FBUyxzQ0FBc0MsTUFBcUI7QUFDbEUsU0FDRSxLQUFLLFNBQVMseUJBQ2QsS0FBSyxhQUFhLFNBQVMsS0FDM0IsS0FBSyxhQUFhLENBQUMsR0FBRyxPQUFPLFVBQzdCLEtBQUssYUFBYSxDQUFDLEVBQUUsR0FBRyxTQUFTLGdCQUNqQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLFNBQVMsVUFDOUIsS0FBSyxhQUFhLENBQUMsRUFBRSxTQUFTLFFBQzlCLEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxTQUFTLG9CQUNuQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxTQUFTLHVCQUN4QyxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVMsbUJBQ2pELEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxPQUFPLE9BQU8sT0FBTyxTQUFTLGdCQUN4RCxLQUFLLGFBQWEsQ0FBQyxFQUFFLEtBQUssT0FBTyxPQUFPLFNBQVM7QUFFdkQ7QUFFQSxJQUFPLDBCQUFRO0FBQUEsRUFDYixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsTUFDYixLQUFLO0FBQUEsSUFDUDtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ047QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxVQUNWLHFCQUFxQjtBQUFBLFlBQ25CLE1BQU07QUFBQSxZQUNOLE9BQU8sRUFBRSxNQUFNLFNBQVM7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHNCQUFzQjtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU8sU0FBUztBQUNkLFVBQU0sVUFBd0IsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3JELFVBQU0sc0JBQXNCLFFBQVEsb0JBQW9CLFNBQVMsSUFBSSxRQUFRLHNCQUFzQixDQUFDO0FBRXBHLFdBQU87QUFBQSxNQUNMLFFBQVEsTUFBTTtBQUNaLGFBQUssS0FBSyxRQUFRLENBQUMsY0FBYztBQUMvQixjQUNFLGtCQUFrQixTQUFTLEtBQzNCLHVDQUF1QyxXQUFXLG1CQUFtQixLQUNyRSxxQ0FBcUMsU0FBUyxLQUM5QyxnQ0FBZ0MsV0FBVyxtQkFBbUIsS0FDOUQsc0NBQXNDLFNBQVMsR0FDL0M7QUFDQSxvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -6,6 +6,7 @@ declare const _default: {
6
6
  'require-strict-assert': import("eslint").Rule.RuleModule;
7
7
  'no-test-import': import("eslint").Rule.RuleModule;
8
8
  'no-wallaby-comment': import("eslint").Rule.RuleModule;
9
+ 'no-side-effects': import("eslint").Rule.RuleModule;
9
10
  'regular-expression-comment': import("eslint").Rule.RuleModule;
10
11
  'require-assert-predicate-rejects-throws': import("eslint").Rule.RuleModule;
11
12
  'object-literal-response': import("eslint").Rule.RuleModule;
@@ -20,6 +21,9 @@ declare const _default: {
20
21
  '@checkdigit/no-uuid': string;
21
22
  '@checkdigit/require-strict-assert': string;
22
23
  '@checkdigit/no-wallaby-comment': string;
24
+ '@checkdigit/no-side-effects': (string | {
25
+ excludedIdentifiers: string[];
26
+ })[];
23
27
  '@checkdigit/regular-expression-comment': string;
24
28
  '@checkdigit/require-assert-predicate-rejects-throws': string;
25
29
  '@checkdigit/object-literal-response': string;
@@ -35,6 +39,7 @@ declare const _default: {
35
39
  '@checkdigit/no-uuid': string;
36
40
  '@checkdigit/require-strict-assert': string;
37
41
  '@checkdigit/no-wallaby-comment': string;
42
+ '@checkdigit/no-side-effects': string;
38
43
  '@checkdigit/regular-expression-comment': string;
39
44
  '@checkdigit/require-assert-predicate-rejects-throws': string;
40
45
  '@checkdigit/object-literal-response': string;
@@ -0,0 +1,3 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const _default: Rule.RuleModule;
3
+ export default _default;
package/package.json CHANGED
@@ -1,85 +1 @@
1
- {
2
- "name": "@checkdigit/eslint-plugin",
3
- "version": "6.5.0",
4
- "description": "Check Digit eslint plugins",
5
- "keywords": [
6
- "eslint",
7
- "eslintplugin"
8
- ],
9
- "homepage": "https://github.com/checkdigit/eslint-plugin#readme",
10
- "bugs": {
11
- "url": "https://github.com/checkdigit/eslint-plugin/issues"
12
- },
13
- "repository": {
14
- "type": "git",
15
- "url": "https://github.com/checkdigit/eslint-plugin"
16
- },
17
- "license": "MIT",
18
- "author": "Check Digit, LLC",
19
- "sideEffects": false,
20
- "type": "module",
21
- "exports": {
22
- ".": {
23
- "types": "./dist-types/index.d.ts",
24
- "require": "./dist-cjs/index.cjs",
25
- "import": "./dist-mjs/index.mjs",
26
- "default": "./dist-mjs/index.mjs"
27
- }
28
- },
29
- "files": [
30
- "src",
31
- "dist-types",
32
- "dist-cjs",
33
- "dist-mjs",
34
- "!src/**/*.test.ts",
35
- "!src/**/*.spec.ts",
36
- "!dist-types/**/*.test.d.ts",
37
- "!dist-types/**/*.spec.d.ts",
38
- "!dist-cjs/**/*.test.cjs",
39
- "!dist-cjs/**/*.spec.cjs",
40
- "!dist-mjs/**/*.test.mjs",
41
- "!dist-mjs/**/*.spec.mjs",
42
- "SECURITY.md"
43
- ],
44
- "scripts": {
45
- "build:dist-cjs": "rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs",
46
- "build:dist-mjs": "rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs",
47
- "build:dist-types": "rimraf dist-types && npx builder --type=types --outDir=dist-types",
48
- "ci:compile": "tsc --noEmit",
49
- "ci:coverage": "NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true",
50
- "ci:lint": "npm run lint",
51
- "ci:style": "npm run prettier",
52
- "ci:test": "NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false",
53
- "lint": "eslint --max-warnings 0 --ignore-path .gitignore .",
54
- "lint:fix": "eslint --ignore-path .gitignore . --fix",
55
- "prepublishOnly": "npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs",
56
- "prettier": "prettier --ignore-path .gitignore --list-different .",
57
- "prettier:fix": "prettier --ignore-path .gitignore --write .",
58
- "test": "npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"
59
- },
60
- "prettier": "@checkdigit/prettier-config",
61
- "jest": {
62
- "preset": "@checkdigit/jest-config"
63
- },
64
- "devDependencies": {
65
- "@checkdigit/jest-config": "^6.0.2",
66
- "@checkdigit/prettier-config": "^5.5.0",
67
- "@checkdigit/typescript-config": "6.0.0",
68
- "@types/eslint": "^8.56.10",
69
- "@typescript-eslint/eslint-plugin": "^7.16.0",
70
- "@typescript-eslint/parser": "^7.16.0",
71
- "eslint-config-prettier": "^9.1.0",
72
- "eslint-plugin-eslint-plugin": "^6.2.0",
73
- "eslint-plugin-import": "^2.29.1",
74
- "eslint-plugin-no-only-tests": "^3.1.0",
75
- "eslint-plugin-no-secrets": "^1.0.2",
76
- "eslint-plugin-node": "^11.1.0",
77
- "eslint-plugin-sonarjs": "0.24.0"
78
- },
79
- "peerDependencies": {
80
- "eslint": ">=8 <9"
81
- },
82
- "engines": {
83
- "node": ">=20.13"
84
- }
85
- }
1
+ {"name":"@checkdigit/eslint-plugin","version":"6.6.0-PR.66-fba9","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","require":"./dist-cjs/index.cjs","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-cjs","dist-mjs","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-cjs/**/*.test.cjs","!dist-cjs/**/*.spec.cjs","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-cjs":"rimraf dist-cjs && npx builder --type=commonjs --sourceMap --entryPoint=index.ts --outDir=dist-cjs --outFile=index.cjs && echo \"module.exports = module.exports.default;\" >> dist-cjs/index.cjs && node dist-cjs/index.cjs","build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 --ignore-path .gitignore .","lint:fix":"eslint --ignore-path .gitignore . --fix","prepublishOnly":"npm run build:dist-types && npm run build:dist-cjs && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^5.5.0","@checkdigit/typescript-config":"6.0.0","@types/eslint":"^8.56.10","@typescript-eslint/eslint-plugin":"^7.16.0","@typescript-eslint/parser":"^7.16.0","@typescript-eslint/rule-tester":"^7.13.1","eslint-config-prettier":"^9.1.0","eslint-plugin-eslint-plugin":"^6.2.0","eslint-plugin-import":"^2.29.1","eslint-plugin-no-only-tests":"^3.1.0","eslint-plugin-no-secrets":"^1.0.2","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"0.24.0"},"peerDependencies":{"eslint":">=8 <9"},"engines":{"node":">=20.13"}}
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ import invalidJsonStringify, { ruleId as invalidJsonStringifyRuleId } from './in
10
10
  import noPromiseInstanceMethod, { ruleId as noPromiseInstanceMethodRuleId } from './no-promise-instance-method';
11
11
  import filePathComment from './file-path-comment';
12
12
  import noCardNumbers from './no-card-numbers';
13
+ import noSideEffects from './no-side-effects';
13
14
  import noTestImport from './no-test-import';
14
15
  import noUuid from './no-uuid';
15
16
  import noWallabyComment from './no-wallaby-comment';
@@ -26,6 +27,7 @@ export default {
26
27
  'require-strict-assert': requireStrictAssert,
27
28
  'no-test-import': noTestImport,
28
29
  'no-wallaby-comment': noWallabyComment,
30
+ 'no-side-effects': noSideEffects,
29
31
  'regular-expression-comment': regexComment,
30
32
  'require-assert-predicate-rejects-throws': requireAssertPredicateRejectsThrows,
31
33
  'object-literal-response': objectLiteralResponse,
@@ -40,6 +42,7 @@ export default {
40
42
  '@checkdigit/no-uuid': 'error',
41
43
  '@checkdigit/require-strict-assert': 'error',
42
44
  '@checkdigit/no-wallaby-comment': 'error',
45
+ '@checkdigit/no-side-effects': ['error', { excludedIdentifiers: ['assert', 'debug', 'log', 'promisify'] }],
43
46
  '@checkdigit/regular-expression-comment': 'error',
44
47
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
45
48
  '@checkdigit/object-literal-response': 'error',
@@ -55,6 +58,7 @@ export default {
55
58
  '@checkdigit/no-uuid': 'error',
56
59
  '@checkdigit/require-strict-assert': 'error',
57
60
  '@checkdigit/no-wallaby-comment': 'off',
61
+ '@checkdigit/no-side-effects': 'error',
58
62
  '@checkdigit/regular-expression-comment': 'error',
59
63
  '@checkdigit/require-assert-predicate-rejects-throws': 'error',
60
64
  '@checkdigit/object-literal-response': 'error',
@@ -0,0 +1,120 @@
1
+ // no-side-effects.ts
2
+
3
+ /*
4
+ * Copyright (c) 2022-2024 Check Digit, LLC
5
+ *
6
+ * This code is licensed under the MIT license (see LICENSE.txt for details).
7
+ */
8
+
9
+ import type { Node } from 'estree';
10
+ import type { Rule } from 'eslint';
11
+
12
+ interface RuleOptions {
13
+ excludedIdentifiers: string[];
14
+ }
15
+
16
+ // To check if it is an await expression i.e await someFunction()
17
+ function isAwaitExpression(statement: Node): boolean {
18
+ return statement.type === 'ExpressionStatement' && statement.expression.type === 'AwaitExpression';
19
+ }
20
+
21
+ // To check if it is a call expression with a member expression i.e module.method()
22
+ function isCallExpressionCalleeMemberExpression(statement: Node, excludedIdentifiers: string[]): boolean {
23
+ return (
24
+ statement.type === 'ExpressionStatement' &&
25
+ statement.expression.type === 'CallExpression' &&
26
+ statement.expression.callee.type === 'MemberExpression' &&
27
+ statement.expression.callee.object.type === 'Identifier' &&
28
+ !excludedIdentifiers.includes(statement.expression.callee.object.name)
29
+ );
30
+ }
31
+
32
+ // To check if it is a variable declaration with an await expression i.e const configuration = await someFunction();
33
+ function isVariableDeclarationAwaitExpression(node: Node): boolean {
34
+ return (
35
+ node.type === 'VariableDeclaration' &&
36
+ node.declarations.length > 0 &&
37
+ node.declarations[0]?.id !== undefined &&
38
+ node.declarations[0].id.type === 'Identifier' &&
39
+ node.declarations[0].init !== undefined &&
40
+ node.declarations[0].init !== null &&
41
+ node.declarations[0].init.type === 'AwaitExpression'
42
+ );
43
+ }
44
+
45
+ // To check if it is a variable declaration with an identifier i.e function()
46
+ function isVariableDeclarationIdentifier(node: Node, excludedIdentifiers: string[]): boolean {
47
+ return (
48
+ node.type === 'VariableDeclaration' &&
49
+ node.declarations.length > 0 &&
50
+ node.declarations[0]?.id !== undefined &&
51
+ node.declarations[0].id.type === 'Identifier' &&
52
+ node.declarations[0].init !== undefined &&
53
+ node.declarations[0].init !== null &&
54
+ node.declarations[0].init.type === 'CallExpression' &&
55
+ node.declarations[0].init.callee.type === 'Identifier' &&
56
+ !excludedIdentifiers.includes(node.declarations[0].init.callee.name)
57
+ );
58
+ }
59
+
60
+ // To check if it is a variable declaration with a member expression i.e const test = module.method()
61
+ function isVariableDeclarationMemberExpression(node: Node): boolean {
62
+ return (
63
+ node.type === 'VariableDeclaration' &&
64
+ node.declarations.length > 0 &&
65
+ node.declarations[0]?.id !== undefined &&
66
+ node.declarations[0].id.type === 'Identifier' &&
67
+ node.declarations[0].init !== undefined &&
68
+ node.declarations[0].init !== null &&
69
+ node.declarations[0].init.type === 'CallExpression' &&
70
+ node.declarations[0].init.callee.type === 'MemberExpression' &&
71
+ ((node.declarations[0].init.callee.object.type === 'NewExpression' &&
72
+ node.declarations[0].init.callee.object.callee.type === 'Identifier') ||
73
+ node.declarations[0].init.callee.object.type === 'Identifier')
74
+ );
75
+ }
76
+
77
+ export default {
78
+ meta: {
79
+ type: 'problem',
80
+ docs: {
81
+ description: 'Ensure no side effects can occur at the module-level',
82
+ url: 'https://github.com/checkdigit/eslint-plugin',
83
+ },
84
+ schema: [
85
+ {
86
+ type: 'object',
87
+ properties: {
88
+ excludedIdentifiers: {
89
+ type: 'array',
90
+ items: { type: 'string' },
91
+ },
92
+ },
93
+ additionalProperties: false,
94
+ },
95
+ ],
96
+ },
97
+ create(context) {
98
+ const options: RuleOptions = (context.options[0] ?? {}) as RuleOptions;
99
+ const excludedIdentifiers = options.excludedIdentifiers.length > 0 ? options.excludedIdentifiers : [];
100
+
101
+ return {
102
+ Program(node) {
103
+ node.body.forEach((statement) => {
104
+ if (
105
+ isAwaitExpression(statement) ||
106
+ isCallExpressionCalleeMemberExpression(statement, excludedIdentifiers) ||
107
+ isVariableDeclarationAwaitExpression(statement) ||
108
+ isVariableDeclarationIdentifier(statement, excludedIdentifiers) ||
109
+ isVariableDeclarationMemberExpression(statement)
110
+ ) {
111
+ context.report({
112
+ node: statement,
113
+ message: 'No side effects can occur at the module-level',
114
+ });
115
+ }
116
+ });
117
+ },
118
+ };
119
+ },
120
+ } as Rule.RuleModule;