Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
032ffe6a
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
032ffe6a
编写于
8月 15, 2019
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
better exports trapping
上级
40b5ba9c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
68 addition
and
14 deletion
+68
-14
src/vs/workbench/api/worker/extHostExtensionService.ts
src/vs/workbench/api/worker/extHostExtensionService.ts
+68
-14
未找到文件。
src/vs/workbench/api/worker/extHostExtensionService.ts
浏览文件 @
032ffe6a
...
...
@@ -43,6 +43,69 @@ class ApiInstances {
}
}
class
ExportsTrap
{
static
readonly
Instance
=
new
ExportsTrap
();
private
readonly
_names
:
string
[]
=
[];
private
readonly
_exports
=
new
Map
<
string
,
any
>
();
private
constructor
()
{
const
exportsProxy
=
new
Proxy
({},
{
set
:
(
target
:
any
,
p
:
PropertyKey
,
value
:
any
,
receiver
:
any
)
=>
{
// store in target
target
[
p
]
=
value
;
// store in named-bucket
const
name
=
this
.
_names
[
this
.
_names
.
length
-
1
];
this
.
_exports
.
get
(
name
)
!
[
p
]
=
value
;
return
true
;
}
});
const
moduleProxy
=
new
Proxy
({},
{
get
:
(
target
:
any
,
p
:
PropertyKey
)
=>
{
if
(
p
===
'
exports
'
)
{
return
exportsProxy
;
}
return
target
[
p
];
},
set
:
(
target
:
any
,
p
:
PropertyKey
,
value
:
any
,
receiver
:
any
)
=>
{
// store in target
target
[
p
]
=
value
;
// override bucket
if
(
p
===
'
exports
'
)
{
const
name
=
this
.
_names
[
this
.
_names
.
length
-
1
];
this
.
_exports
.
set
(
name
,
value
);
}
return
true
;
}
});
(
<
any
>
self
).
exports
=
exportsProxy
;
(
<
any
>
self
).
module
=
moduleProxy
;
}
add
(
name
:
string
)
{
this
.
_exports
.
set
(
name
,
Object
.
create
(
null
));
this
.
_names
.
push
(
name
);
return
{
claim
:
()
=>
{
const
result
=
this
.
_exports
.
get
(
name
);
this
.
_exports
.
delete
(
name
);
this
.
_names
.
pop
();
return
result
;
}
};
}
}
export
class
ExtHostExtensionService
extends
AbstractExtHostExtensionService
{
private
_apiInstances
?:
ApiInstances
;
...
...
@@ -57,7 +120,6 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
protected
_loadCommonJSModule
<
T
>
(
module
:
URI
,
activationTimesBuilder
:
ExtensionActivationTimesBuilder
):
Promise
<
T
>
{
interface
FakeCommonJSSelf
{
module
?:
object
;
exports
?:
object
;
...
...
@@ -82,38 +144,30 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
throw
new
Error
(
`Cannot load module '
${
mod
}
'`
);
}
const
moduleExportsTrap
=
{
exports
:
Object
.
create
(
null
)
};
patchSelf
.
module
=
moduleExportsTrap
;
patchSelf
.
exports
=
moduleExportsTrap
.
exports
;
const
next
=
joinPath
(
parent
,
'
..
'
,
ensureSuffix
(
mod
,
'
.js
'
));
moduleStack
.
push
(
next
);
const
trap
=
ExportsTrap
.
Instance
.
add
(
next
.
toString
());
importScripts
(
asDomUri
(
next
).
toString
(
true
));
moduleStack
.
pop
();
return
moduleExportsTrap
.
exports
;
return
trap
.
claim
()
;
};
try
{
activationTimesBuilder
.
codeLoadingStart
();
const
moduleExportsTrap
=
{
exports
:
Object
.
create
(
null
)
};
patchSelf
.
module
=
moduleExportsTrap
;
patchSelf
.
exports
=
moduleExportsTrap
.
exports
;
module
=
module
.
with
({
path
:
ensureSuffix
(
module
.
path
,
'
.js
'
)
});
moduleStack
.
push
(
module
);
const
trap
=
ExportsTrap
.
Instance
.
add
(
module
.
toString
());
importScripts
(
asDomUri
(
module
).
toString
(
true
));
moduleStack
.
pop
();
return
Promise
.
resolve
<
T
>
(
moduleExportsTrap
.
exports
);
return
Promise
.
resolve
<
T
>
(
trap
.
claim
()
);
}
finally
{
activationTimesBuilder
.
codeLoadingStop
();
}
}
async
$setRemoteEnvironment
(
env
:
{
[
key
:
string
]:
string
|
null
}):
Promise
<
void
>
{
async
$setRemoteEnvironment
(
_
env
:
{
[
key
:
string
]:
string
|
null
}):
Promise
<
void
>
{
throw
new
Error
(
'
Not supported
'
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录