🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@forge/react

Package Overview
Dependencies
Maintainers
2
Versions
428
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@forge/react - npm Package Compare versions

Comparing version
0.0.0-experimental-869511d
to
0.0.0-experimental-9489df9
+12
src/globals.d.ts
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": []
}
+21
-2
# @forge/react
## 0.0.0-experimental-869511d
## 0.0.0-experimental-9489df9
### Patch Changes
- 869511d: Add
- @forge/ui@0.0.0-experimental-9489df9
## 1.0.0-next.0
### Patch Changes
- Updated dependencies [0da5775]
- @forge/ui@1.4.0-next.0
## 0.1.0
### Minor Changes
- 71d89a0: Add basic ForgeReconciler implementation
## 0.1.0-next.0
### Minor Changes
- 71d89a06: Add basic ForgeReconciler implementation
+5
-3
{
"name": "@forge/react",
"version": "0.0.0-experimental-869511d",
"version": "0.0.0-experimental-9489df9",
"description": "Forge React reconciler",

@@ -15,7 +15,9 @@ "author": "Atlassian",

"peerDependencies": {
"react": "^16.13.1"
"@forge/ui": "0.0.0-experimental-9489df9"
},
"dependencies": {
"react-reconciler": "^0.27.0"
"@types/react-reconciler": "^0.28.0",
"react-reconciler": "^0.28.0",
"uuid": "^3.4.0"
}
}
export * from './reconciler';
"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