Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
582ced00
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
未验证
提交
582ced00
编写于
4月 23, 2020
作者:
P
Peng Lyu
提交者:
GitHub
4月 23, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #96001 from microsoft/rebornix/integration-test
Notebook integration test and undo/redo
上级
588cbc86
dc6f64a0
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
1214 addition
and
19 deletion
+1214
-19
.vscode/launch.json
.vscode/launch.json
+18
-0
build/lib/extensions.js
build/lib/extensions.js
+1
-0
build/lib/extensions.ts
build/lib/extensions.ts
+1
-0
extensions/vscode-notebook-tests/.vscode/launch.json
extensions/vscode-notebook-tests/.vscode/launch.json
+17
-0
extensions/vscode-notebook-tests/.vscode/tasks.json
extensions/vscode-notebook-tests/.vscode/tasks.json
+11
-0
extensions/vscode-notebook-tests/package.json
extensions/vscode-notebook-tests/package.json
+43
-0
extensions/vscode-notebook-tests/src/index.ts
extensions/vscode-notebook-tests/src/index.ts
+30
-0
extensions/vscode-notebook-tests/src/notebook.test.ts
extensions/vscode-notebook-tests/src/notebook.test.ts
+118
-0
extensions/vscode-notebook-tests/src/notebookTestMain.ts
extensions/vscode-notebook-tests/src/notebookTestMain.ts
+23
-0
extensions/vscode-notebook-tests/src/typings/ref.d.ts
extensions/vscode-notebook-tests/src/typings/ref.d.ts
+9
-0
extensions/vscode-notebook-tests/test/first.ipynb
extensions/vscode-notebook-tests/test/first.ipynb
+4
-0
extensions/vscode-notebook-tests/test/second.ipynb
extensions/vscode-notebook-tests/test/second.ipynb
+4
-0
extensions/vscode-notebook-tests/tsconfig.json
extensions/vscode-notebook-tests/tsconfig.json
+9
-0
extensions/vscode-notebook-tests/yarn.lock
extensions/vscode-notebook-tests/yarn.lock
+793
-0
scripts/test-integration.sh
scripts/test-integration.sh
+2
-0
src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts
...workbench/contrib/notebook/browser/contrib/coreActions.ts
+2
-2
src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts
...rkbench/contrib/notebook/browser/view/notebookCellList.ts
+9
-1
src/vs/workbench/contrib/notebook/browser/viewModel/cellEdit.ts
.../workbench/contrib/notebook/browser/viewModel/cellEdit.ts
+21
-4
src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts
...h/contrib/notebook/browser/viewModel/notebookViewModel.ts
+99
-12
未找到文件。
.vscode/launch.json
浏览文件 @
582ced00
...
...
@@ -159,6 +159,24 @@
"order"
:
5
}
},
{
"type"
:
"extensionHost"
,
"request"
:
"launch"
,
"name"
:
"VS Code Notebook Tests"
,
"runtimeExecutable"
:
"${execPath}"
,
"args"
:
[
"${workspaceFolder}/extensions/vscode-notebook-tests/test"
,
"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-notebook-tests"
,
"--extensionTestsPath=${workspaceFolder}/extensions/vscode-notebook-tests/out"
],
"outFiles"
:
[
"${workspaceFolder}/out/**/*.js"
],
"presentation"
:
{
"group"
:
"6_tests"
,
"order"
:
6
}
},
{
"type"
:
"chrome"
,
"request"
:
"attach"
,
...
...
build/lib/extensions.js
浏览文件 @
582ced00
...
...
@@ -186,6 +186,7 @@ const excludedExtensions = [
'
vscode-test-resolver
'
,
'
ms-vscode.node-debug
'
,
'
ms-vscode.node-debug2
'
,
'
vscode-notebook-tests
'
];
const
builtInExtensions
=
JSON
.
parse
(
fs
.
readFileSync
(
path
.
join
(
__dirname
,
'
../../product.json
'
),
'
utf8
'
)).
builtInExtensions
;
function
packageLocalExtensionsStream
()
{
...
...
build/lib/extensions.ts
浏览文件 @
582ced00
...
...
@@ -220,6 +220,7 @@ const excludedExtensions = [
'
vscode-test-resolver
'
,
'
ms-vscode.node-debug
'
,
'
ms-vscode.node-debug2
'
,
'
vscode-notebook-tests
'
];
interface
IBuiltInExtension
{
...
...
extensions/vscode-notebook-tests/.vscode/launch.json
0 → 100644
浏览文件 @
582ced00
//
A
launch
configuration
that
compiles
the
extension
and
then
opens
it
inside
a
new
window
{
"version"
:
"0.1.0"
,
"configurations"
:
[
{
"name"
:
"Launch Tests"
,
"type"
:
"extensionHost"
,
"request"
:
"launch"
,
"runtimeExecutable"
:
"${execPath}"
,
"args"
:
[
"${workspaceFolder}/../../"
,
"${workspaceFolder}/test"
,
"--extensionDevelopmentPath=${workspaceFolder}"
,
"--extensionTestsPath=${workspaceFolder}/out"
],
"stopOnEntry"
:
false
,
"sourceMaps"
:
true
,
"outDir"
:
"${workspaceFolder}/out"
,
"preLaunchTask"
:
"npm"
}
]
}
\ No newline at end of file
extensions/vscode-notebook-tests/.vscode/tasks.json
0 → 100644
浏览文件 @
582ced00
{
"version"
:
"2.0.0"
,
"command"
:
"npm"
,
"type"
:
"shell"
,
"presentation"
:
{
"reveal"
:
"silent"
},
"args"
:
[
"run"
,
"compile"
],
"isBackground"
:
true
,
"problemMatcher"
:
"$tsc-watch"
}
extensions/vscode-notebook-tests/package.json
0 → 100644
浏览文件 @
582ced00
{
"name"
:
"vscode-notebook-tests"
,
"description"
:
"Notebook tests for VS Code"
,
"version"
:
"0.0.1"
,
"publisher"
:
"vscode"
,
"license"
:
"MIT"
,
"private"
:
true
,
"activationEvents"
:
[
"*"
],
"main"
:
"./out/notebookTestMain"
,
"enableProposedApi"
:
true
,
"engines"
:
{
"vscode"
:
"^1.25.0"
},
"scripts"
:
{
"compile"
:
"node ./node_modules/vscode/bin/compile -watch -p ./"
,
"vscode:prepublish"
:
"node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:vscode-notebook-tests ./tsconfig.json"
},
"dependencies"
:
{},
"devDependencies"
:
{
"typescript"
:
"^3.8.3"
,
"@types/node"
:
"^12.11.7"
,
"mocha-junit-reporter"
:
"^1.17.0"
,
"mocha-multi-reporters"
:
"^1.1.7"
,
"vscode"
:
"~1.1.36"
,
"mocha"
:
"^2.3.3"
},
"contributes"
:
{
"notebookProvider"
:
[
{
"viewType"
:
"notebookTest"
,
"displayName"
:
"Notebook Test"
,
"selector"
:
[
{
"filenamePattern"
:
"*.ipynb"
,
"excludeFileNamePattern"
:
"*.test.ipynb"
}
]
}
]
}
}
extensions/vscode-notebook-tests/src/index.ts
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const
path
=
require
(
'
path
'
);
const
testRunner
=
require
(
'
vscode/lib/testrunner
'
);
const
suite
=
'
Integration Notebook Tests
'
;
const
options
:
any
=
{
ui
:
'
tdd
'
,
useColors
:
(
!
process
.
env
.
BUILD_ARTIFACTSTAGINGDIRECTORY
&&
process
.
platform
!==
'
win32
'
),
timeout
:
60000
};
if
(
process
.
env
.
BUILD_ARTIFACTSTAGINGDIRECTORY
)
{
options
.
reporter
=
'
mocha-multi-reporters
'
;
options
.
reporterOptions
=
{
reporterEnabled
:
'
spec, mocha-junit-reporter
'
,
mochaJunitReporterReporterOptions
:
{
testsuitesTitle
:
`
${
suite
}
${
process
.
platform
}
`
,
mochaFile
:
path
.
join
(
process
.
env
.
BUILD_ARTIFACTSTAGINGDIRECTORY
,
`test-results/
${
process
.
platform
}
-
${
suite
.
toLowerCase
().
replace
(
/
[^\w]
/g
,
'
-
'
)}
-results.xml`
)
}
};
}
testRunner
.
configure
(
options
);
export
=
testRunner
;
extensions/vscode-notebook-tests/src/notebook.test.ts
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
'
mocha
'
;
import
*
as
assert
from
'
assert
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
join
}
from
'
path
'
;
function
waitFor
(
ms
:
number
):
Promise
<
void
>
{
let
resolveFunc
:
()
=>
void
;
const
promise
=
new
Promise
<
void
>
(
resolve
=>
{
resolveFunc
=
resolve
;
});
setTimeout
(()
=>
{
resolveFunc
!
();
},
ms
);
return
promise
;
}
suite
(
'
notebook workflow
'
,
()
=>
{
test
(
'
notebook open
'
,
async
function
()
{
const
resource
=
vscode
.
Uri
.
parse
(
join
(
vscode
.
workspace
.
rootPath
||
''
,
'
./first.ipynb
'
));
await
vscode
.
commands
.
executeCommand
(
'
vscode.openWith
'
,
resource
,
'
notebookTest
'
);
await
waitFor
(
500
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!==
undefined
,
true
,
'
notebook first
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
source
,
'
test
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
language
,
'
typescript
'
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.code.insertCellBelow
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
source
,
''
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.code.insertCellAbove
'
);
const
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
notEqual
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
,
undefined
);
assert
.
equal
(
activeCell
!
.
source
,
''
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
length
,
3
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
1
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.files.save
'
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.closeActiveEditor
'
);
});
test
(
'
notebook cell actions
'
,
async
function
()
{
const
resource
=
vscode
.
Uri
.
parse
(
join
(
vscode
.
workspace
.
rootPath
||
''
,
'
./second.ipynb
'
));
await
vscode
.
commands
.
executeCommand
(
'
vscode.openWith
'
,
resource
,
'
notebookTest
'
);
await
waitFor
(
500
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!==
undefined
,
true
,
'
notebook first
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
source
,
'
test
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
language
,
'
typescript
'
);
// ---- insert cell below and focus ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.code.insertCellBelow
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
?.
source
,
''
);
// ---- insert cell above and focus ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.code.insertCellAbove
'
);
let
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
notEqual
(
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
,
undefined
);
assert
.
equal
(
activeCell
!
.
source
,
''
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
length
,
3
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
1
);
// ---- focus bottom ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.notebook.focusBottom
'
);
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
2
);
// ---- focus top and then copy down ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.notebook.focusTop
'
);
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
0
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.cell.copyDown
'
);
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
1
);
assert
.
equal
(
activeCell
?.
source
,
'
test
'
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.cell.delete
'
);
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
1
);
assert
.
equal
(
activeCell
?.
source
,
''
);
// ---- focus top and then copy up ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.notebook.focusTop
'
);
await
vscode
.
commands
.
executeCommand
(
'
workbench.notebook.cell.copyUp
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
length
,
4
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
[
0
].
source
,
'
test
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
[
1
].
source
,
'
test
'
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
[
2
].
source
,
''
);
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
[
3
].
source
,
''
);
activeCell
=
vscode
.
notebook
.
activeNotebookEditor
!
.
selection
;
assert
.
equal
(
vscode
.
notebook
.
activeNotebookEditor
!
.
document
.
cells
.
indexOf
(
activeCell
!
),
0
);
// ---- move up and down ---- //
// await vscode.commands.executeCommand('workbench.notebook.cell.moveDown');
// await vscode.commands.executeCommand('workbench.notebook.cell.moveDown');
// activeCell = vscode.notebook.activeNotebookEditor!.selection;
// assert.equal(vscode.notebook.activeNotebookEditor!.document.cells.indexOf(activeCell!), 2);
// assert.equal(vscode.notebook.activeNotebookEditor!.document.cells[0].source, 'test');
// assert.equal(vscode.notebook.activeNotebookEditor!.document.cells[1].source, '');
// assert.equal(vscode.notebook.activeNotebookEditor!.document.cells[2].source, 'test');
// assert.equal(vscode.notebook.activeNotebookEditor!.document.cells[3].source, '');
// ---- ---- //
await
vscode
.
commands
.
executeCommand
(
'
workbench.action.closeActiveEditor
'
);
});
});
extensions/vscode-notebook-tests/src/notebookTestMain.ts
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
*
as
vscode
from
'
vscode
'
;
export
function
activate
(
context
:
vscode
.
ExtensionContext
):
any
{
context
.
subscriptions
.
push
(
vscode
.
notebook
.
registerNotebookProvider
(
'
notebookTest
'
,
{
resolveNotebook
:
async
(
editor
:
vscode
.
NotebookEditor
)
=>
{
await
editor
.
edit
(
eb
=>
{
eb
.
insert
(
0
,
'
test
'
,
'
typescript
'
,
vscode
.
CellKind
.
Code
,
[],
{});
});
return
;
},
executeCell
:
async
(
_document
:
vscode
.
NotebookDocument
,
_cell
:
vscode
.
NotebookCell
|
undefined
,
_token
:
vscode
.
CancellationToken
)
=>
{
return
;
},
save
:
async
(
_document
:
vscode
.
NotebookDocument
)
=>
{
return
true
;
}
}));
}
extensions/vscode-notebook-tests/src/typings/ref.d.ts
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
/// <reference path="../../../../src/vs/vscode.d.ts" />
/// <reference path="../../../../src/vs/vscode.proposed.d.ts" />
/// <reference types='@types/node'/>
extensions/vscode-notebook-tests/test/first.ipynb
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
extensions/vscode-notebook-tests/test/second.ipynb
0 → 100644
浏览文件 @
582ced00
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
extensions/vscode-notebook-tests/tsconfig.json
0 → 100644
浏览文件 @
582ced00
{
"extends"
:
"../shared.tsconfig.json"
,
"compilerOptions"
:
{
"outDir"
:
"./out"
},
"include"
:
[
"src/**/*"
]
}
\ No newline at end of file
extensions/vscode-notebook-tests/yarn.lock
0 → 100644
浏览文件 @
582ced00
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@types/node@^12.11.7":
version "12.12.37"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.37.tgz#cb4782d847f801fa58316da5b4801ca3a59ae790"
integrity sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==
agent-base@4, agent-base@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
dependencies:
es6-promisify "^5.0.0"
ajv@^6.5.5:
version "6.12.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
browser-stdout@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
charenc@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
commander@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06"
integrity sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=
commander@2.15.1:
version "2.15.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
commander@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
core-util-is@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
crypt@~0.0.1:
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
debug@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
dependencies:
ms "0.7.1"
debug@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
debug@^2.2.0:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
debug@^3.1.0:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
dependencies:
ms "^2.1.1"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
diff@1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8=
diff@3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
es6-promise@^4.0.3:
version "4.2.8"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
dependencies:
es6-promise "^4.0.3"
escape-string-regexp@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
integrity sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=
escape-string-regexp@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.6"
mime-types "^2.1.12"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
glob@3.2.11:
version "3.2.11"
resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
integrity sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=
dependencies:
inherits "2"
minimatch "0.3"
glob@7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.2:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
growl@1.10.5:
version "1.10.5"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
growl@1.9.2:
version "1.9.2"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
dependencies:
ajv "^6.5.5"
har-schema "^2.0.0"
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
he@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
http-proxy-agent@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
dependencies:
agent-base "4"
debug "3.1.0"
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
assert-plus "^1.0.0"
jsprim "^1.2.2"
sshpk "^1.7.0"
https-proxy-agent@^2.2.1:
version "2.2.4"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
dependencies:
agent-base "^4.3.0"
debug "^3.1.0"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
is-buffer@~1.1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
jade@0.26.3:
version "0.26.3"
resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c"
integrity sha1-jxDXl32NefL2/4YqgbBRPMslaGw=
dependencies:
commander "0.6.1"
mkdirp "0.3.0"
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
dependencies:
assert-plus "1.0.0"
extsprintf "1.3.0"
json-schema "0.2.3"
verror "1.10.0"
lodash@^4.16.4:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
lru-cache@2:
version "2.7.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=
md5@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
dependencies:
charenc "~0.0.1"
crypt "~0.0.1"
is-buffer "~1.1.1"
mime-db@1.43.0:
version "1.43.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
mime-types@^2.1.12, mime-types@~2.1.19:
version "2.1.26"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
dependencies:
mime-db "1.43.0"
minimatch@0.3:
version "0.3.0"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
integrity sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=
dependencies:
lru-cache "2"
sigmund "~1.0.0"
minimatch@3.0.4, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mkdirp@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=
mkdirp@0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
dependencies:
minimist "0.0.8"
mkdirp@~0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
mocha-junit-reporter@^1.17.0:
version "1.23.3"
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz#941e219dd759ed732f8641e165918aa8b167c981"
integrity sha512-ed8LqbRj1RxZfjt/oC9t12sfrWsjZ3gNnbhV1nuj9R/Jb5/P3Xb4duv2eCfCDMYH+fEu0mqca7m4wsiVjsxsvA==
dependencies:
debug "^2.2.0"
md5 "^2.1.0"
mkdirp "~0.5.1"
strip-ansi "^4.0.0"
xml "^1.0.0"
mocha-multi-reporters@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz#cc7f3f4d32f478520941d852abb64d9988587d82"
integrity sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI=
dependencies:
debug "^3.1.0"
lodash "^4.16.4"
mocha@^2.3.3:
version "2.5.3"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58"
integrity sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=
dependencies:
commander "2.3.0"
debug "2.2.0"
diff "1.4.0"
escape-string-regexp "1.0.2"
glob "3.2.11"
growl "1.9.2"
jade "0.26.3"
mkdirp "0.5.1"
supports-color "1.2.0"
to-iso-string "0.0.2"
mocha@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
dependencies:
browser-stdout "1.3.1"
commander "2.15.1"
debug "3.1.0"
diff "3.5.0"
escape-string-regexp "1.0.5"
glob "7.1.2"
growl "1.10.5"
he "1.1.1"
minimatch "3.0.4"
mkdirp "0.5.1"
supports-color "5.4.0"
ms@0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
psl@^1.1.28:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
querystringify@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
request@^2.88.0:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
caseless "~0.12.0"
combined-stream "~1.0.6"
extend "~3.0.2"
forever-agent "~0.6.1"
form-data "~2.3.2"
har-validator "~5.1.3"
http-signature "~1.2.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.19"
oauth-sign "~0.9.0"
performance-now "^2.1.0"
qs "~6.5.2"
safe-buffer "^5.1.2"
tough-cookie "~2.5.0"
tunnel-agent "^0.6.0"
uuid "^3.3.2"
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
semver@^5.4.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
sigmund@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
source-map-support@^0.5.0:
version "0.5.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.18.tgz#f5f33489e270bd7f7d7e7b8debf283f3a4066960"
integrity sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map@^0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sshpk@^1.7.0:
version "1.16.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
bcrypt-pbkdf "^1.0.0"
dashdash "^1.12.0"
ecc-jsbn "~0.1.1"
getpass "^0.1.1"
jsbn "~0.1.0"
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
dependencies:
ansi-regex "^3.0.0"
supports-color@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
integrity sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=
supports-color@5.4.0:
version "5.4.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
dependencies:
has-flag "^3.0.0"
to-iso-string@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1"
integrity sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=
tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
dependencies:
psl "^1.1.28"
punycode "^2.1.1"
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
typescript@^3.8.3:
version "3.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
uri-js@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
dependencies:
punycode "^2.1.0"
url-parse@^1.4.4:
version "1.4.7"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
dependencies:
querystringify "^2.1.1"
requires-port "^1.0.0"
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
extsprintf "^1.2.0"
vscode-test@^0.4.1:
version "0.4.3"
resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-0.4.3.tgz#461ebf25fc4bc93d77d982aed556658a2e2b90b8"
integrity sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==
dependencies:
http-proxy-agent "^2.1.0"
https-proxy-agent "^2.2.1"
vscode@~1.1.36:
version "1.1.36"
resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.36.tgz#5e1a0d1bf4977d0c7bc5159a9a13d5b104d4b1b6"
integrity sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==
dependencies:
glob "^7.1.2"
mocha "^5.2.0"
request "^2.88.0"
semver "^5.4.1"
source-map-support "^0.5.0"
url-parse "^1.4.4"
vscode-test "^0.4.1"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
xml@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=
scripts/test-integration.sh
浏览文件 @
582ced00
...
...
@@ -25,6 +25,7 @@ else
# and the build bundles extensions into .build webpacked
yarn gulp compile-extension:vscode-api-tests
\
compile-extension:vscode-colorize-tests
\
compile-extension:vscode-notebook-tests
\
compile-extension:markdown-language-features
\
compile-extension:emmet
\
compile-extension:css-language-features-server
\
...
...
@@ -44,6 +45,7 @@ fi
./scripts/test.sh
--runGlob
**
/
*
.integrationTest.js
"
$@
"
# Tests in the extension host
"
$INTEGRATION_TEST_ELECTRON_PATH
"
$LINUX_NO_SANDBOX
$ROOT
/extensions/vscode-notebook-tests/test
--enable-proposed-api
=
vscode.vscode-notebook-tests
--extensionDevelopmentPath
=
$ROOT
/extensions/vscode-notebook-tests
--extensionTestsPath
=
$ROOT
/extensions/vscode-notebook-tests/out/
--disable-telemetry
--disable-crash-reporter
--disable-updates
--disable-extensions
--skip-getting-started
--user-data-dir
=
$VSCODEUSERDATADIR
"
$INTEGRATION_TEST_ELECTRON_PATH
"
$LINUX_NO_SANDBOX
$ROOT
/extensions/vscode-api-tests/testWorkspace
--enable-proposed-api
=
vscode.vscode-api-tests
--extensionDevelopmentPath
=
$ROOT
/extensions/vscode-api-tests
--extensionTestsPath
=
$ROOT
/extensions/vscode-api-tests/out/singlefolder-tests
--disable-telemetry
--disable-crash-reporter
--disable-updates
--disable-extensions
--skip-getting-started
--user-data-dir
=
$VSCODEUSERDATADIR
"
$INTEGRATION_TEST_ELECTRON_PATH
"
$LINUX_NO_SANDBOX
$ROOT
/extensions/vscode-api-tests/testworkspace.code-workspace
--enable-proposed-api
=
vscode.vscode-api-tests
--extensionDevelopmentPath
=
$ROOT
/extensions/vscode-api-tests
--extensionTestsPath
=
$ROOT
/extensions/vscode-api-tests/out/workspace-tests
--disable-telemetry
--disable-crash-reporter
--disable-updates
--disable-extensions
--skip-getting-started
--user-data-dir
=
$VSCODEUSERDATADIR
"
$INTEGRATION_TEST_ELECTRON_PATH
"
$LINUX_NO_SANDBOX
$ROOT
/extensions/vscode-colorize-tests/test
--extensionDevelopmentPath
=
$ROOT
/extensions/vscode-colorize-tests
--extensionTestsPath
=
$ROOT
/extensions/vscode-colorize-tests/out
--disable-telemetry
--disable-crash-reporter
--disable-updates
--disable-extensions
--skip-getting-started
--user-data-dir
=
$VSCODEUSERDATADIR
...
...
src/vs/workbench/contrib/notebook/browser/contrib/coreActions.ts
浏览文件 @
582ced00
...
...
@@ -687,8 +687,8 @@ registerAction2(class extends Action2 {
async
function
moveCell
(
context
:
INotebookCellActionContext
,
direction
:
'
up
'
|
'
down
'
):
Promise
<
void
>
{
const
result
=
direction
===
'
up
'
?
context
.
notebookEditor
.
moveCellUp
(
context
.
cell
)
:
context
.
notebookEditor
.
moveCellDown
(
context
.
cell
);
await
context
.
notebookEditor
.
moveCellUp
(
context
.
cell
)
:
await
context
.
notebookEditor
.
moveCellDown
(
context
.
cell
);
if
(
result
)
{
// move cell command only works when the cell container has focus
...
...
src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts
浏览文件 @
582ced00
...
...
@@ -193,6 +193,14 @@ export class NotebookCellList extends WorkbenchList<CellViewModel> implements ID
}
}));
this
.
_viewModelStore
.
add
(
model
.
onDidChangeSelection
(()
=>
{
// convert model selections to view selections
const
viewSelections
=
model
.
selectionHandles
.
map
(
handle
=>
{
return
model
.
getCellByHandle
(
handle
);
}).
filter
(
cell
=>
!!
cell
).
map
(
cell
=>
this
.
_getViewIndexUpperBound
(
cell
!
));
this
.
setFocus
(
viewSelections
);
}));
const
hiddenRanges
=
model
.
getHiddenRanges
();
this
.
setHiddenAreas
(
hiddenRanges
,
false
);
const
newRanges
=
reduceCellRanges
(
hiddenRanges
);
...
...
@@ -356,7 +364,7 @@ export class NotebookCellList extends WorkbenchList<CellViewModel> implements ID
setFocus
(
indexes
:
number
[],
browserEvent
?:
UIEvent
):
void
{
if
(
this
.
_viewModel
)
{
this
.
_viewModel
.
selections
=
indexes
.
map
(
index
=>
this
.
element
(
index
)).
map
(
cell
=>
cell
.
handle
);
this
.
_viewModel
.
selection
Handle
s
=
indexes
.
map
(
index
=>
this
.
element
(
index
)).
map
(
cell
=>
cell
.
handle
);
}
super
.
setFocus
(
indexes
,
browserEvent
);
...
...
src/vs/workbench/contrib/notebook/browser/viewModel/cellEdit.ts
浏览文件 @
582ced00
...
...
@@ -17,6 +17,7 @@ export interface ICellEditingDelegate {
deleteCell
?(
index
:
number
):
void
;
moveCell
?(
fromIndex
:
number
,
toIndex
:
number
):
void
;
createCellViewModel
?(
cell
:
ICell
):
BaseCellViewModel
;
setSelections
(
selections
:
number
[]):
void
;
}
export
class
InsertCellEdit
implements
IResourceUndoRedoElement
{
...
...
@@ -26,7 +27,9 @@ export class InsertCellEdit implements IResourceUndoRedoElement {
public
resource
:
URI
,
private
insertIndex
:
number
,
private
cell
:
BaseCellViewModel
,
private
editingDelegate
:
ICellEditingDelegate
private
editingDelegate
:
ICellEditingDelegate
,
private
beforedSelections
:
number
[],
private
endSelections
:
number
[]
)
{
}
...
...
@@ -36,6 +39,7 @@ export class InsertCellEdit implements IResourceUndoRedoElement {
}
this
.
editingDelegate
.
deleteCell
(
this
.
insertIndex
);
this
.
editingDelegate
.
setSelections
(
this
.
beforedSelections
);
}
redo
():
void
|
Promise
<
void
>
{
if
(
!
this
.
editingDelegate
.
insertCell
)
{
...
...
@@ -43,6 +47,7 @@ export class InsertCellEdit implements IResourceUndoRedoElement {
}
this
.
editingDelegate
.
insertCell
(
this
.
insertIndex
,
this
.
cell
);
this
.
editingDelegate
.
setSelections
(
this
.
endSelections
);
}
}
...
...
@@ -55,7 +60,9 @@ export class DeleteCellEdit implements IResourceUndoRedoElement {
public
resource
:
URI
,
private
insertIndex
:
number
,
cell
:
BaseCellViewModel
,
private
editingDelegate
:
ICellEditingDelegate
private
editingDelegate
:
ICellEditingDelegate
,
private
beforedSelections
:
number
[],
private
endSelections
:
number
[]
)
{
this
.
_rawCell
=
cell
.
model
;
...
...
@@ -70,6 +77,7 @@ export class DeleteCellEdit implements IResourceUndoRedoElement {
const
cell
=
this
.
editingDelegate
.
createCellViewModel
(
this
.
_rawCell
);
this
.
editingDelegate
.
insertCell
(
this
.
insertIndex
,
cell
);
this
.
editingDelegate
.
setSelections
(
this
.
beforedSelections
);
}
redo
():
void
|
Promise
<
void
>
{
...
...
@@ -78,6 +86,7 @@ export class DeleteCellEdit implements IResourceUndoRedoElement {
}
this
.
editingDelegate
.
deleteCell
(
this
.
insertIndex
);
this
.
editingDelegate
.
setSelections
(
this
.
endSelections
);
}
}
...
...
@@ -89,7 +98,9 @@ export class MoveCellEdit implements IResourceUndoRedoElement {
public
resource
:
URI
,
private
fromIndex
:
number
,
private
toIndex
:
number
,
private
editingDelegate
:
ICellEditingDelegate
private
editingDelegate
:
ICellEditingDelegate
,
private
beforedSelections
:
number
[],
private
endSelections
:
number
[]
)
{
}
...
...
@@ -99,6 +110,7 @@ export class MoveCellEdit implements IResourceUndoRedoElement {
}
this
.
editingDelegate
.
moveCell
(
this
.
toIndex
,
this
.
fromIndex
);
this
.
editingDelegate
.
setSelections
(
this
.
beforedSelections
);
}
redo
():
void
|
Promise
<
void
>
{
...
...
@@ -107,6 +119,7 @@ export class MoveCellEdit implements IResourceUndoRedoElement {
}
this
.
editingDelegate
.
moveCell
(
this
.
fromIndex
,
this
.
toIndex
);
this
.
editingDelegate
.
setSelections
(
this
.
endSelections
);
}
}
...
...
@@ -116,7 +129,9 @@ export class SpliceCellsEdit implements IResourceUndoRedoElement {
constructor
(
public
resource
:
URI
,
private
diffs
:
[
number
,
CellViewModel
[],
CellViewModel
[]][],
private
editingDelegate
:
ICellEditingDelegate
private
editingDelegate
:
ICellEditingDelegate
,
private
beforeHandles
:
number
[],
private
endHandles
:
number
[]
)
{
}
...
...
@@ -134,6 +149,7 @@ export class SpliceCellsEdit implements IResourceUndoRedoElement {
this
.
editingDelegate
.
insertCell
!
(
diff
[
0
],
cell
);
});
});
this
.
editingDelegate
.
setSelections
(
this
.
beforeHandles
);
}
redo
():
void
|
Promise
<
void
>
{
...
...
@@ -151,5 +167,6 @@ export class SpliceCellsEdit implements IResourceUndoRedoElement {
});
});
this
.
editingDelegate
.
setSelections
(
this
.
endHandles
);
}
}
src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel.ts
浏览文件 @
582ced00
...
...
@@ -127,6 +127,20 @@ function _normalizeOptions(options: IModelDecorationOptions): ModelDecorationOpt
return
ModelDecorationOptions
.
createDynamic
(
options
);
}
function
selectionsEqual
(
a
:
number
[],
b
:
number
[])
{
if
(
a
.
length
!==
b
.
length
)
{
return
false
;
}
for
(
let
i
=
0
;
i
<
a
.
length
;
i
++
)
{
if
(
a
[
i
]
!==
b
[
i
])
{
return
false
;
}
}
return
true
;
}
let
MODEL_ID
=
0
;
...
...
@@ -197,15 +211,24 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
return
this
.
_layoutInfo
;
}
private
readonly
_onDidChangeSelection
=
new
Emitter
<
void
>
();
get
onDidChangeSelection
():
Event
<
void
>
{
return
this
.
_onDidChangeSelection
.
event
;
}
private
_selections
:
number
[]
=
[];
get
selections
()
{
get
selection
Handle
s
()
{
return
this
.
_selections
;
}
set
selections
(
selections
:
number
[])
{
set
selectionHandles
(
selections
:
number
[])
{
selections
=
selections
.
sort
();
if
(
selectionsEqual
(
selections
,
this
.
selectionHandles
))
{
return
;
}
this
.
_selections
=
selections
;
this
.
_model
.
notebook
.
selections
=
selections
;
this
.
_onDidChangeSelection
.
fire
();
}
private
_decorationsTree
=
new
DecorationsTree
();
...
...
@@ -257,10 +280,39 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
splices
:
diffs
});
let
endSelectionHandles
:
number
[]
=
[];
if
(
this
.
selectionHandles
.
length
)
{
const
primaryHandle
=
this
.
selectionHandles
[
0
];
const
primarySelectionIndex
=
this
.
_viewCells
.
indexOf
(
this
.
getCellByHandle
(
primaryHandle
)
!
);
endSelectionHandles
=
[
primaryHandle
];
let
delta
=
0
;
for
(
let
i
=
0
;
i
<
diffs
.
length
;
i
++
)
{
const
diff
=
diffs
[
0
];
if
(
diff
[
0
]
+
diff
[
1
]
<=
primarySelectionIndex
)
{
delta
+=
diff
[
2
].
length
-
diff
[
1
];
continue
;
}
if
(
diff
[
0
]
>
primarySelectionIndex
)
{
endSelectionHandles
=
[
primaryHandle
];
break
;
}
if
(
diff
[
0
]
+
diff
[
1
]
>
primaryHandle
)
{
endSelectionHandles
=
[
this
.
_viewCells
[
diff
[
0
]
+
delta
].
handle
];
break
;
}
}
}
this
.
undoService
.
pushElement
(
new
SpliceCellsEdit
(
this
.
uri
,
undoDiff
,
{
insertCell
:
this
.
_insertCellDelegate
.
bind
(
this
),
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
)
}));
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
),
setSelections
:
this
.
_setSelectionsDelegate
.
bind
(
this
)
},
this
.
selectionHandles
,
endSelectionHandles
));
this
.
selectionHandles
=
endSelectionHandles
;
}));
this
.
_register
(
this
.
_model
.
notebook
.
onDidChangeMetadata
(
e
=>
{
...
...
@@ -379,6 +431,10 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
});
}
getCellByHandle
(
handle
:
number
)
{
return
this
.
_handleToViewCellMapping
.
get
(
handle
);
}
getCellIndex
(
cell
:
ICellViewModel
)
{
return
this
.
_viewCells
.
indexOf
(
cell
as
CellViewModel
);
}
...
...
@@ -517,6 +573,10 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
this
.
_onDidChangeViewCells
.
fire
({
synchronous
:
true
,
splices
:
[[
deleteIndex
,
1
,
[]]]
});
}
private
_setSelectionsDelegate
(
selections
:
number
[])
{
this
.
selectionHandles
=
selections
;
}
createCell
(
index
:
number
,
source
:
string
[],
language
:
string
,
type
:
CellKind
,
synchronous
:
boolean
)
{
const
cell
=
this
.
_model
.
notebook
.
createCellTextModel
(
source
,
language
,
type
,
[],
undefined
);
let
newCell
:
CellViewModel
=
createCellViewModel
(
this
.
instantiationService
,
this
,
cell
);
...
...
@@ -524,10 +584,12 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
this
.
_handleToViewCellMapping
.
set
(
newCell
.
handle
,
newCell
);
this
.
_model
.
insertCell
(
cell
,
index
);
this
.
_localStore
.
add
(
newCell
);
this
.
undoService
.
pushElement
(
new
InsertCellEdit
(
this
.
uri
,
index
,
newCell
,
{
insertCell
:
this
.
_insertCellDelegate
.
bind
(
this
),
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
)
}));
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
),
setSelections
:
this
.
_setSelectionsDelegate
.
bind
(
this
)
},
this
.
selectionHandles
,
this
.
selectionHandles
));
this
.
_decorationsTree
.
acceptReplace
(
index
,
0
,
1
,
true
);
this
.
_onDidChangeViewCells
.
fire
({
synchronous
:
synchronous
,
splices
:
[[
index
,
0
,
[
newCell
]]]
});
...
...
@@ -543,8 +605,9 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
this
.
_localStore
.
add
(
newCell
);
this
.
undoService
.
pushElement
(
new
InsertCellEdit
(
this
.
uri
,
index
,
newCell
,
{
insertCell
:
this
.
_insertCellDelegate
.
bind
(
this
),
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
)
}));
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
),
setSelections
:
this
.
_setSelectionsDelegate
.
bind
(
this
)
},
this
.
selectionHandles
,
this
.
selectionHandles
));
this
.
_decorationsTree
.
acceptReplace
(
index
,
0
,
1
,
true
);
this
.
_onDidChangeViewCells
.
fire
({
synchronous
:
synchronous
,
splices
:
[[
index
,
0
,
[
newCell
]]]
});
...
...
@@ -552,20 +615,41 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
}
deleteCell
(
index
:
number
,
synchronous
:
boolean
)
{
const
primarySelectionIndex
=
this
.
selectionHandles
.
length
?
this
.
_viewCells
.
indexOf
(
this
.
getCellByHandle
(
this
.
selectionHandles
[
0
])
!
)
:
null
;
let
viewCell
=
this
.
_viewCells
[
index
];
this
.
_viewCells
.
splice
(
index
,
1
);
this
.
_handleToViewCellMapping
.
delete
(
viewCell
.
handle
);
this
.
_model
.
deleteCell
(
index
);
let
endSelections
:
number
[]
=
[];
if
(
this
.
selectionHandles
.
length
)
{
const
primarySelectionHandle
=
this
.
selectionHandles
[
0
];
if
(
index
===
primarySelectionIndex
)
{
if
(
primarySelectionIndex
<
this
.
length
-
1
)
{
endSelections
=
[
this
.
_viewCells
[
primarySelectionIndex
+
1
].
handle
];
}
else
if
(
primarySelectionIndex
===
this
.
length
-
1
&&
this
.
length
>
1
)
{
endSelections
=
[
this
.
_viewCells
[
primarySelectionIndex
-
1
].
handle
];
}
else
{
endSelections
=
[];
}
}
else
{
endSelections
=
[
primarySelectionHandle
];
}
}
this
.
undoService
.
pushElement
(
new
DeleteCellEdit
(
this
.
uri
,
index
,
viewCell
,
{
insertCell
:
this
.
_insertCellDelegate
.
bind
(
this
),
deleteCell
:
this
.
_deleteCellDelegate
.
bind
(
this
),
createCellViewModel
:
(
cell
:
NotebookCellTextModel
)
=>
{
return
createCellViewModel
(
this
.
instantiationService
,
this
,
cell
);
}
}));
},
setSelections
:
this
.
_setSelectionsDelegate
.
bind
(
this
)
},
this
.
selectionHandles
,
endSelections
));
this
.
selectionHandles
=
endSelections
;
this
.
_decorationsTree
.
acceptReplace
(
index
,
1
,
0
,
true
);
...
...
@@ -589,10 +673,13 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
this
.
undoService
.
pushElement
(
new
MoveCellEdit
(
this
.
uri
,
index
,
newIdx
,
{
moveCell
:
(
fromIndex
:
number
,
toIndex
:
number
)
=>
{
this
.
moveCellToIdx
(
fromIndex
,
toIndex
,
true
,
false
);
}
}));
},
setSelections
:
this
.
_setSelectionsDelegate
.
bind
(
this
)
},
this
.
selectionHandles
,
this
.
selectionHandles
));
}
this
.
selectionHandles
=
this
.
selectionHandles
;
this
.
_onDidChangeViewCells
.
fire
({
synchronous
:
synchronous
,
splices
:
[[
index
,
1
,
[]]]
});
this
.
_onDidChangeViewCells
.
fire
({
synchronous
:
synchronous
,
splices
:
[[
newIdx
,
0
,
[
viewCell
]]]
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录