Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
4f09f1aa
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,发现更多精彩内容 >>
提交
4f09f1aa
编写于
10月 17, 2018
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cache TS source files between runs of generator
上级
238440b7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
79 addition
and
47 deletion
+79
-47
build/lib/compilation.js
build/lib/compilation.js
+3
-1
build/lib/compilation.ts
build/lib/compilation.ts
+4
-1
build/monaco/api.js
build/monaco/api.js
+31
-21
build/monaco/api.ts
build/monaco/api.ts
+41
-24
未找到文件。
build/lib/compilation.js
浏览文件 @
4f09f1aa
...
...
@@ -145,6 +145,7 @@ class MonacoGenerator {
this
.
_inputFiles
.
forEach
(
file
=>
this
.
_inputFileChanged
[
file
]
=
true
);
this
.
_recipeFileChanged
=
true
;
this
.
_dtsFilesContents
=
{};
this
.
_dtsFilesContents2
=
{};
}
dispose
()
{
this
.
_watchers
.
forEach
(
watcher
=>
watcher
.
close
());
...
...
@@ -156,6 +157,7 @@ class MonacoGenerator {
return
;
}
this
.
_dtsFilesContents
[
file
]
=
contents
;
this
.
_dtsFilesContents2
[
file
]
=
ts
.
createSourceFile
(
file
,
contents
,
ts
.
ScriptTarget
.
ES5
);
somethingChanged
=
true
;
};
const
fileMap
=
{};
...
...
@@ -188,7 +190,7 @@ class MonacoGenerator {
// Nothing changed
return
null
;
}
return
monacodts
.
run
(
'
src
'
,
this
.
_dtsFilesContents
);
return
monacodts
.
run
2
(
'
src
'
,
this
.
_dtsFilesContents2
);
}
_log
(
message
,
...
rest
)
{
util2
.
log
(
util2
.
colors
.
cyan
(
'
[monaco.d.ts]
'
),
message
,
...
rest
);
...
...
build/lib/compilation.ts
浏览文件 @
4f09f1aa
...
...
@@ -146,6 +146,7 @@ class MonacoGenerator {
private
_recipeFileChanged
:
boolean
;
private
_dtsFilesContents
:
{
[
filePath
:
string
]:
string
;
};
private
_dtsFilesContents2
:
{
[
filePath
:
string
]:
ts
.
SourceFile
;
};
constructor
(
isWatch
:
boolean
)
{
this
.
_isWatch
=
isWatch
;
...
...
@@ -185,6 +186,7 @@ class MonacoGenerator {
this
.
_inputFiles
.
forEach
(
file
=>
this
.
_inputFileChanged
[
file
]
=
true
);
this
.
_recipeFileChanged
=
true
;
this
.
_dtsFilesContents
=
{};
this
.
_dtsFilesContents2
=
{};
}
public
dispose
():
void
{
...
...
@@ -199,6 +201,7 @@ class MonacoGenerator {
return
;
}
this
.
_dtsFilesContents
[
file
]
=
contents
;
this
.
_dtsFilesContents2
[
file
]
=
ts
.
createSourceFile
(
file
,
contents
,
ts
.
ScriptTarget
.
ES5
);
somethingChanged
=
true
;
};
...
...
@@ -240,7 +243,7 @@ class MonacoGenerator {
return
null
;
}
return
monacodts
.
run
(
'
src
'
,
this
.
_dtsFilesContents
);
return
monacodts
.
run
2
(
'
src
'
,
this
.
_dtsFilesContents2
);
}
private
_log
(
message
:
any
,
...
rest
:
any
[]):
void
{
...
...
build/monaco/api.js
浏览文件 @
4f09f1aa
...
...
@@ -27,20 +27,6 @@ function moduleIdToPath(out, moduleId) {
}
return
path
.
join
(
OUT_ROOT
,
out
,
moduleId
)
+
'
.d.ts
'
;
}
let
SOURCE_FILE_MAP
=
{};
function
getSourceFile
(
out
,
inputFiles
,
moduleId
)
{
if
(
!
SOURCE_FILE_MAP
[
moduleId
])
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
if
(
!
inputFiles
.
hasOwnProperty
(
filePath
))
{
logErr
(
'
CANNOT FIND FILE
'
+
filePath
+
'
. YOU MIGHT NEED TO RESTART gulp
'
);
return
null
;
}
let
fileContents
=
inputFiles
[
filePath
];
let
sourceFile
=
ts
.
createSourceFile
(
filePath
,
fileContents
,
ts
.
ScriptTarget
.
ES5
);
SOURCE_FILE_MAP
[
moduleId
]
=
sourceFile
;
}
return
SOURCE_FILE_MAP
[
moduleId
];
}
function
isDeclaration
(
a
)
{
return
(
a
.
kind
===
ts
.
SyntaxKind
.
InterfaceDeclaration
||
a
.
kind
===
ts
.
SyntaxKind
.
EnumDeclaration
...
...
@@ -222,7 +208,7 @@ function createReplacer(data) {
return
str
;
};
}
function
generateDeclarationFile
(
out
,
inputFiles
,
recipe
)
{
function
generateDeclarationFile
(
recipe
,
sourceFileGetter
)
{
const
endl
=
/
\r\n
/
.
test
(
recipe
)
?
'
\r\n
'
:
'
\n
'
;
let
lines
=
recipe
.
split
(
endl
);
let
result
=
[];
...
...
@@ -241,7 +227,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
if
(
m1
)
{
CURRENT_PROCESSING_RULE
=
line
;
let
moduleId
=
m1
[
1
];
const
sourceFile
=
getSourceFile
(
out
,
inputFiles
,
moduleId
);
const
sourceFile
=
sourceFileGetter
(
moduleId
);
if
(
!
sourceFile
)
{
return
;
}
...
...
@@ -266,7 +252,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
if
(
m2
)
{
CURRENT_PROCESSING_RULE
=
line
;
let
moduleId
=
m2
[
1
];
const
sourceFile
=
getSourceFile
(
out
,
inputFiles
,
moduleId
);
const
sourceFile
=
sourceFileGetter
(
moduleId
);
if
(
!
sourceFile
)
{
return
;
}
...
...
@@ -338,16 +324,15 @@ function getFilesToWatch(out) {
return
getIncludesInRecipe
().
map
((
moduleId
)
=>
moduleIdToPath
(
out
,
moduleId
));
}
exports
.
getFilesToWatch
=
getFilesToWatch
;
function
run
(
out
,
inputFiles
)
{
function
_run
(
sourceFileGetter
)
{
log
(
'
Starting monaco.d.ts generation
'
);
SOURCE_FILE_MAP
=
{};
let
recipe
=
fs
.
readFileSync
(
exports
.
RECIPE_PATH
).
toString
();
let
[
result
,
usageContent
]
=
generateDeclarationFile
(
out
,
inputFiles
,
recipe
);
let
[
result
,
usageContent
]
=
generateDeclarationFile
(
recipe
,
sourceFileGetter
);
let
currentContent
=
fs
.
readFileSync
(
DECLARATION_PATH
).
toString
();
log
(
'
Finished monaco.d.ts generation
'
);
const
one
=
currentContent
.
replace
(
/
\r\n
/gm
,
'
\n
'
);
const
other
=
result
.
replace
(
/
\r\n
/gm
,
'
\n
'
);
const
isTheSame
=
one
===
other
;
const
isTheSame
=
(
one
===
other
)
;
return
{
content
:
result
,
usageContent
:
usageContent
,
...
...
@@ -355,7 +340,32 @@ function run(out, inputFiles) {
isTheSame
};
}
function
run
(
out
,
inputFiles
)
{
let
SOURCE_FILE_MAP
=
{};
const
sourceFileGetter
=
(
moduleId
)
=>
{
if
(
!
SOURCE_FILE_MAP
[
moduleId
])
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
if
(
!
inputFiles
.
hasOwnProperty
(
filePath
))
{
logErr
(
'
CANNOT FIND FILE
'
+
filePath
+
'
. YOU MIGHT NEED TO RESTART gulp
'
);
return
null
;
}
let
fileContents
=
inputFiles
[
filePath
];
let
sourceFile
=
ts
.
createSourceFile
(
filePath
,
fileContents
,
ts
.
ScriptTarget
.
ES5
);
SOURCE_FILE_MAP
[
moduleId
]
=
sourceFile
;
}
return
SOURCE_FILE_MAP
[
moduleId
];
};
return
_run
(
sourceFileGetter
);
}
exports
.
run
=
run
;
function
run2
(
out
,
sourceFileMap
)
{
const
sourceFileGetter
=
(
moduleId
)
=>
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
return
sourceFileMap
[
filePath
];
};
return
_run
(
sourceFileGetter
);
}
exports
.
run2
=
run2
;
function
complainErrors
()
{
logErr
(
'
Not running monaco.d.ts generation due to compile errors
'
);
}
...
...
build/monaco/api.ts
浏览文件 @
4f09f1aa
...
...
@@ -32,24 +32,10 @@ function moduleIdToPath(out: string, moduleId: string): string {
return
path
.
join
(
OUT_ROOT
,
out
,
moduleId
)
+
'
.d.ts
'
;
}
let
SOURCE_FILE_MAP
:
{
[
moduleId
:
string
]:
ts
.
SourceFile
;
}
=
{};
function
getSourceFile
(
out
:
string
,
inputFiles
:
{
[
file
:
string
]:
string
;
},
moduleId
:
string
):
ts
.
SourceFile
|
null
{
if
(
!
SOURCE_FILE_MAP
[
moduleId
])
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
if
(
!
inputFiles
.
hasOwnProperty
(
filePath
))
{
logErr
(
'
CANNOT FIND FILE
'
+
filePath
+
'
. YOU MIGHT NEED TO RESTART gulp
'
);
return
null
;
}
let
fileContents
=
inputFiles
[
filePath
];
let
sourceFile
=
ts
.
createSourceFile
(
filePath
,
fileContents
,
ts
.
ScriptTarget
.
ES5
);
SOURCE_FILE_MAP
[
moduleId
]
=
sourceFile
;
}
return
SOURCE_FILE_MAP
[
moduleId
];
export
interface
ISourceFileMap
{
[
moduleId
:
string
]:
ts
.
SourceFile
;
}
export
type
SourceFileGetter
=
(
moduleId
:
string
)
=>
ts
.
SourceFile
|
null
;
type
TSTopLevelDeclaration
=
ts
.
InterfaceDeclaration
|
ts
.
EnumDeclaration
|
ts
.
ClassDeclaration
|
ts
.
TypeAliasDeclaration
|
ts
.
FunctionDeclaration
|
ts
.
ModuleDeclaration
;
type
TSTopLevelDeclare
=
TSTopLevelDeclaration
|
ts
.
VariableStatement
;
...
...
@@ -266,7 +252,7 @@ function createReplacer(data: string): (str: string) => string {
};
}
function
generateDeclarationFile
(
out
:
string
,
inputFiles
:
{
[
file
:
string
]:
string
;
},
recipe
:
string
):
[
string
,
string
]
{
function
generateDeclarationFile
(
recipe
:
string
,
sourceFileGetter
:
SourceFileGetter
):
[
string
,
string
]
{
const
endl
=
/
\r\n
/
.
test
(
recipe
)
?
'
\r\n
'
:
'
\n
'
;
let
lines
=
recipe
.
split
(
endl
);
...
...
@@ -291,7 +277,7 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
if
(
m1
)
{
CURRENT_PROCESSING_RULE
=
line
;
let
moduleId
=
m1
[
1
];
const
sourceFile
=
getSourceFile
(
out
,
inputFiles
,
moduleId
);
const
sourceFile
=
sourceFileGetter
(
moduleId
);
if
(
!
sourceFile
)
{
return
;
}
...
...
@@ -320,7 +306,7 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
if
(
m2
)
{
CURRENT_PROCESSING_RULE
=
line
;
let
moduleId
=
m2
[
1
];
const
sourceFile
=
getSourceFile
(
out
,
inputFiles
,
moduleId
);
const
sourceFile
=
sourceFileGetter
(
moduleId
);
if
(
!
sourceFile
)
{
return
;
}
...
...
@@ -411,19 +397,18 @@ export interface IMonacoDeclarationResult {
isTheSame
:
boolean
;
}
export
function
run
(
out
:
string
,
inputFiles
:
{
[
file
:
string
]:
string
;
}
):
IMonacoDeclarationResult
{
function
_run
(
sourceFileGetter
:
SourceFileGetter
):
IMonacoDeclarationResult
{
log
(
'
Starting monaco.d.ts generation
'
);
SOURCE_FILE_MAP
=
{};
let
recipe
=
fs
.
readFileSync
(
RECIPE_PATH
).
toString
();
let
[
result
,
usageContent
]
=
generateDeclarationFile
(
out
,
inputFiles
,
recipe
);
let
[
result
,
usageContent
]
=
generateDeclarationFile
(
recipe
,
sourceFileGetter
);
let
currentContent
=
fs
.
readFileSync
(
DECLARATION_PATH
).
toString
();
log
(
'
Finished monaco.d.ts generation
'
);
const
one
=
currentContent
.
replace
(
/
\r\n
/gm
,
'
\n
'
);
const
other
=
result
.
replace
(
/
\r\n
/gm
,
'
\n
'
);
const
isTheSame
=
one
===
other
;
const
isTheSame
=
(
one
===
other
)
;
return
{
content
:
result
,
...
...
@@ -433,6 +418,38 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
};
}
export
function
run
(
out
:
string
,
inputFiles
:
{
[
file
:
string
]:
string
;
}):
IMonacoDeclarationResult
{
let
SOURCE_FILE_MAP
:
{
[
moduleId
:
string
]:
ts
.
SourceFile
;
}
=
{};
const
sourceFileGetter
=
(
moduleId
:
string
):
ts
.
SourceFile
|
null
=>
{
if
(
!
SOURCE_FILE_MAP
[
moduleId
])
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
if
(
!
inputFiles
.
hasOwnProperty
(
filePath
))
{
logErr
(
'
CANNOT FIND FILE
'
+
filePath
+
'
. YOU MIGHT NEED TO RESTART gulp
'
);
return
null
;
}
let
fileContents
=
inputFiles
[
filePath
];
let
sourceFile
=
ts
.
createSourceFile
(
filePath
,
fileContents
,
ts
.
ScriptTarget
.
ES5
);
SOURCE_FILE_MAP
[
moduleId
]
=
sourceFile
;
}
return
SOURCE_FILE_MAP
[
moduleId
];
};
return
_run
(
sourceFileGetter
);
}
export
function
run2
(
out
:
string
,
sourceFileMap
:
ISourceFileMap
):
IMonacoDeclarationResult
{
const
sourceFileGetter
=
(
moduleId
:
string
):
ts
.
SourceFile
|
null
=>
{
let
filePath
=
path
.
normalize
(
moduleIdToPath
(
out
,
moduleId
));
return
sourceFileMap
[
filePath
];
};
return
_run
(
sourceFileGetter
);
}
export
function
complainErrors
()
{
logErr
(
'
Not running monaco.d.ts generation due to compile errors
'
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录