react-cosmos-core 6.0.0-alpha.18 → 6.0.0-alpha.19

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.
Files changed (128) hide show
  1. package/dist/fixtureTree/createFixtureTree/createRawFixtureTree.d.ts +1 -1
  2. package/dist/fixtureTree/createFixtureTree/index.d.ts +1 -1
  3. package/dist/fixtureTree/flattenFixtureTree.d.ts +1 -1
  4. package/dist/index.d.ts +20 -19
  5. package/dist/index.js +20 -19
  6. package/dist/playground/playgroundParams.d.ts +4 -0
  7. package/dist/playground/playgroundQueryString.d.ts +3 -0
  8. package/dist/playground/playgroundQueryString.js +21 -0
  9. package/dist/renderer/{rendererConnectTypes.d.ts → rendererConnect.d.ts} +11 -14
  10. package/dist/renderer/rendererParams.d.ts +6 -0
  11. package/dist/renderer/rendererQueryString.d.ts +10 -0
  12. package/dist/renderer/rendererQueryString.js +33 -0
  13. package/dist/userModules/getFixtureFromExport.d.ts +2 -0
  14. package/dist/{renderer/getFixture.js → userModules/getFixtureFromExport.js} +1 -1
  15. package/dist/{renderer → userModules}/getFixtureList.d.ts +1 -1
  16. package/dist/{renderer → userModules}/userModuleTypes.d.ts +0 -5
  17. package/dist/userModules/userModuleTypes.js +1 -0
  18. package/dist/utils/queryString.d.ts +2 -0
  19. package/dist/utils/queryString.js +7 -0
  20. package/dist/utils/react/DelayRender.d.ts +7 -0
  21. package/dist/utils/react/DelayRender.js +10 -0
  22. package/dist/utils/window.d.ts +1 -0
  23. package/dist/utils/window.js +8 -0
  24. package/package.json +3 -3
  25. package/dist/fixture/FixtureContext.d.ts +0 -7
  26. package/dist/fixture/FixtureContext.js +0 -5
  27. package/dist/fixture/Viewport.d.ts +0 -11
  28. package/dist/fixture/Viewport.js +0 -14
  29. package/dist/fixture/useSelect/index.d.ts +0 -2
  30. package/dist/fixture/useSelect/index.js +0 -11
  31. package/dist/fixture/useSelect/shared.d.ts +0 -6
  32. package/dist/fixture/useSelect/shared.js +0 -3
  33. package/dist/fixture/useSelect/useCreateFixtureState.d.ts +0 -2
  34. package/dist/fixture/useSelect/useCreateFixtureState.js +0 -32
  35. package/dist/fixture/useSelect/useCurrentValue.d.ts +0 -2
  36. package/dist/fixture/useSelect/useCurrentValue.js +0 -11
  37. package/dist/fixture/useSelect/useSetValue.d.ts +0 -2
  38. package/dist/fixture/useSelect/useSetValue.js +0 -25
  39. package/dist/fixture/useValue/index.d.ts +0 -7
  40. package/dist/fixture/useValue/index.js +0 -9
  41. package/dist/fixture/useValue/shared.d.ts +0 -3
  42. package/dist/fixture/useValue/useCreateFixtureState.d.ts +0 -2
  43. package/dist/fixture/useValue/useCreateFixtureState.js +0 -35
  44. package/dist/fixture/useValue/useCurrentValue.d.ts +0 -2
  45. package/dist/fixture/useValue/useCurrentValue.js +0 -13
  46. package/dist/fixture/useValue/useSetValue.d.ts +0 -3
  47. package/dist/fixture/useValue/useSetValue.js +0 -36
  48. package/dist/playground/playgroundUrl.d.ts +0 -13
  49. package/dist/playground/playgroundUrl.js +0 -36
  50. package/dist/renderer/DecoratedFixture.d.ts +0 -14
  51. package/dist/renderer/DecoratedFixture.js +0 -33
  52. package/dist/renderer/FixtureCapture/classState/decorateFixtureRefs/index.d.ts +0 -5
  53. package/dist/renderer/FixtureCapture/classState/decorateFixtureRefs/index.js +0 -46
  54. package/dist/renderer/FixtureCapture/classState/decorateFixtureRefs/isRefSupported.d.ts +0 -4
  55. package/dist/renderer/FixtureCapture/classState/decorateFixtureRefs/isRefSupported.js +0 -19
  56. package/dist/renderer/FixtureCapture/classState/index.d.ts +0 -3
  57. package/dist/renderer/FixtureCapture/classState/index.js +0 -13
  58. package/dist/renderer/FixtureCapture/classState/shared.d.ts +0 -18
  59. package/dist/renderer/FixtureCapture/classState/shared.js +0 -14
  60. package/dist/renderer/FixtureCapture/classState/useFixtureState.d.ts +0 -4
  61. package/dist/renderer/FixtureCapture/classState/useFixtureState.js +0 -156
  62. package/dist/renderer/FixtureCapture/classState/useReadClassState.d.ts +0 -4
  63. package/dist/renderer/FixtureCapture/classState/useReadClassState.js +0 -60
  64. package/dist/renderer/FixtureCapture/index.d.ts +0 -8
  65. package/dist/renderer/FixtureCapture/index.js +0 -9
  66. package/dist/renderer/FixtureCapture/props/index.d.ts +0 -3
  67. package/dist/renderer/FixtureCapture/props/index.js +0 -77
  68. package/dist/renderer/FixtureCapture/props/useFixtureProps.d.ts +0 -3
  69. package/dist/renderer/FixtureCapture/props/useFixtureProps.js +0 -70
  70. package/dist/renderer/FixtureCapture/shared/findRelevantElementPaths.d.ts +0 -2
  71. package/dist/renderer/FixtureCapture/shared/findRelevantElementPaths.js +0 -23
  72. package/dist/renderer/FixtureCapture/shared/nodeTree/findElementPaths.d.ts +0 -2
  73. package/dist/renderer/FixtureCapture/shared/nodeTree/findElementPaths.js +0 -22
  74. package/dist/renderer/FixtureCapture/shared/nodeTree/getElementAtPath.d.ts +0 -3
  75. package/dist/renderer/FixtureCapture/shared/nodeTree/getElementAtPath.js +0 -26
  76. package/dist/renderer/FixtureCapture/shared/nodeTree/index.d.ts +0 -11
  77. package/dist/renderer/FixtureCapture/shared/nodeTree/index.js +0 -11
  78. package/dist/renderer/FixtureCapture/shared/nodeTree/setElementAtPath.d.ts +0 -2
  79. package/dist/renderer/FixtureCapture/shared/nodeTree/setElementAtPath.js +0 -35
  80. package/dist/renderer/FixtureCapture/shared/nodeTree/shared.d.ts +0 -2
  81. package/dist/renderer/FixtureCapture/shared/nodeTree/shared.js +0 -6
  82. package/dist/renderer/FixtureConnect.d.ts +0 -17
  83. package/dist/renderer/FixtureConnect.js +0 -27
  84. package/dist/renderer/FixtureLoader.d.ts +0 -17
  85. package/dist/renderer/FixtureLoader.js +0 -16
  86. package/dist/renderer/FixtureStateChangeResponse.d.ts +0 -11
  87. package/dist/renderer/FixtureStateChangeResponse.js +0 -34
  88. package/dist/renderer/LazyFixtureListItemUpdate.d.ts +0 -10
  89. package/dist/renderer/LazyFixtureListItemUpdate.js +0 -15
  90. package/dist/renderer/LazyFixtureLoader.d.ts +0 -20
  91. package/dist/renderer/LazyFixtureLoader.js +0 -22
  92. package/dist/renderer/createPostMessageConnect.d.ts +0 -2
  93. package/dist/renderer/createPostMessageConnect.js +0 -22
  94. package/dist/renderer/createWebSocketsConnect.d.ts +0 -2
  95. package/dist/renderer/createWebSocketsConnect.js +0 -32
  96. package/dist/renderer/getDecoratedFixtureElement/FixtureElement.d.ts +0 -9
  97. package/dist/renderer/getDecoratedFixtureElement/FixtureElement.js +0 -5
  98. package/dist/renderer/getDecoratedFixtureElement/index.d.ts +0 -3
  99. package/dist/renderer/getDecoratedFixtureElement/index.js +0 -15
  100. package/dist/renderer/getFixture.d.ts +0 -2
  101. package/dist/renderer/useFixtureModules.d.ts +0 -2
  102. package/dist/renderer/useFixtureModules.js +0 -10
  103. package/dist/renderer/useLazyFixtureModules.d.ts +0 -2
  104. package/dist/renderer/useLazyFixtureModules.js +0 -24
  105. package/dist/renderer/useRendererRequest.d.ts +0 -5
  106. package/dist/renderer/useRendererRequest.js +0 -81
  107. package/dist/renderer/useRendererResponse.d.ts +0 -4
  108. package/dist/renderer/useRendererResponse.js +0 -23
  109. package/dist/renderer/useSelectedFixture.d.ts +0 -14
  110. package/dist/renderer/useSelectedFixture.js +0 -31
  111. /package/dist/{server → message}/serverMessage.d.ts +0 -0
  112. /package/dist/{server → message}/serverMessage.js +0 -0
  113. /package/dist/{server → message}/socketMessage.d.ts +0 -0
  114. /package/dist/{server → message}/socketMessage.js +0 -0
  115. /package/dist/{fixture/types.js → playground/playgroundParams.js} +0 -0
  116. /package/dist/{renderer → playground}/registerPlaygroundShortcuts.d.ts +0 -0
  117. /package/dist/{renderer → playground}/registerPlaygroundShortcuts.js +0 -0
  118. /package/dist/{server → plugin}/cosmosPluginConfig.d.ts +0 -0
  119. /package/dist/{server → plugin}/cosmosPluginConfig.js +0 -0
  120. /package/dist/{fixture/useValue/shared.js → renderer/rendererConnect.js} +0 -0
  121. /package/dist/renderer/{rendererConnectTypes.js → rendererParams.js} +0 -0
  122. /package/dist/{fixture/types.d.ts → userModules/fixtureTypes.d.ts} +0 -0
  123. /package/dist/{renderer/userModuleTypes.js → userModules/fixtureTypes.js} +0 -0
  124. /package/dist/{renderer → userModules}/getFixtureList.js +0 -0
  125. /package/dist/{renderer → userModules}/getSortedDecoratorsForFixturePath.d.ts +0 -0
  126. /package/dist/{renderer → userModules}/getSortedDecoratorsForFixturePath.js +0 -0
  127. /package/dist/{renderer → userModules}/isMultiFixture.d.ts +0 -0
  128. /package/dist/{renderer → userModules}/isMultiFixture.js +0 -0
