Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
089d220b
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
089d220b
编写于
9月 03, 2019
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
debt - wrap things inside functions
上级
0ef42df5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
93 deletion
+19
-93
src/vs/workbench/api/worker/extHostExtensionService.ts
src/vs/workbench/api/worker/extHostExtensionService.ts
+19
-93
未找到文件。
src/vs/workbench/api/worker/extHostExtensionService.ts
浏览文件 @
089d220b
...
...
@@ -6,74 +6,10 @@
import
{
createApiFactoryAndRegisterActors
}
from
'
vs/workbench/api/common/extHost.api.impl
'
;
import
{
ExtensionActivationTimesBuilder
}
from
'
vs/workbench/api/common/extHostExtensionActivator
'
;
import
{
AbstractExtHostExtensionService
}
from
'
vs/workbench/api/common/extHostExtensionService
'
;
import
{
endsWith
,
startsWith
}
from
'
vs/base/common/strings
'
;
import
{
endsWith
}
from
'
vs/base/common/strings
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
joinPath
}
from
'
vs/base/common/resources
'
;
import
{
RequireInterceptor
}
from
'
vs/workbench/api/common/extHostRequireInterceptor
'
;
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
)
=>
{
// 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
)
=>
{
// 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
;
}
};
}
}
class
WorkerRequireInterceptor
extends
RequireInterceptor
{
_installInterceptor
()
{
}
...
...
@@ -105,43 +41,33 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
await
this
.
_fakeModules
.
install
();
}
protected
_loadCommonJSModule
<
T
>
(
module
:
URI
,
activationTimesBuilder
:
ExtensionActivationTimesBuilder
):
Promise
<
T
>
{
protected
async
_loadCommonJSModule
<
T
>
(
module
:
URI
,
activationTimesBuilder
:
ExtensionActivationTimesBuilder
):
Promise
<
T
>
{
(
<
any
>
self
).
window
=
self
;
// <- that's improper but might help extensions that aren't authored correctly
module
=
module
.
with
({
path
:
ensureSuffix
(
module
.
path
,
'
.js
'
)
});
const
response
=
await
fetch
(
module
.
toString
(
true
));
// FAKE require function that only works for the vscode-module
const
moduleStack
:
URI
[]
=
[];
(
<
any
>
self
).
require
=
(
mod
:
string
)
=>
{
const
parent
=
moduleStack
[
moduleStack
.
length
-
1
];
const
result
=
this
.
_fakeModules
.
getModule
(
mod
,
parent
);
if
(
response
.
status
!==
200
)
{
throw
new
Error
(
response
.
statusText
);
}
if
(
result
!==
undefined
)
{
return
result
;
}
// fetch JS sources as text and create a new function around it
const
initFn
=
new
Function
(
'
module
'
,
'
exports
'
,
'
require
'
,
'
window
'
,
await
response
.
text
());
if
(
!
startsWith
(
mod
,
'
.
'
))
{
throw
new
Error
(
`Cannot load module '
${
mod
}
'`
);
// define commonjs globals: `module`, `exports`, and `require`
const
_exports
=
{};
const
_module
=
{
exports
:
_exports
};
const
_require
=
(
request
:
string
)
=>
{
const
result
=
this
.
_fakeModules
.
getModule
(
request
,
module
);
if
(
result
===
undefined
)
{
throw
new
Error
(
`Cannot load module '
${
request
}
'`
);
}
const
next
=
joinPath
(
parent
,
'
..
'
,
ensureSuffix
(
mod
,
'
.js
'
));
moduleStack
.
push
(
next
);
const
trap
=
ExportsTrap
.
Instance
.
add
(
next
.
toString
());
importScripts
(
next
.
toString
(
true
));
moduleStack
.
pop
();
return
trap
.
claim
();
return
result
;
};
try
{
activationTimesBuilder
.
codeLoadingStart
();
module
=
module
.
with
({
path
:
ensureSuffix
(
module
.
path
,
'
.js
'
)
});
moduleStack
.
push
(
module
);
const
trap
=
ExportsTrap
.
Instance
.
add
(
module
.
toString
());
importScripts
(
module
.
toString
(
true
));
moduleStack
.
pop
();
return
Promise
.
resolve
<
T
>
(
trap
.
claim
());
initFn
(
_module
,
_exports
,
_require
,
self
);
return
<
T
>
(
_module
.
exports
!==
_exports
?
_module
.
exports
:
_exports
);
}
finally
{
activationTimesBuilder
.
codeLoadingStop
();
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录