@forge/react 0.0.0-experimental-edeb51b → 0.1.0-next.0

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.
package/CHANGELOG.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # @forge/react
2
2
 
3
- ## 0.0.0-experimental-edeb51b
3
+ ## 0.1.0-next.0
4
+ ### Minor Changes
4
5
 
5
- ### Patch Changes
6
-
7
- - 456c10c: Add
6
+ - 71d89a06: Add basic ForgeReconciler implementation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/react",
3
- "version": "0.0.0-experimental-edeb51b",
3
+ "version": "0.1.0-next.0",
4
4
  "description": "Forge React reconciler",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -12,9 +12,11 @@
12
12
  "compile": "tsc -p tsconfig.json"
13
13
  },
14
14
  "peerDependencies": {
15
- "react": "^16.13.1"
15
+ "@forge/ui": "1.3.0"
16
16
  },
17
17
  "dependencies": {
18
- "react-reconciler": "^0.27.0"
18
+ "@types/react-reconciler": "^0.28.0",
19
+ "react-reconciler": "^0.28.0",
20
+ "uuid": "^3.4.0"
19
21
  }
20
22
  }
@@ -0,0 +1,12 @@
1
+ interface GlobalBridge {
2
+ callBridge(action: 'reconcile', payload: any): Promise<any>;
3
+ __SEMVER: string;
4
+ }
5
+
6
+ declare module '@forge/react' {
7
+ global {
8
+ interface Window {
9
+ __bridge: GlobalBridge;
10
+ }
11
+ }
12
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { ForgeReconciler as default } from './reconciler';
@@ -0,0 +1,219 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ import Reconciler, { HostConfig } from 'react-reconciler';
3
+ import { DefaultEventPriority } from 'react-reconciler/constants';
4
+ import { v4 as uuid } from 'uuid';
5
+
6
+ type ElementType = string;
7
+ type ElementProps = { [key: string]: any };
8
+
9
+ interface ForgeDoc {
10
+ type: string;
11
+ props: { [key: string]: any };
12
+ children: ForgeDoc[];
13
+ key: string;
14
+ }
15
+
16
+ // @ts-ignore
17
+ const callBridge = self.__bridge.callBridge;
18
+
19
+ const createElement = (type: ElementType, props: ElementProps = {}): ForgeDoc => {
20
+ const { children, ...restProps } = props;
21
+ return {
22
+ type,
23
+ children: [],
24
+ props: restProps,
25
+ key: uuid()
26
+ };
27
+ };
28
+
29
+ const appendChild = (parent: ForgeDoc, child: ForgeDoc) => {
30
+ if (parent.children.includes(child)) {
31
+ const removeIndex = parent.children.indexOf(child);
32
+ parent.children.splice(removeIndex, 1);
33
+ }
34
+ parent.children.push(child);
35
+ };
36
+
37
+ const insertBefore = (parent: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc) => {
38
+ const insertIndex = parent.children.indexOf(beforeChild);
39
+ if (parent.children.includes(child)) {
40
+ const removeIndex = parent.children.indexOf(child);
41
+ parent.children.splice(removeIndex, 1);
42
+ }
43
+ parent.children.splice(insertIndex, 0, child);
44
+ };
45
+
46
+ const hostConfig: HostConfig<
47
+ string, // Type
48
+ Record<string, any>, // Props
49
+ ForgeDoc, // Container
50
+ ForgeDoc, // Instance
51
+ ForgeDoc, // TextInstance
52
+ ForgeDoc, // SuspenseInstance
53
+ ForgeDoc, // HydratableInstance
54
+ ForgeDoc, // PublicInstance
55
+ any, // HostContext
56
+ any, // UpdatePayload,
57
+ any, // _ChildSet
58
+ any, // TimeoutHandle
59
+ any // NoTimeout
60
+ > = {
61
+ supportsMutation: true,
62
+ supportsPersistence: false,
63
+ noTimeout: -1,
64
+ isPrimaryRenderer: false,
65
+ supportsHydration: false,
66
+
67
+ resetAfterCommit(forgeDoc: ForgeDoc): void {
68
+ callBridge('reconcile', { forgeDoc });
69
+ },
70
+
71
+ createInstance(type: ElementType, props: ElementProps) {
72
+ const element = createElement(type, props);
73
+ return element;
74
+ },
75
+
76
+ createTextInstance(text: string): ForgeDoc {
77
+ return {
78
+ type: 'String',
79
+ children: [],
80
+ props: {
81
+ text
82
+ },
83
+ key: uuid()
84
+ };
85
+ },
86
+
87
+ appendInitialChild(parent: ForgeDoc, child: ForgeDoc): void {
88
+ appendChild(parent, child);
89
+ },
90
+
91
+ appendChild(parent: ForgeDoc, child: ForgeDoc): void {
92
+ appendChild(parent, child);
93
+ },
94
+
95
+ appendChildToContainer(container: ForgeDoc, child: ForgeDoc): void {
96
+ appendChild(container, child);
97
+ },
98
+
99
+ finalizeInitialChildren(): boolean {
100
+ return false;
101
+ },
102
+
103
+ prepareUpdate(instance: ForgeDoc, type: ElementType, oldProps: ElementProps, newProps: ElementProps): ElementProps {
104
+ instance.props = newProps;
105
+ return newProps;
106
+ },
107
+
108
+ shouldSetTextContent(): boolean {
109
+ return false;
110
+ },
111
+
112
+ getRootHostContext() {
113
+ return {};
114
+ },
115
+
116
+ getChildHostContext(parentContext, fiberType): null {
117
+ return null;
118
+ },
119
+
120
+ getPublicInstance(instance: ForgeDoc): ForgeDoc {
121
+ return instance;
122
+ },
123
+
124
+ prepareForCommit(): null {
125
+ return null;
126
+ },
127
+
128
+ preparePortalMount(): void {},
129
+
130
+ scheduleTimeout(fn: () => void, delay: number): any {
131
+ return setTimeout(fn, delay);
132
+ },
133
+
134
+ cancelTimeout(id): void {
135
+ clearTimeout(id);
136
+ },
137
+
138
+ insertBefore(parent: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc): void {
139
+ insertBefore(parent, child, beforeChild);
140
+ },
141
+
142
+ insertInContainerBefore(container: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc): void {
143
+ insertBefore(container, child, beforeChild);
144
+ },
145
+
146
+ removeChild(parent: ForgeDoc, child: ForgeDoc): void {
147
+ const removeIndex = parent.children.indexOf(child);
148
+ parent.children.splice(removeIndex, 1);
149
+ },
150
+
151
+ removeChildFromContainer(container: ForgeDoc, child: ForgeDoc): void {
152
+ const removeIndex = container.children.indexOf(child);
153
+ container.children.splice(removeIndex, 1);
154
+ },
155
+
156
+ resetTextContent(): void {},
157
+
158
+ commitTextUpdate(textInstance: ForgeDoc, oldText: string, newText: string): void {
159
+ textInstance.props.text = newText;
160
+ },
161
+
162
+ commitMount(): void {},
163
+
164
+ commitUpdate(): void {},
165
+
166
+ hideInstance(): void {},
167
+
168
+ hideTextInstance(): void {},
169
+
170
+ unhideInstance(): void {},
171
+
172
+ unhideTextInstance(): void {},
173
+
174
+ clearContainer(): void {},
175
+
176
+ detachDeletedInstance(instance: ForgeDoc): void {},
177
+
178
+ getCurrentEventPriority() {
179
+ return DefaultEventPriority;
180
+ },
181
+
182
+ getInstanceFromNode(): null {
183
+ return null;
184
+ },
185
+
186
+ beforeActiveInstanceBlur(): void {},
187
+
188
+ afterActiveInstanceBlur(): void {},
189
+
190
+ prepareScopeUpdate(): void {},
191
+
192
+ getInstanceFromScope(): null {
193
+ return null;
194
+ }
195
+ };
196
+
197
+ const reconciler = Reconciler(hostConfig);
198
+
199
+ export const ForgeReconciler = {
200
+ render: (element: any): void => {
201
+ const rootElement = createElement('Root');
202
+ const container = reconciler.createContainer(
203
+ rootElement,
204
+ 0,
205
+ null,
206
+ false,
207
+ null,
208
+ 'root',
209
+ (err: any) => {
210
+ // eslint-disable-next-line no-console
211
+ console.log(err);
212
+ },
213
+ null
214
+ );
215
+ reconciler.updateContainer(element, container, null, null);
216
+ }
217
+ };
218
+
219
+ export default ForgeReconciler;
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./out",
5
+ "rootDir": "src",
6
+ "composite": true
7
+ },
8
+ "references": []
9
+ }
package/README.md DELETED
@@ -1 +0,0 @@
1
- # Forge React Reconciler
package/out/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './reconciler';
package/out/index.js DELETED
@@ -1,14 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./reconciler"), exports);
14
- //# sourceMappingURL=index.js.map
package/out/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B"}
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const render: (component: React.ReactNode) => void;
package/out/reconciler.js DELETED
@@ -1,172 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.render = void 0;
18
- var react_reconciler_1 = __importDefault(require("react-reconciler"));
19
- var debug = false;
20
- var assignNextPropsToElement = function (element, props) {
21
- element.props = props;
22
- delete element.props.children;
23
- };
24
- var createStringNode = function (text) {
25
- return {
26
- type: 'String',
27
- children: [],
28
- operators: {},
29
- props: {
30
- text: text
31
- }
32
- };
33
- };
34
- var createElement = function (type, props) {
35
- if (props === void 0) { props = {}; }
36
- var element = {
37
- type: type,
38
- children: [],
39
- props: props,
40
- operators: {}
41
- };
42
- assignNextPropsToElement(element, props);
43
- var appendChild = function (child) {
44
- element.children.push(child);
45
- };
46
- var removeChild = function (child) {
47
- element.children.splice(element.children.indexOf(child), 1);
48
- };
49
- var insertBeforeChild = function (child, beforeChild) {
50
- element.children.splice(element.children.indexOf(beforeChild), 0, child);
51
- };
52
- Object.assign(element, {
53
- operators: {
54
- appendChild: appendChild,
55
- removeChild: removeChild,
56
- insertBeforeChild: insertBeforeChild
57
- }
58
- });
59
- return element;
60
- };
61
- var hostConfig = {
62
- supportsMutation: true,
63
- supportsMicrotask: true,
64
- noTimeout: -1,
65
- isPrimaryRenderer: false,
66
- resetAfterCommit: function (containerInfo) {
67
- // eslint-disable-next-line no-console
68
- if (debug)
69
- console.log('in resetAfterCommit');
70
- // eslint-disable-next-line no-console
71
- if (debug)
72
- console.log({ containerInfo: containerInfo });
73
- var newTree = __assign({}, containerInfo);
74
- var traverse = function (children) {
75
- return children.map(function (element) {
76
- return __assign(__assign({}, element), { operators: undefined, children: traverse(element.children) });
77
- });
78
- };
79
- newTree.children = traverse(containerInfo.children);
80
- self.dispatch(newTree);
81
- },
82
- createInstance: function (type, props) {
83
- var element = createElement(type, props);
84
- return element;
85
- },
86
- createTextInstance: function (text) {
87
- return createStringNode(text);
88
- },
89
- appendInitialChild: function (parentInstance, child) {
90
- parentInstance.operators.appendChild(child);
91
- },
92
- appendChild: function (parentInstance, child) {
93
- return parentInstance.operators.appendChild(child);
94
- },
95
- appendChildToContainer: function (container, child) {
96
- return container.operators.appendChild(child);
97
- },
98
- finalizeInitialChildren: function () {
99
- return false;
100
- },
101
- prepareUpdate: function (instance, type, oldProps, newProps) {
102
- return Object.assign(instance.props, newProps);
103
- },
104
- shouldSetTextContent: function () {
105
- return false;
106
- },
107
- getRootHostContext: function () {
108
- return null;
109
- },
110
- getChildHostContext: function () {
111
- return null;
112
- },
113
- getPublicInstance: function () {
114
- return null;
115
- },
116
- prepareForCommit: function () {
117
- return null;
118
- },
119
- preparePortalMount: function () { },
120
- now: function () {
121
- // eslint-disable-next-line no-console
122
- if (debug)
123
- console.log('in now');
124
- return 0;
125
- },
126
- scheduleTimeout: function (fn, delay) {
127
- return setTimeout(fn, delay);
128
- },
129
- scheduleMicrotask: function (fn) {
130
- return setTimeout(fn, 0);
131
- },
132
- cancelTimeout: function (id) {
133
- // eslint-disable-next-line no-console
134
- if (debug)
135
- console.log('in cancelTimeout');
136
- // eslint-disable-next-line no-console
137
- if (debug)
138
- console.log({ id: id });
139
- clearTimeout(id);
140
- },
141
- insertBefore: function (parentInstance, child, beforeChild) {
142
- return parentInstance.operators.insertBeforeChild(child, beforeChild);
143
- },
144
- insertInContainerBefore: function (container, child, beforeChild) {
145
- return container.operators.insertBeforeChild(child, beforeChild);
146
- },
147
- removeChild: function (parentInstance, child) {
148
- return parentInstance.operators.removeChild(child);
149
- },
150
- removeChildFromContainer: function (container, child) {
151
- return container.operators.removeChild(child);
152
- },
153
- resetTextContent: function () { },
154
- commitTextUpdate: function (textInstance, oldText, newText) {
155
- textInstance.props.text = newText;
156
- },
157
- commitMount: function () { },
158
- commitUpdate: function () { },
159
- hideInstance: function () { },
160
- hideTextInstance: function () { },
161
- unhideInstance: function () { },
162
- unhideTextInstance: function () { },
163
- clearContainer: function () { },
164
- detachDeletedInstance: function () { }
165
- };
166
- var reconciler = react_reconciler_1.default(hostConfig);
167
- exports.render = function (component) {
168
- var container = createElement('View');
169
- var root = reconciler.createContainer(container, 0, false, null);
170
- reconciler.updateContainer(component, root, null);
171
- };
172
- //# sourceMappingURL=reconciler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../src/reconciler.ts"],"names":[],"mappings":"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"}