From 0ccc60fcb7ad64fc8322943e09955eee4979385f Mon Sep 17 00:00:00 2001 From: KHeo Date: Wed, 24 Jun 2020 15:56:35 +0900 Subject: [PATCH 1/7] Update blob-util to 2.0.2 --- cli/package.json | 2 +- cli/scripts/utils.js | 1 - packages/driver/package.json | 2 +- yarn.lock | 40 ++++-------------------------------- 4 files changed, 6 insertions(+), 39 deletions(-) diff --git a/cli/package.json b/cli/package.json index 52fc50f53f3a..9c20e2ce6cd1 100644 --- a/cli/package.json +++ b/cli/package.json @@ -63,7 +63,6 @@ "@babel/preset-env": "7.9.5", "@cypress/sinon-chai": "1.1.0", "@packages/root": "*", - "@types/blob-util": "1.3.3", "@types/bluebird": "3.5.29", "@types/chai": "4.2.7", "@types/chai-jquery": "1.1.40", @@ -73,6 +72,7 @@ "@types/mocha": "5.2.7", "@types/sinon": "7.5.1", "@types/sinon-chai": "3.2.3", + "blob-util": "2.0.2", "chai": "3.5.0", "chai-as-promised": "7.1.1", "chai-string": "1.5.0", diff --git a/cli/scripts/utils.js b/cli/scripts/utils.js index 8c215081d438..87389ed9826e 100644 --- a/cli/scripts/utils.js +++ b/cli/scripts/utils.js @@ -4,7 +4,6 @@ * definition files that we will need to include with our NPM package. */ const includeTypes = [ - 'blob-util', 'bluebird', 'lodash', 'mocha', diff --git a/packages/driver/package.json b/packages/driver/package.json index 03fdc5f7beda..ea44e4a1c98f 100644 --- a/packages/driver/package.json +++ b/packages/driver/package.json @@ -22,7 +22,7 @@ "angular": "1.8.0", "backbone": "1.4.0", "basic-auth": "2.0.1", - "blob-util": "1.3.0", + "blob-util": "2.0.2", "bluebird": "3.5.3", "body-parser": "1.19.0", "bootstrap": "4.4.1", diff --git a/yarn.lock b/yarn.lock index de18f201eb44..ecbe4282b311 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3806,11 +3806,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/blob-util@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a" - integrity sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w== - "@types/bluebird@*": version "3.5.31" resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.31.tgz#d17fa0ec242b51c3db302481c557ce3813bf45cb" @@ -6978,18 +6973,10 @@ black-hole-stream@0.0.1: resolved "https://registry.yarnpkg.com/black-hole-stream/-/black-hole-stream-0.0.1.tgz#33b7a06b9f1e7453d6041b82974481d2152aea42" integrity sha1-M7ega58edFPWBBuCl0SB0hUq6kI= -blob-util@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-1.3.0.tgz#dbb4e8caffd50b5720d347e1169b6369ba34fe95" - integrity sha512-cjmYgWj8BQwoX+95rKkWvITL6PiEhSr19sX8qLRu+O6J2qmWmgUvxqhqJn425RFAwLovdDNnsCQ64RRHXjsXSg== - dependencies: - blob "0.0.4" - native-or-lie "1.0.2" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE= +blob-util@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== blob@0.0.5: version "0.0.5" @@ -14206,11 +14193,6 @@ image-size@0.8.3, image-size@^0.8.2: dependencies: queue "6.0.1" -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - immutable@3.7.6: version "3.7.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" @@ -16394,13 +16376,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lie@*: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -18247,13 +18222,6 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -native-or-lie@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/native-or-lie/-/native-or-lie-1.0.2.tgz#c870ee0ba0bf0ff11350595d216cfea68a6d8086" - integrity sha1-yHDuC6C/D/ETUFldIWz+poptgIY= - dependencies: - lie "*" - native-promise-only@~0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" From bda3e0b41d16995d326eaac7f8cfc7b8776bcb2e Mon Sep 17 00:00:00 2001 From: KHeo Date: Wed, 24 Jun 2020 16:12:27 +0900 Subject: [PATCH 2/7] Fix test. --- .../integration/form_submission_multipart_spec.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/server/test/support/fixtures/projects/e2e/cypress/integration/form_submission_multipart_spec.coffee b/packages/server/test/support/fixtures/projects/e2e/cypress/integration/form_submission_multipart_spec.coffee index 20f7bb960a1c..171b9109393d 100644 --- a/packages/server/test/support/fixtures/projects/e2e/cypress/integration/form_submission_multipart_spec.coffee +++ b/packages/server/test/support/fixtures/projects/e2e/cypress/integration/form_submission_multipart_spec.coffee @@ -18,13 +18,17 @@ Cypress.Commands.add 'setFile', { prevSubject: "element" }, (element, filePath) return cy.fixture(filePath, "base64") return fixtureOrReadFile(filePath).then (image) -> - return Blob.base64StringToBlob(image).then (blob) -> + return new Promise((resolve) => + blob = Blob.base64StringToBlob(image) elementNode = element[0] file = new File([ blob ], filePath, type: mimeType) dataTransfer = new DataTransfer dataTransfer.items.add(file) elementNode.files = dataTransfer.files - elementNode.dispatchEvent new Event("change", { bubbles: true }) + result = elementNode.dispatchEvent new Event("change", { bubbles: true }) + + resolve(result) + ) describe "
submissions", -> it "can submit a form correctly", -> From 5ed0dd3d4bf182d6eec880cab8fbd9fadc94c348 Mon Sep 17 00:00:00 2001 From: KHeo Date: Wed, 24 Jun 2020 16:32:07 +0900 Subject: [PATCH 3/7] Fix blob-util type. --- cli/types/cy-blob-util.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/types/cy-blob-util.d.ts b/cli/types/cy-blob-util.d.ts index a70481fa30fc..e8fc61702f86 100644 --- a/cli/types/cy-blob-util.d.ts +++ b/cli/types/cy-blob-util.d.ts @@ -3,7 +3,7 @@ // so that Cypress can get and use the Blob type // tslint:disable-next-line:no-implicit-dependencies -import * as blobUtil from './blob-util' +import * as blobUtil from 'blob-util' export = BlobUtil export as namespace BlobUtil From 3ac8e591312404e66223a03f97214e36323cc941 Mon Sep 17 00:00:00 2001 From: KHeo Date: Wed, 24 Jun 2020 16:47:54 +0900 Subject: [PATCH 4/7] Bundle blob-util. --- cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/package.json b/cli/package.json index 9c20e2ce6cd1..7766dea27b96 100644 --- a/cli/package.json +++ b/cli/package.json @@ -26,6 +26,7 @@ "@types/sinonjs__fake-timers": "6.0.1", "@types/sizzle": "2.3.2", "arch": "2.1.2", + "blob-util": "2.0.2", "bluebird": "3.7.2", "cachedir": "2.3.0", "chalk": "4.1.0", @@ -72,7 +73,6 @@ "@types/mocha": "5.2.7", "@types/sinon": "7.5.1", "@types/sinon-chai": "3.2.3", - "blob-util": "2.0.2", "chai": "3.5.0", "chai-as-promised": "7.1.1", "chai-string": "1.5.0", From f923f0b440f86cba2506334ea37acf2b542ca482 Mon Sep 17 00:00:00 2001 From: KHeo Date: Thu, 2 Jul 2020 18:04:24 +0900 Subject: [PATCH 5/7] Show warning message. --- .../util/breaking_change_warnings_spec.js | 41 +++++++++++++++++++ packages/driver/src/cypress.js | 3 +- packages/driver/src/cypress/error_messages.js | 7 ++++ .../src/util/breaking_change_warning.ts | 30 ++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 packages/driver/cypress/integration/util/breaking_change_warnings_spec.js create mode 100644 packages/driver/src/util/breaking_change_warning.ts diff --git a/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js b/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js new file mode 100644 index 000000000000..52ce0067b3c6 --- /dev/null +++ b/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js @@ -0,0 +1,41 @@ +describe('blob-util 2.x', () => { + it('arrayBufferToBlob', () => { + cy.on('fail', (err) => { + expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + }) + + Cypress.Blob.arrayBufferToBlob('1234').then((blob) => { + // it should fail. + }) + }) + + it('base64StringToBlob', () => { + cy.on('fail', (err) => { + expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + }) + + Cypress.Blob.base64StringToBlob('1234').then((blob) => { + // it should fail. + }) + }) + + it('binaryStringToBlob', () => { + cy.on('fail', (err) => { + expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + }) + + Cypress.Blob.binaryStringToBlob('0100101').then((blob) => { + // it should fail. + }) + }) + + it('dataURLToBlob', () => { + cy.on('fail', (err) => { + expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + }) + + Cypress.Blob.dataURLToBlob('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==').then((blob) => { + // it should fail. + }) + }) +}) diff --git a/packages/driver/src/cypress.js b/packages/driver/src/cypress.js index c17771339627..7adf60b03ff0 100644 --- a/packages/driver/src/cypress.js +++ b/packages/driver/src/cypress.js @@ -34,6 +34,7 @@ const $scriptUtils = require('./cypress/script_utils') const browserInfo = require('./cypress/browser') const resolvers = require('./cypress/resolvers') const debug = require('debug')('cypress:driver:cypress') +const { wrapBlobUtil } = require('./util/breaking_change_warning') const jqueryProxyFn = function (...args) { if (!this.cy) { @@ -613,7 +614,7 @@ $Cypress.prototype.SelectorPlayground = $SelectorPlayground $Cypress.prototype.utils = $utils $Cypress.prototype._ = _ $Cypress.prototype.moment = moment -$Cypress.prototype.Blob = blobUtil +$Cypress.prototype.Blob = wrapBlobUtil(blobUtil) $Cypress.prototype.Promise = Promise $Cypress.prototype.minimatch = minimatch $Cypress.prototype.sinon = sinon diff --git a/packages/driver/src/cypress/error_messages.js b/packages/driver/src/cypress/error_messages.js index c5ae4f08f1cc..5ba0f468eff5 100644 --- a/packages/driver/src/cypress/error_messages.js +++ b/packages/driver/src/cypress/error_messages.js @@ -153,6 +153,13 @@ module.exports = { }, }, + breaking_change: { + blob_util2: { + message: 'Cypress 5+ uses `blob-util` 2.x. This function does not return `Promise` any more.', + docsUrl: 'https://docs.cypress.io/guides/references/migration-guide.html', + }, + }, + browser: { invalid_arg: '{{prefix}} must be passed a string, object, or an array. You passed: `{{obj}}`', }, diff --git a/packages/driver/src/util/breaking_change_warning.ts b/packages/driver/src/util/breaking_change_warning.ts new file mode 100644 index 000000000000..b1932414d27d --- /dev/null +++ b/packages/driver/src/util/breaking_change_warning.ts @@ -0,0 +1,30 @@ +import $errUtil from '../cypress/error_utils' + +export function wrapBlobUtil (blobUtil) { + const breakingChanges = [ + 'arrayBufferToBlob', + 'base64StringToBlob', + 'binaryStringToBlob', + 'dataURLToBlob', + ] + + const obj = {} + + Object.keys(blobUtil).forEach((key) => { + if (breakingChanges.includes(key)) { + obj[key] = function (...args) { + const val = blobUtil[key](...args) + + val.then = function () { + $errUtil.throwErrByPath('breaking_change.blob_util2') + } + + return val + } + } else { + obj[key] = blobUtil[key] + } + }) + + return obj +} From cd56fe49bd8aef03c1c47a1d62010a3f07758e2f Mon Sep 17 00:00:00 2001 From: KHeo Date: Thu, 2 Jul 2020 18:16:07 +0900 Subject: [PATCH 6/7] Show function name in error message. --- packages/driver/src/cypress/error_messages.js | 8 +++++--- packages/driver/src/util/breaking_change_warning.ts | 6 +++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/driver/src/cypress/error_messages.js b/packages/driver/src/cypress/error_messages.js index 5ba0f468eff5..ab2312768068 100644 --- a/packages/driver/src/cypress/error_messages.js +++ b/packages/driver/src/cypress/error_messages.js @@ -154,9 +154,11 @@ module.exports = { }, breaking_change: { - blob_util2: { - message: 'Cypress 5+ uses `blob-util` 2.x. This function does not return `Promise` any more.', - docsUrl: 'https://docs.cypress.io/guides/references/migration-guide.html', + blob_util2 (obj) { + return { + message: `Cypress 5+ uses \`blob-util\` 2.x. \`${obj.functionName}()\` does not return \`Promise\` any more.`, + docsUrl: 'https://docs.cypress.io/guides/references/migration-guide.html', + } }, }, diff --git a/packages/driver/src/util/breaking_change_warning.ts b/packages/driver/src/util/breaking_change_warning.ts index b1932414d27d..61671c661611 100644 --- a/packages/driver/src/util/breaking_change_warning.ts +++ b/packages/driver/src/util/breaking_change_warning.ts @@ -16,7 +16,11 @@ export function wrapBlobUtil (blobUtil) { const val = blobUtil[key](...args) val.then = function () { - $errUtil.throwErrByPath('breaking_change.blob_util2') + $errUtil.throwErrByPath('breaking_change.blob_util2', { + args: { + functionName: key, + }, + }) } return val From 21510b5bb61f46bb5585b40a5f56b90779c61171 Mon Sep 17 00:00:00 2001 From: KHeo Date: Fri, 3 Jul 2020 16:01:29 +0900 Subject: [PATCH 7/7] Fix message. --- .../integration/util/breaking_change_warnings_spec.js | 8 ++++---- packages/driver/src/cypress/error_messages.js | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js b/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js index 52ce0067b3c6..3b5adc523310 100644 --- a/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js +++ b/packages/driver/cypress/integration/util/breaking_change_warnings_spec.js @@ -1,7 +1,7 @@ describe('blob-util 2.x', () => { it('arrayBufferToBlob', () => { cy.on('fail', (err) => { - expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + expect(err.message).to.include('no longer returns a `Promise`') }) Cypress.Blob.arrayBufferToBlob('1234').then((blob) => { @@ -11,7 +11,7 @@ describe('blob-util 2.x', () => { it('base64StringToBlob', () => { cy.on('fail', (err) => { - expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + expect(err.message).to.include('no longer returns a `Promise`') }) Cypress.Blob.base64StringToBlob('1234').then((blob) => { @@ -21,7 +21,7 @@ describe('blob-util 2.x', () => { it('binaryStringToBlob', () => { cy.on('fail', (err) => { - expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + expect(err.message).to.include('no longer returns a `Promise`') }) Cypress.Blob.binaryStringToBlob('0100101').then((blob) => { @@ -31,7 +31,7 @@ describe('blob-util 2.x', () => { it('dataURLToBlob', () => { cy.on('fail', (err) => { - expect(err.message).to.include('Cypress 5+ uses `blob-util` 2.x') + expect(err.message).to.include('no longer returns a `Promise`') }) Cypress.Blob.dataURLToBlob('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==').then((blob) => { diff --git a/packages/driver/src/cypress/error_messages.js b/packages/driver/src/cypress/error_messages.js index ab2312768068..bcc8c2bf680c 100644 --- a/packages/driver/src/cypress/error_messages.js +++ b/packages/driver/src/cypress/error_messages.js @@ -156,8 +156,8 @@ module.exports = { breaking_change: { blob_util2 (obj) { return { - message: `Cypress 5+ uses \`blob-util\` 2.x. \`${obj.functionName}()\` does not return \`Promise\` any more.`, - docsUrl: 'https://docs.cypress.io/guides/references/migration-guide.html', + message: `\`${obj.functionName}()\` no longer returns a \`Promise\`. Update the use of \`${obj.functionName}()\` to expect a returned \`Blob\`.`, + docsUrl: 'https://on.cypress.io/migration-guide', } }, },