Procházet zdrojové kódy

Merge branch 'john19696-nodejs16'

n1474335 před 3 roky
rodič
revize
78a1827af8

+ 1 - 1
.eslintrc.json

@@ -1,5 +1,5 @@
 {
-    "parser": "babel-eslint",
+    "parser": "@babel/eslint-parser",
     "parserOptions": {
         "ecmaVersion": 9,
         "ecmaFeatures": {

+ 1 - 0
.github/workflows/codeql.yml

@@ -1,6 +1,7 @@
 name: "CodeQL Analysis"
 
 on:
+  workflow_dispatch:
   push:
     branches: [ master ]
   pull_request:

+ 2 - 1
.github/workflows/master.yml

@@ -1,6 +1,7 @@
 name: "Master Build, Test & Deploy"
 
 on:
+  workflow_dispatch:
   push:
     branches:
     - master
@@ -14,7 +15,7 @@ jobs:
     - name: Set node version
       uses: actions/setup-node@v1
       with:
-        node-version: '10.x'
+        node-version: '17.x'
 
     - name: Install
       run: |

+ 2 - 1
.github/workflows/pull_requests.yml

@@ -1,6 +1,7 @@
 name: "Pull Requests"
 
 on:
+  workflow_dispatch:
   pull_request:
     types: [synchronize, opened, reopened]
 
@@ -13,7 +14,7 @@ jobs:
     - name: Set node version
       uses: actions/setup-node@v1
       with:
-        node-version: '10.x'
+        node-version: '17.x'
 
     - name: Install
       run: |

+ 2 - 1
.github/workflows/releases.yml

@@ -1,6 +1,7 @@
 name: "Releases"
 
 on:
+  workflow_dispatch:
   push:
     tags:
     - 'v*'
@@ -14,7 +15,7 @@ jobs:
     - name: Set node version
       uses: actions/setup-node@v1
       with:
-        node-version: '10.x'
+        node-version: '17.x'
 
     - name: Install
       run: |

+ 1 - 1
.nvmrc

@@ -1 +1 @@
-lts/dubnium
+17

+ 9 - 10
Gruntfile.js

@@ -6,6 +6,8 @@ const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPl
 const glob = require("glob");
 const path = require("path");
 
+const nodeFlags = "--experimental-modules --experimental-json-modules --experimental-specifier-resolution=node --no-warnings --no-deprecation";
+
 /**
  * Grunt configuration for building the app in various formats.
  *
@@ -187,9 +189,6 @@ module.exports = function (grunt) {
             standalone: ["build/prod/CyberChef*.html"]
         },
         eslint: {
-            options: {
-                configFile: "./.eslintrc.json"
-            },
             configs: ["*.{js,mjs}"],
             core: ["src/core/**/*.{js,mjs}", "!src/core/vendor/**/*", "!src/core/operations/legacy/**/*"],
             web: ["src/web/**/*.{js,mjs}", "!src/web/static/**/*"],
@@ -349,15 +348,15 @@ module.exports = function (grunt) {
                 command: "git gc --prune=now --aggressive"
             },
             sitemap: {
-                command: "node --experimental-modules --no-warnings --no-deprecation src/web/static/sitemap.mjs > build/prod/sitemap.xml",
+                command: `node ${nodeFlags} src/web/static/sitemap.mjs > build/prod/sitemap.xml`,
                 sync: true
             },
             generateConfig: {
                 command: chainCommands([
                     "echo '\n--- Regenerating config files. ---'",
                     "echo [] > src/core/config/OperationConfig.json",
-                    "node --experimental-modules --no-warnings --no-deprecation src/core/config/scripts/generateOpsIndex.mjs",
-                    "node --experimental-modules --no-warnings --no-deprecation src/core/config/scripts/generateConfig.mjs",
+                    `node ${nodeFlags} src/core/config/scripts/generateOpsIndex.mjs`,
+                    `node ${nodeFlags} src/core/config/scripts/generateConfig.mjs`,
                     "echo '--- Config scripts finished. ---\n'"
                 ]),
                 sync: true
@@ -365,7 +364,7 @@ module.exports = function (grunt) {
             generateNodeIndex: {
                 command: chainCommands([
                     "echo '\n--- Regenerating node index ---'",
-                    "node --experimental-modules --no-warnings --no-deprecation src/node/config/scripts/generateNodeIndex.mjs",
+                    `node ${nodeFlags} src/node/config/scripts/generateNodeIndex.mjs`,
                     "echo '--- Node index generated. ---\n'"
                 ]),
                 sync: true
@@ -393,21 +392,21 @@ module.exports = function (grunt) {
             testCJSNodeConsumer: {
                 command: chainCommands([
                     `cd ${nodeConsumerTestPath}`,
-                    "node --no-warnings cjs-consumer.js",
+                    `node ${nodeFlags} cjs-consumer.js`,
                 ]),
                 stdout: false,
             },
             testESMNodeConsumer: {
                 command: chainCommands([
                     `cd ${nodeConsumerTestPath}`,
-                    "node --no-warnings --experimental-modules esm-consumer.mjs",
+                    `node ${nodeFlags} esm-consumer.mjs`,
                 ]),
                 stdout: false,
             },
             testESMDeepImportNodeConsumer: {
                 command: chainCommands([
                     `cd ${nodeConsumerTestPath}`,
-                    "node --no-warnings --experimental-modules esm-deep-import-consumer.mjs",
+                    `node ${nodeFlags} esm-deep-import-consumer.mjs`,
                 ]),
                 stdout: false,
             },

+ 1 - 0
babel.config.js

@@ -11,6 +11,7 @@ module.exports = function(api) {
         ],
         "plugins": [
             "dynamic-import-node",
+            "@babel/plugin-syntax-import-assertions",
             [
                 "babel-plugin-transform-builtin-extend", {
                     "globals": ["Error"]

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 18595 - 25
package-lock.json


+ 22 - 16
package.json

@@ -29,26 +29,35 @@
   },
   "main": "src/node/cjs.js",
   "module": "src/node/index.mjs",
+  "exports": {
+    ".": {
+      "require": "./src/node/cjs.js",
+      "import": "./src/node/index.mjs"
+    }
+  },
   "bugs": "https://github.com/gchq/CyberChef/issues",
   "browserslist": [
     "Chrome >= 50",
     "Firefox >= 38",
-    "node >= 10"
+    "node >= 16"
   ],
   "devDependencies": {
-    "@babel/core": "^7.15.0",
-    "@babel/plugin-transform-runtime": "^7.15.0",
-    "@babel/preset-env": "^7.15.0",
+    "@babel/core": "^7.17.8",
+    "@babel/eslint-parser": "^7.17.0",
+    "@babel/plugin-syntax-import-assertions": "^7.16.7",
+    "@babel/plugin-transform-runtime": "^7.17.0",
+    "@babel/preset-env": "^7.16.11",
+    "@babel/runtime": "^7.17.8",
     "autoprefixer": "^10.3.1",
-    "babel-eslint": "^10.1.0",
-    "babel-loader": "^8.2.2",
+    "babel-loader": "^8.2.4",
     "babel-plugin-dynamic-import-node": "^2.3.3",
-    "chromedriver": "^92.0.1",
+    "chromedriver": "^99.0.0",
     "cli-progress": "^3.9.0",
     "colors": "^1.4.0",
     "copy-webpack-plugin": "^9.0.1",
+    "core-js": "^3.21.1",
     "css-loader": "5.2.7",
-    "eslint": "^7.32.0",
+    "eslint": "^8.11.0",
     "exports-loader": "^3.0.0",
     "file-loader": "^6.2.0",
     "grunt": "^1.4.1",
@@ -58,7 +67,7 @@
     "grunt-contrib-connect": "^3.0.0",
     "grunt-contrib-copy": "~1.0.0",
     "grunt-contrib-watch": "^1.1.0",
-    "grunt-eslint": "^23.0.0",
+    "grunt-eslint": "^24.0.0",
     "grunt-exec": "~3.0.0",
     "grunt-webpack": "^4.0.3",
     "grunt-zip": "^0.18.2",
@@ -66,7 +75,6 @@
     "imports-loader": "^3.0.0",
     "mini-css-extract-plugin": "1.3.7",
     "nightwatch": "^1.7.8",
-    "node-sass": "^5.0.0",
     "postcss": "^8.3.6",
     "postcss-css-variables": "^0.18.0",
     "postcss-import": "^14.0.2",
@@ -77,7 +85,7 @@
     "style-loader": "^3.2.1",
     "svg-url-loader": "^7.1.1",
     "url-loader": "^4.1.1",
-    "webpack": "^5.51.0",
+    "webpack": "^5.70.0",
     "webpack-bundle-analyzer": "^4.4.2",
     "webpack-dev-server": "3.11.2",
     "webpack-node-externals": "^3.0.0",
@@ -85,7 +93,6 @@
   },
   "dependencies": {
     "@babel/polyfill": "^7.12.1",
-    "@babel/runtime": "^7.15.3",
     "arrive": "^2.4.1",
     "avsc": "^5.7.3",
     "babel-plugin-transform-builtin-extend": "1.1.2",
@@ -101,7 +108,6 @@
     "cbor": "5.0.1",
     "chi-squared": "^1.1.0",
     "codepage": "^1.15.0",
-    "core-js": "^3.16.2",
     "crypto-api": "^0.8.5",
     "crypto-browserify": "^3.12.0",
     "crypto-js": "^4.1.1",
@@ -111,7 +117,6 @@
     "diff": "^5.0.0",
     "es6-promisify": "^7.0.0",
     "escodegen": "^2.0.0",
-    "esm": "^3.2.25",
     "esprima": "^4.0.1",
     "exif-parser": "^0.1.12",
     "file-saver": "^2.0.5",
@@ -139,6 +144,7 @@
     "ngeohash": "^0.6.3",
     "node-forge": "^0.10.0",
     "node-md6": "^0.1.0",
+    "node-sass": "^7.0.1",
     "nodom": "^2.4.0",
     "notepack.io": "^2.3.0",
     "nwmatcher": "^1.4.4",
@@ -169,13 +175,13 @@
     "start": "npx grunt dev",
     "build": "npx grunt prod",
     "repl": "node src/node/repl.js",
-    "test": "npx grunt configTests && node --experimental-modules --no-warnings --no-deprecation tests/node/index.mjs && node --experimental-modules --no-warnings --no-deprecation tests/operations/index.mjs",
+    "test": "npx grunt configTests && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation tests/node/index.mjs && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation tests/operations/index.mjs",
     "test-node-consumer": "npx grunt testnodeconsumer",
     "testui": "npx grunt testui",
     "testuidev": "npx nightwatch --env=dev",
     "lint": "npx grunt lint",
     "postinstall": "npx grunt exec:fixCryptoApiImports",
-    "newop": "node --experimental-modules src/core/config/scripts/newOperation.mjs",
+    "newop": "node --experimental-modules --experimental-json-modules src/core/config/scripts/newOperation.mjs",
     "getheapsize": "node -e 'console.log(`node heap limit = ${require(\"v8\").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'",
     "setheapsize": "export NODE_OPTIONS=--max_old_space_size=2048"
   }

+ 1 - 1
src/core/ChefWorker.js

@@ -7,7 +7,7 @@
  */
 
 import Chef from "./Chef.mjs";
-import OperationConfig from "./config/OperationConfig.json";
+import OperationConfig from "./config/OperationConfig.json" assert {type: "json"};
 import OpModules from "./config/modules/OpModules.mjs";
 
 // Add ">" to the start of all log messages in the Chef Worker

+ 1 - 1
src/core/Recipe.mjs

@@ -4,7 +4,7 @@
  * @license Apache-2.0
  */
 
-import OperationConfig from "./config/OperationConfig.json";
+import OperationConfig from "./config/OperationConfig.json" assert {type: "json"};
 import OperationError from "./errors/OperationError.mjs";
 import Operation from "./Operation.mjs";
 import DishError from "./errors/DishError.mjs";

+ 1 - 1
src/core/errors/index.mjs

@@ -1,6 +1,6 @@
 import OperationError from "./OperationError.mjs";
 import DishError from "./DishError.mjs";
-import ExcludedOperationError from "./ExcludedOperationError";
+import ExcludedOperationError from "./ExcludedOperationError.mjs";
 
 export {
     OperationError,

+ 1 - 1
src/core/lib/Magic.mjs

@@ -1,4 +1,4 @@
-import OperationConfig from "../config/OperationConfig.json";
+import OperationConfig from "../config/OperationConfig.json" assert {type: "json"};
 import Utils, { isWorkerEnvironment } from "../Utils.mjs";
 import Recipe from "../Recipe.mjs";
 import Dish from "../Dish.mjs";

+ 1 - 1
src/node/api.mjs

@@ -10,7 +10,7 @@
 
 import NodeDish from "./NodeDish.mjs";
 import NodeRecipe from "./NodeRecipe.mjs";
-import OperationConfig from "../core/config/OperationConfig.json";
+import OperationConfig from "../core/config/OperationConfig.json" assert {type: "json"};
 import { sanitise, removeSubheadingsFromArray, sentenceToCamelCase } from "./apiUtils.mjs";
 import ExcludedOperationError from "../core/errors/ExcludedOperationError.mjs";
 

+ 2 - 4
src/node/cjs.js

@@ -7,7 +7,5 @@
  * @license Apache-2.0
  */
 
-/* eslint no-global-assign: ["off"] */
-require = require("esm")(module);
-module.exports = require("./index.mjs");
-module.exports.File = require("./File.mjs");
+module.exports = (async () => await import("./index.mjs"))();
+module.exports.File = (async () => await import("./File.mjs"))();

+ 2 - 2
src/node/config/scripts/generateNodeIndex.mjs

@@ -41,7 +41,7 @@ let code = `/**
 import NodeDish from "./NodeDish.mjs";
 import { _wrap, help, bake, _explainExcludedFunction } from "./api.mjs";
 import File from "./File.mjs";
-import { OperationError, DishError, ExcludedOperationError } from "../core/errors/index";
+import { OperationError, DishError, ExcludedOperationError } from "../core/errors/index.mjs";
 import {
     // import as core_ to avoid name clashes after wrap.
 `;
@@ -52,7 +52,7 @@ includedOperations.forEach((op) => {
 });
 
 code +=`
-} from "../core/operations/index";
+} from "../core/operations/index.mjs";
 
 global.File = File;
 

+ 2 - 2
src/web/index.js

@@ -17,8 +17,8 @@ import * as CanvasComponents from "../core/lib/CanvasComponents.mjs";
 
 // CyberChef
 import App from "./App.mjs";
-import Categories from "../core/config/Categories.json";
-import OperationConfig from "../core/config/OperationConfig.json";
+import Categories from "../core/config/Categories.json" assert {type: "json"};
+import OperationConfig from "../core/config/OperationConfig.json" assert {type: "json"};
 
 
 /**

+ 1 - 1
src/web/static/sitemap.mjs

@@ -1,5 +1,5 @@
 import sm from "sitemap";
-import OperationConfig from "../../core/config/OperationConfig.json";
+import OperationConfig from "../../core/config/OperationConfig.json" assert {type: "json"};
 
 
 /**

+ 20 - 17
tests/node/consumers/cjs-consumer.js

@@ -6,24 +6,27 @@
  * @license Apache-2.0
  */
 
-const chef = require("cyberchef");
 const assert = require("assert");
 
-const d = chef.bake("Testing, 1 2 3", [
-    chef.toHex,
-    chef.reverse,
-    {
-        op: chef.unique,
-        args: {
-            delimiter: "Space",
-        }
-    },
-    {
-        op: chef.multiply,
-        args: {
-            delimiter: "Space",
+require("cyberchef").then(chef => {
+
+    const d = chef.bake("Testing, 1 2 3", [
+        chef.toHex,
+        chef.reverse,
+        {
+            op: chef.unique,
+            args: {
+                delimiter: "Space",
+            }
+        },
+        {
+            op: chef.multiply,
+            args: {
+                delimiter: "Space",
+            }
         }
-    }
-]);
+    ]);
+
+    assert.equal(d.value, "630957449041920");
 
-assert.equal(d.value, "630957449041920");
+});

+ 1 - 1
tests/node/consumers/esm-deep-import-consumer.mjs

@@ -6,7 +6,7 @@
  * @license Apache-2.0
  */
 import assert from "assert";
-import { bake, toHex, reverse, unique, multiply } from "cyberchef/src/node/index.mjs";
+import { bake, toHex, reverse, unique, multiply } from "cyberchef";
 
 const d = bake("Testing, 1 2 3", [
     toHex,

+ 2 - 2
tests/node/tests/Categories.mjs

@@ -1,6 +1,6 @@
 import TestRegister from "../../lib/TestRegister.mjs";
-import Categories from "../../../src/core/config/Categories.json";
-import OperationConfig from "../../../src/core/config/OperationConfig.json";
+import Categories from "../../../src/core/config/Categories.json" assert {type: "json"};
+import OperationConfig from "../../../src/core/config/OperationConfig.json" assert {type: "json"};
 import it from "../assertionHandler.mjs";
 import assert from "assert";
 

+ 1 - 1
tests/node/tests/operations.mjs

@@ -32,7 +32,7 @@ import {
     CSSMinify,
     toBase64,
     toHex
-} from "../../../src/node/index";
+} from "../../../src/node/index.mjs";
 import chef from "../../../src/node/index.mjs";
 import TestRegister from "../../lib/TestRegister.mjs";
 import File from "../../../src/node/File.mjs";

+ 1 - 1
tests/operations/tests/AvroToJSON.mjs

@@ -6,7 +6,7 @@
  * @license Apache-2.0
  */
 
-import TestRegister from "../../lib/TestRegister";
+import TestRegister from "../../lib/TestRegister.mjs";
 
 TestRegister.addTests([
     {

+ 2 - 2
tests/operations/tests/BaconCipher.mjs

@@ -5,8 +5,8 @@
  * @copyright Karsten Silkenbäumer 2019
  * @license Apache-2.0
  */
-import TestRegister from "../../lib/TestRegister";
-import { BACON_ALPHABETS, BACON_TRANSLATIONS } from "../../../src/core/lib/Bacon";
+import TestRegister from "../../lib/TestRegister.mjs";
+import { BACON_ALPHABETS, BACON_TRANSLATIONS } from "../../../src/core/lib/Bacon.mjs";
 
 const alphabets = Object.keys(BACON_ALPHABETS);
 const translations = BACON_TRANSLATIONS;

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů