diff --git a/ui/.eslintignore b/ui/.eslintignore index 278e0ca06f..15e0f49f2f 100644 --- a/ui/.eslintignore +++ b/ui/.eslintignore @@ -5,6 +5,7 @@ /dist/ /tmp/ /vault-reporting/ +/vendor/ # dependencies /bower_components/ @@ -26,4 +27,4 @@ /tests/helpers/vault-keys.js # typescript declaration files -*.d.ts +*.d.ts \ No newline at end of file diff --git a/ui/.gitignore b/ui/.gitignore index 639f011c1d..a2b9fce842 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -39,3 +39,8 @@ package-lock.json # copywrite tool used in pre-commit hook .copywrite +# vendor bundle +vendor/jsondiffpatch.umd.js +vendor/htmlformatter.umd.js + + diff --git a/ui/ember-cli-build.js b/ui/ember-cli-build.js index 7a90d22e78..c087ad126d 100644 --- a/ui/ember-cli-build.js +++ b/ui/ember-cli-build.js @@ -81,8 +81,9 @@ module.exports = function (defaults) { app.import('node_modules/jsonlint/lib/jsonlint.js'); app.import('node_modules/text-encoder-lite/text-encoder-lite.js'); - app.import('node_modules/jsondiffpatch/dist/jsondiffpatch.umd.js'); - app.import('node_modules/jsondiffpatch/dist/formatters-styles/html.css'); + app.import('vendor/jsondiffpatch.umd.js'); + app.import('vendor/htmlformatter.umd.js'); + app.import('node_modules/jsondiffpatch/lib/formatters/styles/html.css'); app.import('app/styles/bulma/bulma-radio-checkbox.css'); app.import( diff --git a/ui/lib/kv/addon/components/page/secret/edit.js b/ui/lib/kv/addon/components/page/secret/edit.js index a28a782156..80021bb285 100644 --- a/ui/lib/kv/addon/components/page/secret/edit.js +++ b/ui/lib/kv/addon/components/page/secret/edit.js @@ -62,7 +62,7 @@ export default class KvSecretEdit extends Component { get visualDiff() { if (this.showDiff) { return this.diffDelta - ? jsondiffpatch.formatters.html.format(this.diffDelta, this.updatedSecret) + ? htmlformatter.format(this.diffDelta, this.updatedSecret) : JSON.stringify(this.updatedSecret, undefined, 2); } return null; diff --git a/ui/lib/kv/addon/components/page/secret/metadata/version-diff.js b/ui/lib/kv/addon/components/page/secret/metadata/version-diff.js index 6a48db1702..6ee2ff3c99 100644 --- a/ui/lib/kv/addon/components/page/secret/metadata/version-diff.js +++ b/ui/lib/kv/addon/components/page/secret/metadata/version-diff.js @@ -75,7 +75,7 @@ export default class KvSecretMetadataVersionDiff extends Component { this.statesMatch = !delta; this.visualDiff = delta - ? jsondiffpatch.formatters.html.format(delta, leftSecretData) + ? htmlformatter.format(delta, leftSecretData) : JSON.stringify(rightSecretData, undefined, 2); } diff --git a/ui/package.json b/ui/package.json index d02d719e62..426e1b39e4 100644 --- a/ui/package.json +++ b/ui/package.json @@ -9,8 +9,10 @@ "test": "tests" }, "scripts": { - "build": "ember build --environment=production && cp metadata.json ../http/web_ui/metadata.json", - "build:dev": "ember build", + "postinstall": "yarn build:jsondiffpatch", + "build": "yarn build:jsondiffpatch && ember build --environment=production && cp metadata.json ../http/web_ui/metadata.json", + "build:dev": "yarn build:jsondiffpatch && ember build", + "build:jsondiffpatch": "webpack --config webpack.jsondiffpatch.config.js", "docs": "sh scripts/generate-docs.sh", "docfy-md": "node scripts/docfy-md.js", "lint:css": "stylelint \"**/*.css\"", @@ -27,8 +29,8 @@ "fmt:js": "prettier --config .prettierrc.js --write '{app,tests,config,lib}/**/*.js'", "fmt:hbs": "prettier --config .prettierrc.js --write '**/*.hbs'", "fmt:styles": "prettier --write app/styles/**/*.*", - "start": "VAULT_ADDR=http://127.0.0.1:8200; ember server --proxy=$VAULT_ADDR", - "start2": "ember server --proxy=http://127.0.0.1:8202 --port=4202", + "start": "VAULT_ADDR=http://127.0.0.1:8200; yarn build:jsondiffpatch && ember server --proxy=$VAULT_ADDR", + "start2": "yarn build:jsondiffpatch && ember server --proxy=http://127.0.0.1:8202 --port=4202", "start:chroot": "ember server --proxy=http://127.0.0.1:8300 --port=4300", "lint": "concurrently --kill-others-on-fail -P -c \"auto\" -n lint:js,lint:hbs,lint:types \"yarn:lint:js:quiet\" \"yarn:lint:hbs:quiet\" \"yarn:lint:types\"", "test": "yarn lint && node scripts/start-vault.js", @@ -140,7 +142,7 @@ "filesize": "~4.2.1", "jsdoc-babel": "~0.5.0", "jsdoc-to-markdown": "~8.0.3", - "jsondiffpatch": "~0.4.1", + "jsondiffpatch": "0.7.3", "jsonlint": "~1.6.3", "lint-staged": "~16.0.0", "loader.js": "~4.7.0", @@ -161,7 +163,8 @@ "text-encoder-lite": "2.0.0", "tracked-built-ins": "~3.4.0", "typescript": "~5.8.3", - "webpack": "5.94.0" + "webpack": "5.94.0", + "webpack-cli": "^6.0.1" }, "resolutions": { "ansi-html": "0.0.8", diff --git a/ui/tests/integration/components/kv/page/kv-page-version-diff-test.js b/ui/tests/integration/components/kv/page/kv-page-version-diff-test.js index 1cf5b93557..888c318ae5 100644 --- a/ui/tests/integration/components/kv/page/kv-page-version-diff-test.js +++ b/ui/tests/integration/components/kv/page/kv-page-version-diff-test.js @@ -124,7 +124,7 @@ module('Integration | Component | kv-v2 | Page::Secret::Metadata::VersionDiff', const [left, right] = findAll(PAGE.detail.versionDropdown); assert.dom(PAGE.diff.visualDiff).hasText( - `foo\"bar\"hello\"world\"`, // eslint-disable-line no-useless-escape + `hello\"world\"foo\"bar\"`, // eslint-disable-line no-useless-escape 'correctly pull in the data from version 4 and compared to version 1.' ); assert.dom(PAGE.diff.deleted).hasText(`hello"world"`); diff --git a/ui/webpack.jsondiffpatch.config.js b/ui/webpack.jsondiffpatch.config.js new file mode 100644 index 0000000000..720319d90c --- /dev/null +++ b/ui/webpack.jsondiffpatch.config.js @@ -0,0 +1,24 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +/* eslint-env node */ +'use strict'; + +const path = require('path'); + +module.exports = { + entry: { + jsondiffpatch: require.resolve('jsondiffpatch'), + htmlformatter: require.resolve('jsondiffpatch/formatters/html'), + }, + output: { + path: path.resolve(__dirname, 'vendor'), + filename: '[name].umd.js', + library: '[name]', + libraryTarget: 'umd', + globalObject: 'this', + }, + mode: 'production', +}; diff --git a/ui/yarn.lock b/ui/yarn.lock index 7824db7186..806a8ebdf0 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -1677,6 +1677,20 @@ __metadata: languageName: node linkType: hard +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 8305a5feb9bbaedbfdb91f938cb577f98c34cb432535dbc7af5e5df7f1cb3d1895f7a9ec0d956b5bd9e980e5b7f8cd36684c4c9ed219e6e556e0dfe367c4cb66 + languageName: node + linkType: hard + +"@dmsnell/diff-match-patch@npm:^1.1.0": + version: 1.1.0 + resolution: "@dmsnell/diff-match-patch@npm:1.1.0" + checksum: 4472487045f0bed40abbf5708542f596bf9576e1e6bd4ae01d8ddb694f857be51ca56599c95c61d1433f3d57da2e6c6f3e175609864eea601a47a26a68750ca0 + languageName: node + linkType: hard + "@docfy/core@npm:^0.8.0": version: 0.8.0 resolution: "@docfy/core@npm:0.8.0" @@ -4367,6 +4381,39 @@ __metadata: languageName: node linkType: hard +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: a83301ff360de6c36fe98766f1f391db6149f0806450ce31484c49df3902584f73385453da23f3324a605d5afad4d2889654ada679afd49e35c59a2c4769ee97 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 0ddcfd8b370d924f71cc085b17b31a77b362d8046fedb38ac601042733568cda05b0c8c7b1e0e1e050dc926ee76f754cd9c4f351e2b361a0d157465f8b03b689 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 5bbd66548faa8adc7b0759f5880411b611c9a25e9303e2f580ab2d658ec105926a21c981fa7797e9f7c24093d0a0ff96d6f2d8f76f265d7760441cf138cab889 + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.8.0": version: 0.8.10 resolution: "@xmldom/xmldom@npm:0.8.10" @@ -6373,7 +6420,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -6681,6 +6728,17 @@ __metadata: languageName: node linkType: hard +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + "clone@npm:^1.0.2": version: 1.0.4 resolution: "clone@npm:1.0.4" @@ -6771,7 +6829,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.20": +"colorette@npm:^2.0.14, colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d @@ -6862,6 +6920,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 + languageName: node + linkType: hard + "commander@npm:^13.1.0": version: 13.1.0 resolution: "commander@npm:13.1.0" @@ -7609,13 +7674,6 @@ __metadata: languageName: node linkType: hard -"diff-match-patch@npm:^1.0.0": - version: 1.0.5 - resolution: "diff-match-patch@npm:1.0.5" - checksum: 841522d01b09cccbc4e4402cf61514a81b906349a7d97b67222390f2d35cf5df277cb23959eeed212d5e46afb5629cebab41b87918672c5a05c11c73688630e3 - languageName: node - linkType: hard - "diff@npm:^5.1.0": version: 5.2.0 resolution: "diff@npm:5.2.0" @@ -9333,6 +9391,15 @@ __metadata: languageName: node linkType: hard +"envinfo@npm:^7.14.0": + version: 7.15.0 + resolution: "envinfo@npm:7.15.0" + bin: + envinfo: dist/cli.js + checksum: 38595c11134ecb66a40289980d8ca82e89fdcd68849dd72560c1bbc3cfc55c867573b4150967707ff9ff2e5cad6f1d0cb6cc56c333a6eccdcd3533452141c0a8 + languageName: node + linkType: hard + "environment@npm:^1.0.0": version: 1.1.0 resolution: "environment@npm:1.1.0" @@ -10134,7 +10201,7 @@ __metadata: languageName: node linkType: hard -"fastest-levenshtein@npm:^1.0.16": +"fastest-levenshtein@npm:^1.0.12, fastest-levenshtein@npm:^1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 @@ -10528,6 +10595,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + "flatted@npm:^3.2.9, flatted@npm:^3.3.3": version: 3.3.3 resolution: "flatted@npm:3.3.3" @@ -11717,6 +11793,18 @@ __metadata: languageName: node linkType: hard +"import-local@npm:^3.0.2": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -11885,6 +11973,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + "invert-kv@npm:^3.0.0": version: 3.0.1 resolution: "invert-kv@npm:3.0.1" @@ -12205,6 +12300,15 @@ __metadata: languageName: node linkType: hard +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + "is-plain-object@npm:^5.0.0": version: 5.0.0 resolution: "is-plain-object@npm:5.0.0" @@ -12416,6 +12520,13 @@ __metadata: languageName: node linkType: hard +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + "istextorbinary@npm:2.1.0": version: 2.1.0 resolution: "istextorbinary@npm:2.1.0" @@ -12699,15 +12810,14 @@ __metadata: languageName: node linkType: hard -"jsondiffpatch@npm:~0.4.1": - version: 0.4.1 - resolution: "jsondiffpatch@npm:0.4.1" +"jsondiffpatch@npm:0.7.3": + version: 0.7.3 + resolution: "jsondiffpatch@npm:0.7.3" dependencies: - chalk: ^2.3.0 - diff-match-patch: ^1.0.0 + "@dmsnell/diff-match-patch": ^1.1.0 bin: - jsondiffpatch: ./bin/jsondiffpatch - checksum: 2062d188cc7f60f9d84e7bf497a7d89233d2f8ec21d085c26cdb24c2b7c5f4f7231ad9b978355e319c00820de0863499ba881c6c6b1bd92313db1a7d16d6ab1d + jsondiffpatch: bin/jsondiffpatch.js + checksum: ec00f40f957bf3827995d53804fb29f040e91565b46752d5212fd17462e17b8a08865df85ed5fc2f01b3b6e194d23a95d278b948078406152e77eb79157500a9 languageName: node linkType: hard @@ -15002,7 +15112,7 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.1.0": +"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -15587,6 +15697,15 @@ __metadata: languageName: node linkType: hard +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + "redeyed@npm:~1.0.0": version: 1.0.1 resolution: "redeyed@npm:1.0.1" @@ -15903,6 +16022,15 @@ __metadata: languageName: node linkType: hard +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + "resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": version: 1.0.1 resolution: "resolve-dir@npm:1.0.1" @@ -16524,6 +16652,15 @@ __metadata: languageName: node linkType: hard +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -18558,7 +18695,7 @@ __metadata: highlight.js: 10.7.3 jsdoc-babel: ~0.5.0 jsdoc-to-markdown: ~8.0.3 - jsondiffpatch: ~0.4.1 + jsondiffpatch: 0.7.3 jsonlint: ~1.6.3 lint-staged: ~16.0.0 loader.js: ~4.7.0 @@ -18582,6 +18719,7 @@ __metadata: typescript: ~5.8.3 uuid: 9.0.1 webpack: 5.94.0 + webpack-cli: ^6.0.1 languageName: unknown linkType: soft @@ -18759,6 +18897,47 @@ __metadata: languageName: node linkType: hard +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" + dependencies: + "@discoveryjs/json-ext": ^0.6.1 + "@webpack-cli/configtest": ^3.0.1 + "@webpack-cli/info": ^3.0.1 + "@webpack-cli/serve": ^3.0.1 + colorette: ^2.0.14 + commander: ^12.1.0 + cross-spawn: ^7.0.3 + envinfo: ^7.14.0 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^6.0.1 + peerDependencies: + webpack: ^5.82.0 + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: ./bin/cli.js + checksum: 1418d0e48c58b4a223472d1a34aee74b497cd8b8fc7f0508da86983e6bbc0b2f20e85459d89fb7169309a6f0409e3a27c1b688e645fa705806195884855434fc + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: ^4.0.1 + flat: ^5.0.2 + wildcard: ^2.0.1 + checksum: e8a604c686b944605a1c57cc7b75e886ab902dc5ffdd15259a092c5c2dd5f58868fe39f995ea4bad4f189e38843b061c4ae1eb22822d7169813f4adab571dc3d + languageName: node + linkType: hard + "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" @@ -18930,6 +19109,13 @@ __metadata: languageName: node linkType: hard +"wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5"