@forge/react
Advanced tools
| interface GlobalBridge { | ||
| callBridge(action: 'reconcile', payload: any): Promise<any>; | ||
| __SEMVER: string; | ||
| } | ||
| declare module '@forge/react' { | ||
| global { | ||
| interface Window { | ||
| __bridge: GlobalBridge; | ||
| } | ||
| } | ||
| } |
| export { ForgeReconciler as default } from './reconciler'; |
| /* eslint-disable @typescript-eslint/no-empty-function */ | ||
| import Reconciler, { HostConfig } from 'react-reconciler'; | ||
| import { DefaultEventPriority } from 'react-reconciler/constants'; | ||
| import { v4 as uuid } from 'uuid'; | ||
| type ElementType = string; | ||
| type ElementProps = { [key: string]: any }; | ||
| interface ForgeDoc { | ||
| type: string; | ||
| props: { [key: string]: any }; | ||
| children: ForgeDoc[]; | ||
| key: string; | ||
| } | ||
| // @ts-ignore | ||
| const callBridge = self.__bridge.callBridge; | ||
| const createElement = (type: ElementType, props: ElementProps = {}): ForgeDoc => { | ||
| const { children, ...restProps } = props; | ||
| return { | ||
| type, | ||
| children: [], | ||
| props: restProps, | ||
| key: uuid() | ||
| }; | ||
| }; | ||
| const appendChild = (parent: ForgeDoc, child: ForgeDoc) => { | ||
| if (parent.children.includes(child)) { | ||
| const removeIndex = parent.children.indexOf(child); | ||
| parent.children.splice(removeIndex, 1); | ||
| } | ||
| parent.children.push(child); | ||
| }; | ||
| const insertBefore = (parent: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc) => { | ||
| const insertIndex = parent.children.indexOf(beforeChild); | ||
| if (parent.children.includes(child)) { | ||
| const removeIndex = parent.children.indexOf(child); | ||
| parent.children.splice(removeIndex, 1); | ||
| } | ||
| parent.children.splice(insertIndex, 0, child); | ||
| }; | ||
| const hostConfig: HostConfig< | ||
| string, // Type | ||
| Record<string, any>, // Props | ||
| ForgeDoc, // Container | ||
| ForgeDoc, // Instance | ||
| ForgeDoc, // TextInstance | ||
| ForgeDoc, // SuspenseInstance | ||
| ForgeDoc, // HydratableInstance | ||
| ForgeDoc, // PublicInstance | ||
| any, // HostContext | ||
| any, // UpdatePayload, | ||
| any, // _ChildSet | ||
| any, // TimeoutHandle | ||
| any // NoTimeout | ||
| > = { | ||
| supportsMutation: true, | ||
| supportsPersistence: false, | ||
| noTimeout: -1, | ||
| isPrimaryRenderer: false, | ||
| supportsHydration: false, | ||
| resetAfterCommit(forgeDoc: ForgeDoc): void { | ||
| callBridge('reconcile', { forgeDoc }); | ||
| }, | ||
| createInstance(type: ElementType, props: ElementProps) { | ||
| const element = createElement(type, props); | ||
| return element; | ||
| }, | ||
| createTextInstance(text: string): ForgeDoc { | ||
| return { | ||
| type: 'String', | ||
| children: [], | ||
| props: { | ||
| text | ||
| }, | ||
| key: uuid() | ||
| }; | ||
| }, | ||
| appendInitialChild(parent: ForgeDoc, child: ForgeDoc): void { | ||
| appendChild(parent, child); | ||
| }, | ||
| appendChild(parent: ForgeDoc, child: ForgeDoc): void { | ||
| appendChild(parent, child); | ||
| }, | ||
| appendChildToContainer(container: ForgeDoc, child: ForgeDoc): void { | ||
| appendChild(container, child); | ||
| }, | ||
| finalizeInitialChildren(): boolean { | ||
| return false; | ||
| }, | ||
| prepareUpdate(instance: ForgeDoc, type: ElementType, oldProps: ElementProps, newProps: ElementProps): ElementProps { | ||
| instance.props = newProps; | ||
| return newProps; | ||
| }, | ||
| shouldSetTextContent(): boolean { | ||
| return false; | ||
| }, | ||
| getRootHostContext() { | ||
| return {}; | ||
| }, | ||
| getChildHostContext(parentContext, fiberType): null { | ||
| return null; | ||
| }, | ||
| getPublicInstance(instance: ForgeDoc): ForgeDoc { | ||
| return instance; | ||
| }, | ||
| prepareForCommit(): null { | ||
| return null; | ||
| }, | ||
| preparePortalMount(): void {}, | ||
| scheduleTimeout(fn: () => void, delay: number): any { | ||
| return setTimeout(fn, delay); | ||
| }, | ||
| cancelTimeout(id): void { | ||
| clearTimeout(id); | ||
| }, | ||
| insertBefore(parent: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc): void { | ||
| insertBefore(parent, child, beforeChild); | ||
| }, | ||
| insertInContainerBefore(container: ForgeDoc, child: ForgeDoc, beforeChild: ForgeDoc): void { | ||
| insertBefore(container, child, beforeChild); | ||
| }, | ||
| removeChild(parent: ForgeDoc, child: ForgeDoc): void { | ||
| const removeIndex = parent.children.indexOf(child); | ||
| parent.children.splice(removeIndex, 1); | ||
| }, | ||
| removeChildFromContainer(container: ForgeDoc, child: ForgeDoc): void { | ||
| const removeIndex = container.children.indexOf(child); | ||
| container.children.splice(removeIndex, 1); | ||
| }, | ||
| resetTextContent(): void {}, | ||
| commitTextUpdate(textInstance: ForgeDoc, oldText: string, newText: string): void { | ||
| textInstance.props.text = newText; | ||
| }, | ||
| commitMount(): void {}, | ||
| commitUpdate(): void {}, | ||
| hideInstance(): void {}, | ||
| hideTextInstance(): void {}, | ||
| unhideInstance(): void {}, | ||
| unhideTextInstance(): void {}, | ||
| clearContainer(): void {}, | ||
| detachDeletedInstance(instance: ForgeDoc): void {}, | ||
| getCurrentEventPriority() { | ||
| return DefaultEventPriority; | ||
| }, | ||
| getInstanceFromNode(): null { | ||
| return null; | ||
| }, | ||
| beforeActiveInstanceBlur(): void {}, | ||
| afterActiveInstanceBlur(): void {}, | ||
| prepareScopeUpdate(): void {}, | ||
| getInstanceFromScope(): null { | ||
| return null; | ||
| } | ||
| }; | ||
| const reconciler = Reconciler(hostConfig); | ||
| export const ForgeReconciler = { | ||
| render: (element: any): void => { | ||
| const rootElement = createElement('Root'); | ||
| const container = reconciler.createContainer( | ||
| rootElement, | ||
| 0, | ||
| null, | ||
| false, | ||
| null, | ||
| 'root', | ||
| (err: any) => { | ||
| // eslint-disable-next-line no-console | ||
| console.log(err); | ||
| }, | ||
| null | ||
| ); | ||
| reconciler.updateContainer(element, container, null, null); | ||
| } | ||
| }; | ||
| export default ForgeReconciler; |
| { | ||
| "extends": "../../tsconfig-base.json", | ||
| "compilerOptions": { | ||
| "outDir": "./out", | ||
| "rootDir": "src", | ||
| "composite": true | ||
| }, | ||
| "references": [] | ||
| } |
+3
-4
| # @forge/react | ||
| ## 0.0.0-experimental-edeb51b | ||
| ## 0.1.0-next.0 | ||
| ### Minor Changes | ||
| ### Patch Changes | ||
| - 456c10c: Add | ||
| - 71d89a06: Add basic ForgeReconciler implementation |
+5
-3
| { | ||
| "name": "@forge/react", | ||
| "version": "0.0.0-experimental-edeb51b", | ||
| "version": "0.1.0-next.0", | ||
| "description": "Forge React reconciler", | ||
@@ -15,7 +15,9 @@ "author": "Atlassian", | ||
| "peerDependencies": { | ||
| "react": "^16.13.1" | ||
| "@forge/ui": "1.3.0" | ||
| }, | ||
| "dependencies": { | ||
| "react-reconciler": "^0.27.0" | ||
| "@types/react-reconciler": "^0.28.0", | ||
| "react-reconciler": "^0.28.0", | ||
| "uuid": "^3.4.0" | ||
| } | ||
| } |
| export * from './reconciler'; |
-14
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
| for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| __exportStar(require("./reconciler"), exports); | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B"} |
| import React from 'react'; | ||
| export declare const render: (component: React.ReactNode) => void; |
| "use strict"; | ||
| var __assign = (this && this.__assign) || function () { | ||
| __assign = Object.assign || function(t) { | ||
| for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
| s = arguments[i]; | ||
| for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||
| t[p] = s[p]; | ||
| } | ||
| return t; | ||
| }; | ||
| return __assign.apply(this, arguments); | ||
| }; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.render = void 0; | ||
| var react_reconciler_1 = __importDefault(require("react-reconciler")); | ||
| var debug = false; | ||
| var assignNextPropsToElement = function (element, props) { | ||
| element.props = props; | ||
| delete element.props.children; | ||
| }; | ||
| var createStringNode = function (text) { | ||
| return { | ||
| type: 'String', | ||
| children: [], | ||
| operators: {}, | ||
| props: { | ||
| text: text | ||
| } | ||
| }; | ||
| }; | ||
| var createElement = function (type, props) { | ||
| if (props === void 0) { props = {}; } | ||
| var element = { | ||
| type: type, | ||
| children: [], | ||
| props: props, | ||
| operators: {} | ||
| }; | ||
| assignNextPropsToElement(element, props); | ||
| var appendChild = function (child) { | ||
| element.children.push(child); | ||
| }; | ||
| var removeChild = function (child) { | ||
| element.children.splice(element.children.indexOf(child), 1); | ||
| }; | ||
| var insertBeforeChild = function (child, beforeChild) { | ||
| element.children.splice(element.children.indexOf(beforeChild), 0, child); | ||
| }; | ||
| Object.assign(element, { | ||
| operators: { | ||
| appendChild: appendChild, | ||
| removeChild: removeChild, | ||
| insertBeforeChild: insertBeforeChild | ||
| } | ||
| }); | ||
| return element; | ||
| }; | ||
| var hostConfig = { | ||
| supportsMutation: true, | ||
| supportsMicrotask: true, | ||
| noTimeout: -1, | ||
| isPrimaryRenderer: false, | ||
| resetAfterCommit: function (containerInfo) { | ||
| // eslint-disable-next-line no-console | ||
| if (debug) | ||
| console.log('in resetAfterCommit'); | ||
| // eslint-disable-next-line no-console | ||
| if (debug) | ||
| console.log({ containerInfo: containerInfo }); | ||
| var newTree = __assign({}, containerInfo); | ||
| var traverse = function (children) { | ||
| return children.map(function (element) { | ||
| return __assign(__assign({}, element), { operators: undefined, children: traverse(element.children) }); | ||
| }); | ||
| }; | ||
| newTree.children = traverse(containerInfo.children); | ||
| self.dispatch(newTree); | ||
| }, | ||
| createInstance: function (type, props) { | ||
| var element = createElement(type, props); | ||
| return element; | ||
| }, | ||
| createTextInstance: function (text) { | ||
| return createStringNode(text); | ||
| }, | ||
| appendInitialChild: function (parentInstance, child) { | ||
| parentInstance.operators.appendChild(child); | ||
| }, | ||
| appendChild: function (parentInstance, child) { | ||
| return parentInstance.operators.appendChild(child); | ||
| }, | ||
| appendChildToContainer: function (container, child) { | ||
| return container.operators.appendChild(child); | ||
| }, | ||
| finalizeInitialChildren: function () { | ||
| return false; | ||
| }, | ||
| prepareUpdate: function (instance, type, oldProps, newProps) { | ||
| return Object.assign(instance.props, newProps); | ||
| }, | ||
| shouldSetTextContent: function () { | ||
| return false; | ||
| }, | ||
| getRootHostContext: function () { | ||
| return null; | ||
| }, | ||
| getChildHostContext: function () { | ||
| return null; | ||
| }, | ||
| getPublicInstance: function () { | ||
| return null; | ||
| }, | ||
| prepareForCommit: function () { | ||
| return null; | ||
| }, | ||
| preparePortalMount: function () { }, | ||
| now: function () { | ||
| // eslint-disable-next-line no-console | ||
| if (debug) | ||
| console.log('in now'); | ||
| return 0; | ||
| }, | ||
| scheduleTimeout: function (fn, delay) { | ||
| return setTimeout(fn, delay); | ||
| }, | ||
| scheduleMicrotask: function (fn) { | ||
| return setTimeout(fn, 0); | ||
| }, | ||
| cancelTimeout: function (id) { | ||
| // eslint-disable-next-line no-console | ||
| if (debug) | ||
| console.log('in cancelTimeout'); | ||
| // eslint-disable-next-line no-console | ||
| if (debug) | ||
| console.log({ id: id }); | ||
| clearTimeout(id); | ||
| }, | ||
| insertBefore: function (parentInstance, child, beforeChild) { | ||
| return parentInstance.operators.insertBeforeChild(child, beforeChild); | ||
| }, | ||
| insertInContainerBefore: function (container, child, beforeChild) { | ||
| return container.operators.insertBeforeChild(child, beforeChild); | ||
| }, | ||
| removeChild: function (parentInstance, child) { | ||
| return parentInstance.operators.removeChild(child); | ||
| }, | ||
| removeChildFromContainer: function (container, child) { | ||
| return container.operators.removeChild(child); | ||
| }, | ||
| resetTextContent: function () { }, | ||
| commitTextUpdate: function (textInstance, oldText, newText) { | ||
| textInstance.props.text = newText; | ||
| }, | ||
| commitMount: function () { }, | ||
| commitUpdate: function () { }, | ||
| hideInstance: function () { }, | ||
| hideTextInstance: function () { }, | ||
| unhideInstance: function () { }, | ||
| unhideTextInstance: function () { }, | ||
| clearContainer: function () { }, | ||
| detachDeletedInstance: function () { } | ||
| }; | ||
| var reconciler = react_reconciler_1.default(hostConfig); | ||
| exports.render = function (component) { | ||
| var container = createElement('View'); | ||
| var root = reconciler.createContainer(container, 0, false, null); | ||
| reconciler.updateContainer(component, root, null); | ||
| }; | ||
| //# sourceMappingURL=reconciler.js.map |
| {"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../src/reconciler.ts"],"names":[],"mappings":"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"} |
| # Forge React Reconciler |
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Explicitly Unlicensed Item
LicenseSomething was found which is explicitly marked as unlicensed.
194
3.74%6171
-47.34%4
100%6
-33.33%1
Infinity%0
-100%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated