A monorepo containing jupyter-blocks and jupyter-tidyblocks. Blockly extension for JupyterLab.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #7 from DenisaCG/DocumentWidget&Toolbox

DocumentWidget & Toolbox

authored by

Carlos Herrero and committed by
GitHub
3e326e2e 070fdeb9

+781 -309
binder/postBuild
+8 -6
package.json
··· 47 47 "dependencies": { 48 48 "@jupyterlab/application": "^4.0.0-alpha.4", 49 49 "@jupyterlab/apputils": "^4.0.0-alpha.4", 50 + "@jupyterlab/docregistry": "^4.0.0-alpha.4", 51 + "@lumino/signaling": "^1.10.1", 50 52 "@lumino/widgets": "^1.31.0", 51 53 "blockly": "^7.20211209.2" 52 54 }, 53 55 "devDependencies": { 54 56 "@jupyterlab/builder": "^4.0.0-alpha.4", 55 - "@typescript-eslint/eslint-plugin": "^4.8.1", 56 - "@typescript-eslint/parser": "^4.8.1", 57 - "eslint": "^7.14.0", 58 - "eslint-config-prettier": "^6.15.0", 59 - "eslint-plugin-prettier": "^3.1.4", 57 + "@typescript-eslint/eslint-plugin": "^5.12.1", 58 + "@typescript-eslint/parser": "^5.12.1", 59 + "eslint": "^8.9.0", 60 + "eslint-config-prettier": "^8.4.0", 61 + "eslint-plugin-prettier": "^4.0.0", 60 62 "npm-run-all": "^4.1.5", 61 - "prettier": "^2.1.1", 63 + "prettier": "^2.5.1", 62 64 "rimraf": "^3.0.2", 63 65 "typescript": "~4.5.2" 64 66 },
+39
src/factory.ts
··· 1 + import { 2 + ABCWidgetFactory, 3 + DocumentRegistry, 4 + DocumentModel 5 + } from '@jupyterlab/docregistry'; 6 + 7 + import { BlocklyEditor, BlocklyPanel } from './widget'; 8 + 9 + /** 10 + * A widget factory to create new instances of ExampleDocWidget. 11 + */ 12 + export class BlocklyEditorFactory extends ABCWidgetFactory< 13 + BlocklyEditor, 14 + DocumentModel 15 + > { 16 + /** 17 + * Constructor of ExampleWidgetFactory. 18 + * 19 + * @param options Constructor options 20 + */ 21 + constructor(options: DocumentRegistry.IWidgetFactoryOptions) { 22 + super(options); 23 + } 24 + 25 + /** 26 + * Create a new widget given a context. 27 + * 28 + * @param context Contains the information of the file 29 + * @returns The widget 30 + */ 31 + protected createNewWidget( 32 + context: DocumentRegistry.IContext<DocumentModel> 33 + ): BlocklyEditor { 34 + return new BlocklyEditor({ 35 + context, 36 + content: new BlocklyPanel(context) 37 + }); 38 + } 39 + }
+30 -63
src/index.ts
··· 4 4 ILayoutRestorer 5 5 } from '@jupyterlab/application'; 6 6 7 - import { 8 - ICommandPalette, 9 - MainAreaWidget, 10 - WidgetTracker 11 - } from '@jupyterlab/apputils'; 7 + import { WidgetTracker } from '@jupyterlab/apputils'; 12 8 13 - import { Widget } from '@lumino/widgets'; 9 + import { BlocklyEditorFactory } from './factory'; 14 10 15 - import * as Blockly from 'blockly'; 11 + import { BlocklyEditor } from './widget'; 16 12 17 - namespace CommandIDs { 18 - export const open = 'jupyterlab-blocky:open-editor'; 19 - } 20 - 21 - const TOOLBOX = { 22 - kind: 'flyoutToolbox', 23 - contents: [ 24 - { 25 - kind: 'block', 26 - type: 'controls_if' 27 - }, 28 - { 29 - kind: 'block', 30 - type: 'controls_whileUntil' 31 - } 32 - ] 33 - }; 13 + /** 14 + * The name of the factory that creates the editor widgets. 15 + */ 16 + const FACTORY = 'Blockly editor'; 34 17 35 18 /** 36 19 * Initialization data for the jupyterlab-blocky extension. ··· 38 21 const plugin: JupyterFrontEndPlugin<void> = { 39 22 id: 'jupyterlab-blocky:plugin', 40 23 autoStart: true, 41 - requires: [ICommandPalette, ILayoutRestorer], 42 - activate: ( 43 - app: JupyterFrontEnd, 44 - palette: ICommandPalette, 45 - restorer: ILayoutRestorer 46 - ) => { 24 + requires: [ILayoutRestorer], 25 + activate: (app: JupyterFrontEnd, restorer: ILayoutRestorer) => { 47 26 console.log('JupyterLab extension jupyterlab-blocky is activated!'); 48 27 49 - let editorPanel: MainAreaWidget | null = null; 28 + // Namespace for the tracker 29 + const namespace = 'jupyterlab-blocky'; 50 30 51 - // Namespace for the tracker 52 - const namespace = 'documents-example'; 53 31 // Creating the tracker for the document 54 - const tracker = new WidgetTracker<MainAreaWidget>({ namespace }); 32 + const tracker = new WidgetTracker<BlocklyEditor>({ namespace }); 55 33 56 34 // Handle state restoration. 57 35 if (restorer) { 58 36 // When restoring the app, if the document was open, reopen it 59 37 restorer.restore(tracker, { 60 - command: CommandIDs.open, 61 - name: widget => '' 38 + command: 'docmanager:open', 39 + args: widget => ({ path: widget.context.path, factory: FACTORY }), 40 + name: widget => widget.context.path 62 41 }); 63 42 } 64 43 65 - app.commands.addCommand(CommandIDs.open, { 66 - label: 'Open Blockly Editor', 67 - caption: 'Open Blockly Editor', 68 - isEnabled: () => true, 69 - execute: () => { 70 - const content = new Widget(); 71 - content.id = 'jp-Blockly-container'; 72 - editorPanel = new MainAreaWidget({ content }); 73 - editorPanel.title.label = 'Blockly Editor'; 74 - 75 - editorPanel.disposed.connect(() => { 76 - editorPanel = null; 77 - workspace.dispose(); 78 - }); 79 - 80 - app.shell.add(editorPanel, 'main'); 81 - 82 - const workspace = Blockly.inject(content.node, { 83 - toolbox: TOOLBOX 84 - }); 85 - console.debug('Blockly:', workspace); 86 - } 44 + // Creating the widget factory to register it so the document manager knows about 45 + // our new DocumentWidget 46 + const widgetFactory = new BlocklyEditorFactory({ 47 + name: FACTORY, 48 + modelName: 'text', 49 + fileTypes: ['json'] 87 50 }); 88 51 89 - if (palette) { 90 - palette.addItem({ 91 - command: CommandIDs.open, 92 - category: 'Blockly Editor' 52 + // Add the widget to the tracker when it's created 53 + widgetFactory.widgetCreated.connect((sender, widget) => { 54 + // Notify the instance tracker if restore data needs to update. 55 + widget.context.pathChanged.connect(() => { 56 + tracker.save(widget); 93 57 }); 94 - } 58 + tracker.add(widget); 59 + }); 60 + // Registering the widget factory 61 + app.docRegistry.addWidgetFactory(widgetFactory); 95 62 } 96 63 }; 97 64
+124
src/layout.ts
··· 1 + import { Layout, Widget } from '@lumino/widgets'; 2 + 3 + import { PartialJSONValue } from '@lumino/coreutils'; 4 + 5 + import { IIterator, ArrayIterator } from '@lumino/algorithm'; 6 + 7 + import { Message } from '@lumino/messaging'; 8 + 9 + import * as Blockly from 'blockly'; 10 + 11 + import { TOOLBOX } from './utils'; 12 + 13 + /** 14 + * A blockly layout to host the Blockly editor. 15 + */ 16 + export class BlocklyLayout extends Layout { 17 + private _workspace: Blockly.WorkspaceSvg; 18 + private _host: HTMLElement; 19 + 20 + /** 21 + * Construct a `BlocklyLayout`. 22 + * 23 + */ 24 + constructor() { 25 + super(); 26 + console.debug('[BlocklyLayout]'); 27 + 28 + // Creating the container for the Blockly editor 29 + this._host = document.createElement('div'); 30 + this._host.className = 'grid-stack'; 31 + } 32 + 33 + get workspace(): PartialJSONValue { 34 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment 35 + // @ts-ignore 36 + return Blockly.serialization.workspaces.save(this._workspace); 37 + } 38 + 39 + set workspace(workspace: PartialJSONValue) { 40 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment 41 + // @ts-ignore 42 + Blockly.serialization.workspaces.load(workspace, this._workspace); 43 + } 44 + 45 + /** 46 + * Dispose of the resources held by the widget. 47 + */ 48 + dispose(): void { 49 + this._workspace.dispose(); 50 + super.dispose(); 51 + } 52 + 53 + /** 54 + * Init the blockly layout 55 + */ 56 + init(): void { 57 + super.init(); 58 + console.debug('[BlocklyLayout] init'); 59 + // Add the blockly container into the DOM 60 + this.parent!.node.appendChild(this._host); 61 + } 62 + 63 + /** 64 + * Create an iterator over the widgets in the layout. 65 + */ 66 + iter(): IIterator<Widget> { 67 + return new ArrayIterator([]); 68 + } 69 + 70 + /** 71 + * Remove a widget from the layout. 72 + * 73 + * @param widget - The `widget` to remove. 74 + */ 75 + removeWidget(widget: Widget): void { 76 + return; 77 + } 78 + 79 + /** 80 + * Handle `update-request` messages sent to the widget. 81 + */ 82 + protected onUpdateRequest(msg: Message): void { 83 + console.debug('[BlocklyLayout] onUpdateRequest'); 84 + // TODO: write the resize logic 85 + } 86 + 87 + /** 88 + * Handle `resize-request` messages sent to the widget. 89 + */ 90 + protected onResize(msg: Message): void { 91 + console.debug('[BlocklyLayout] onResize'); 92 + // TODO: write the resize logic 93 + const rect = this.parent.node.getBoundingClientRect(); 94 + this._host.style.width = rect.width + 'px'; 95 + this._host.style.height = rect.height + 'px'; 96 + Blockly.svgResize(this._workspace); 97 + } 98 + 99 + /** 100 + * Handle `fit-request` messages sent to the widget. 101 + */ 102 + protected onFitRequest(msg: Message): void { 103 + console.debug('[BlocklyLayout] onFitRequest'); 104 + // TODO: write the resize logic 105 + // 106 + } 107 + 108 + /** 109 + * Handle `after-attach` messages sent to the widget. 110 + */ 111 + protected onAfterAttach(msg: Message): void { 112 + console.debug('[BlocklyLayout] onAfterAttach'); 113 + this._workspace = Blockly.inject(this._host, { 114 + toolbox: TOOLBOX 115 + }); 116 + } 117 + 118 + /** 119 + * Handle `after-show` messages sent to the widget. 120 + */ 121 + protected onAfterShow(msg: Message): void { 122 + console.debug('[BlocklyLayout] onAfterShow'); 123 + } 124 + }
+362
src/utils.ts
··· 1 + export const TOOLBOX = { 2 + //kind: 'flyoutToolbox', 3 + // contents: [ 4 + // { 5 + // kind: 'block', 6 + // type: 'controls_if' 7 + // }, 8 + // { 9 + // kind: 'block', 10 + // type: 'controls_whileUntil' 11 + // } 12 + // ] 13 + //{ 14 + kind: 'categoryToolbox', 15 + contents: [ 16 + { 17 + kind: 'category', 18 + name: 'Logic', 19 + colour: '210', 20 + contents: [ 21 + { 22 + kind: 'block', 23 + type: 'controls_if' 24 + }, 25 + { 26 + kind: 'BLOCK', 27 + type: 'logic_compare' 28 + }, 29 + { 30 + kind: 'BLOCK', 31 + blockxml: '<block type="logic_operation"></block>', 32 + type: 'logic_operation' 33 + }, 34 + { 35 + kind: 'BLOCK', 36 + blockxml: '<block type="logic_negate"></block>', 37 + type: 'logic_negate' 38 + }, 39 + { 40 + kind: 'BLOCK', 41 + blockxml: '<block type="logic_boolean"></block>', 42 + type: 'logic_boolean' 43 + }, 44 + { 45 + kind: 'BLOCK', 46 + blockxml: '<block type="logic_null"></block>', 47 + type: 'logic_null' 48 + }, 49 + { 50 + kind: 'BLOCK', 51 + blockxml: '<block type="logic_ternary"></block>', 52 + type: 'logic_ternary' 53 + } 54 + ] 55 + }, 56 + { 57 + kind: 'category', 58 + name: 'Loops', 59 + colour: '120', 60 + contents: [ 61 + { 62 + kind: 'BLOCK', 63 + blockxml: 64 + '<block type="controls_repeat_ext">\n <value name="TIMES">\n <shadow type="math_number">\n <field name="NUM">10</field>\n </shadow>\n </value>\n </block>', 65 + type: 'controls_repeat_ext' 66 + }, 67 + { 68 + kind: 'BLOCK', 69 + blockxml: '<block type="controls_whileUntil"></block>', 70 + type: 'controls_whileUntil' 71 + }, 72 + { 73 + kind: 'BLOCK', 74 + blockxml: 75 + '<block type="controls_for">\n <value name="FROM">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n <value name="TO">\n <shadow type="math_number">\n <field name="NUM">10</field>\n </shadow>\n </value>\n <value name="BY">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n </block>', 76 + type: 'controls_for' 77 + }, 78 + { 79 + kind: 'BLOCK', 80 + blockxml: '<block type="controls_forEach"></block>', 81 + type: 'controls_forEach' 82 + }, 83 + { 84 + kind: 'BLOCK', 85 + blockxml: '<block type="controls_flow_statements"></block>', 86 + type: 'controls_flow_statements' 87 + } 88 + ] 89 + }, 90 + { 91 + kind: 'CATEGORY', 92 + name: 'Math', 93 + colour: '230', 94 + contents: [ 95 + { 96 + kind: 'BLOCK', 97 + blockxml: '<block type="math_number"></block>', 98 + type: 'math_number' 99 + }, 100 + { 101 + kind: 'BLOCK', 102 + blockxml: 103 + '<block type="math_arithmetic">\n <value name="A">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n <value name="B">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n </block>', 104 + type: 'math_arithmetic' 105 + }, 106 + { 107 + kind: 'BLOCK', 108 + blockxml: 109 + '<block type="math_single">\n <value name="NUM">\n <shadow type="math_number">\n <field name="NUM">9</field>\n </shadow>\n </value>\n </block>', 110 + type: 'math_single' 111 + }, 112 + { 113 + kind: 'BLOCK', 114 + blockxml: 115 + '<block type="math_trig">\n <value name="NUM">\n <shadow type="math_number">\n <field name="NUM">45</field>\n </shadow>\n </value>\n </block>', 116 + type: 'math_trig' 117 + }, 118 + { 119 + kind: 'BLOCK', 120 + blockxml: '<block type="math_constant"></block>', 121 + type: 'math_constant' 122 + }, 123 + { 124 + kind: 'BLOCK', 125 + blockxml: 126 + '<block type="math_number_property">\n <value name="NUMBER_TO_CHECK">\n <shadow type="math_number">\n <field name="NUM">0</field>\n </shadow>\n </value>\n </block>', 127 + type: 'math_number_property' 128 + }, 129 + { 130 + kind: 'BLOCK', 131 + blockxml: 132 + '<block type="math_change">\n <value name="DELTA">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n </block>', 133 + type: 'math_change' 134 + }, 135 + { 136 + kind: 'BLOCK', 137 + blockxml: 138 + '<block type="math_round">\n <value name="NUM">\n <shadow type="math_number">\n <field name="NUM">3.1</field>\n </shadow>\n </value>\n </block>', 139 + type: 'math_round' 140 + }, 141 + { 142 + kind: 'BLOCK', 143 + blockxml: '<block type="math_on_list"></block>', 144 + type: 'math_on_list' 145 + }, 146 + { 147 + kind: 'BLOCK', 148 + blockxml: 149 + '<block type="math_modulo">\n <value name="DIVIDEND">\n <shadow type="math_number">\n <field name="NUM">64</field>\n </shadow>\n </value>\n <value name="DIVISOR">\n <shadow type="math_number">\n <field name="NUM">10</field>\n </shadow>\n </value>\n </block>', 150 + type: 'math_modulo' 151 + }, 152 + { 153 + kind: 'BLOCK', 154 + blockxml: 155 + '<block type="math_constrain">\n <value name="VALUE">\n <shadow type="math_number">\n <field name="NUM">50</field>\n </shadow>\n </value>\n <value name="LOW">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n <value name="HIGH">\n <shadow type="math_number">\n <field name="NUM">100</field>\n </shadow>\n </value>\n </block>', 156 + type: 'math_constrain' 157 + }, 158 + { 159 + kind: 'BLOCK', 160 + blockxml: 161 + '<block type="math_random_int">\n <value name="FROM">\n <shadow type="math_number">\n <field name="NUM">1</field>\n </shadow>\n </value>\n <value name="TO">\n <shadow type="math_number">\n <field name="NUM">100</field>\n </shadow>\n </value>\n </block>', 162 + type: 'math_random_int' 163 + }, 164 + { 165 + kind: 'BLOCK', 166 + blockxml: '<block type="math_random_float"></block>', 167 + type: 'math_random_float' 168 + } 169 + ] 170 + }, 171 + { 172 + kind: 'CATEGORY', 173 + name: 'Text', 174 + colour: '160', 175 + contents: [ 176 + { 177 + kind: 'BLOCK', 178 + blockxml: '<block type="text"></block>', 179 + type: 'text' 180 + }, 181 + { 182 + kind: 'BLOCK', 183 + blockxml: '<block type="text_join"></block>', 184 + type: 'text_join' 185 + }, 186 + { 187 + kind: 'BLOCK', 188 + blockxml: 189 + '<block type="text_append">\n <value name="TEXT">\n <shadow type="text"></shadow>\n </value>\n </block>', 190 + type: 'text_append' 191 + }, 192 + { 193 + kind: 'BLOCK', 194 + blockxml: 195 + '<block type="text_length">\n <value name="VALUE">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 196 + type: 'text_length' 197 + }, 198 + { 199 + kind: 'BLOCK', 200 + blockxml: 201 + '<block type="text_isEmpty">\n <value name="VALUE">\n <shadow type="text">\n <field name="TEXT"></field>\n </shadow>\n </value>\n </block>', 202 + type: 'text_isEmpty' 203 + }, 204 + { 205 + kind: 'BLOCK', 206 + blockxml: 207 + '<block type="text_indexOf">\n <value name="VALUE">\n <block type="variables_get">\n <field name="VAR">text</field>\n </block>\n </value>\n <value name="FIND">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 208 + type: 'text_indexOf' 209 + }, 210 + { 211 + kind: 'BLOCK', 212 + blockxml: 213 + '<block type="text_charAt">\n <value name="VALUE">\n <block type="variables_get">\n <field name="VAR">text</field>\n </block>\n </value>\n </block>', 214 + type: 'text_charAt' 215 + }, 216 + { 217 + kind: 'BLOCK', 218 + blockxml: 219 + '<block type="text_getSubstring">\n <value name="STRING">\n <block type="variables_get">\n <field name="VAR">text</field>\n </block>\n </value>\n </block>', 220 + type: 'text_getSubstring' 221 + }, 222 + { 223 + kind: 'BLOCK', 224 + blockxml: 225 + '<block type="text_changeCase">\n <value name="TEXT">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 226 + type: 'text_changeCase' 227 + }, 228 + { 229 + kind: 'BLOCK', 230 + blockxml: 231 + '<block type="text_trim">\n <value name="TEXT">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 232 + type: 'text_trim' 233 + }, 234 + { 235 + kind: 'BLOCK', 236 + blockxml: 237 + '<block type="text_print">\n <value name="TEXT">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 238 + type: 'text_print' 239 + }, 240 + { 241 + kind: 'BLOCK', 242 + blockxml: 243 + '<block type="text_prompt_ext">\n <value name="TEXT">\n <shadow type="text">\n <field name="TEXT">abc</field>\n </shadow>\n </value>\n </block>', 244 + type: 'text_prompt_ext' 245 + } 246 + ] 247 + }, 248 + { 249 + kind: 'CATEGORY', 250 + name: 'Lists', 251 + colour: '260', 252 + contents: [ 253 + { 254 + kind: 'BLOCK', 255 + blockxml: 256 + '<block type="lists_create_with">\n <mutation items="0"></mutation>\n </block>', 257 + type: 'lists_create_with' 258 + }, 259 + { 260 + kind: 'BLOCK', 261 + blockxml: '<block type="lists_create_with"></block>', 262 + type: 'lists_create_with' 263 + }, 264 + { 265 + kind: 'BLOCK', 266 + blockxml: 267 + '<block type="lists_repeat">\n <value name="NUM">\n <shadow type="math_number">\n <field name="NUM">5</field>\n </shadow>\n </value>\n </block>', 268 + type: 'lists_repeat' 269 + }, 270 + { 271 + kind: 'BLOCK', 272 + blockxml: '<block type="lists_length"></block>', 273 + type: 'lists_length' 274 + }, 275 + { 276 + kind: 'BLOCK', 277 + blockxml: '<block type="lists_isEmpty"></block>', 278 + type: 'lists_isEmpty' 279 + }, 280 + { 281 + kind: 'BLOCK', 282 + blockxml: 283 + '<block type="lists_indexOf">\n <value name="VALUE">\n <block type="variables_get">\n <field name="VAR">list</field>\n </block>\n </value>\n </block>', 284 + type: 'lists_indexOf' 285 + }, 286 + { 287 + kind: 'BLOCK', 288 + blockxml: 289 + '<block type="lists_getIndex">\n <value name="VALUE">\n <block type="variables_get">\n <field name="VAR">list</field>\n </block>\n </value>\n </block>', 290 + type: 'lists_getIndex' 291 + }, 292 + { 293 + kind: 'BLOCK', 294 + blockxml: 295 + '<block type="lists_setIndex">\n <value name="LIST">\n <block type="variables_get">\n <field name="VAR">list</field>\n </block>\n </value>\n </block>', 296 + type: 'lists_setIndex' 297 + }, 298 + { 299 + kind: 'BLOCK', 300 + blockxml: 301 + '<block type="lists_getSublist">\n <value name="LIST">\n <block type="variables_get">\n <field name="VAR">list</field>\n </block>\n </value>\n </block>', 302 + type: 'lists_getSublist' 303 + }, 304 + { 305 + kind: 'BLOCK', 306 + blockxml: 307 + '<block type="lists_split">\n <value name="DELIM">\n <shadow type="text">\n <field name="TEXT">,</field>\n </shadow>\n </value>\n </block>', 308 + type: 'lists_split' 309 + }, 310 + { 311 + kind: 'BLOCK', 312 + blockxml: '<block type="lists_sort"></block>', 313 + type: 'lists_sort' 314 + } 315 + ] 316 + }, 317 + { 318 + kind: 'CATEGORY', 319 + name: 'Color', 320 + colour: '20', 321 + contents: [ 322 + { 323 + kind: 'BLOCK', 324 + blockxml: '<block type="colour_picker"></block>', 325 + type: 'colour_picker' 326 + }, 327 + { 328 + kind: 'BLOCK', 329 + blockxml: '<block type="colour_random"></block>', 330 + type: 'colour_random' 331 + }, 332 + { 333 + kind: 'BLOCK', 334 + blockxml: 335 + '<block type="colour_rgb">\n <value name="RED">\n <shadow type="math_number">\n <field name="NUM">100</field>\n </shadow>\n </value>\n <value name="GREEN">\n <shadow type="math_number">\n <field name="NUM">50</field>\n </shadow>\n </value>\n <value name="BLUE">\n <shadow type="math_number">\n <field name="NUM">0</field>\n </shadow>\n </value>\n </block>', 336 + type: 'colour_rgb' 337 + }, 338 + { 339 + kind: 'BLOCK', 340 + blockxml: 341 + '<block type="colour_blend">\n <value name="COLOUR1">\n <shadow type="colour_picker">\n <field name="COLOUR">#ff0000</field>\n </shadow>\n </value>\n <value name="COLOUR2">\n <shadow type="colour_picker">\n <field name="COLOUR">#3333ff</field>\n </shadow>\n </value>\n <value name="RATIO">\n <shadow type="math_number">\n <field name="NUM">0.5</field>\n </shadow>\n </value>\n </block>', 342 + type: 'colour_blend' 343 + } 344 + ] 345 + }, 346 + { 347 + kind: 'SEP' 348 + }, 349 + { 350 + kind: 'CATEGORY', 351 + colour: '330', 352 + custom: 'VARIABLE', 353 + name: 'Variables' 354 + }, 355 + { 356 + kind: 'CATEGORY', 357 + colour: '290', 358 + custom: 'PROCEDURE', 359 + name: 'Functions' 360 + } 361 + ] 362 + };
+80
src/widget.ts
··· 1 + import { 2 + DocumentRegistry, 3 + DocumentWidget, 4 + DocumentModel 5 + } from '@jupyterlab/docregistry'; 6 + 7 + import { Widget } from '@lumino/widgets'; 8 + 9 + import { Signal } from '@lumino/signaling'; 10 + 11 + import { BlocklyLayout } from './layout'; 12 + 13 + /** 14 + * DocumentWidget: widget that represents the view or editor for a file type. 15 + */ 16 + export class BlocklyEditor extends DocumentWidget<BlocklyPanel, DocumentModel> { 17 + constructor(options: DocumentWidget.IOptions<BlocklyPanel, DocumentModel>) { 18 + super(options); 19 + } 20 + 21 + /** 22 + * Dispose of the resources held by the widget. 23 + */ 24 + dispose(): void { 25 + this.content.dispose(); 26 + super.dispose(); 27 + } 28 + } 29 + 30 + /** 31 + * Widget that contains the main view of the DocumentWidget. 32 + */ 33 + export class BlocklyPanel extends Widget { 34 + private _context: DocumentRegistry.IContext<DocumentModel>; 35 + 36 + /** 37 + * Construct a `ExamplePanel`. 38 + * 39 + * @param context - The documents context. 40 + */ 41 + constructor(context: DocumentRegistry.IContext<DocumentModel>) { 42 + super(); 43 + this.addClass('jp-BlocklyPanel'); 44 + this._context = context; 45 + 46 + this.layout = new BlocklyLayout(); 47 + 48 + this._context.ready.then(() => { 49 + // TODO: load the content into the blockly editor 50 + const content = this._context.model.toJSON(); 51 + console.debug('[BlocklyPanel] Loading:', content); 52 + (this.layout as BlocklyLayout).workspace = content; 53 + }); 54 + 55 + // Connect to the save signal 56 + this._context.saveState.connect(this._onSave, this); 57 + } 58 + 59 + /** 60 + * Dispose of the resources held by the widget. 61 + */ 62 + dispose(): void { 63 + if (this.isDisposed) { 64 + return; 65 + } 66 + Signal.clearData(this); 67 + super.dispose(); 68 + } 69 + 70 + private _onSave( 71 + sender: DocumentRegistry.IContext<DocumentModel>, 72 + state: DocumentRegistry.SaveState 73 + ): void { 74 + if (state === 'started') { 75 + const workspace = (this.layout as BlocklyLayout).workspace; 76 + console.debug('[BlocklyPanel] Saving:', workspace); 77 + this._context.model.fromJSON(workspace); 78 + } 79 + } 80 + }
+1 -1
tsconfig.json
··· 17 17 "target": "es2017", 18 18 "types": [] 19 19 }, 20 - "include": ["src/*"], 20 + "include": ["src/**/*.ts"], 21 21 "exclude": ["node_modules"] 22 22 }
untitled.json

This is a binary file and will not be displayed.

+137 -239
yarn.lock
··· 2 2 # yarn lockfile v1 3 3 4 4 5 - "@babel/code-frame@7.12.11": 6 - version "7.12.11" 7 - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 - dependencies: 10 - "@babel/highlight" "^7.10.4" 11 - 12 - "@babel/helper-validator-identifier@^7.16.7": 13 - version "7.16.7" 14 - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 - 17 - "@babel/highlight@^7.10.4": 18 - version "7.16.7" 19 - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" 20 - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== 21 - dependencies: 22 - "@babel/helper-validator-identifier" "^7.16.7" 23 - chalk "^2.0.0" 24 - js-tokens "^4.0.0" 25 - 26 5 "@discoveryjs/json-ext@^0.5.0": 27 6 version "0.5.6" 28 7 resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" 29 8 integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== 30 9 31 - "@eslint/eslintrc@^0.4.3": 32 - version "0.4.3" 33 - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 34 - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 10 + "@eslint/eslintrc@^1.1.0": 11 + version "1.1.0" 12 + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.1.0.tgz#583d12dbec5d4f22f333f9669f7d0b7c7815b4d3" 13 + integrity sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg== 35 14 dependencies: 36 15 ajv "^6.12.4" 37 - debug "^4.1.1" 38 - espree "^7.3.0" 16 + debug "^4.3.2" 17 + espree "^9.3.1" 39 18 globals "^13.9.0" 40 19 ignore "^4.0.6" 41 20 import-fresh "^3.2.1" 42 - js-yaml "^3.13.1" 21 + js-yaml "^4.1.0" 43 22 minimatch "^3.0.4" 44 23 strip-json-comments "^3.1.1" 45 24 ··· 53 32 resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" 54 33 integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== 55 34 56 - "@humanwhocodes/config-array@^0.5.0": 57 - version "0.5.0" 58 - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 59 - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 35 + "@humanwhocodes/config-array@^0.9.2": 36 + version "0.9.5" 37 + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" 38 + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== 60 39 dependencies: 61 - "@humanwhocodes/object-schema" "^1.2.0" 40 + "@humanwhocodes/object-schema" "^1.2.1" 62 41 debug "^4.1.1" 63 42 minimatch "^3.0.4" 64 43 65 - "@humanwhocodes/object-schema@^1.2.0": 44 + "@humanwhocodes/object-schema@^1.2.1": 66 45 version "1.2.1" 67 46 resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 68 47 integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== ··· 640 619 "@types/minimatch" "*" 641 620 "@types/node" "*" 642 621 643 - "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": 622 + "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": 644 623 version "7.0.9" 645 624 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" 646 625 integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== ··· 688 667 "@types/source-list-map" "*" 689 668 source-map "^0.6.1" 690 669 691 - "@typescript-eslint/eslint-plugin@^4.8.1": 692 - version "4.33.0" 693 - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" 694 - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== 670 + "@typescript-eslint/eslint-plugin@^5.12.1": 671 + version "5.12.1" 672 + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.12.1.tgz#b2cd3e288f250ce8332d5035a2ff65aba3374ac4" 673 + integrity sha512-M499lqa8rnNK7mUv74lSFFttuUsubIRdAbHcVaP93oFcKkEmHmLqy2n7jM9C8DVmFMYK61ExrZU6dLYhQZmUpw== 695 674 dependencies: 696 - "@typescript-eslint/experimental-utils" "4.33.0" 697 - "@typescript-eslint/scope-manager" "4.33.0" 698 - debug "^4.3.1" 675 + "@typescript-eslint/scope-manager" "5.12.1" 676 + "@typescript-eslint/type-utils" "5.12.1" 677 + "@typescript-eslint/utils" "5.12.1" 678 + debug "^4.3.2" 699 679 functional-red-black-tree "^1.0.1" 700 680 ignore "^5.1.8" 701 - regexpp "^3.1.0" 681 + regexpp "^3.2.0" 702 682 semver "^7.3.5" 703 683 tsutils "^3.21.0" 704 684 705 - "@typescript-eslint/experimental-utils@4.33.0": 706 - version "4.33.0" 707 - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" 708 - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== 685 + "@typescript-eslint/parser@^5.12.1": 686 + version "5.12.1" 687 + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.12.1.tgz#b090289b553b8aa0899740d799d0f96e6f49771b" 688 + integrity sha512-6LuVUbe7oSdHxUWoX/m40Ni8gsZMKCi31rlawBHt7VtW15iHzjbpj2WLiToG2758KjtCCiLRKZqfrOdl3cNKuw== 709 689 dependencies: 710 - "@types/json-schema" "^7.0.7" 711 - "@typescript-eslint/scope-manager" "4.33.0" 712 - "@typescript-eslint/types" "4.33.0" 713 - "@typescript-eslint/typescript-estree" "4.33.0" 714 - eslint-scope "^5.1.1" 715 - eslint-utils "^3.0.0" 690 + "@typescript-eslint/scope-manager" "5.12.1" 691 + "@typescript-eslint/types" "5.12.1" 692 + "@typescript-eslint/typescript-estree" "5.12.1" 693 + debug "^4.3.2" 716 694 717 - "@typescript-eslint/parser@^4.8.1": 718 - version "4.33.0" 719 - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" 720 - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== 695 + "@typescript-eslint/scope-manager@5.12.1": 696 + version "5.12.1" 697 + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.12.1.tgz#58734fd45d2d1dec49641aacc075fba5f0968817" 698 + integrity sha512-J0Wrh5xS6XNkd4TkOosxdpObzlYfXjAFIm9QxYLCPOcHVv1FyyFCPom66uIh8uBr0sZCrtS+n19tzufhwab8ZQ== 721 699 dependencies: 722 - "@typescript-eslint/scope-manager" "4.33.0" 723 - "@typescript-eslint/types" "4.33.0" 724 - "@typescript-eslint/typescript-estree" "4.33.0" 725 - debug "^4.3.1" 700 + "@typescript-eslint/types" "5.12.1" 701 + "@typescript-eslint/visitor-keys" "5.12.1" 726 702 727 - "@typescript-eslint/scope-manager@4.33.0": 728 - version "4.33.0" 729 - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" 730 - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== 703 + "@typescript-eslint/type-utils@5.12.1": 704 + version "5.12.1" 705 + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.12.1.tgz#8d58c6a0bb176b5e9a91581cda1a7f91a114d3f0" 706 + integrity sha512-Gh8feEhsNLeCz6aYqynh61Vsdy+tiNNkQtc+bN3IvQvRqHkXGUhYkUi+ePKzP0Mb42se7FDb+y2SypTbpbR/Sg== 731 707 dependencies: 732 - "@typescript-eslint/types" "4.33.0" 733 - "@typescript-eslint/visitor-keys" "4.33.0" 708 + "@typescript-eslint/utils" "5.12.1" 709 + debug "^4.3.2" 710 + tsutils "^3.21.0" 734 711 735 - "@typescript-eslint/types@4.33.0": 736 - version "4.33.0" 737 - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" 738 - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== 712 + "@typescript-eslint/types@5.12.1": 713 + version "5.12.1" 714 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.12.1.tgz#46a36a28ff4d946821b58fe5a73c81dc2e12aa89" 715 + integrity sha512-hfcbq4qVOHV1YRdhkDldhV9NpmmAu2vp6wuFODL71Y0Ixak+FLeEU4rnPxgmZMnGreGEghlEucs9UZn5KOfHJA== 739 716 740 - "@typescript-eslint/typescript-estree@4.33.0": 741 - version "4.33.0" 742 - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" 743 - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== 717 + "@typescript-eslint/typescript-estree@5.12.1": 718 + version "5.12.1" 719 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.12.1.tgz#6a9425b9c305bcbc38e2d1d9a24c08e15e02b722" 720 + integrity sha512-ahOdkIY9Mgbza7L9sIi205Pe1inCkZWAHE1TV1bpxlU4RZNPtXaDZfiiFWcL9jdxvW1hDYZJXrFm+vlMkXRbBw== 744 721 dependencies: 745 - "@typescript-eslint/types" "4.33.0" 746 - "@typescript-eslint/visitor-keys" "4.33.0" 747 - debug "^4.3.1" 748 - globby "^11.0.3" 749 - is-glob "^4.0.1" 722 + "@typescript-eslint/types" "5.12.1" 723 + "@typescript-eslint/visitor-keys" "5.12.1" 724 + debug "^4.3.2" 725 + globby "^11.0.4" 726 + is-glob "^4.0.3" 750 727 semver "^7.3.5" 751 728 tsutils "^3.21.0" 752 729 753 - "@typescript-eslint/visitor-keys@4.33.0": 754 - version "4.33.0" 755 - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" 756 - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== 730 + "@typescript-eslint/utils@5.12.1": 731 + version "5.12.1" 732 + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.12.1.tgz#447c24a05d9c33f9c6c64cb48f251f2371eef920" 733 + integrity sha512-Qq9FIuU0EVEsi8fS6pG+uurbhNTtoYr4fq8tKjBupsK5Bgbk2I32UGm0Sh+WOyjOPgo/5URbxxSNV6HYsxV4MQ== 757 734 dependencies: 758 - "@typescript-eslint/types" "4.33.0" 759 - eslint-visitor-keys "^2.0.0" 735 + "@types/json-schema" "^7.0.9" 736 + "@typescript-eslint/scope-manager" "5.12.1" 737 + "@typescript-eslint/types" "5.12.1" 738 + "@typescript-eslint/typescript-estree" "5.12.1" 739 + eslint-scope "^5.1.1" 740 + eslint-utils "^3.0.0" 741 + 742 + "@typescript-eslint/visitor-keys@5.12.1": 743 + version "5.12.1" 744 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.12.1.tgz#f722da106c8f9695ae5640574225e45af3e52ec3" 745 + integrity sha512-l1KSLfupuwrXx6wc0AuOmC7Ko5g14ZOQ86wJJqRbdLbXLK02pK/DPiDDqCc7BqqiiA04/eAA6ayL0bgOrAkH7A== 746 + dependencies: 747 + "@typescript-eslint/types" "5.12.1" 748 + eslint-visitor-keys "^3.0.0" 760 749 761 750 "@verdaccio/commons-api@10.1.0": 762 751 version "10.1.0" ··· 1030 1019 resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 1031 1020 integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 1032 1021 1033 - acorn@^7.1.0, acorn@^7.4.0: 1022 + acorn@^7.1.0: 1034 1023 version "7.4.1" 1035 1024 resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 1036 1025 integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 1037 1026 1038 - acorn@^8.4.1: 1027 + acorn@^8.4.1, acorn@^8.7.0: 1039 1028 version "8.7.0" 1040 1029 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" 1041 1030 integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== ··· 1070 1059 json-schema-traverse "^0.4.1" 1071 1060 uri-js "^4.2.2" 1072 1061 1073 - ajv@^8.0.1: 1074 - version "8.8.2" 1075 - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" 1076 - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== 1077 - dependencies: 1078 - fast-deep-equal "^3.1.1" 1079 - json-schema-traverse "^1.0.0" 1080 - require-from-string "^2.0.2" 1081 - uri-js "^4.2.2" 1082 - 1083 - ansi-colors@^4.1.1: 1084 - version "4.1.1" 1085 - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 1086 - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 1087 - 1088 1062 ansi-escapes@^4.2.1: 1089 1063 version "4.3.2" 1090 1064 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" ··· 1104 1078 dependencies: 1105 1079 color-convert "^1.9.0" 1106 1080 1107 - ansi-styles@^4.0.0, ansi-styles@^4.1.0: 1081 + ansi-styles@^4.1.0: 1108 1082 version "4.3.0" 1109 1083 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 1110 1084 integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== ··· 1116 1090 resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.7.tgz#dcef1802700cc231d60c5e08fd088f2f9b36375a" 1117 1091 integrity sha512-JtHjzZmJxtzfTSjsCyHgPR155HBe5WGyUyHTaEkfy46qhwCFKx1Epm6nAxgUG3WfUZP1dWhGqj9Z2NOBeZ+uBw== 1118 1092 1119 - argparse@^1.0.7: 1120 - version "1.0.10" 1121 - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 1122 - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 1123 - dependencies: 1124 - sprintf-js "~1.0.2" 1125 - 1126 1093 argparse@^2.0.1: 1127 1094 version "2.0.1" 1128 1095 resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" ··· 1154 1121 version "1.0.0" 1155 1122 resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 1156 1123 integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 1157 - 1158 - astral-regex@^2.0.0: 1159 - version "2.0.0" 1160 - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 1161 - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 1162 1124 1163 1125 async-limiter@~1.0.0: 1164 1126 version "1.0.1" ··· 1385 1347 resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 1386 1348 integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 1387 1349 1388 - chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: 1350 + chalk@^2.3.0, chalk@^2.4.1: 1389 1351 version "2.4.2" 1390 1352 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1391 1353 integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== ··· 1712 1674 dependencies: 1713 1675 ms "2.0.0" 1714 1676 1715 - debug@4, debug@4.3.3, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: 1677 + debug@4, debug@4.3.3, debug@^4.1.1, debug@^4.3.2: 1716 1678 version "4.3.3" 1717 1679 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 1718 1680 integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== ··· 1932 1894 graceful-fs "^4.2.4" 1933 1895 tapable "^2.2.0" 1934 1896 1935 - enquirer@^2.3.5: 1936 - version "2.3.6" 1937 - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 1938 - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 1939 - dependencies: 1940 - ansi-colors "^4.1.1" 1941 - 1942 1897 entities@^2.0.0: 1943 1898 version "2.2.0" 1944 1899 resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" ··· 2071 2026 optionalDependencies: 2072 2027 source-map "~0.6.1" 2073 2028 2074 - eslint-config-prettier@^6.15.0: 2075 - version "6.15.0" 2076 - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" 2077 - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== 2078 - dependencies: 2079 - get-stdin "^6.0.0" 2029 + eslint-config-prettier@^8.4.0: 2030 + version "8.4.0" 2031 + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.4.0.tgz#8e6d17c7436649e98c4c2189868562921ef563de" 2032 + integrity sha512-CFotdUcMY18nGRo5KGsnNxpznzhkopOcOo0InID+sgQssPrzjvsyKZPvOgymTFeHrFuC3Tzdf2YndhXtULK9Iw== 2080 2033 2081 2034 eslint-import-resolver-node@0.3.4: 2082 2035 version "0.3.4" ··· 2086 2039 debug "^2.6.9" 2087 2040 resolve "^1.13.1" 2088 2041 2089 - eslint-plugin-prettier@^3.1.4: 2090 - version "3.4.1" 2091 - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5" 2092 - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== 2042 + eslint-plugin-prettier@^4.0.0: 2043 + version "4.0.0" 2044 + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" 2045 + integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== 2093 2046 dependencies: 2094 2047 prettier-linter-helpers "^1.0.0" 2095 2048 ··· 2101 2054 esrecurse "^4.3.0" 2102 2055 estraverse "^4.1.1" 2103 2056 2104 - eslint-utils@^2.1.0: 2105 - version "2.1.0" 2106 - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 2107 - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 2057 + eslint-scope@^7.1.1: 2058 + version "7.1.1" 2059 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 2060 + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 2108 2061 dependencies: 2109 - eslint-visitor-keys "^1.1.0" 2062 + esrecurse "^4.3.0" 2063 + estraverse "^5.2.0" 2110 2064 2111 2065 eslint-utils@^3.0.0: 2112 2066 version "3.0.0" ··· 2115 2069 dependencies: 2116 2070 eslint-visitor-keys "^2.0.0" 2117 2071 2118 - eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 2119 - version "1.3.0" 2120 - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 2121 - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 2122 - 2123 2072 eslint-visitor-keys@^2.0.0: 2124 2073 version "2.1.0" 2125 2074 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 2126 2075 integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 2127 2076 2128 - eslint@^7.14.0: 2129 - version "7.32.0" 2130 - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" 2131 - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== 2077 + eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: 2078 + version "3.3.0" 2079 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 2080 + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 2081 + 2082 + eslint@^8.9.0: 2083 + version "8.9.0" 2084 + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.9.0.tgz#a2a8227a99599adc4342fd9b854cb8d8d6412fdb" 2085 + integrity sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q== 2132 2086 dependencies: 2133 - "@babel/code-frame" "7.12.11" 2134 - "@eslint/eslintrc" "^0.4.3" 2135 - "@humanwhocodes/config-array" "^0.5.0" 2087 + "@eslint/eslintrc" "^1.1.0" 2088 + "@humanwhocodes/config-array" "^0.9.2" 2136 2089 ajv "^6.10.0" 2137 2090 chalk "^4.0.0" 2138 2091 cross-spawn "^7.0.2" 2139 - debug "^4.0.1" 2092 + debug "^4.3.2" 2140 2093 doctrine "^3.0.0" 2141 - enquirer "^2.3.5" 2142 2094 escape-string-regexp "^4.0.0" 2143 - eslint-scope "^5.1.1" 2144 - eslint-utils "^2.1.0" 2145 - eslint-visitor-keys "^2.0.0" 2146 - espree "^7.3.1" 2095 + eslint-scope "^7.1.1" 2096 + eslint-utils "^3.0.0" 2097 + eslint-visitor-keys "^3.3.0" 2098 + espree "^9.3.1" 2147 2099 esquery "^1.4.0" 2148 2100 esutils "^2.0.2" 2149 2101 fast-deep-equal "^3.1.3" 2150 2102 file-entry-cache "^6.0.1" 2151 2103 functional-red-black-tree "^1.0.1" 2152 - glob-parent "^5.1.2" 2104 + glob-parent "^6.0.1" 2153 2105 globals "^13.6.0" 2154 - ignore "^4.0.6" 2106 + ignore "^5.2.0" 2155 2107 import-fresh "^3.0.0" 2156 2108 imurmurhash "^0.1.4" 2157 2109 is-glob "^4.0.0" 2158 - js-yaml "^3.13.1" 2110 + js-yaml "^4.1.0" 2159 2111 json-stable-stringify-without-jsonify "^1.0.1" 2160 2112 levn "^0.4.1" 2161 2113 lodash.merge "^4.6.2" 2162 2114 minimatch "^3.0.4" 2163 2115 natural-compare "^1.4.0" 2164 2116 optionator "^0.9.1" 2165 - progress "^2.0.0" 2166 - regexpp "^3.1.0" 2167 - semver "^7.2.1" 2168 - strip-ansi "^6.0.0" 2117 + regexpp "^3.2.0" 2118 + strip-ansi "^6.0.1" 2169 2119 strip-json-comments "^3.1.0" 2170 - table "^6.0.9" 2171 2120 text-table "^0.2.0" 2172 2121 v8-compile-cache "^2.0.3" 2173 2122 2174 - espree@^7.3.0, espree@^7.3.1: 2175 - version "7.3.1" 2176 - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 2177 - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 2123 + espree@^9.3.1: 2124 + version "9.3.1" 2125 + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" 2126 + integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== 2178 2127 dependencies: 2179 - acorn "^7.4.0" 2128 + acorn "^8.7.0" 2180 2129 acorn-jsx "^5.3.1" 2181 - eslint-visitor-keys "^1.3.0" 2130 + eslint-visitor-keys "^3.3.0" 2182 2131 2183 - esprima@^4.0.0, esprima@^4.0.1: 2132 + esprima@^4.0.1: 2184 2133 version "4.0.1" 2185 2134 resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 2186 2135 integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== ··· 2570 2519 has "^1.0.3" 2571 2520 has-symbols "^1.0.1" 2572 2521 2573 - get-stdin@^6.0.0: 2574 - version "6.0.0" 2575 - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" 2576 - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== 2577 - 2578 2522 get-stream@^4.1.0: 2579 2523 version "4.1.0" 2580 2524 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" ··· 2621 2565 dependencies: 2622 2566 is-glob "^4.0.1" 2623 2567 2568 + glob-parent@^6.0.1: 2569 + version "6.0.2" 2570 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 2571 + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 2572 + dependencies: 2573 + is-glob "^4.0.3" 2574 + 2624 2575 glob-to-regexp@^0.4.1: 2625 2576 version "0.4.1" 2626 2577 resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" ··· 2682 2633 merge2 "^1.2.3" 2683 2634 slash "^3.0.0" 2684 2635 2685 - globby@^11.0.3: 2636 + globby@^11.0.4: 2686 2637 version "11.1.0" 2687 2638 resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 2688 2639 integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== ··· 3040 2991 resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 3041 2992 integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 3042 2993 3043 - is-glob@^4.0.0, is-glob@^4.0.1: 2994 + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 3044 2995 version "4.0.3" 3045 2996 resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 3046 2997 integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== ··· 3168 3119 merge-stream "^2.0.0" 3169 3120 supports-color "^8.0.0" 3170 3121 3171 - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 3122 + "js-tokens@^3.0.0 || ^4.0.0": 3172 3123 version "4.0.0" 3173 3124 resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 3174 3125 integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 3175 3126 3176 - js-yaml@4.1.0: 3127 + js-yaml@4.1.0, js-yaml@^4.1.0: 3177 3128 version "4.1.0" 3178 3129 resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 3179 3130 integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 3180 3131 dependencies: 3181 3132 argparse "^2.0.1" 3182 3133 3183 - js-yaml@^3.13.1: 3184 - version "3.14.1" 3185 - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 3186 - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 3187 - dependencies: 3188 - argparse "^1.0.7" 3189 - esprima "^4.0.0" 3190 - 3191 3134 jsbn@~0.1.0: 3192 3135 version "0.1.1" 3193 3136 resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" ··· 3239 3182 version "0.4.1" 3240 3183 resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 3241 3184 integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 3242 - 3243 - json-schema-traverse@^1.0.0: 3244 - version "1.0.0" 3245 - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 3246 - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 3247 3185 3248 3186 json-schema@0.4.0: 3249 3187 version "0.4.0" ··· 3570 3508 resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 3571 3509 integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 3572 3510 3573 - lodash.truncate@^4.4.2: 3574 - version "4.4.2" 3575 - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 3576 - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 3577 - 3578 3511 lodash@4, lodash@4.17.21, lodash@^4.17.19, lodash@^4.17.4: 3579 3512 version "4.17.21" 3580 3513 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" ··· 4304 4237 dependencies: 4305 4238 fast-diff "^1.1.2" 4306 4239 4307 - prettier@^2.1.1: 4240 + prettier@^2.5.1: 4308 4241 version "2.5.1" 4309 4242 resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" 4310 4243 integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== ··· 4325 4258 version "0.11.10" 4326 4259 resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 4327 4260 integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 4328 - 4329 - progress@^2.0.0: 4330 - version "2.0.3" 4331 - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 4332 - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 4333 4261 4334 4262 promise-inflight@^1.0.1: 4335 4263 version "1.0.1" ··· 4504 4432 dependencies: 4505 4433 resolve "^1.9.0" 4506 4434 4507 - regexpp@^3.1.0: 4435 + regexpp@^3.2.0: 4508 4436 version "3.2.0" 4509 4437 resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 4510 4438 integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== ··· 4591 4519 tunnel-agent "^0.6.0" 4592 4520 uuid "^3.3.2" 4593 4521 4594 - require-from-string@^2.0.2: 4595 - version "2.0.2" 4596 - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 4597 - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 4598 - 4599 4522 requires-port@^1.0.0: 4600 4523 version "1.0.0" 4601 4524 resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" ··· 4745 4668 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 4746 4669 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 4747 4670 4748 - semver@7.3.5, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: 4671 + semver@7.3.5, semver@^7.3.2, semver@^7.3.5: 4749 4672 version "7.3.5" 4750 4673 resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 4751 4674 integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== ··· 4894 4817 resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 4895 4818 integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 4896 4819 4897 - slice-ansi@^4.0.0: 4898 - version "4.0.0" 4899 - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 4900 - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 4901 - dependencies: 4902 - ansi-styles "^4.0.0" 4903 - astral-regex "^2.0.0" 4904 - is-fullwidth-code-point "^3.0.0" 4905 - 4906 4820 sonic-boom@^1.0.2: 4907 4821 version "1.4.1" 4908 4822 resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" ··· 4982 4896 resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" 4983 4897 integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== 4984 4898 4985 - sprintf-js@~1.0.2: 4986 - version "1.0.3" 4987 - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 4988 - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 4989 - 4990 4899 sshpk@^1.7.0: 4991 4900 version "1.17.0" 4992 4901 resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" ··· 5026 4935 dependencies: 5027 4936 graceful-fs "^4.1.3" 5028 4937 5029 - string-width@^4.1.0, string-width@^4.2.3: 4938 + string-width@^4.1.0: 5030 4939 version "4.2.3" 5031 4940 resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 5032 4941 integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== ··· 5140 5049 version "3.2.4" 5141 5050 resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 5142 5051 integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 5143 - 5144 - table@^6.0.9: 5145 - version "6.8.0" 5146 - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" 5147 - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== 5148 - dependencies: 5149 - ajv "^8.0.1" 5150 - lodash.truncate "^4.4.2" 5151 - slice-ansi "^4.0.0" 5152 - string-width "^4.2.3" 5153 - strip-ansi "^6.0.1" 5154 5052 5155 5053 tapable@^2.1.1, tapable@^2.2.0: 5156 5054 version "2.2.1"