Skip to content

Commit 7e80121

Browse files
committed
feat: add openblocks sdk
1 parent d24980e commit 7e80121

File tree

29 files changed

+229
-117
lines changed

29 files changed

+229
-117
lines changed

client/packages/openblocks-cli/client.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@ declare var REACT_APP_BUILD_ID: string;
3535
declare var REACT_APP_LOG_LEVEL: string;
3636
declare var REACT_APP_IMPORT_MAP: string;
3737
declare var REACT_APP_SERVER_IPS: string;
38+
declare var REACT_APP_BUNDLE_TYPE: "sdk" | "app";

client/packages/openblocks-cli/config/vite.config.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@ buildVars.forEach(({ name, defaultValue }) => {
1111
});
1212

1313
export default defineConfig({
14-
define,
14+
define: {
15+
...define,
16+
__OPENBLOCKS_DEV__: JSON.stringify({}),
17+
},
1518
assetsInclude: ["**/*.md"],
1619
resolve: {
1720
extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"],
18-
alias: {
19-
"__user-dev-comps__": paths.compsIndexJs,
20-
"__user-pkg-json__": paths.appPackageJson,
21-
},
2221
},
2322
build: {
2423
target: "chrome69",

client/packages/openblocks-cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "openblocks-cli",
33
"description": "CLI tool used to start build publish openblocks components",
4-
"version": "0.0.14",
4+
"version": "0.0.15",
55
"bin": "./index.js",
66
"type": "module",
77
"exports": {

client/packages/openblocks-core/lib/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ var blacklist = new Set([
10061006
"MutationObserver",
10071007
]);
10081008
var proxyTargetIdentity = Symbol("proxy_target_identity");
1009-
var globalVarNames = new Set(["window", "globalThis", "self"]);
1009+
var globalVarNames = new Set(["window", "globalThis", "self", "global"]);
10101010
/**
10111011
* return an immutable object.
10121012
* @remarks
@@ -1087,7 +1087,7 @@ function createBlackHole() {
10871087
});
10881088
}
10891089
function createMockWindow() {
1090-
return new Proxy({}, {
1090+
var win = new Proxy({}, {
10911091
has: function () {
10921092
return true;
10931093
},
@@ -1098,6 +1098,9 @@ function createMockWindow() {
10981098
if (p in target) {
10991099
return Reflect.get(target, p);
11001100
}
1101+
if (globalVarNames.has(p)) {
1102+
return win;
1103+
}
11011104
if (typeof p === "string" && blacklist.has(p)) {
11021105
log.log("[Sandbox] access ".concat(String(p), " on mock window, return mock object"));
11031106
return createBlackHole();
@@ -1113,6 +1116,7 @@ function createMockWindow() {
11131116
return ret;
11141117
},
11151118
});
1119+
return win;
11161120
}
11171121
var mockWindow = createMockWindow();
11181122
function clearMockWindow() {

client/packages/openblocks-core/src/eval/utils/evalScript.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ describe("evalScript", () => {
3838
expect(evalScript("a[0]", { a: [] })).toBe(undefined);
3939

4040
expect(evalScript("abc", {})).toBeUndefined();
41+
expect(evalScript("window.window === window", {})).toBe(true);
42+
expect(evalScript("window.window", {})).not.toBe(window);
43+
expect(evalScript("window.global", {})).not.toBe(window);
4144
expect(evalScript("setTimeout in window", {})).toBe(true);
4245
expect(evalScript("WebSocket in window", {})).toBe(true);
4346
expect(evalScript("anything in window", {})).toBe(true);

client/packages/openblocks-core/src/eval/utils/evalScript.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const blacklist = new Set<PropertyKey>([
2121

2222
const proxyTargetIdentity = Symbol("proxy_target_identity");
2323

24-
const globalVarNames = new Set<PropertyKey>(["window", "globalThis", "self"]);
24+
const globalVarNames = new Set<PropertyKey>(["window", "globalThis", "self", "global"]);
2525

2626
/**
2727
* return an immutable object.
@@ -108,7 +108,7 @@ export function createBlackHole(): any {
108108
}
109109

110110
function createMockWindow() {
111-
return new Proxy(
111+
const win: any = new Proxy(
112112
{},
113113
{
114114
has() {
@@ -121,6 +121,9 @@ function createMockWindow() {
121121
if (p in target) {
122122
return Reflect.get(target, p);
123123
}
124+
if (globalVarNames.has(p)) {
125+
return win;
126+
}
124127
if (typeof p === "string" && blacklist.has(p)) {
125128
log.log(`[Sandbox] access ${String(p)} on mock window, return mock object`);
126129
return createBlackHole();
@@ -137,6 +140,7 @@ function createMockWindow() {
137140
},
138141
}
139142
);
143+
return win;
140144
}
141145

142146
let mockWindow: any = createMockWindow();

client/packages/openblocks-design/src/components/Trees.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export const Treediv = styled.div<{ $height?: number }>`
99
display: flex;
1010
flex-direction: column;
1111
gap: 8px;
12-
overflow: hidden;
1312
1413
&::before {
1514
content: "";

client/packages/openblocks-design/src/components/form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export const FormInputItem = (props: FormProps & InputProps) => (
137137
hasFeedback={true}
138138
>
139139
<FormInput
140-
autoFocus={props.autoFocus}
140+
{...props}
141141
autoComplete={"off"}
142142
disabled={props.disabled}
143143
placeholder={props.placeholder}

client/packages/openblocks-dev-utils/buildVars.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ export const buildVars = [
3939
name: "REACT_APP_SERVER_IPS",
4040
defaultValue: "",
4141
},
42+
{
43+
name: "REACT_APP_BUNDLE_TYPE",
44+
defaultValue: "app",
45+
},
4246
];
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React from "react";
2+
3+
export type OutputChangeHandler<O> = (output: O) => void;
4+
5+
export type EventTriggerHandler = (eventName: string) => void;
6+
7+
type Off = () => void;
8+
9+
interface EventHandlerMap<O = any> {
10+
moduleOutputChange: OutputChangeHandler<O>;
11+
moduleEventTriggered: EventTriggerHandler;
12+
}
13+
14+
export interface AppViewInstanceOptions<I = any> {
15+
moduleInputs?: I;
16+
}
17+
18+
export interface OpenblocksAppViewProps<I, O> extends AppViewInstanceOptions<I> {
19+
appId: string;
20+
className?: string;
21+
onModuleOutputChange?: OutputChangeHandler<O>;
22+
onModuleEventTriggered?: EventTriggerHandler;
23+
}
24+
25+
export interface AppViewInstance<I, O> {
26+
on<K extends keyof EventHandlerMap<O>>(event: K, handler?: EventHandlerMap<O>[K]): Off;
27+
setModuleInputs(inputs: I): void;
28+
invokeMethod(methodName: string): void;
29+
}
30+
31+
export declare const OpenblocksAppView: React.ForwardRefExoticComponent<
32+
OpenblocksAppViewProps<unknown, unknown> &
33+
React.RefAttributes<AppViewInstance<unknown, unknown> | undefined>
34+
>;
35+
36+
export declare function bootstrapAppAt<I = any, O = any>(
37+
appId: string,
38+
node: Element | null,
39+
options: AppViewInstanceOptions<I>
40+
): Promise<AppViewInstance<I, O>>;

0 commit comments

Comments
 (0)