@@ -1,70 +0,0 @@
1
- import { isEqual, mapValues } from 'lodash-es';
2
- import React from 'react';
3
- import { extendWithValues } from '../../../fixtureState/extendWithValues.js';
4
- import { DEFAULT_RENDER_KEY, findFixtureStateProps, } from '../../../fixtureState/props.js';
5
- import { getComponentName } from '../../../utils/react/getComponentName.js';
6
- import { findRelevantElementPaths } from '../shared/findRelevantElementPaths.js';
7
- import { getChildrenPath, setElementAtPath } from '../shared/nodeTree/index.js';
8
- export function useFixtureProps(fixture, fixtureState, decoratorId) {
9
- const propCache = React.useMemo(() => ({}),
10
- // React.useMemo is used as a cache invalidated by decoratorId
11
- // eslint-disable-next-line react-hooks/exhaustive-deps
12
- [decoratorId]);
13
- const elPaths = findRelevantElementPaths(fixture);
14
- return elPaths.reduce((extendedFixture, elPath) => {
15
- const elementId = { decoratorId, elPath };
16
- const fsProps = findFixtureStateProps(fixtureState, elementId);
17
- return setElementAtPath(extendedFixture, elPath, element => {
18
- if (!fsProps || componentTypeChanged(fsProps.componentName)) {
19
- return {
20
- ...element,
21
- key: getElRenderKey(elPath, DEFAULT_RENDER_KEY),
22
- };
23
- }
24
- // Prevent overriding child elements with outdated "children" prop values
25
- // stored in fixture state
26
- // See https://github.com/react-cosmos/react-cosmos/pull/920 for context
27
- const originalProps = element.props;
28
- const extendedProps = extendWithValues(originalProps, fsProps.values);
29
- // Preserve identity between renders for indentical non-primitive props
30
- const cachedProps = mapValues(extendedProps, (value, propName) => {
31
- const key = getPropCacheKey(elPath, propName);
32
- if (!propCache.hasOwnProperty(key))
33
- propCache[key] = originalProps[propName];
34
- if (isEqual(propCache[key], value))
35
- return propCache[key];
36
- propCache[key] = value;
37
- return value;
38
- });
39
- // HACK alert: Editing React Element by hand
40
- // This is blasphemy, but there are two reasons why React.cloneElement
41
- // isn't ideal:
42
- // 1. Props need to overridden (not merged)
43
- // 2. element.key has to be set to control whether the prev instance
44
- // should be reused or not
45
- // To be revised in case this approach causes trouble in the future.
46
- // Useful links:
47
- // - https://reactjs.org/docs/react-api.html#cloneelement
48
- // - https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L293-L362
49
- return {
50
- ...element,
51
- props: hasChildElPaths(elPaths, elPath)
52
- ? { ...cachedProps, children: originalProps.children }
53
- : cachedProps,
54
- key: getElRenderKey(elPath, fsProps.renderKey),
55
- };
56
- function componentTypeChanged(componentName) {
57
- return componentName !== getComponentName(element.type);
58
- }
59
- });
60
- }, fixture);
61
- }
62
- function getPropCacheKey(elPath, propName) {
63
- return elPath ? `${elPath}-${propName}` : propName;
64
- }
65
- function getElRenderKey(elPath, renderKey) {
66
- return `${elPath}-${renderKey}`;
67
- }
68
- function hasChildElPaths(elPaths, elPath) {
69
- return elPaths.some(p => p.indexOf(getChildrenPath(elPath)) === 0);
70
- }
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare function findRelevantElementPaths(node: React.ReactNode): string[];
@@ -1,23 +0,0 @@
1
- import { findElementPaths, getExpectedElementAtPath, } from './nodeTree/index.js';
2
- export function findRelevantElementPaths(node) {
3
- const elPaths = findElementPaths(node);
4
- return elPaths.filter(elPath => {
5
- const { type } = getExpectedElementAtPath(node, elPath);
6
- // Ignore symbol types, like StrictMode
7
- // https://github.com/react-cosmos/react-cosmos/issues/1249
8
- if (typeof type === 'symbol')
9
- return false;
10
- if (typeof type === 'string')
11
- return isInterestingTag(type);
12
- const classType = type;
13
- return classType.cosmosCapture !== false && isInterestingClass(classType);
14
- });
15
- }
16
- function isInterestingTag(tagName) {
17
- // TODO: Make this customizable
18
- return tagName !== 'div' && tagName !== 'span';
19
- }
20
- function isInterestingClass(type) {
21
- // TODO: Make this customizable
22
- return type.name !== 'StyledComponent';
23
- }
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare function findElementPaths(node: React.ReactNode, curPath?: string): string[];
@@ -1,22 +0,0 @@
1
- import { flatten } from 'lodash-es';
2
- import { Fragment } from 'react';
3
- import { isReactElement } from '../../../../utils/react/isReactElement.js';
4
- import { getChildrenPath } from './shared.js';
5
- export function findElementPaths(node, curPath = '') {
6
- if (Array.isArray(node)) {
7
- return flatten(node.map((child, idx) => findElementPaths(child, `${curPath}[${idx}]`)));
8
- }
9
- if (!isReactElement(node)) {
10
- // At this point the node can be null, boolean, string, number, Portal, etc.
11
- // https://github.com/facebook/flow/blob/172d28f542f49bbc1e765131c9dfb9e31780f3a2/lib/react.js#L13-L20
12
- return [];
13
- }
14
- const { children } = node.props;
15
- const childElPaths =
16
- // Props of elements returned by render functions can't be read here
17
- typeof children !== 'function'
18
- ? findElementPaths(children, getChildrenPath(curPath))
19
- : [];
20
- // Ignore Fragment elements, but include their children
21
- return node.type === Fragment ? childElPaths : [curPath, ...childElPaths];
22
- }
@@ -1,3 +0,0 @@
1
- import { ReactElement, ReactNode } from 'react';
2
- export declare function getElementAtPath(node: ReactNode, elPath: string): null | ReactElement;
3
- export declare function getExpectedElementAtPath(node: ReactNode, elPath: string): ReactElement;
@@ -1,26 +0,0 @@
1
- import { get } from 'lodash-es';
2
- import { isReactElement } from '../../../../utils/react/isReactElement.js';
3
- import { isRootPath } from './shared.js';
4
- // Why be silent about trying to fetch a node that isn't an element?
5
- // Because users of this utility only care about elements. Whether the child
6
- // node was removed or replaced by a different type of node (eg. string,
7
- // array of elements, etc.) is irrelevant.
8
- // NICETOHAVE: Assert child path validity
9
- export function getElementAtPath(node, elPath) {
10
- if (!isReactElement(node) && !Array.isArray(node)) {
11
- return null;
12
- }
13
- const rootNode = node;
14
- const childNode = isRootPath(elPath) ? rootNode : get(rootNode, elPath);
15
- if (!isReactElement(childNode)) {
16
- return null;
17
- }
18
- return childNode;
19
- }
20
- export function getExpectedElementAtPath(node, elPath) {
21
- const el = getElementAtPath(node, elPath);
22
- if (!el) {
23
- throw new Error(`Element not found at path: ${elPath}`);
24
- }
25
- return el;
26
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Utility for extending React Elements from a tree of React Nodes.
3
- *
4
- * The root Node is the `children` prop of a parent Element. Besides the Node
5
- * type, children can also be a function.
6
- * https://reactjs.org/docs/jsx-in-depth.html#functions-as-children
7
- */
8
- export { findElementPaths } from './findElementPaths.js';
9
- export { getElementAtPath, getExpectedElementAtPath, } from './getElementAtPath.js';
10
- export { setElementAtPath } from './setElementAtPath.js';
11
- export { getChildrenPath } from './shared.js';
@@ -1,11 +0,0 @@
1
- /**
2
- * Utility for extending React Elements from a tree of React Nodes.
3
- *
4
- * The root Node is the `children` prop of a parent Element. Besides the Node
5
- * type, children can also be a function.
6
- * https://reactjs.org/docs/jsx-in-depth.html#functions-as-children
7
- */
8
- export { findElementPaths } from './findElementPaths.js';
9
- export { getElementAtPath, getExpectedElementAtPath, } from './getElementAtPath.js';
10
- export { setElementAtPath } from './setElementAtPath.js';
11
- export { getChildrenPath } from './shared.js';
@@ -1,2 +0,0 @@
1
- import { ReactElement, ReactNode } from 'react';
2
- export declare function setElementAtPath(node: ReactNode, elPath: string, updater: (el: ReactElement) => ReactElement): ReactNode;
@@ -1,35 +0,0 @@
1
- import { set } from 'lodash-es';
2
- import { isReactElement } from '../../../../utils/react/isReactElement.js';
3
- import { getExpectedElementAtPath } from './getElementAtPath.js';
4
- import { isRootPath } from './shared.js';
5
- export function setElementAtPath(node, elPath, updater) {
6
- const childEl = getExpectedElementAtPath(node, elPath);
7
- const newEl = updater(childEl);
8
- if (isRootPath(elPath)) {
9
- return newEl;
10
- }
11
- // If the root is a non-Array non-Element Node we should be at the root path
12
- // and returned already
13
- const clonedRoot = cloneNode(node);
14
- // _.set also accepts arrays
15
- // https://github.com/lodash/lodash/blob/6018350ac10d5ce6a5b7db625140b82aeab804df/isObject.js#L15-L16
16
- return set(clonedRoot, elPath, newEl);
17
- }
18
- function cloneNode(value) {
19
- return Array.isArray(value)
20
- ? value.map(n => cloneNodeItem(n))
21
- : cloneNodeItem(value);
22
- }
23
- function cloneNodeItem(value) {
24
- return isReactElement(value) ? cloneReactElement(value) : value;
25
- }
26
- function cloneReactElement(value) {
27
- const { children, ...otherProps } = value.props;
28
- return {
29
- ...value,
30
- props: {
31
- ...otherProps,
32
- children: cloneNode(children),
33
- },
34
- };
35
- }
@@ -1,2 +0,0 @@
1
- export declare function getChildrenPath(elPath: string): string;
2
- export declare function isRootPath(elPath: string): boolean;
@@ -1,6 +0,0 @@
1
- export function getChildrenPath(elPath) {
2
- return isRootPath(elPath) ? 'props.children' : `${elPath}.props.children`;
3
- }
4
- export function isRootPath(elPath) {
5
- return elPath === '';
6
- }
@@ -1,17 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { FixtureId } from '../fixture/types.js';
3
- import { RendererConnect } from './rendererConnectTypes.js';
4
- import { ReactDecorator, UserModuleWrappers } from './userModuleTypes.js';
5
- type Props = {
6
- rendererId: string;
7
- rendererConnect: RendererConnect;
8
- moduleWrappers: UserModuleWrappers;
9
- systemDecorators: ReactDecorator[];
10
- initialFixtureId?: FixtureId;
11
- selectedFixtureId?: null | FixtureId;
12
- renderMessage?: (msg: string) => ReactElement;
13
- renderNoFixtureSelected?: boolean;
14
- onErrorReset?: () => unknown;
15
- };
16
- export declare function FixtureConnect({ rendererId, rendererConnect, moduleWrappers, systemDecorators, initialFixtureId, selectedFixtureId, onErrorReset, renderMessage, renderNoFixtureSelected, }: Props): JSX.Element | null;
17
- export {};
@@ -1,27 +0,0 @@
1
- import React from 'react';
2
- import { FixtureLoader } from './FixtureLoader.js';
3
- import { FixtureStateChangeResponse } from './FixtureStateChangeResponse.js';
4
- import { LazyFixtureLoader } from './LazyFixtureLoader.js';
5
- import { useRendererRequest } from './useRendererRequest.js';
6
- import { useRendererResponse } from './useRendererResponse.js';
7
- import { useSelectedFixture } from './useSelectedFixture.js';
8
- export function FixtureConnect({ rendererId, rendererConnect, moduleWrappers, systemDecorators, initialFixtureId, selectedFixtureId, onErrorReset, renderMessage = defaultRenderMessage, renderNoFixtureSelected = true, }) {
9
- const { selectedFixture, setSelectedFixture, setFixtureState } = useSelectedFixture(initialFixtureId, selectedFixtureId);
10
- useRendererRequest(rendererId, rendererConnect, moduleWrappers, setSelectedFixture, onErrorReset);
11
- useRendererResponse(rendererId, rendererConnect, moduleWrappers, initialFixtureId);
12
- if (!selectedFixture) {
13
- return renderNoFixtureSelected
14
- ? renderMessage('No fixture selected.')
15
- : null;
16
- }
17
- const { fixtureId, fixtureState, renderKey } = selectedFixture;
18
- if (!moduleWrappers.fixtures[fixtureId.path]) {
19
- return renderMessage(`Fixture path not found: ${fixtureId.path}`);
20
- }
21
- return (React.createElement(React.Fragment, null,
22
- moduleWrappers.lazy ? (React.createElement(LazyFixtureLoader, { rendererId: rendererId, rendererConnect: rendererConnect, fixtureWrapper: moduleWrappers.fixtures[fixtureId.path], decorators: moduleWrappers.decorators, systemDecorators: systemDecorators, fixtureId: fixtureId, fixtureState: fixtureState, setFixtureState: setFixtureState, renderMessage: renderMessage, renderKey: renderKey, onErrorReset: onErrorReset })) : (React.createElement(FixtureLoader, { fixtureWrapper: moduleWrappers.fixtures[fixtureId.path], decorators: moduleWrappers.decorators, systemDecorators: systemDecorators, fixtureId: fixtureId, fixtureState: fixtureState, setFixtureState: setFixtureState, renderMessage: renderMessage, renderKey: renderKey, onErrorReset: onErrorReset })),
23
- React.createElement(FixtureStateChangeResponse, { rendererId: rendererId, rendererConnect: rendererConnect, selectedFixture: selectedFixture, setSelectedFixture: setSelectedFixture })));
24
- }
25
- function defaultRenderMessage(msg) {
26
- return React.createElement(React.Fragment, null, msg);
27
- }
@@ -1,17 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { FixtureId } from '../fixture/types.js';
3
- import { FixtureState, SetFixtureState } from '../fixtureState/types.js';
4
- import { ByPath, ReactDecorator, ReactDecoratorWrapper, ReactFixtureWrapper } from './userModuleTypes.js';
5
- type Props = {
6
- fixtureWrapper: ReactFixtureWrapper;
7
- decorators: ByPath<ReactDecoratorWrapper>;
8
- systemDecorators: ReactDecorator[];
9
- fixtureId: FixtureId;
10
- fixtureState: FixtureState;
11
- setFixtureState: SetFixtureState;
12
- renderMessage: (msg: string) => ReactElement;
13
- renderKey: number;
14
- onErrorReset?: () => unknown;
15
- };
16
- export declare function FixtureLoader({ fixtureWrapper, decorators, systemDecorators, fixtureId, fixtureState, setFixtureState, renderMessage, renderKey, onErrorReset, }: Props): JSX.Element;
17
- export {};
@@ -1,16 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import { DecoratedFixture } from './DecoratedFixture.js';
3
- import { getFixture } from './getFixture.js';
4
- import { getSortedDecoratorsForFixturePath } from './getSortedDecoratorsForFixturePath.js';
5
- import { useFixtureModules } from './useFixtureModules.js';
6
- export function FixtureLoader({ fixtureWrapper, decorators, systemDecorators, fixtureId, fixtureState, setFixtureState, renderMessage, renderKey, onErrorReset, }) {
7
- const decoratorWrappers = useMemo(() => getSortedDecoratorsForFixturePath(fixtureId.path, decorators), [decorators, fixtureId.path]);
8
- const modules = useFixtureModules(fixtureId.path, fixtureWrapper, decoratorWrappers);
9
- const { fixtureModule, decoratorModules } = modules;
10
- const fixtureExport = fixtureModule.default;
11
- const fixture = getFixture(fixtureExport, fixtureId.name);
12
- if (typeof fixture === 'undefined') {
13
- return renderMessage(`Invalid fixture name: ${fixtureId.name}`);
14
- }
15
- return (React.createElement(DecoratedFixture, { fixture: fixture, systemDecorators: systemDecorators, userDecoratorModules: decoratorModules, fixtureState: fixtureState, setFixtureState: setFixtureState, renderKey: renderKey, onErrorReset: onErrorReset }));
16
- }
@@ -1,11 +0,0 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
- import { RendererConnect } from './rendererConnectTypes.js';
3
- import { SelectedFixture } from './useSelectedFixture.js';
4
- type Props = {
5
- rendererId: string;
6
- rendererConnect: RendererConnect;
7
- selectedFixture: SelectedFixture;
8
- setSelectedFixture: Dispatch<SetStateAction<SelectedFixture | null>>;
9
- };
10
- export declare function FixtureStateChangeResponse({ rendererId, rendererConnect, selectedFixture, setSelectedFixture, }: Props): null;
11
- export {};
@@ -1,34 +0,0 @@
1
- import { isEqual } from 'lodash-es';
2
- import { useEffect } from 'react';
3
- export function FixtureStateChangeResponse({ rendererId, rendererConnect, selectedFixture, setSelectedFixture, }) {
4
- const { fixtureId, fixtureState, syncedFixtureState } = selectedFixture;
5
- useEffect(() => {
6
- if (!isEqual(fixtureState, syncedFixtureState)) {
7
- rendererConnect.postMessage({
8
- type: 'fixtureStateChange',
9
- payload: {
10
- rendererId,
11
- fixtureId,
12
- fixtureState,
13
- },
14
- });
15
- setSelectedFixture(prev => {
16
- // Ensure fixture state applies to currently selected fixture
17
- if (prev && isEqual(prev.fixtureId, fixtureId)) {
18
- return { ...prev, syncedFixtureState: fixtureState };
19
- }
20
- else {
21
- return prev;
22
- }
23
- });
24
- }
25
- }, [
26
- fixtureId,
27
- fixtureState,
28
- rendererConnect,
29
- rendererId,
30
- setSelectedFixture,
31
- syncedFixtureState,
32
- ]);
33
- return null;
34
- }
@@ -1,10 +0,0 @@
1
- import { RendererConnect } from './rendererConnectTypes.js';
2
- import { ReactFixtureModule } from './userModuleTypes.js';
3
- type Props = {
4
- rendererId: string;
5
- rendererConnect: RendererConnect;
6
- fixturePath: string;
7
- fixtureModule: ReactFixtureModule;
8
- };
9
- export declare function LazyFixtureListItemUpdate({ rendererId, rendererConnect, fixturePath, fixtureModule, }: Props): null;
10
- export {};
@@ -1,15 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { getFixtureItemFromExport } from './getFixtureList.js';
3
- export function LazyFixtureListItemUpdate({ rendererId, rendererConnect, fixturePath, fixtureModule, }) {
4
- useEffect(() => {
5
- rendererConnect.postMessage({
6
- type: 'fixtureListItemUpdate',
7
- payload: {
8
- rendererId,
9
- fixturePath,
10
- fixtureItem: getFixtureItemFromExport(fixtureModule.default),
11
- },
12
- });
13
- }, [fixtureModule.default, fixturePath, rendererConnect, rendererId]);
14
- return null;
15
- }
@@ -1,20 +0,0 @@
1
- import { ReactElement } from 'react';
2
- import { FixtureId } from '../fixture/types.js';
3
- import { FixtureState, SetFixtureState } from '../fixtureState/types.js';
4
- import { RendererConnect } from './rendererConnectTypes.js';
5
- import { ByPath, LazyReactDecoratorWrapper, LazyReactFixtureWrapper, ReactDecorator } from './userModuleTypes.js';
6
- type Props = {
7
- rendererId: string;
8
- rendererConnect: RendererConnect;
9
- fixtureWrapper: LazyReactFixtureWrapper;
10
- decorators: ByPath<LazyReactDecoratorWrapper>;
11
- systemDecorators: ReactDecorator[];
12
- fixtureId: FixtureId;
13
- fixtureState: FixtureState;
14
- setFixtureState: SetFixtureState;
15
- renderMessage: (msg: string) => ReactElement;
16
- renderKey: number;
17
- onErrorReset?: () => unknown;
18
- };
19
- export declare function LazyFixtureLoader({ rendererId, rendererConnect, fixtureWrapper, decorators, systemDecorators, fixtureId, fixtureState, setFixtureState, renderMessage, renderKey, onErrorReset, }: Props): JSX.Element | null;
20
- export {};
@@ -1,22 +0,0 @@
1
- import React, { useMemo } from 'react';
2
- import { DecoratedFixture } from './DecoratedFixture.js';
3
- import { LazyFixtureListItemUpdate } from './LazyFixtureListItemUpdate.js';
4
- import { getFixture } from './getFixture.js';
5
- import { getSortedDecoratorsForFixturePath } from './getSortedDecoratorsForFixturePath.js';
6
- import { useLazyFixtureModules } from './useLazyFixtureModules.js';
7
- export function LazyFixtureLoader({ rendererId, rendererConnect, fixtureWrapper, decorators, systemDecorators, fixtureId, fixtureState, setFixtureState, renderMessage, renderKey, onErrorReset, }) {
8
- const decoratorWrappers = useMemo(() => getSortedDecoratorsForFixturePath(fixtureId.path, decorators), [decorators, fixtureId.path]);
9
- const modules = useLazyFixtureModules(fixtureId.path, fixtureWrapper, decoratorWrappers);
10
- if (!modules) {
11
- return null;
12
- }
13
- const { fixtureModule, decoratorModules } = modules;
14
- const fixtureExport = fixtureModule.default;
15
- const fixture = getFixture(fixtureExport, fixtureId.name);
16
- if (typeof fixture === 'undefined') {
17
- return renderMessage(`Invalid fixture name: ${fixtureId.name}`);
18
- }
19
- return (React.createElement(React.Fragment, null,
20
- React.createElement(DecoratedFixture, { fixture: fixture, systemDecorators: systemDecorators, userDecoratorModules: decoratorModules, fixtureState: fixtureState, setFixtureState: setFixtureState, renderKey: renderKey, onErrorReset: onErrorReset }),
21
- React.createElement(LazyFixtureListItemUpdate, { rendererId: rendererId, rendererConnect: rendererConnect, fixturePath: fixtureId.path, fixtureModule: fixtureModule })));
22
- }
@@ -1,2 +0,0 @@
1
- import { RendererConnect } from './rendererConnectTypes.js';
2
- export declare function createPostMessageConnect(): RendererConnect;
@@ -1,22 +0,0 @@
1
- import { registerPlaygroundShortcuts } from './registerPlaygroundShortcuts.js';
2
- export function createPostMessageConnect() {
3
- function postMessage(msg) {
4
- parent.postMessage(msg, '*');
5
- }
6
- return {
7
- postMessage,
8
- onMessage(onMessage) {
9
- function handleMessage(msg) {
10
- onMessage(msg.data);
11
- }
12
- window.addEventListener('message', handleMessage, false);
13
- const removeShortcuts = registerPlaygroundShortcuts(command => {
14
- postMessage({ type: 'playgroundCommand', payload: { command } });
15
- });
16
- return () => {
17
- window.removeEventListener('message', handleMessage);
18
- removeShortcuts();
19
- };
20
- },
21
- };
22
- }
@@ -1,2 +0,0 @@
1
- import { RendererConnect } from './rendererConnectTypes.js';
2
- export declare function createWebSocketsConnect(url: string): RendererConnect;
@@ -1,32 +0,0 @@
1
- import { rendererSocketMessage, } from '../server/socketMessage.js';
2
- export function createWebSocketsConnect(url) {
3
- let pendingMessages = [];
4
- const socket = new WebSocket(url);
5
- socket.addEventListener('open', () => {
6
- if (pendingMessages.length > 0) {
7
- pendingMessages.forEach(msg => socket.send(JSON.stringify(msg)));
8
- pendingMessages = [];
9
- }
10
- });
11
- return {
12
- postMessage(rendererResponse) {
13
- const socketMessage = rendererSocketMessage(rendererResponse);
14
- if (socket && socket.readyState === WebSocket.OPEN) {
15
- socket.send(JSON.stringify(socketMessage));
16
- }
17
- else {
18
- pendingMessages.push(socketMessage);
19
- }
20
- },
21
- onMessage(onMessage) {
22
- function handleMessage(msg) {
23
- const socketMessage = JSON.parse(msg.data);
24
- if (socketMessage.channel === 'renderer') {
25
- onMessage(socketMessage.message);
26
- }
27
- }
28
- socket.addEventListener('message', handleMessage);
29
- return () => socket.removeEventListener('message', handleMessage);
30
- },
31
- };
32
- }
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- type Props = {
3
- Component: React.FunctionComponent;
4
- };
5
- export declare function FixtureElement({ Component }: Props): JSX.Element;
6
- export declare namespace FixtureElement {
7
- var cosmosCapture: boolean;
8
- }
9
- export {};
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export function FixtureElement({ Component }) {
3
- return React.createElement(Component, null);
4
- }
5
- FixtureElement.cosmosCapture = false;
@@ -1,3 +0,0 @@
1
- /// <reference types="react" />
2
- import { ReactDecorator, ReactDecoratorProps, ReactFixture } from '../userModuleTypes.js';
3
- export declare function getDecoratedFixtureElement(fixture: ReactFixture, decorators: ReactDecorator[], decoratorProps: Omit<ReactDecoratorProps, 'children'>): JSX.Element;
@@ -1,15 +0,0 @@
1
- import React from 'react';
2
- import { FixtureCapture } from '../FixtureCapture/index.js';
3
- import { FixtureElement } from './FixtureElement.js';
4
- export function getDecoratedFixtureElement(fixture, decorators, decoratorProps) {
5
- const fixtureElement = (React.createElement(FixtureCapture, { decoratorId: "root" }, getFixtureElement(fixture)));
6
- return [...decorators]
7
- .reverse()
8
- .reduce((prevElement, Decorator) => (React.createElement(Decorator, { ...decoratorProps }, prevElement)), fixtureElement);
9
- }
10
- function getFixtureElement(fixture) {
11
- return isFunctionFixture(fixture) ? (React.createElement(FixtureElement, { Component: fixture })) : (fixture);
12
- }
13
- function isFunctionFixture(fixture) {
14
- return typeof fixture === 'function';
15
- }
@@ -1,2 +0,0 @@
1
- import { ReactFixture, ReactFixtureExport } from './userModuleTypes.js';
2
- export declare function getFixture(fixtureExport: ReactFixtureExport, fixtureName?: string): void | ReactFixture;
@@ -1,2 +0,0 @@
1
- import { FixtureModules, ReactDecoratorWrapper, ReactFixtureWrapper } from './userModuleTypes.js';
2
- export declare function useFixtureModules(fixturePath: string, fixtureWrapper: ReactFixtureWrapper, decoratorWrappers: ReactDecoratorWrapper[]): FixtureModules;
@@ -1,10 +0,0 @@
1
- import { useMemo } from 'react';
2
- export function useFixtureModules(fixturePath, fixtureWrapper, decoratorWrappers) {
3
- return useMemo(() => {
4
- return {
5
- fixturePath,
6
- fixtureModule: fixtureWrapper.module,
7
- decoratorModules: decoratorWrappers.map(d => d.module),
8
- };
9
- }, [decoratorWrappers, fixturePath, fixtureWrapper]);
10
- }
@@ -1,2 +0,0 @@
1
- import { FixtureModules, LazyReactDecoratorWrapper, LazyReactFixtureWrapper } from './userModuleTypes.js';
2
- export declare function useLazyFixtureModules(fixturePath: string, fixtureWrapper: LazyReactFixtureWrapper, decoratorWrappers: LazyReactDecoratorWrapper[]): FixtureModules | null;
@@ -1,24 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- export function useLazyFixtureModules(fixturePath, fixtureWrapper, decoratorWrappers) {
3
- const [modules, setModules] = useState(null);
4
- useEffect(() => {
5
- let canceled = false;
6
- (async () => {
7
- const fixtureModule = await fixtureWrapper.getModule();
8
- const decoratorModules = await Promise.all(decoratorWrappers.map(d => d.getModule()));
9
- if (!canceled) {
10
- setModules({
11
- fixturePath,
12
- fixtureModule,
13
- decoratorModules,
14
- });
15
- }
16
- })();
17
- return () => {
18
- canceled = true;
19
- };
20
- }, [decoratorWrappers, fixturePath, fixtureWrapper]);
21
- // Stop returning modules once fixturePath changed to prevent rendering
22
- // the previous fixture until the new fixture modules are loaded
23
- return modules && modules.fixturePath === fixturePath ? modules : null;
24
- }
@@ -1,5 +0,0 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
- import { RendererConnect } from './rendererConnectTypes.js';
3
- import { SelectedFixture } from './useSelectedFixture.js';
4
- import { UserModuleWrappers } from './userModuleTypes.js';
5
- export declare function useRendererRequest(rendererId: string, rendererConnect: RendererConnect, moduleWrappers: UserModuleWrappers, setSelectedFixture: Dispatch<SetStateAction<SelectedFixture | null>>, onErrorReset?: () => unknown): void;