@builder.io/sdk-react-native 5.0.0 → 5.1.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/lib/browser/commonjs/constants/sdk-version.js +1 -1
- package/lib/browser/commonjs/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/browser/commonjs/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/browser/module/constants/sdk-version.js +1 -1
- package/lib/browser/module/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/browser/module/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/browser/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/browser/typescript/types/input.d.ts +1 -1
- package/lib/browser/typescript/types/input.d.ts.map +1 -1
- package/lib/edge/commonjs/constants/sdk-version.js +1 -1
- package/lib/edge/commonjs/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/edge/commonjs/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/edge/module/constants/sdk-version.js +1 -1
- package/lib/edge/module/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/edge/module/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/edge/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/edge/typescript/types/input.d.ts +1 -1
- package/lib/edge/typescript/types/input.d.ts.map +1 -1
- package/lib/node/commonjs/constants/sdk-version.js +1 -1
- package/lib/node/commonjs/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/node/commonjs/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/node/module/constants/sdk-version.js +1 -1
- package/lib/node/module/functions/evaluate/node-runtime/node-runtime.js +72 -68
- package/lib/node/module/functions/evaluate/node-runtime/node-runtime.js.map +1 -1
- package/lib/node/typescript/constants/sdk-version.d.ts +1 -1
- package/lib/node/typescript/types/input.d.ts +1 -1
- package/lib/node/typescript/types/input.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/constants/sdk-version.ts +1 -1
- package/src/functions/evaluate/node-runtime/node-runtime.ts +73 -69
- package/src/types/input.ts +1 -1
|
@@ -67,17 +67,23 @@ if (typeof output === 'object' && output !== null) {
|
|
|
67
67
|
`;
|
|
68
68
|
};
|
|
69
69
|
let IVM_INSTANCE = null;
|
|
70
|
-
|
|
70
|
+
// Create fresh isolates per request to prevent memory leaks
|
|
71
|
+
let IVM_OPTIONS = {
|
|
72
|
+
memoryLimit: 128
|
|
73
|
+
};
|
|
71
74
|
|
|
72
75
|
/**
|
|
73
76
|
* Set the `isolated-vm` instance to be used by the node runtime.
|
|
74
77
|
* This is useful for environments that are not able to rely on our
|
|
75
78
|
* `safeDynamicRequire` trick to import the `isolated-vm` package.
|
|
76
79
|
*/
|
|
77
|
-
const setIvm = (ivm, options
|
|
80
|
+
const setIvm = (ivm, options) => {
|
|
78
81
|
if (IVM_INSTANCE) return;
|
|
79
82
|
IVM_INSTANCE = ivm;
|
|
80
|
-
|
|
83
|
+
// Store options to be used per-request in runInNode
|
|
84
|
+
if (options) {
|
|
85
|
+
IVM_OPTIONS = options;
|
|
86
|
+
}
|
|
81
87
|
};
|
|
82
88
|
|
|
83
89
|
// only mention the script for SDKs that have it.
|
|
@@ -101,30 +107,6 @@ const getIvm = () => {
|
|
|
101
107
|
For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
|
|
102
108
|
throw new Error(ERROR_MESSAGE);
|
|
103
109
|
};
|
|
104
|
-
function setIsolateContext(options = {
|
|
105
|
-
memoryLimit: 128
|
|
106
|
-
}) {
|
|
107
|
-
if (IVM_CONTEXT) return IVM_CONTEXT;
|
|
108
|
-
const ivm = getIvm();
|
|
109
|
-
const isolate = new ivm.Isolate(options);
|
|
110
|
-
const context = isolate.createContextSync();
|
|
111
|
-
const jail = context.global;
|
|
112
|
-
|
|
113
|
-
// This makes the global object available in the context as `global`. We use `derefInto()` here
|
|
114
|
-
// because otherwise `global` would actually be a Reference{} object in the new isolate.
|
|
115
|
-
jail.setSync('global', jail.derefInto());
|
|
116
|
-
|
|
117
|
-
// We will create a basic `log` function for the new isolate to use.
|
|
118
|
-
jail.setSync('log', function (...logArgs) {
|
|
119
|
-
console.log(...logArgs);
|
|
120
|
-
});
|
|
121
|
-
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
122
|
-
IVM_CONTEXT = context;
|
|
123
|
-
return context;
|
|
124
|
-
}
|
|
125
|
-
const getIsolateContext = () => {
|
|
126
|
-
return setIsolateContext();
|
|
127
|
-
};
|
|
128
110
|
const runInNode = ({
|
|
129
111
|
code,
|
|
130
112
|
builder,
|
|
@@ -135,49 +117,71 @@ const runInNode = ({
|
|
|
135
117
|
rootState
|
|
136
118
|
}) => {
|
|
137
119
|
const ivm = getIvm();
|
|
138
|
-
const state = (0, _fastClone.fastClone)({
|
|
139
|
-
...rootState,
|
|
140
|
-
...localState
|
|
141
|
-
});
|
|
142
|
-
const args = (0, _helpers.getFunctionArguments)({
|
|
143
|
-
builder,
|
|
144
|
-
context,
|
|
145
|
-
event,
|
|
146
|
-
state
|
|
147
|
-
});
|
|
148
|
-
const isolateContext = getIsolateContext();
|
|
149
|
-
const jail = isolateContext.global;
|
|
150
120
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
*/
|
|
154
|
-
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
155
|
-
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
156
|
-
// like Qwik.
|
|
157
|
-
(0, _set.set)(rootState, key, value);
|
|
158
|
-
// call the `rootSetState` function if it exists
|
|
159
|
-
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
160
|
-
});
|
|
161
|
-
args.forEach(([key, arg]) => {
|
|
162
|
-
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
163
|
-
// workaround: methods with default values for arguments is not being cloned over
|
|
164
|
-
key === 'builder' ? {
|
|
165
|
-
...arg,
|
|
166
|
-
getUserAttributes: () => arg.getUserAttributes()
|
|
167
|
-
} : arg) : null;
|
|
168
|
-
jail.setSync(getSyncValName(key), val);
|
|
169
|
-
});
|
|
170
|
-
const evalStr = processCode({
|
|
171
|
-
code,
|
|
172
|
-
args
|
|
173
|
-
});
|
|
174
|
-
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
121
|
+
// Use stored options from setIvm, or default to { memoryLimit: 128 }
|
|
122
|
+
let isolate;
|
|
175
123
|
try {
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
124
|
+
isolate = new ivm.Isolate(IVM_OPTIONS);
|
|
125
|
+
const isolateContext = isolate.createContextSync();
|
|
126
|
+
const jail = isolateContext.global;
|
|
127
|
+
|
|
128
|
+
// Setup the isolate
|
|
129
|
+
jail.setSync('global', jail.derefInto());
|
|
130
|
+
jail.setSync('log', function (...logArgs) {
|
|
131
|
+
console.log(...logArgs);
|
|
132
|
+
});
|
|
133
|
+
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
134
|
+
const state = (0, _fastClone.fastClone)({
|
|
135
|
+
...rootState,
|
|
136
|
+
...localState
|
|
137
|
+
});
|
|
138
|
+
const args = (0, _helpers.getFunctionArguments)({
|
|
139
|
+
builder,
|
|
140
|
+
context,
|
|
141
|
+
event,
|
|
142
|
+
state
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Propagate state changes back to the reactive root state.
|
|
147
|
+
*/
|
|
148
|
+
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
149
|
+
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
150
|
+
// like Qwik.
|
|
151
|
+
(0, _set.set)(rootState, key, value);
|
|
152
|
+
// call the `rootSetState` function if it exists
|
|
153
|
+
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
154
|
+
});
|
|
155
|
+
args.forEach(([key, arg]) => {
|
|
156
|
+
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
157
|
+
// workaround: methods with default values for arguments is not being cloned over
|
|
158
|
+
key === 'builder' ? {
|
|
159
|
+
...arg,
|
|
160
|
+
getUserAttributes: () => arg.getUserAttributes()
|
|
161
|
+
} : arg) : null;
|
|
162
|
+
jail.setSync(getSyncValName(key), val);
|
|
163
|
+
});
|
|
164
|
+
const evalStr = processCode({
|
|
165
|
+
code,
|
|
166
|
+
args
|
|
167
|
+
});
|
|
168
|
+
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
169
|
+
try {
|
|
170
|
+
// returning objects throw errors in isolated vm, so we stringify it and parse it back
|
|
171
|
+
const res = JSON.parse(resultStr);
|
|
172
|
+
return res;
|
|
173
|
+
} catch (_error) {
|
|
174
|
+
return resultStr;
|
|
175
|
+
}
|
|
176
|
+
} finally {
|
|
177
|
+
// Destroy the entire VM, this frees ALL memory at the C++ level.
|
|
178
|
+
if (isolate) {
|
|
179
|
+
try {
|
|
180
|
+
isolate.dispose();
|
|
181
|
+
} catch (e) {
|
|
182
|
+
// Ignore disposal errors
|
|
183
|
+
}
|
|
184
|
+
}
|
|
181
185
|
}
|
|
182
186
|
};
|
|
183
187
|
exports.runInNode = runInNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_sdkName","require","_logger","_fastClone","_set","_helpers","_safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","
|
|
1
|
+
{"version":3,"names":["_sdkName","require","_logger","_fastClone","_set","_helpers","_safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","IVM_OPTIONS","memoryLimit","setIvm","ivm","options","exports","SHOULD_MENTION_INITIALIZE_SCRIPT","SDK_NAME","getIvm","dynRequiredIvm","safeDynamicRequire","error","logger","ERROR_MESSAGE","MSG_PREFIX","Error","runInNode","builder","context","event","localState","rootSetState","rootState","isolate","Isolate","isolateContext","createContextSync","jail","global","setSync","derefInto","logArgs","console","log","state","fastClone","getFunctionArguments","value","set","forEach","arg","val","Reference","getUserAttributes","evalStr","resultStr","evalClosureSync","res","JSON","parse","_error","dispose","e"],"sourceRoot":"../../../../../../src","sources":["functions/evaluate/node-runtime/node-runtime.ts"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const SDK_VERSION = "5.
|
|
1
|
+
export const SDK_VERSION = "5.1.0";
|
|
2
2
|
//# sourceMappingURL=sdk-version.js.map
|
|
@@ -61,17 +61,23 @@ if (typeof output === 'object' && output !== null) {
|
|
|
61
61
|
`;
|
|
62
62
|
};
|
|
63
63
|
let IVM_INSTANCE = null;
|
|
64
|
-
|
|
64
|
+
// Create fresh isolates per request to prevent memory leaks
|
|
65
|
+
let IVM_OPTIONS = {
|
|
66
|
+
memoryLimit: 128
|
|
67
|
+
};
|
|
65
68
|
|
|
66
69
|
/**
|
|
67
70
|
* Set the `isolated-vm` instance to be used by the node runtime.
|
|
68
71
|
* This is useful for environments that are not able to rely on our
|
|
69
72
|
* `safeDynamicRequire` trick to import the `isolated-vm` package.
|
|
70
73
|
*/
|
|
71
|
-
export const setIvm = (ivm, options
|
|
74
|
+
export const setIvm = (ivm, options) => {
|
|
72
75
|
if (IVM_INSTANCE) return;
|
|
73
76
|
IVM_INSTANCE = ivm;
|
|
74
|
-
|
|
77
|
+
// Store options to be used per-request in runInNode
|
|
78
|
+
if (options) {
|
|
79
|
+
IVM_OPTIONS = options;
|
|
80
|
+
}
|
|
75
81
|
};
|
|
76
82
|
|
|
77
83
|
// only mention the script for SDKs that have it.
|
|
@@ -94,30 +100,6 @@ const getIvm = () => {
|
|
|
94
100
|
For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
|
|
95
101
|
throw new Error(ERROR_MESSAGE);
|
|
96
102
|
};
|
|
97
|
-
function setIsolateContext(options = {
|
|
98
|
-
memoryLimit: 128
|
|
99
|
-
}) {
|
|
100
|
-
if (IVM_CONTEXT) return IVM_CONTEXT;
|
|
101
|
-
const ivm = getIvm();
|
|
102
|
-
const isolate = new ivm.Isolate(options);
|
|
103
|
-
const context = isolate.createContextSync();
|
|
104
|
-
const jail = context.global;
|
|
105
|
-
|
|
106
|
-
// This makes the global object available in the context as `global`. We use `derefInto()` here
|
|
107
|
-
// because otherwise `global` would actually be a Reference{} object in the new isolate.
|
|
108
|
-
jail.setSync('global', jail.derefInto());
|
|
109
|
-
|
|
110
|
-
// We will create a basic `log` function for the new isolate to use.
|
|
111
|
-
jail.setSync('log', function (...logArgs) {
|
|
112
|
-
console.log(...logArgs);
|
|
113
|
-
});
|
|
114
|
-
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
115
|
-
IVM_CONTEXT = context;
|
|
116
|
-
return context;
|
|
117
|
-
}
|
|
118
|
-
const getIsolateContext = () => {
|
|
119
|
-
return setIsolateContext();
|
|
120
|
-
};
|
|
121
103
|
export const runInNode = ({
|
|
122
104
|
code,
|
|
123
105
|
builder,
|
|
@@ -128,49 +110,71 @@ export const runInNode = ({
|
|
|
128
110
|
rootState
|
|
129
111
|
}) => {
|
|
130
112
|
const ivm = getIvm();
|
|
131
|
-
const state = fastClone({
|
|
132
|
-
...rootState,
|
|
133
|
-
...localState
|
|
134
|
-
});
|
|
135
|
-
const args = getFunctionArguments({
|
|
136
|
-
builder,
|
|
137
|
-
context,
|
|
138
|
-
event,
|
|
139
|
-
state
|
|
140
|
-
});
|
|
141
|
-
const isolateContext = getIsolateContext();
|
|
142
|
-
const jail = isolateContext.global;
|
|
143
113
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
*/
|
|
147
|
-
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
148
|
-
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
149
|
-
// like Qwik.
|
|
150
|
-
set(rootState, key, value);
|
|
151
|
-
// call the `rootSetState` function if it exists
|
|
152
|
-
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
153
|
-
});
|
|
154
|
-
args.forEach(([key, arg]) => {
|
|
155
|
-
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
156
|
-
// workaround: methods with default values for arguments is not being cloned over
|
|
157
|
-
key === 'builder' ? {
|
|
158
|
-
...arg,
|
|
159
|
-
getUserAttributes: () => arg.getUserAttributes()
|
|
160
|
-
} : arg) : null;
|
|
161
|
-
jail.setSync(getSyncValName(key), val);
|
|
162
|
-
});
|
|
163
|
-
const evalStr = processCode({
|
|
164
|
-
code,
|
|
165
|
-
args
|
|
166
|
-
});
|
|
167
|
-
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
114
|
+
// Use stored options from setIvm, or default to { memoryLimit: 128 }
|
|
115
|
+
let isolate;
|
|
168
116
|
try {
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
117
|
+
isolate = new ivm.Isolate(IVM_OPTIONS);
|
|
118
|
+
const isolateContext = isolate.createContextSync();
|
|
119
|
+
const jail = isolateContext.global;
|
|
120
|
+
|
|
121
|
+
// Setup the isolate
|
|
122
|
+
jail.setSync('global', jail.derefInto());
|
|
123
|
+
jail.setSync('log', function (...logArgs) {
|
|
124
|
+
console.log(...logArgs);
|
|
125
|
+
});
|
|
126
|
+
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
127
|
+
const state = fastClone({
|
|
128
|
+
...rootState,
|
|
129
|
+
...localState
|
|
130
|
+
});
|
|
131
|
+
const args = getFunctionArguments({
|
|
132
|
+
builder,
|
|
133
|
+
context,
|
|
134
|
+
event,
|
|
135
|
+
state
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Propagate state changes back to the reactive root state.
|
|
140
|
+
*/
|
|
141
|
+
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
142
|
+
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
143
|
+
// like Qwik.
|
|
144
|
+
set(rootState, key, value);
|
|
145
|
+
// call the `rootSetState` function if it exists
|
|
146
|
+
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
147
|
+
});
|
|
148
|
+
args.forEach(([key, arg]) => {
|
|
149
|
+
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
150
|
+
// workaround: methods with default values for arguments is not being cloned over
|
|
151
|
+
key === 'builder' ? {
|
|
152
|
+
...arg,
|
|
153
|
+
getUserAttributes: () => arg.getUserAttributes()
|
|
154
|
+
} : arg) : null;
|
|
155
|
+
jail.setSync(getSyncValName(key), val);
|
|
156
|
+
});
|
|
157
|
+
const evalStr = processCode({
|
|
158
|
+
code,
|
|
159
|
+
args
|
|
160
|
+
});
|
|
161
|
+
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
162
|
+
try {
|
|
163
|
+
// returning objects throw errors in isolated vm, so we stringify it and parse it back
|
|
164
|
+
const res = JSON.parse(resultStr);
|
|
165
|
+
return res;
|
|
166
|
+
} catch (_error) {
|
|
167
|
+
return resultStr;
|
|
168
|
+
}
|
|
169
|
+
} finally {
|
|
170
|
+
// Destroy the entire VM, this frees ALL memory at the C++ level.
|
|
171
|
+
if (isolate) {
|
|
172
|
+
try {
|
|
173
|
+
isolate.dispose();
|
|
174
|
+
} catch (e) {
|
|
175
|
+
// Ignore disposal errors
|
|
176
|
+
}
|
|
177
|
+
}
|
|
174
178
|
}
|
|
175
179
|
};
|
|
176
180
|
//# sourceMappingURL=node-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SDK_NAME","MSG_PREFIX","logger","fastClone","set","getFunctionArguments","safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","
|
|
1
|
+
{"version":3,"names":["SDK_NAME","MSG_PREFIX","logger","fastClone","set","getFunctionArguments","safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","IVM_OPTIONS","memoryLimit","setIvm","ivm","options","SHOULD_MENTION_INITIALIZE_SCRIPT","getIvm","dynRequiredIvm","error","ERROR_MESSAGE","Error","runInNode","builder","context","event","localState","rootSetState","rootState","isolate","Isolate","isolateContext","createContextSync","jail","global","setSync","derefInto","logArgs","console","log","state","value","forEach","arg","val","Reference","getUserAttributes","evalStr","resultStr","evalClosureSync","res","JSON","parse","_error","dispose","e"],"sourceRoot":"../../../../../../src","sources":["functions/evaluate/node-runtime/node-runtime.ts"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "5.
|
|
1
|
+
export declare const SDK_VERSION = "5.1.0";
|
|
2
2
|
//# sourceMappingURL=sdk-version.d.ts.map
|
|
@@ -3,7 +3,7 @@ export interface Input {
|
|
|
3
3
|
name: string;
|
|
4
4
|
/** A friendlier name to show in the UI if the component prop name is not ideal for end users */
|
|
5
5
|
friendlyName?: string;
|
|
6
|
-
/**
|
|
6
|
+
/** A description to show in the UI to give guidance on how to use this input */
|
|
7
7
|
description?: string;
|
|
8
8
|
/** A default value to use */
|
|
9
9
|
defaultValue?: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/types/input.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/types/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,17 +67,23 @@ if (typeof output === 'object' && output !== null) {
|
|
|
67
67
|
`;
|
|
68
68
|
};
|
|
69
69
|
let IVM_INSTANCE = null;
|
|
70
|
-
|
|
70
|
+
// Create fresh isolates per request to prevent memory leaks
|
|
71
|
+
let IVM_OPTIONS = {
|
|
72
|
+
memoryLimit: 128
|
|
73
|
+
};
|
|
71
74
|
|
|
72
75
|
/**
|
|
73
76
|
* Set the `isolated-vm` instance to be used by the node runtime.
|
|
74
77
|
* This is useful for environments that are not able to rely on our
|
|
75
78
|
* `safeDynamicRequire` trick to import the `isolated-vm` package.
|
|
76
79
|
*/
|
|
77
|
-
const setIvm = (ivm, options
|
|
80
|
+
const setIvm = (ivm, options) => {
|
|
78
81
|
if (IVM_INSTANCE) return;
|
|
79
82
|
IVM_INSTANCE = ivm;
|
|
80
|
-
|
|
83
|
+
// Store options to be used per-request in runInNode
|
|
84
|
+
if (options) {
|
|
85
|
+
IVM_OPTIONS = options;
|
|
86
|
+
}
|
|
81
87
|
};
|
|
82
88
|
|
|
83
89
|
// only mention the script for SDKs that have it.
|
|
@@ -101,30 +107,6 @@ const getIvm = () => {
|
|
|
101
107
|
For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
|
|
102
108
|
throw new Error(ERROR_MESSAGE);
|
|
103
109
|
};
|
|
104
|
-
function setIsolateContext(options = {
|
|
105
|
-
memoryLimit: 128
|
|
106
|
-
}) {
|
|
107
|
-
if (IVM_CONTEXT) return IVM_CONTEXT;
|
|
108
|
-
const ivm = getIvm();
|
|
109
|
-
const isolate = new ivm.Isolate(options);
|
|
110
|
-
const context = isolate.createContextSync();
|
|
111
|
-
const jail = context.global;
|
|
112
|
-
|
|
113
|
-
// This makes the global object available in the context as `global`. We use `derefInto()` here
|
|
114
|
-
// because otherwise `global` would actually be a Reference{} object in the new isolate.
|
|
115
|
-
jail.setSync('global', jail.derefInto());
|
|
116
|
-
|
|
117
|
-
// We will create a basic `log` function for the new isolate to use.
|
|
118
|
-
jail.setSync('log', function (...logArgs) {
|
|
119
|
-
console.log(...logArgs);
|
|
120
|
-
});
|
|
121
|
-
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
122
|
-
IVM_CONTEXT = context;
|
|
123
|
-
return context;
|
|
124
|
-
}
|
|
125
|
-
const getIsolateContext = () => {
|
|
126
|
-
return setIsolateContext();
|
|
127
|
-
};
|
|
128
110
|
const runInNode = ({
|
|
129
111
|
code,
|
|
130
112
|
builder,
|
|
@@ -135,49 +117,71 @@ const runInNode = ({
|
|
|
135
117
|
rootState
|
|
136
118
|
}) => {
|
|
137
119
|
const ivm = getIvm();
|
|
138
|
-
const state = (0, _fastClone.fastClone)({
|
|
139
|
-
...rootState,
|
|
140
|
-
...localState
|
|
141
|
-
});
|
|
142
|
-
const args = (0, _helpers.getFunctionArguments)({
|
|
143
|
-
builder,
|
|
144
|
-
context,
|
|
145
|
-
event,
|
|
146
|
-
state
|
|
147
|
-
});
|
|
148
|
-
const isolateContext = getIsolateContext();
|
|
149
|
-
const jail = isolateContext.global;
|
|
150
120
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
*/
|
|
154
|
-
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
155
|
-
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
156
|
-
// like Qwik.
|
|
157
|
-
(0, _set.set)(rootState, key, value);
|
|
158
|
-
// call the `rootSetState` function if it exists
|
|
159
|
-
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
160
|
-
});
|
|
161
|
-
args.forEach(([key, arg]) => {
|
|
162
|
-
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
163
|
-
// workaround: methods with default values for arguments is not being cloned over
|
|
164
|
-
key === 'builder' ? {
|
|
165
|
-
...arg,
|
|
166
|
-
getUserAttributes: () => arg.getUserAttributes()
|
|
167
|
-
} : arg) : null;
|
|
168
|
-
jail.setSync(getSyncValName(key), val);
|
|
169
|
-
});
|
|
170
|
-
const evalStr = processCode({
|
|
171
|
-
code,
|
|
172
|
-
args
|
|
173
|
-
});
|
|
174
|
-
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
121
|
+
// Use stored options from setIvm, or default to { memoryLimit: 128 }
|
|
122
|
+
let isolate;
|
|
175
123
|
try {
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
124
|
+
isolate = new ivm.Isolate(IVM_OPTIONS);
|
|
125
|
+
const isolateContext = isolate.createContextSync();
|
|
126
|
+
const jail = isolateContext.global;
|
|
127
|
+
|
|
128
|
+
// Setup the isolate
|
|
129
|
+
jail.setSync('global', jail.derefInto());
|
|
130
|
+
jail.setSync('log', function (...logArgs) {
|
|
131
|
+
console.log(...logArgs);
|
|
132
|
+
});
|
|
133
|
+
jail.setSync(INJECTED_IVM_GLOBAL, ivm);
|
|
134
|
+
const state = (0, _fastClone.fastClone)({
|
|
135
|
+
...rootState,
|
|
136
|
+
...localState
|
|
137
|
+
});
|
|
138
|
+
const args = (0, _helpers.getFunctionArguments)({
|
|
139
|
+
builder,
|
|
140
|
+
context,
|
|
141
|
+
event,
|
|
142
|
+
state
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Propagate state changes back to the reactive root state.
|
|
147
|
+
*/
|
|
148
|
+
jail.setSync(BUILDER_SET_STATE_NAME, function (key, value) {
|
|
149
|
+
// mutate the `rootState` object itself. Important for cases where we do not have `rootSetState`
|
|
150
|
+
// like Qwik.
|
|
151
|
+
(0, _set.set)(rootState, key, value);
|
|
152
|
+
// call the `rootSetState` function if it exists
|
|
153
|
+
rootSetState === null || rootSetState === void 0 || rootSetState(rootState);
|
|
154
|
+
});
|
|
155
|
+
args.forEach(([key, arg]) => {
|
|
156
|
+
const val = typeof arg === 'object' ? new ivm.Reference(
|
|
157
|
+
// workaround: methods with default values for arguments is not being cloned over
|
|
158
|
+
key === 'builder' ? {
|
|
159
|
+
...arg,
|
|
160
|
+
getUserAttributes: () => arg.getUserAttributes()
|
|
161
|
+
} : arg) : null;
|
|
162
|
+
jail.setSync(getSyncValName(key), val);
|
|
163
|
+
});
|
|
164
|
+
const evalStr = processCode({
|
|
165
|
+
code,
|
|
166
|
+
args
|
|
167
|
+
});
|
|
168
|
+
const resultStr = isolateContext.evalClosureSync(evalStr);
|
|
169
|
+
try {
|
|
170
|
+
// returning objects throw errors in isolated vm, so we stringify it and parse it back
|
|
171
|
+
const res = JSON.parse(resultStr);
|
|
172
|
+
return res;
|
|
173
|
+
} catch (_error) {
|
|
174
|
+
return resultStr;
|
|
175
|
+
}
|
|
176
|
+
} finally {
|
|
177
|
+
// Destroy the entire VM, this frees ALL memory at the C++ level.
|
|
178
|
+
if (isolate) {
|
|
179
|
+
try {
|
|
180
|
+
isolate.dispose();
|
|
181
|
+
} catch (e) {
|
|
182
|
+
// Ignore disposal errors
|
|
183
|
+
}
|
|
184
|
+
}
|
|
181
185
|
}
|
|
182
186
|
};
|
|
183
187
|
exports.runInNode = runInNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_sdkName","require","_logger","_fastClone","_set","_helpers","_safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","
|
|
1
|
+
{"version":3,"names":["_sdkName","require","_logger","_fastClone","_set","_helpers","_safeDynamicRequire","getSyncValName","key","BUILDER_SET_STATE_NAME","INJECTED_IVM_GLOBAL","REF_TO_PROXY_FN","processCode","code","args","fnArgs","map","name","join","IVM_INSTANCE","IVM_OPTIONS","memoryLimit","setIvm","ivm","options","exports","SHOULD_MENTION_INITIALIZE_SCRIPT","SDK_NAME","getIvm","dynRequiredIvm","safeDynamicRequire","error","logger","ERROR_MESSAGE","MSG_PREFIX","Error","runInNode","builder","context","event","localState","rootSetState","rootState","isolate","Isolate","isolateContext","createContextSync","jail","global","setSync","derefInto","logArgs","console","log","state","fastClone","getFunctionArguments","value","set","forEach","arg","val","Reference","getUserAttributes","evalStr","resultStr","evalClosureSync","res","JSON","parse","_error","dispose","e"],"sourceRoot":"../../../../../../src","sources":["functions/evaluate/node-runtime/node-runtime.ts"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AAEA,IAAAI,QAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AACA,MAAMM,cAAc,GAAIC,GAAW,IAAM,QAAOA,GAAI,OAAM;AAC1D,MAAMC,sBAAsB,GAAG,mBAAmB;AAClD,MAAMC,mBAAmB,GAAG,aAAa;;AAEzC;AACA;AACA,MAAMC,eAAe,GAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoDD,mBAAoB;AACxE;AACA,UAAUD,sBAAuB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,MAAMG,WAAW,GAAGA,CAAC;EACnBC,IAAI;EACJC;AAIF,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGD,IAAI,CAACE,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,KAAM,OAAMA,IAAK,iBAAgBV,cAAc,CAACU,IAAI,CAAE,KAAI,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;;EAEnG;EACA,OAAQ;AACV,EAAEP,eAAgB;AAClB,EAAEI,MAAO;AACT;AACA,IAAIF,IAAK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,CAAC;AAED,IAAIM,YAAqC,GAAG,IAAI;AAChD;AACA,IAAIC,WAA2B,GAAG;EAChCC,WAAW,EAAE;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,CAACC,GAAqB,EAAEC,OAAwB,KAAK;EACzE,IAAIL,YAAY,EAAE;EAClBA,YAAY,GAAGI,GAAG;EAClB;EACA,IAAIC,OAAO,EAAE;IACXJ,WAAW,GAAGI,OAAO;EACvB;AACF,CAAC;;AAED;AAAAC,OAAA,CAAAH,MAAA,GAAAA,MAAA;AACA,MAAMI,gCAAgC,GAAGC,iBAAQ,KAAK,8BAA8B,IAAIA,iBAAQ,KAAK,uBAAuB,IAAIA,iBAAQ,KAAK,sBAAsB,IAAIA,iBAAQ,KAAK,qBAAqB;AACzM,MAAMC,MAAM,GAAGA,CAAA,KAAwB;EACrC,IAAI;IACF,IAAIT,YAAY,EAAE,OAAOA,YAAY;IACrC,MAAMU,cAAc,GAAG,IAAAC,sCAAkB,EAAC,aAAa,CAAC;IACxD,IAAID,cAAc,EAAE,OAAOA,cAAc;EAC3C,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdC,cAAM,CAACD,KAAK,CAAC,2BAA2B,EAAEA,KAAK,CAAC;EAClD;EACA,MAAME,aAAa,GAAI,GAAEC,kBAAW;AACtC;AACA;AACA;AACA,MAAMR,gCAAgC,GAAI,uDAAsDC,iBAAS,cAAa,GAAG,EAAG;AAC5H;AACA;AACA,uHAAuH;EACrH,MAAM,IAAIQ,KAAK,CAACF,aAAa,CAAC;AAChC,CAAC;AACM,MAAMG,SAAS,GAAGA,CAAC;EACxBvB,IAAI;EACJwB,OAAO;EACPC,OAAO;EACPC,KAAK;EACLC,UAAU;EACVC,YAAY;EACZC;AACY,CAAC,KAAK;EAClB,MAAMnB,GAAG,GAAGK,MAAM,CAAC,CAAC;;EAEpB;EACA,IAAIe,OAAO;EACX,IAAI;IACFA,OAAO,GAAG,IAAIpB,GAAG,CAACqB,OAAO,CAACxB,WAAW,CAAC;IACtC,MAAMyB,cAAc,GAAGF,OAAO,CAACG,iBAAiB,CAAC,CAAC;IAClD,MAAMC,IAAI,GAAGF,cAAc,CAACG,MAAM;;IAElC;IACAD,IAAI,CAACE,OAAO,CAAC,QAAQ,EAAEF,IAAI,CAACG,SAAS,CAAC,CAAC,CAAC;IACxCH,IAAI,CAACE,OAAO,CAAC,KAAK,EAAE,UAAU,GAAGE,OAAc,EAAE;MAC/CC,OAAO,CAACC,GAAG,CAAC,GAAGF,OAAO,CAAC;IACzB,CAAC,CAAC;IACFJ,IAAI,CAACE,OAAO,CAACvC,mBAAmB,EAAEa,GAAG,CAAC;IACtC,MAAM+B,KAAK,GAAG,IAAAC,oBAAS,EAAC;MACtB,GAAGb,SAAS;MACZ,GAAGF;IACL,CAAC,CAAC;IACF,MAAM1B,IAAI,GAAG,IAAA0C,6BAAoB,EAAC;MAChCnB,OAAO;MACPC,OAAO;MACPC,KAAK;MACLe;IACF,CAAC,CAAC;;IAEF;AACJ;AACA;IACIP,IAAI,CAACE,OAAO,CAACxC,sBAAsB,EAAE,UAAUD,GAAW,EAAEiD,KAAU,EAAE;MACtE;MACA;MACA,IAAAC,QAAG,EAAChB,SAAS,EAAElC,GAAG,EAAEiD,KAAK,CAAC;MAC1B;MACAhB,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAGC,SAAS,CAAC;IAC3B,CAAC,CAAC;IACF5B,IAAI,CAAC6C,OAAO,CAAC,CAAC,CAACnD,GAAG,EAAEoD,GAAG,CAAC,KAAK;MAC3B,MAAMC,GAAG,GAAG,OAAOD,GAAG,KAAK,QAAQ,GAAG,IAAIrC,GAAG,CAACuC,SAAS;MACvD;MACAtD,GAAG,KAAK,SAAS,GAAG;QAClB,GAAGoD,GAAG;QACNG,iBAAiB,EAAEA,CAAA,KAAOH,GAAG,CAAoBG,iBAAiB,CAAC;MACrE,CAAC,GAAGH,GAAG,CAAC,GAAG,IAAI;MACfb,IAAI,CAACE,OAAO,CAAC1C,cAAc,CAACC,GAAG,CAAC,EAAEqD,GAAG,CAAC;IACxC,CAAC,CAAC;IACF,MAAMG,OAAO,GAAGpD,WAAW,CAAC;MAC1BC,IAAI;MACJC;IACF,CAAC,CAAC;IACF,MAAMmD,SAAS,GAAGpB,cAAc,CAACqB,eAAe,CAACF,OAAO,CAAC;IACzD,IAAI;MACF;MACA,MAAMG,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACJ,SAAS,CAAC;MACjC,OAAOE,GAAG;IACZ,CAAC,CAAC,OAAOG,MAAW,EAAE;MACpB,OAAOL,SAAS;IAClB;EACF,CAAC,SAAS;IACR;IACA,IAAItB,OAAO,EAAE;MACX,IAAI;QACFA,OAAO,CAAC4B,OAAO,CAAC,CAAC;MACnB,CAAC,CAAC,OAAOC,CAAC,EAAE;QACV;MAAA;IAEJ;EACF;AACF,CAAC;AAAA/C,OAAA,CAAAW,SAAA,GAAAA,SAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const SDK_VERSION = "5.
|
|
1
|
+
export const SDK_VERSION = "5.1.0";
|
|
2
2
|
//# sourceMappingURL=sdk-version.js.map
|