cypress 10.5.0 → 10.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/angular/CHANGELOG.md +43 -0
  2. package/angular/README.md +43 -112
  3. package/angular/dist/index.js +8 -6
  4. package/angular/dist/mount.d.ts +1 -0
  5. package/angular/package.json +6 -8
  6. package/lib/tasks/download.js +4 -3
  7. package/mount-utils/CHANGELOG.md +7 -0
  8. package/mount-utils/package.json +5 -1
  9. package/package.json +11 -5
  10. package/react/CHANGELOG.md +14 -0
  11. package/react/dist/createMount.d.ts +5 -2
  12. package/react/dist/cypress-react.cjs.js +80 -115
  13. package/react/dist/cypress-react.esm-bundler.js +66 -101
  14. package/react/dist/mount.d.ts +1 -0
  15. package/react/dist/mountHook.d.ts +1 -0
  16. package/react/dist/types.d.ts +1 -0
  17. package/react/package.json +3 -7
  18. package/react18/CHANGELOG.md +14 -0
  19. package/react18/dist/cypress-react.cjs.js +63 -89
  20. package/react18/dist/cypress-react.esm-bundler.js +49 -75
  21. package/react18/dist/index.d.ts +1 -0
  22. package/react18/package.json +2 -2
  23. package/svelte/CHANGELOG.md +6 -0
  24. package/svelte/README.md +83 -0
  25. package/svelte/dist/cypress-svelte.cjs.js +213 -0
  26. package/svelte/dist/cypress-svelte.esm-bundler.js +209 -0
  27. package/svelte/dist/index.d.ts +1 -0
  28. package/svelte/dist/mount.d.ts +30 -0
  29. package/svelte/package.json +43 -0
  30. package/types/cypress-type-helpers.d.ts +3 -1
  31. package/types/cypress.d.ts +61 -12
  32. package/vue/CHANGELOG.md +7 -0
  33. package/vue/dist/cypress-vue.cjs.js +30 -38
  34. package/vue/dist/cypress-vue.esm-bundler.js +30 -38
  35. package/vue/dist/index.d.ts +1 -0
  36. package/vue/package.json +3 -8
  37. package/vue2/CHANGELOG.md +7 -0
  38. package/vue2/dist/cypress-vue2.cjs.js +53 -84
  39. package/vue2/dist/cypress-vue2.esm-bundler.js +53 -84
  40. package/vue2/dist/index.d.ts +1 -0
  41. package/vue2/package.json +2 -5
  42. package/vue2/dist/cypress-vue2.browser.js +0 -20197
@@ -9,46 +9,19 @@ import * as React from 'react';
9
9
  import React__default from 'react';
10
10
  import ReactDOM from 'react-dom';
11
11
 
12
- /******************************************************************************
13
- Copyright (c) Microsoft Corporation.
14
-
15
- Permission to use, copy, modify, and/or distribute this software for any
16
- purpose with or without fee is hereby granted.
17
-
18
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
19
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
20
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
21
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
22
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
23
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
24
- PERFORMANCE OF THIS SOFTWARE.
25
- ***************************************************************************** */
26
-
27
- var __assign = function() {
28
- __assign = Object.assign || function __assign(t) {
29
- for (var s, i = 1, n = arguments.length; i < n; i++) {
30
- s = arguments[i];
31
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
32
- }
33
- return t;
34
- };
35
- return __assign.apply(this, arguments);
36
- };
37
-
38
- var cachedDisplayNames = new WeakMap();
12
+ const cachedDisplayNames = new WeakMap();
39
13
  /**
40
14
  * Gets the display name of the component when possible.
41
15
  * @param type {JSX} The type object returned from creating the react element.
42
16
  * @param fallbackName {string} The alias, or fallback name to use when the name cannot be derived.
43
17
  * @link https://github.com/facebook/react-devtools/blob/master/backend/getDisplayName.js
44
18
  */
45
- function getDisplayName(type, fallbackName) {
46
- if (fallbackName === void 0) { fallbackName = 'Unknown'; }
47
- var nameFromCache = cachedDisplayNames.get(type);
19
+ function getDisplayName(type, fallbackName = 'Unknown') {
20
+ const nameFromCache = cachedDisplayNames.get(type);
48
21
  if (nameFromCache != null) {
49
22
  return nameFromCache;
50
23
  }
51
- var displayName = null;
24
+ let displayName = null;
52
25
  // The displayName property is not guaranteed to be a string.
53
26
  // It's only safe to use for our purposes if it's a string.
54
27
  // github.com/facebook/react-devtools/issues/803
@@ -60,13 +33,13 @@ function getDisplayName(type, fallbackName) {
60
33
  }
61
34
  // Facebook-specific hack to turn "Image [from Image.react]" into just "Image".
62
35
  // We need displayName with module name for error reports but it clutters the DevTools.
63
- var match = displayName.match(/^(.*) \[from (.*)\]$/);
36
+ const match = displayName.match(/^(.*) \[from (.*)\]$/);
64
37
  if (match) {
65
- var componentName = match[1];
66
- var moduleName = match[2];
38
+ const componentName = match[1];
39
+ const moduleName = match[2];
67
40
  if (componentName && moduleName) {
68
41
  if (moduleName === componentName ||
69
- moduleName.startsWith(componentName + ".")) {
42
+ moduleName.startsWith(`${componentName}.`)) {
70
43
  displayName = componentName;
71
44
  }
72
45
  }
@@ -225,13 +198,13 @@ function setupHooks(optionalCallback) {
225
198
  /**
226
199
  * Inject custom style text or CSS file or 3rd party style resources
227
200
  */
228
- var injectStyles = function (options) {
229
- return function () {
230
- var el = getContainerEl();
201
+ const injectStyles = (options) => {
202
+ return () => {
203
+ const el = getContainerEl();
231
204
  return injectStylesBeforeElement(options, document, el);
232
205
  };
233
206
  };
234
- var mountCleanup;
207
+ let mountCleanup;
235
208
  /**
236
209
  * Create an `mount` function. Performs all the non-React-version specific
237
210
  * behavior related to mounting. The React-version-specific code
@@ -241,41 +214,40 @@ var mountCleanup;
241
214
  * This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
242
215
  * or people writing adapters for third-party, custom adapters.
243
216
  */
244
- var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOptions) {
245
- if (options === void 0) { options = {}; }
217
+ const makeMountFn = (type, jsx, options = {}, rerenderKey, internalMountOptions) => {
246
218
  if (!internalMountOptions) {
247
219
  throw Error('internalMountOptions must be provided with `render` and `reactDom` parameters');
248
220
  }
249
221
  mountCleanup = internalMountOptions.cleanup;
250
222
  // Get the display name property via the component constructor
251
223
  // @ts-ignore FIXME
252
- var componentName = getDisplayName(jsx.type, options.alias);
253
- var displayName = options.alias || componentName;
254
- var jsxComponentName = "<" + componentName + " ... />";
255
- var message = options.alias
256
- ? jsxComponentName + " as \"" + options.alias + "\""
224
+ const componentName = getDisplayName(jsx.type, options.alias);
225
+ const displayName = options.alias || componentName;
226
+ const jsxComponentName = `<${componentName} ... />`;
227
+ const message = options.alias
228
+ ? `${jsxComponentName} as "${options.alias}"`
257
229
  : jsxComponentName;
258
230
  return cy
259
231
  .then(injectStyles(options))
260
- .then(function () {
232
+ .then(() => {
261
233
  var _a, _b, _c;
262
- var reactDomToUse = internalMountOptions.reactDom;
263
- var el = getContainerEl();
234
+ const reactDomToUse = internalMountOptions.reactDom;
235
+ const el = getContainerEl();
264
236
  if (!el) {
265
237
  throw new Error([
266
- "[@cypress/react] \uD83D\uDD25 Hmm, cannot find root element to mount the component. Searched for " + ROOT_SELECTOR,
238
+ `[@cypress/react] 🔥 Hmm, cannot find root element to mount the component. Searched for ${ROOT_SELECTOR}`,
267
239
  ].join(' '));
268
240
  }
269
- var key = rerenderKey !== null && rerenderKey !== void 0 ? rerenderKey :
241
+ const key = rerenderKey !== null && rerenderKey !== void 0 ? rerenderKey :
270
242
  // @ts-ignore provide unique key to the the wrapped component to make sure we are rerendering between tests
271
243
  (((_c = (_b = (_a = Cypress === null || Cypress === void 0 ? void 0 : Cypress.mocha) === null || _a === void 0 ? void 0 : _a.getRunner()) === null || _b === void 0 ? void 0 : _b.test) === null || _c === void 0 ? void 0 : _c.title) || '') + Math.random();
272
- var props = {
273
- key: key,
244
+ const props = {
245
+ key,
274
246
  };
275
- var reactComponent = React.createElement(options.strict ? React.StrictMode : React.Fragment, props, jsx);
247
+ const reactComponent = React.createElement(options.strict ? React.StrictMode : React.Fragment, props, jsx);
276
248
  // since we always surround the component with a fragment
277
249
  // let's get back the original component
278
- var userComponent = reactComponent.props.children;
250
+ const userComponent = reactComponent.props.children;
279
251
  internalMountOptions.render(reactComponent, el, reactDomToUse);
280
252
  if (options.log !== false) {
281
253
  Cypress.log({
@@ -284,7 +256,7 @@ var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOption
284
256
  message: [message],
285
257
  // @ts-ignore
286
258
  $el: el.children.item(0),
287
- consoleProps: function () {
259
+ consoleProps: () => {
288
260
  return {
289
261
  // @ts-ignore protect the use of jsx functional components use ReactNode
290
262
  props: jsx.props,
@@ -298,10 +270,10 @@ var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOption
298
270
  // Separate alias and returned value. Alias returns the component only, and the thenable returns the additional functions
299
271
  cy.wrap(userComponent, { log: false })
300
272
  .as(displayName)
301
- .then(function () {
273
+ .then(() => {
302
274
  return cy.wrap({
303
275
  component: userComponent,
304
- rerender: function (newComponent) { return makeMountFn('rerender', newComponent, options, key, internalMountOptions); },
276
+ rerender: (newComponent) => makeMountFn('rerender', newComponent, options, key, internalMountOptions),
305
277
  unmount: internalMountOptions.unmount,
306
278
  }, { log: false });
307
279
  })
@@ -319,16 +291,16 @@ var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOption
319
291
  * This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
320
292
  * or people writing adapters for third-party, custom adapters.
321
293
  */
322
- var makeUnmountFn = function (options) {
323
- return cy.then(function () {
294
+ const makeUnmountFn = (options) => {
295
+ return cy.then(() => {
324
296
  var _a;
325
- var wasUnmounted = mountCleanup === null || mountCleanup === void 0 ? void 0 : mountCleanup();
297
+ const wasUnmounted = mountCleanup === null || mountCleanup === void 0 ? void 0 : mountCleanup();
326
298
  if (wasUnmounted && options.log) {
327
299
  Cypress.log({
328
300
  name: 'unmount',
329
301
  type: 'parent',
330
302
  message: [(_a = options.boundComponentMessage) !== null && _a !== void 0 ? _a : 'Unmounted component'],
331
- consoleProps: function () {
303
+ consoleProps: () => {
332
304
  return {
333
305
  description: 'Unmounts React component',
334
306
  parent: getContainerEl().parentNode,
@@ -342,16 +314,13 @@ var makeUnmountFn = function (options) {
342
314
  // Cleanup before each run
343
315
  // NOTE: we cannot use unmount here because
344
316
  // we are not in the context of a test
345
- var preMountCleanup = function () {
317
+ const preMountCleanup = () => {
346
318
  mountCleanup === null || mountCleanup === void 0 ? void 0 : mountCleanup();
347
319
  };
348
- var _mount = function (jsx, options) {
349
- if (options === void 0) { options = {}; }
350
- return makeMountFn('mount', jsx, options);
351
- };
352
- var createMount = function (defaultOptions) {
353
- return function (element, options) {
354
- return _mount(element, __assign(__assign({}, defaultOptions), options));
320
+ const _mount = (jsx, options = {}) => makeMountFn('mount', jsx, options);
321
+ const createMount = (defaultOptions) => {
322
+ return (element, options) => {
323
+ return _mount(element, Object.assign(Object.assign({}, defaultOptions), options));
355
324
  };
356
325
  };
357
326
  // Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
@@ -911,45 +880,43 @@ var semver = SemVer;
911
880
  const major = (a, loose) => new semver(a, loose).major;
912
881
  var major_1 = major;
913
882
 
914
- var lastReactDom;
915
- var cleanup = function () {
883
+ let lastReactDom;
884
+ const cleanup = () => {
916
885
  if (lastReactDom) {
917
- var root = getContainerEl();
886
+ const root = getContainerEl();
918
887
  lastReactDom.unmountComponentAtNode(root);
919
888
  return true;
920
889
  }
921
890
  return false;
922
891
  };
923
- function mount(jsx, options, rerenderKey) {
924
- if (options === void 0) { options = {}; }
892
+ function mount(jsx, options = {}, rerenderKey) {
925
893
  if (major_1(React__default.version) === 18) {
926
- var message = '[cypress/react]: You are using `cypress/react`, which is designed for React <= 17. Consider changing to `cypress/react18`, which is designed for React 18.';
894
+ const message = '[cypress/react]: You are using `cypress/react`, which is designed for React <= 17. Consider changing to `cypress/react18`, which is designed for React 18.';
927
895
  console.error(message);
928
- Cypress.log({ name: 'warning', message: message });
896
+ Cypress.log({ name: 'warning', message });
929
897
  }
930
- var internalOptions = {
898
+ const internalOptions = {
931
899
  reactDom: ReactDOM,
932
- render: function (reactComponent, el, reactDomToUse) {
900
+ render: (reactComponent, el, reactDomToUse) => {
933
901
  lastReactDom = (reactDomToUse || ReactDOM);
934
902
  return lastReactDom.render(reactComponent, el);
935
903
  },
936
- unmount: unmount,
937
- cleanup: cleanup,
904
+ unmount,
905
+ cleanup,
938
906
  };
939
- return makeMountFn('mount', jsx, __assign({ ReactDom: ReactDOM }, options), rerenderKey, internalOptions);
907
+ return makeMountFn('mount', jsx, Object.assign({ ReactDom: ReactDOM }, options), rerenderKey, internalOptions);
940
908
  }
941
- function unmount(options) {
942
- if (options === void 0) { options = { log: true }; }
909
+ function unmount(options = { log: true }) {
943
910
  return makeUnmountFn(options);
944
911
  }
945
912
 
946
913
  // mounting hooks inside a test component mostly copied from
947
914
  // https://github.com/testing-library/react-hooks-testing-library/blob/master/src/pure.js
948
915
  function resultContainer() {
949
- var value = null;
950
- var error = null;
951
- var resolvers = [];
952
- var result = {
916
+ let value = null;
917
+ let error = null;
918
+ const resolvers = [];
919
+ const result = {
953
920
  get current() {
954
921
  if (error) {
955
922
  throw error;
@@ -960,23 +927,21 @@ function resultContainer() {
960
927
  return error;
961
928
  },
962
929
  };
963
- var updateResult = function (val, err) {
964
- if (err === void 0) { err = null; }
930
+ const updateResult = (val, err = null) => {
965
931
  value = val;
966
932
  error = err;
967
- resolvers.splice(0, resolvers.length).forEach(function (resolve) { return resolve(); });
933
+ resolvers.splice(0, resolvers.length).forEach((resolve) => resolve());
968
934
  };
969
935
  return {
970
- result: result,
971
- addResolver: function (resolver) {
936
+ result,
937
+ addResolver: (resolver) => {
972
938
  resolvers.push(resolver);
973
939
  },
974
- setValue: function (val) { return updateResult(val); },
975
- setError: function (err) { return updateResult(undefined, err); },
940
+ setValue: (val) => updateResult(val),
941
+ setError: (err) => updateResult(undefined, err),
976
942
  };
977
943
  }
978
- function TestHook(_a) {
979
- var callback = _a.callback, onError = _a.onError, children = _a.children;
944
+ function TestHook({ callback, onError, children }) {
980
945
  try {
981
946
  children(callback());
982
947
  }
@@ -994,14 +959,14 @@ function TestHook(_a) {
994
959
  * Mounts a React hook function in a test component for testing.
995
960
  *
996
961
  */
997
- var mountHook = function (hookFn) {
998
- var _a = resultContainer(), result = _a.result, setValue = _a.setValue, setError = _a.setError;
999
- var componentTest = React.createElement(TestHook, {
962
+ const mountHook = (hookFn) => {
963
+ const { result, setValue, setError } = resultContainer();
964
+ const componentTest = React.createElement(TestHook, {
1000
965
  callback: hookFn,
1001
966
  onError: setError,
1002
967
  children: setValue,
1003
968
  });
1004
- return mount(componentTest).then(function () { return result; });
969
+ return mount(componentTest).then(() => result);
1005
970
  };
1006
971
 
1007
972
  export { createMount, makeMountFn, makeUnmountFn, mount, mountHook, unmount };
@@ -1,4 +1,5 @@
1
1
  /// <reference types="cypress" />
2
+ /// <reference types="cypress" />
2
3
  import React from 'react';
3
4
  import type { MountOptions } from './types';
4
5
  export declare function mount(jsx: React.ReactNode, options?: MountOptions, rerenderKey?: string): Cypress.Chainable<import("./types").MountReturn>;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="cypress" />
2
+ /// <reference types="cypress" />
2
3
  declare type MountHookResult<T> = {
3
4
  readonly current: T | null | undefined;
4
5
  readonly error: Error | null;
@@ -1,4 +1,5 @@
1
1
  /// <reference types="cypress" />
2
+ /// <reference types="cypress" />
2
3
  import type React from 'react';
3
4
  import type { StyleOptions } from '@cypress/mount-utils';
4
5
  export interface UnmountArgs {
@@ -4,7 +4,7 @@
4
4
  "description": "Test React components using Cypress",
5
5
  "main": "dist/cypress-react.cjs.js",
6
6
  "scripts": {
7
- "build": "rimraf dist && rollup -c rollup.config.js",
7
+ "build": "rimraf dist && rollup -c rollup.config.mjs",
8
8
  "postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
9
9
  "build-prod": "yarn build",
10
10
  "cy:open": "node ../../scripts/cypress.js open --component",
@@ -16,8 +16,6 @@
16
16
  },
17
17
  "devDependencies": {
18
18
  "@cypress/mount-utils": "0.0.0-development",
19
- "@rollup/plugin-commonjs": "^17.1.0",
20
- "@rollup/plugin-node-resolve": "^11.1.1",
21
19
  "@types/semver": "7.3.9",
22
20
  "@vitejs/plugin-react": "1.3.1",
23
21
  "axios": "0.21.2",
@@ -27,11 +25,9 @@
27
25
  "react-dom": "16.8.6",
28
26
  "react-router": "6.0.0-alpha.1",
29
27
  "react-router-dom": "6.0.0-alpha.1",
30
- "rollup": "^2.38.5",
31
- "rollup-plugin-typescript2": "^0.29.0",
32
28
  "semver": "^7.3.2",
33
- "typescript": "^4.2.3",
34
- "vite": "3.0.3",
29
+ "typescript": "^4.7.4",
30
+ "vite": "3.1.0",
35
31
  "vite-plugin-require-transform": "1.0.3"
36
32
  },
37
33
  "peerDependencies": {
@@ -1,3 +1,17 @@
1
+ # [@cypress/react18-v1.1.0](https://github.com/cypress-io/cypress/compare/@cypress/react18-v1.0.1...@cypress/react18-v1.1.0) (2022-08-30)
2
+
3
+
4
+ ### Features
5
+
6
+ * adding svelte component testing support ([#23553](https://github.com/cypress-io/cypress/issues/23553)) ([f6eaad4](https://github.com/cypress-io/cypress/commit/f6eaad40e1836fa9db87c60defa5ae6f390c8fd8))
7
+
8
+ # [@cypress/react18-v1.0.1](https://github.com/cypress-io/cypress/compare/@cypress/react18-v1.0.0...@cypress/react18-v1.0.1) (2022-08-15)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **react18:** unmount component with react18 API ([#23204](https://github.com/cypress-io/cypress/issues/23204)) ([eab950b](https://github.com/cypress-io/cypress/commit/eab950bec013f9caf5836e3fa58670fde25e2684))
14
+
1
15
  # @cypress/react18-v1.0.0 (2022-08-11)
2
16
 
3
17