@pulumi/pulumi 3.48.0 → 3.50.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/automation/localWorkspace.d.ts +4 -0
- package/automation/localWorkspace.js +5 -1
- package/automation/localWorkspace.js.map +1 -1
- package/automation/remoteWorkspace.d.ts +4 -0
- package/automation/remoteWorkspace.js +1 -0
- package/automation/remoteWorkspace.js.map +1 -1
- package/output.d.ts +4 -0
- package/output.js +9 -0
- package/output.js.map +1 -1
- package/package.json +1 -1
- package/proto/provider_grpc_pb.js +35 -0
- package/proto/provider_pb.js +358 -0
- package/resource.js +0 -2
- package/resource.js.map +1 -1
- package/runtime/closure/serializeClosure.js +10 -0
- package/runtime/closure/serializeClosure.js.map +1 -1
- package/runtime/closure/v8.js +206 -12
- package/runtime/closure/v8.js.map +1 -1
- package/runtime/closure/v8Hooks.js +0 -11
- package/runtime/closure/v8Hooks.js.map +1 -1
- package/runtime/invoke.d.ts +1 -0
- package/runtime/invoke.js +13 -0
- package/runtime/invoke.js.map +1 -1
- package/runtime/resource.js +57 -8
- package/runtime/resource.js.map +1 -1
- package/runtime/settings.js +13 -0
- package/runtime/settings.js.map +1 -1
- package/tests/automation/remoteWorkspace.spec.js +1 -0
- package/tests/automation/remoteWorkspace.spec.js.map +1 -1
- package/tests/output.spec.js +62 -0
- package/tests/output.spec.js.map +1 -1
- package/tests/runtime/langhost/cases/072.large_alias_lineage_chains/index.js +30 -1
- package/tests/runtime/langhost/run.spec.js +9 -1
- package/tests/runtime/langhost/run.spec.js.map +1 -1
- package/tests/runtime/tsClosureCases.js +8 -4
- package/tests/runtime/tsClosureCases.js.map +1 -1
- package/version.js +1 -1
- package/runtime/closure/v8_v10andLower.d.ts +0 -1
- package/runtime/closure/v8_v10andLower.js +0 -144
- package/runtime/closure/v8_v10andLower.js.map +0 -1
- package/runtime/closure/v8_v11andHigher.d.ts +0 -1
- package/runtime/closure/v8_v11andHigher.js +0 -227
- package/runtime/closure/v8_v11andHigher.js.map +0 -1
package/version.js
CHANGED
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.version = "3.
|
|
16
|
+
exports.version = "3.50.0";
|
|
17
17
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2016-2018, Pulumi Corporation.
|
|
3
|
-
//
|
|
4
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
// you may not use this file except in compliance with the License.
|
|
6
|
-
// You may obtain a copy of the License at
|
|
7
|
-
//
|
|
8
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
//
|
|
10
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
// See the License for the specific language governing permissions and
|
|
14
|
-
// limitations under the License.
|
|
15
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
19
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
20
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
21
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
28
|
-
result["default"] = mod;
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
const semver = __importStar(require("semver"));
|
|
33
|
-
const isNodeAtLeastV10 = semver.gte(process.version, "10.0.0");
|
|
34
|
-
// `GetFunctionScopeDetails` returns a raw JavaScript array. This enum enumerates the objects that
|
|
35
|
-
// are at specific indices of the array. We only care about one of these.
|
|
36
|
-
var V8ScopeDetailsFields;
|
|
37
|
-
(function (V8ScopeDetailsFields) {
|
|
38
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsTypeIndex"] = 0] = "kScopeDetailsTypeIndex";
|
|
39
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsObjectIndex"] = 1] = "kScopeDetailsObjectIndex";
|
|
40
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsNameIndex"] = 2] = "kScopeDetailsNameIndex";
|
|
41
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsStartPositionIndex"] = 3] = "kScopeDetailsStartPositionIndex";
|
|
42
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsEndPositionIndex"] = 4] = "kScopeDetailsEndPositionIndex";
|
|
43
|
-
V8ScopeDetailsFields[V8ScopeDetailsFields["kScopeDetailsFunctionIndex"] = 5] = "kScopeDetailsFunctionIndex";
|
|
44
|
-
})(V8ScopeDetailsFields || (V8ScopeDetailsFields = {}));
|
|
45
|
-
/** @internal */
|
|
46
|
-
function getFunctionLocationAsync(func) {
|
|
47
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
const script = getScript(func);
|
|
49
|
-
const { line, column } = getLineColumn();
|
|
50
|
-
return { file: script ? script.name : "", line, column };
|
|
51
|
-
function getLineColumn() {
|
|
52
|
-
if (script) {
|
|
53
|
-
const pos = getSourcePosition(func);
|
|
54
|
-
try {
|
|
55
|
-
if (isNodeAtLeastV10) {
|
|
56
|
-
return scriptPositionInfo(script, pos);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
return script.locationFromPosition(pos);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
// Be resilient to native functions not being available. In this case, we just return
|
|
64
|
-
// '0,0'. That's not great, but it at least lets us run, and it isn't a terrible
|
|
65
|
-
// experience.
|
|
66
|
-
//
|
|
67
|
-
// Specifically, we only need these locations when we're printing out an error about not
|
|
68
|
-
// being able to serialize something. In that case, we still print out the names of the
|
|
69
|
-
// functions (as well as the call-tree that got us there), *and* we print out the body
|
|
70
|
-
// of the function. With both of these, it is generally not too difficult to find out
|
|
71
|
-
// where the code actually lives.
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return { line: 0, column: 0 };
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
exports.getFunctionLocationAsync = getFunctionLocationAsync;
|
|
79
|
-
function getScript(func) {
|
|
80
|
-
// The use of the Function constructor here and elsewhere in this file is because
|
|
81
|
-
// because V8 intrinsics are not valid JavaScript identifiers; they all begin with '%',
|
|
82
|
-
// which means that the TypeScript compiler issues errors for them.
|
|
83
|
-
const scriptFunc = new Function("func", "return %FunctionGetScript(func);");
|
|
84
|
-
return scriptFunc(func);
|
|
85
|
-
}
|
|
86
|
-
// The second intrinsic is `FunctionGetScriptSourcePosition`, which does about what you'd
|
|
87
|
-
// expect. It returns a `V8SourcePosition`, which can be passed to `V8Script::locationFromPosition`
|
|
88
|
-
// to produce a `V8SourceLocation`.
|
|
89
|
-
const getSourcePosition = new Function("func", "return %FunctionGetScriptSourcePosition(func);");
|
|
90
|
-
function scriptPositionInfo(script, pos) {
|
|
91
|
-
if (isNodeAtLeastV10) {
|
|
92
|
-
const scriptPositionInfoFunc = new Function("script", "pos", "return %ScriptPositionInfo(script, pos, false);");
|
|
93
|
-
return scriptPositionInfoFunc(script, pos);
|
|
94
|
-
}
|
|
95
|
-
// Should not be called if running on Node<10.0.0.
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
/** @internal */
|
|
99
|
-
function lookupCapturedVariableValueAsync(func, freeVariable, throwOnFailure) {
|
|
100
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
// The implementation of this function is now very straightforward since the intrinsics do all of the
|
|
102
|
-
// difficult work.
|
|
103
|
-
const count = getFunctionScopeCount(func);
|
|
104
|
-
for (let i = 0; i < count; i++) {
|
|
105
|
-
const scope = getScopeForFunction(func, i);
|
|
106
|
-
if (freeVariable in scope.scopeObject) {
|
|
107
|
-
return scope.scopeObject[freeVariable];
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (throwOnFailure) {
|
|
111
|
-
throw new Error("Unexpected missing variable in closure environment: " + freeVariable);
|
|
112
|
-
}
|
|
113
|
-
return undefined;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
exports.lookupCapturedVariableValueAsync = lookupCapturedVariableValueAsync;
|
|
117
|
-
// The last two intrinsics are `GetFunctionScopeCount` and `GetFunctionScopeDetails`.
|
|
118
|
-
// The former function returns the number of scopes in a given function's scope chain, while
|
|
119
|
-
// the latter function returns the i'th entry in a function's scope chain, given a function and
|
|
120
|
-
// index i.
|
|
121
|
-
function getFunctionScopeDetails(func, index) {
|
|
122
|
-
const getFunctionScopeDetailsFunc = new Function("func", "index", "return %GetFunctionScopeDetails(func, index);");
|
|
123
|
-
return getFunctionScopeDetailsFunc(func, index);
|
|
124
|
-
}
|
|
125
|
-
function getFunctionScopeCount(func) {
|
|
126
|
-
const getFunctionScopeCountFunc = new Function("func", "return %GetFunctionScopeCount(func);");
|
|
127
|
-
return getFunctionScopeCountFunc(func);
|
|
128
|
-
}
|
|
129
|
-
// getScopeForFunction extracts a V8ScopeDetails for the index'th element in the scope chain for the
|
|
130
|
-
// given function.
|
|
131
|
-
function getScopeForFunction(func, index) {
|
|
132
|
-
const scopeDetails = getFunctionScopeDetails(func, index);
|
|
133
|
-
return {
|
|
134
|
-
scopeObject: scopeDetails[V8ScopeDetailsFields.kScopeDetailsObjectIndex],
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
// All of these functions contain syntax that is not legal TS/JS (i.e. "%Whatever"). As such,
|
|
138
|
-
// we cannot serialize them. In case they somehow get captured, just block them from closure
|
|
139
|
-
// serialization entirely.
|
|
140
|
-
getScript.doNotCapture = true;
|
|
141
|
-
getSourcePosition.doNotCapture = true;
|
|
142
|
-
getFunctionScopeDetails.doNotCapture = true;
|
|
143
|
-
getFunctionScopeCount.doNotCapture = true;
|
|
144
|
-
//# sourceMappingURL=v8_v10andLower.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"v8_v10andLower.js","sourceRoot":"","sources":["../../../runtime/closure/v8_v10andLower.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2016-2018, Pulumi Corporation.
|
|
3
|
-
//
|
|
4
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
// you may not use this file except in compliance with the License.
|
|
6
|
-
// You may obtain a copy of the License at
|
|
7
|
-
//
|
|
8
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
//
|
|
10
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
// See the License for the specific language governing permissions and
|
|
14
|
-
// limitations under the License.
|
|
15
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
18
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
19
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
20
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
21
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
28
|
-
result["default"] = mod;
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
const util = __importStar(require("util"));
|
|
33
|
-
const vm = __importStar(require("vm"));
|
|
34
|
-
const v8Hooks = __importStar(require("./v8Hooks"));
|
|
35
|
-
/** @internal */
|
|
36
|
-
function getFunctionLocationAsync(func) {
|
|
37
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
// First, find the runtime's internal id for this function.
|
|
39
|
-
const functionId = yield getRuntimeIdForFunctionAsync(func);
|
|
40
|
-
// Now, query for the internal properties the runtime sets up for it.
|
|
41
|
-
const { internalProperties } = yield runtimeGetPropertiesAsync(functionId, /*ownProperties:*/ false);
|
|
42
|
-
// There should normally be an internal property called [[FunctionLocation]]:
|
|
43
|
-
// https://chromium.googlesource.com/v8/v8.git/+/3f99afc93c9ba1ba5df19f123b93cc3079893c9b/src/inspector/v8-debugger.cc#793
|
|
44
|
-
const functionLocation = internalProperties.find(p => p.name === "[[FunctionLocation]]");
|
|
45
|
-
if (!functionLocation || !functionLocation.value || !functionLocation.value.value) {
|
|
46
|
-
return { file: "", line: 0, column: 0 };
|
|
47
|
-
}
|
|
48
|
-
const value = functionLocation.value.value;
|
|
49
|
-
// Map from the scriptId the value has to a file-url.
|
|
50
|
-
const file = v8Hooks.getScriptUrl(value.scriptId) || "";
|
|
51
|
-
const line = value.lineNumber || 0;
|
|
52
|
-
const column = value.columnNumber || 0;
|
|
53
|
-
return { file, line, column };
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
exports.getFunctionLocationAsync = getFunctionLocationAsync;
|
|
57
|
-
/** @internal */
|
|
58
|
-
function lookupCapturedVariableValueAsync(func, freeVariable, throwOnFailure) {
|
|
59
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
// First, find the runtime's internal id for this function.
|
|
61
|
-
const functionId = yield getRuntimeIdForFunctionAsync(func);
|
|
62
|
-
// Now, query for the internal properties the runtime sets up for it.
|
|
63
|
-
const { internalProperties } = yield runtimeGetPropertiesAsync(functionId, /*ownProperties:*/ false);
|
|
64
|
-
// There should normally be an internal property called [[Scopes]]:
|
|
65
|
-
// https://chromium.googlesource.com/v8/v8.git/+/3f99afc93c9ba1ba5df19f123b93cc3079893c9b/src/inspector/v8-debugger.cc#820
|
|
66
|
-
const scopes = internalProperties.find(p => p.name === "[[Scopes]]");
|
|
67
|
-
if (!scopes) {
|
|
68
|
-
throw new Error("Could not find [[Scopes]] property");
|
|
69
|
-
}
|
|
70
|
-
if (!scopes.value) {
|
|
71
|
-
throw new Error("[[Scopes]] property did not have [value]");
|
|
72
|
-
}
|
|
73
|
-
if (!scopes.value.objectId) {
|
|
74
|
-
throw new Error("[[Scopes]].value have objectId");
|
|
75
|
-
}
|
|
76
|
-
// This is sneaky, but we can actually map back from the [[Scopes]] object to a real in-memory
|
|
77
|
-
// v8 array-like value. Note: this isn't actually a real array. For example, it cannot be
|
|
78
|
-
// iterated. Nor can any actual methods be called on it. However, we can directly index into
|
|
79
|
-
// it, and we can. Similarly, the 'object' type it optionally points at is not a true JS
|
|
80
|
-
// object. So we can't call things like .hasOwnProperty on it. However, the values pointed to
|
|
81
|
-
// by 'object' are the real in-memory JS objects we are looking for. So we can find and return
|
|
82
|
-
// those successfully to our caller.
|
|
83
|
-
const scopesArray = yield getValueForObjectId(scopes.value.objectId);
|
|
84
|
-
// scopesArray is ordered from innermost to outermost.
|
|
85
|
-
for (let i = 0, n = scopesArray.length; i < n; i++) {
|
|
86
|
-
const scope = scopesArray[i];
|
|
87
|
-
if (scope.object) {
|
|
88
|
-
if (freeVariable in scope.object) {
|
|
89
|
-
const val = scope.object[freeVariable];
|
|
90
|
-
return val;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (throwOnFailure) {
|
|
95
|
-
throw new Error("Unexpected missing variable in closure environment: " + freeVariable);
|
|
96
|
-
}
|
|
97
|
-
return undefined;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
exports.lookupCapturedVariableValueAsync = lookupCapturedVariableValueAsync;
|
|
101
|
-
// Isolated singleton context accessible from the inspector.
|
|
102
|
-
// Used instead of `global` object to support executions with multiple V8 vm contexts as, e.g., done by Jest.
|
|
103
|
-
let inflightContextCache;
|
|
104
|
-
function inflightContext() {
|
|
105
|
-
if (inflightContextCache) {
|
|
106
|
-
return inflightContextCache;
|
|
107
|
-
}
|
|
108
|
-
inflightContextCache = createContext();
|
|
109
|
-
return inflightContextCache;
|
|
110
|
-
}
|
|
111
|
-
function createContext() {
|
|
112
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
-
const context = {
|
|
114
|
-
contextId: 0,
|
|
115
|
-
functions: {},
|
|
116
|
-
currentFunctionId: 0,
|
|
117
|
-
calls: {},
|
|
118
|
-
currentCallId: 0,
|
|
119
|
-
};
|
|
120
|
-
const session = yield v8Hooks.getSessionAsync();
|
|
121
|
-
const post = util.promisify(session.post);
|
|
122
|
-
// Create own context with known context id and functionsContext as `global`
|
|
123
|
-
yield post.call(session, "Runtime.enable");
|
|
124
|
-
const contextIdAsync = new Promise(resolve => {
|
|
125
|
-
session.once("Runtime.executionContextCreated", event => {
|
|
126
|
-
resolve(event.params.context.id);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
vm.createContext(context);
|
|
130
|
-
context.contextId = yield contextIdAsync;
|
|
131
|
-
yield post.call(session, "Runtime.disable");
|
|
132
|
-
return context;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
function getRuntimeIdForFunctionAsync(func) {
|
|
136
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
// In order to get information about an object, we need to put it in a well known location so
|
|
138
|
-
// that we can call Runtime.evaluate and find it. To do this, we use a special map on the
|
|
139
|
-
// 'global' object of a vm context only used for this purpose, and map from a unique-id to that
|
|
140
|
-
// object. We then call Runtime.evaluate with an expression that then points to that unique-id
|
|
141
|
-
// in that global object. The runtime will then find the object and give us back an internal id
|
|
142
|
-
// for it. We can then query for information about the object through that internal id.
|
|
143
|
-
//
|
|
144
|
-
// Note: the reason for the mapping object and the unique-id we create is so that we don't run
|
|
145
|
-
// into any issues when being called asynchronously. We don't want to place the object in a
|
|
146
|
-
// location that might be overwritten by another call while we're asynchronously waiting for our
|
|
147
|
-
// original call to complete.
|
|
148
|
-
const session = yield v8Hooks.getSessionAsync();
|
|
149
|
-
const post = util.promisify(session.post);
|
|
150
|
-
// Place the function in a unique location
|
|
151
|
-
const context = yield inflightContext();
|
|
152
|
-
const currentFunctionName = "id" + context.currentFunctionId++;
|
|
153
|
-
context.functions[currentFunctionName] = func;
|
|
154
|
-
const contextId = context.contextId;
|
|
155
|
-
const expression = `functions.${currentFunctionName}`;
|
|
156
|
-
try {
|
|
157
|
-
const retType = yield post.call(session, "Runtime.evaluate", { contextId, expression });
|
|
158
|
-
if (retType.exceptionDetails) {
|
|
159
|
-
throw new Error(`Error calling "Runtime.evaluate(${expression})" on context ${contextId}: ` + retType.exceptionDetails.text);
|
|
160
|
-
}
|
|
161
|
-
const remoteObject = retType.result;
|
|
162
|
-
if (remoteObject.type !== "function") {
|
|
163
|
-
throw new Error("Remote object was not 'function': " + JSON.stringify(remoteObject));
|
|
164
|
-
}
|
|
165
|
-
if (!remoteObject.objectId) {
|
|
166
|
-
throw new Error("Remote function does not have 'objectId': " + JSON.stringify(remoteObject));
|
|
167
|
-
}
|
|
168
|
-
return remoteObject.objectId;
|
|
169
|
-
}
|
|
170
|
-
finally {
|
|
171
|
-
delete context.functions[currentFunctionName];
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
function runtimeGetPropertiesAsync(objectId, ownProperties) {
|
|
176
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
const session = yield v8Hooks.getSessionAsync();
|
|
178
|
-
const post = util.promisify(session.post);
|
|
179
|
-
// This cast will become unnecessary when we move to TS 3.1.6 or above. In that version they
|
|
180
|
-
// support typesafe '.call' calls.
|
|
181
|
-
const retType = yield post.call(session, "Runtime.getProperties", { objectId, ownProperties });
|
|
182
|
-
if (retType.exceptionDetails) {
|
|
183
|
-
throw new Error(`Error calling "Runtime.getProperties(${objectId}, ${ownProperties})": `
|
|
184
|
-
+ retType.exceptionDetails.text);
|
|
185
|
-
}
|
|
186
|
-
return { internalProperties: retType.internalProperties || [], properties: retType.result };
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
function getValueForObjectId(objectId) {
|
|
190
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
191
|
-
// In order to get the raw JS value for the *remote wrapper* of the [[Scopes]] array, we use
|
|
192
|
-
// Runtime.callFunctionOn on it passing in a fresh function-declaration. The Node runtime will
|
|
193
|
-
// then compile that function, invoking it with the 'real' underlying scopes-array value in
|
|
194
|
-
// memory as the bound 'this' value. Inside that function declaration, we can then access
|
|
195
|
-
// 'this' and assign it to a unique-id in a well known mapping table we have set up. As above,
|
|
196
|
-
// the unique-id is to prevent any issues with multiple in-flight asynchronous calls.
|
|
197
|
-
const session = yield v8Hooks.getSessionAsync();
|
|
198
|
-
const post = util.promisify(session.post);
|
|
199
|
-
const context = yield inflightContext();
|
|
200
|
-
// Get an id for an unused location in the global table.
|
|
201
|
-
const tableId = "id" + context.currentCallId++;
|
|
202
|
-
// Now, ask the runtime to call a fictitious method on the scopes-array object. When it
|
|
203
|
-
// does, it will get the actual underlying value for the scopes array and bind it to the
|
|
204
|
-
// 'this' value inside the function. Inside the function we then just grab 'this' and
|
|
205
|
-
// stash it in our global table. After this completes, we'll then have access to it.
|
|
206
|
-
// This cast will become unnecessary when we move to TS 3.1.6 or above. In that version they
|
|
207
|
-
// support typesafe '.call' calls.
|
|
208
|
-
const retType = yield post.call(session, "Runtime.callFunctionOn", {
|
|
209
|
-
objectId,
|
|
210
|
-
functionDeclaration: `function () {
|
|
211
|
-
calls["${tableId}"] = this;
|
|
212
|
-
}`,
|
|
213
|
-
});
|
|
214
|
-
if (retType.exceptionDetails) {
|
|
215
|
-
throw new Error(`Error calling "Runtime.callFunction(${objectId})": `
|
|
216
|
-
+ retType.exceptionDetails.text);
|
|
217
|
-
}
|
|
218
|
-
if (!context.calls.hasOwnProperty(tableId)) {
|
|
219
|
-
throw new Error(`Value was not stored into table after calling "Runtime.callFunctionOn(${objectId})"`);
|
|
220
|
-
}
|
|
221
|
-
// Extract value and clear our table entry.
|
|
222
|
-
const val = context.calls[tableId];
|
|
223
|
-
delete context.calls[tableId];
|
|
224
|
-
return val;
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
//# sourceMappingURL=v8_v11andHigher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"v8_v11andHigher.js","sourceRoot":"","sources":["../../../runtime/closure/v8_v11andHigher.ts"],"names":[],"mappings":"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"}
|