├── .sfdx ├── orgs │ └── test-d7njhea2fazi@example.com │ │ ├── maxrevision.json │ │ ├── sourcePathInfos.json │ │ └── sourcePathInfos.json.bak └── sfdx-config.json ├── .DS_Store ├── .gitignore ├── force-app └── main │ └── default │ ├── lwc │ ├── .eslintrc.json │ ├── .DS_Store │ ├── demoAsync │ │ ├── demoAsync.js-meta.xml │ │ ├── demoAsync.html │ │ └── demoAsync.js │ └── jsconfig.json │ ├── tabs │ └── Demo.tab-meta.xml │ ├── permissionsets │ └── AsyncJS.permissionset-meta.xml │ ├── flexipages │ ├── Async_JS_UtilityBar.flexipage-meta.xml │ └── Demo.flexipage-meta.xml │ ├── applications │ └── AsyncJS.app-meta.xml │ └── appMenus │ └── AppSwitcher.appMenu-meta.xml ├── .vscode ├── settings.json └── tasks.json ├── @ELTOROIT └── scripts │ ├── AnonymousApex.txt │ └── CreateOrg.sh ├── sfdx-project.json ├── .prettierrc ├── config └── project-scratch-def.json ├── .forceignore └── README.md /.sfdx/orgs/test-d7njhea2fazi@example.com/maxrevision.json: -------------------------------------------------------------------------------- 1 | 20 -------------------------------------------------------------------------------- /.sfdx/sfdx-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultusername": "AsyncJS" 3 | } -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eltoroit/ETAsyncJS/HEAD/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .sfdx 2 | .DS_Store 3 | jsconfig.json 4 | .vscode/settings.json 5 | node_modules 6 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@salesforce/eslint-config-lwc/recommended" 3 | } -------------------------------------------------------------------------------- /force-app/main/default/lwc/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eltoroit/ETAsyncJS/HEAD/force-app/main/default/lwc/.DS_Store -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.nodePath": "/Users/aperez/.vscode/extensions/salesforce.salesforcedx-vscode-lwc-47.17.1/node_modules", 3 | "salesforcedx-vscode-core.show-cli-success-msg": false 4 | } -------------------------------------------------------------------------------- /@ELTOROIT/scripts/AnonymousApex.txt: -------------------------------------------------------------------------------- 1 | //Enable debug mode for the default scratch org user 2 | User defaultUser = [SELECT Id FROM User WHERE Id = :UserInfo.getUserId()]; 3 | defaultUser.UserPreferencesUserDebugModePref = true; 4 | update defaultUser; -------------------------------------------------------------------------------- /sfdx-project.json: -------------------------------------------------------------------------------- 1 | { 2 | "packageDirectories": [ 3 | { 4 | "path": "force-app", 5 | "default": true 6 | } 7 | ], 8 | "namespace": "", 9 | "sfdcLoginUrl": "https://login.salesforce.com", 10 | "sourceApiVersion": "47.0" 11 | } -------------------------------------------------------------------------------- /force-app/main/default/tabs/Demo.tab-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Created by Lightning App Builder 4 | Demo 5 | 6 | Custom63: Chip 7 | 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none", 3 | "useTabs": true, 4 | "tabWidth": 4, 5 | "printWidth": 150, 6 | "overrides": [ 7 | { 8 | "files": "**/lwc/**/*.html", 9 | "options": { "parser": "lwc" } 10 | }, 11 | { 12 | "files": "*.{cmp,page,component}", 13 | "options": { "parser": "html" } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/demoAsync/demoAsync.js-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 47.0 4 | true 5 | 6 | lightning__AppPage 7 | 8 | -------------------------------------------------------------------------------- /config/project-scratch-def.json: -------------------------------------------------------------------------------- 1 | { 2 | "orgName": "AW Computing", 3 | "edition": "Developer", 4 | "settings": { 5 | "lightningExperienceSettings": { 6 | "enableS1DesktopEnabled": true 7 | }, 8 | "mobileSettings": { 9 | "enableS1EncryptedStoragePref2": false 10 | }, 11 | "languageSettings": { 12 | "enableTranslationWorkbench": true 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /.forceignore: -------------------------------------------------------------------------------- 1 | # List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status 2 | # More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm 3 | # 4 | 5 | package.xml 6 | 7 | # LWC configuration files 8 | **/jsconfig.json 9 | **/.eslintrc.json 10 | 11 | # LWC Jest 12 | **/__tests__/** 13 | 14 | # Igenore this... 15 | **/profiles/** -------------------------------------------------------------------------------- /force-app/main/default/lwc/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true, 4 | "baseUrl": ".", 5 | "paths": { 6 | "c/demoAsync": [ 7 | "demoAsync/demoAsync.js" 8 | ] 9 | } 10 | }, 11 | "include": [ 12 | "**/*", 13 | "../../../../.sfdx/typings/lwc/**/*.d.ts" 14 | ], 15 | "typeAcquisition": { 16 | "include": [ 17 | "jest" 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [{ 6 | "label": "ELTOROIT PushWhenBuild", 7 | "type": "shell", 8 | "command": "sfdx force:source:push --json", 9 | "group": { 10 | "kind": "build", 11 | "isDefault": true 12 | }, 13 | "presentation": { 14 | "reveal": "always", 15 | "panel": "dedicated", 16 | "clear": true, 17 | "focus": false, 18 | "showReuseMessage": true 19 | } 20 | }] 21 | } 22 | -------------------------------------------------------------------------------- /force-app/main/default/permissionsets/AsyncJS.permissionset-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AsyncJS 5 | true 6 | 7 | false 8 | 9 | 10 | Demo 11 | Visible 12 | 13 | 14 | -------------------------------------------------------------------------------- /force-app/main/default/flexipages/Async_JS_UtilityBar.flexipage-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | utilityItems 5 | Region 6 | 7 | 8 | backgroundComponents 9 | Background 10 | 11 | Async JS UtilityBar 12 | 15 | UtilityBar 16 | 17 | -------------------------------------------------------------------------------- /force-app/main/default/applications/AsyncJS.app-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #0070D2 5 | false 6 | 7 | Large 8 | false 9 | false 10 | 11 | Standard 12 | standard-home 13 | Demo 14 | Lightning 15 | Async_JS_UtilityBar 16 | 17 | -------------------------------------------------------------------------------- /force-app/main/default/flexipages/Demo.flexipage-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | region1 5 | Region 6 | 7 | 8 | 9 | demoAsync 10 | 11 | region2 12 | Region 13 | 14 | 15 | region3 16 | Region 17 | 18 | Demo 19 | 22 | AppPage 23 | 24 | -------------------------------------------------------------------------------- /@ELTOROIT/scripts/CreateOrg.sh: -------------------------------------------------------------------------------- 1 | # Execute in Mac using: ./@ELTOROIT/scripts/CreateOrg.sh 2 | ### START: Functions 3 | function showStatus() { 4 | echo "\033[35m$1\033[0m" 5 | } 6 | function showPrompt() { 7 | echo "\033[31mOperation Completed\033[0m" 8 | # echo "\033[31m$1\033[0m" 9 | # pause 'Press [Enter] key to continue...' 10 | } 11 | function pause(){ 12 | read -p "$*" 13 | } 14 | ### END: Functions 15 | 16 | # --- 17 | showStatus "*** Creating scratch Org..." 18 | sfdx force:org:create -f config/project-scratch-def.json --setdefaultusername --setalias AsyncJS -d 1 19 | showPrompt "Confirm..." 20 | 21 | # --- 22 | showStatus "*** Opening scratch Org..." 23 | sfdx force:org:open 24 | showPrompt "Confirm..." 25 | 26 | # --- 27 | ### Winter '20, Org had to be configured for app pages to work on multipe factors. No need for Spring '20 28 | ### sfdx force:org:open --path=/lightning/setup/SalesforceMobileAppQuickStart/home 29 | ### showPrompt "Configure metadata before pushing" 30 | 31 | # --- 32 | showStatus "*** Pushing metadata to scratch Org..." 33 | sfdx force:source:push 34 | showPrompt "Confirm..." 35 | 36 | # --- 37 | showStatus "*** Assigning permission set to your user..." 38 | sfdx force:user:permset:assign --permsetname AsyncJS --json 39 | showPrompt "Confirm..." 40 | 41 | # --- 42 | showStatus "*** Execute Anonymous Apex..." 43 | sfdx force:apex:execute -f './@ELTOROIT/scripts/AnonymousApex.txt' 44 | showPrompt "Confirm..." 45 | 46 | --- 47 | # showStatus "*** Creating data using ETCopyData plugin" 48 | # sfdx ETCopyData:export -c './@ELTOROIT/data' --loglevel trace --json 49 | # sfdx ETCopyData:import -c './@ELTOROIT/data' --loglevel trace --json 50 | # showPrompt "Confirm..." 51 | 52 | # --- 53 | # showStatus "Runing Apex tests" 54 | # sfdx force:apex:test:run --codecoverage --synchronous --verbose --json --resultformat json | jq 'del(.result.tests, .result.coverage)' --json 55 | # showPrompt "Confirm..." 56 | 57 | # --- 58 | # showStatus "*** Generate Password..." 59 | # sfdx force:user:password:generate --json 60 | # sfdx force:user:display 61 | # showPrompt "Confirm..." 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | standard__Platform 5 | CustomApplication 6 | 7 | 8 | standard__Sales 9 | CustomApplication 10 | 11 | 12 | standard__Service 13 | CustomApplication 14 | 15 | 16 | standard__Marketing 17 | CustomApplication 18 | 19 | 20 | standard__ServiceConsole 21 | CustomApplication 22 | 23 | 24 | standard__AppLauncher 25 | CustomApplication 26 | 27 | 28 | standard__Community 29 | CustomApplication 30 | 31 | 32 | standard__Sites 33 | CustomApplication 34 | 35 | 36 | standard__Chatter 37 | CustomApplication 38 | 39 | 40 | standard__Content 41 | CustomApplication 42 | 43 | 44 | standard__Insights 45 | CustomApplication 46 | 47 | 48 | standard__LightningSales 49 | CustomApplication 50 | 51 | 52 | standard__AllTabSet 53 | CustomApplication 54 | 55 | 56 | CPQIntegrationUserApp 57 | ConnectedApp 58 | 59 | 60 | standard__LightningBolt 61 | CustomApplication 62 | 63 | 64 | AsyncJS 65 | CustomApplication 66 | 67 | 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Asynchronous JavaScript using Salesforce Lightning Web Components (LWC) 2 | 3 |

4 | Asynchronous JavaScript using Salesforce Lightning Web Components (LWC) 5 |

6 | 7 | This week I was teaching [a class on LWC](https://trailhead.salesforce.com/en/academy/classes/dex602-programming-lightning-web-components/) in Chicago, IL and the students asked me about asynchronous JavaScript. Being such an important topic, I built a simple demo that I have cleaned a bit to explains the different ways to work with Asynchronous JavaScript from LWC. 8 | 9 | This is the idea behind this simple demo: We have three operations (A, B, C) which can take any amount of time to complete, therefore we need to execute them asynchronously. As a matter of fact, you control when each of these processes finishes and in which order by toggling their button on the screen, or you can fail the operations to see the exception behavior. 10 | 11 | I have created a repo for this SFDX project with the LWC code ([click here to view it](https://github.com/eltoroit/ETAsyncJS)) 12 | 13 |

14 | Visit Repo 15 |

16 | 17 | The operations can be done in three different scenarios: 18 | 19 | - Any Order: The operations run in parallel and we can take some action when any of those finish in the order they are completing. The code can be written with Callbacks _anyOrderCallback()_, Promises _anyOrderPromises()_ but Async/Await can’t be used here. 20 | - Serial: The operations have to be completed in serial mode. We must complete A, before starting B, and finish B before starting C. The operation will only complete if the correct toggle is used. The code can be written with Callbacks _serialCallback()_, Promises _serialPromises()_ or Async/Await _serialAsyncAwait()_. 21 | - After All: This last operation can only be done with Promises _afterAllPromises()_. The idea is that we will wait until all the operations have completed, regardless of the order. This is a good technique if you want to download some files for example, and we do not care about the order in which they arrive, we only care that all of them have arrived. 22 | 23 | I will now wait asynchronously for your feedback and comments :-) 24 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/demoAsync/demoAsync.html: -------------------------------------------------------------------------------- 1 | 65 | -------------------------------------------------------------------------------- /force-app/main/default/lwc/demoAsync/demoAsync.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | /* eslint-disable @lwc/lwc/no-async-operation */ 3 | /* eslint-disable no-alert */ 4 | import { LightningElement, track } from "lwc"; 5 | 6 | export default class DemoAsync extends LightningElement { 7 | @track stoppedA = false; 8 | @track stoppedB = false; 9 | @track stoppedC = false; 10 | @track failed = false; 11 | 12 | // Toggles 13 | handleChangeA(event) { 14 | this.stoppedA = event.target.checked; 15 | } 16 | handleChangeB(event) { 17 | this.stoppedB = event.target.checked; 18 | } 19 | handleChangeC(event) { 20 | this.stoppedC = event.target.checked; 21 | } 22 | 23 | // Buttons 24 | fail() { 25 | this.failed = true; 26 | } 27 | reset() { 28 | console.log("Reset"); 29 | this.stoppedA = false; 30 | this.stoppedB = false; 31 | this.stoppedC = false; 32 | this.failed = false; 33 | } 34 | 35 | // Any Order 36 | anyOrderCallback() { 37 | this.reset(); 38 | console.log("Callback started"); 39 | this.waitForToggleCallback("A", (whichOne, success) => { 40 | console.log(`${whichOne} completed: Success? ${success}`); 41 | }); 42 | this.waitForToggleCallback("B", (whichOne, success) => { 43 | console.log(`${whichOne} completed: Success? ${success}`); 44 | }); 45 | this.waitForToggleCallback("C", (whichOne, success) => { 46 | console.log(`${whichOne} completed: Success? ${success}`); 47 | }); 48 | } 49 | anyOrderPromises() { 50 | this.reset(); 51 | console.log("Promises started"); 52 | this.waitForTogglePromise("A") 53 | .then(whichOne => { 54 | console.log(`${whichOne} completed: Success? TRUE`); 55 | }) 56 | .catch(whichOne => { 57 | console.log(`${whichOne} completed: Success? FALSE`); 58 | }); 59 | this.waitForTogglePromise("B") 60 | .then(whichOne => { 61 | console.log(`${whichOne} completed: Success? TRUE`); 62 | }) 63 | .catch(whichOne => { 64 | console.log(`${whichOne} completed: Success? FALSE`); 65 | }); 66 | this.waitForTogglePromise("C") 67 | .then(whichOne => { 68 | console.log(`${whichOne} completed: Success? TRUE`); 69 | }) 70 | .catch(whichOne => { 71 | console.log(`${whichOne} completed: Success? FALSE`); 72 | }); 73 | } 74 | 75 | // Serial 76 | serialCallback() { 77 | this.reset(); 78 | console.log("Callback serial"); 79 | this.waitForToggleCallback("A", (whichOne1, success1) => { 80 | console.log(`${whichOne1} completed: Success? ${success1}`); 81 | this.stoppedB = false; 82 | this.stoppedC = false; 83 | this.waitForToggleCallback("B", (whichOne2, success2) => { 84 | console.log(`${whichOne2} completed: Success? ${success2}`); 85 | this.stoppedC = false; 86 | this.waitForToggleCallback("C", (whichOne3, success3) => { 87 | console.log(`${whichOne3} completed: Success? ${success3}`); 88 | }); 89 | }); 90 | }); 91 | } 92 | serialPromises() { 93 | this.reset(); 94 | console.log("Promises serial"); 95 | 96 | this.waitForTogglePromise("A") 97 | .then(whichOne => { 98 | console.log(`${whichOne} completed: Success? TRUE`); 99 | this.stoppedB = false; 100 | this.stoppedC = false; 101 | return this.waitForTogglePromise("B"); 102 | }) 103 | .then(whichOne => { 104 | console.log(`${whichOne} completed: Success? TRUE`); 105 | this.stoppedC = false; 106 | return this.waitForTogglePromise("C"); 107 | }) 108 | .then(whichOne => { 109 | console.log(`${whichOne} completed: Success? TRUE`); 110 | }) 111 | .catch(whichOne => { 112 | console.log(`${whichOne} completed: Success? FALSE`); 113 | }); 114 | } 115 | async serialAsyncAwait() { 116 | this.reset(); 117 | console.log("Async/Await started"); 118 | 119 | let whichOne; 120 | try { 121 | whichOne = await this.waitForTogglePromise("A"); 122 | console.log(`${whichOne} completed: Success? TRUE`); 123 | this.stoppedB = false; 124 | this.stoppedC = false; 125 | whichOne = await this.waitForTogglePromise("B"); 126 | console.log(`${whichOne} completed: Success? TRUE`); 127 | this.stoppedC = false; 128 | whichOne = await this.waitForTogglePromise("C"); 129 | console.log(`${whichOne} completed: Success? TRUE`); 130 | } catch (ex) { 131 | console.log("Error", ex); 132 | } 133 | } 134 | 135 | // After All 136 | afterAllPromises() { 137 | this.reset(); 138 | console.log("All, any order"); 139 | let promises = []; 140 | promises.push(this.waitForTogglePromise("A")); 141 | promises.push(this.waitForTogglePromise("B")); 142 | promises.push(this.waitForTogglePromise("C")); 143 | Promise.all(promises).then(values => { 144 | console.log(`${JSON.stringify(values)} completed: Success? TRUE`); 145 | }); 146 | } 147 | 148 | // Helper functions 149 | waitForToggleCallback(whichOne, callback) { 150 | const timer = setInterval(() => { 151 | const status = this.checkStatus(whichOne); 152 | if (status.complete) { 153 | clearInterval(timer); 154 | callback(whichOne, status.success); 155 | } 156 | }, 100); 157 | } 158 | 159 | waitForTogglePromise(whichOne) { 160 | return new Promise((resolve, reject) => { 161 | const timer = setInterval(() => { 162 | const status = this.checkStatus(whichOne); 163 | if (status.complete) { 164 | clearInterval(timer); 165 | if (status.success) { 166 | resolve(whichOne); 167 | } else { 168 | reject(whichOne); 169 | } 170 | } 171 | }, 100); 172 | }); 173 | } 174 | 175 | checkStatus(whichOne) { 176 | let status = { 177 | complete: false, 178 | success: false 179 | }; 180 | 181 | if (this.failed) { 182 | status.success = false; 183 | status.complete = true; 184 | } else { 185 | const check = { 186 | A: this.stoppedA, 187 | B: this.stoppedB, 188 | C: this.stoppedC 189 | }; 190 | if (check[whichOne]) { 191 | status.success = true; 192 | status.complete = true; 193 | } 194 | } 195 | return status; 196 | } 197 | } 198 | -------------------------------------------------------------------------------- /.sfdx/orgs/test-d7njhea2fazi@example.com/sourcePathInfos.json: -------------------------------------------------------------------------------- 1 | [ 2 | [ 3 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app", 4 | { 5 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app", 6 | "isDirectory": true, 7 | "size": 96, 8 | "modifiedTime": 1581103186749, 9 | "changeTime": 1581103186749, 10 | "contentHash": "b28b7af69320201d1cf206ebf28373980add1451", 11 | "isMetadataFile": false, 12 | "state": "u", 13 | "isWorkspace": false, 14 | "isArtifactRoot": true 15 | } 16 | ], 17 | [ 18 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main", 19 | { 20 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main", 21 | "isDirectory": true, 22 | "size": 96, 23 | "modifiedTime": 1581103186749, 24 | "changeTime": 1581103186749, 25 | "contentHash": "7505d64a54e061b7acd54ccd58b49dc43500b635", 26 | "isMetadataFile": false, 27 | "state": "u", 28 | "isWorkspace": false, 29 | "isArtifactRoot": false 30 | } 31 | ], 32 | [ 33 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default", 34 | { 35 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default", 36 | "isDirectory": true, 37 | "size": 256, 38 | "modifiedTime": 1581104758463, 39 | "changeTime": 1581104758463, 40 | "contentHash": "605f07c15ab90b9e7b3e271c72eb055bb46d6de8", 41 | "isMetadataFile": false, 42 | "state": "u" 43 | } 44 | ], 45 | [ 46 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc", 47 | { 48 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc", 49 | "isDirectory": true, 50 | "size": 192, 51 | "modifiedTime": 1581113779550, 52 | "changeTime": 1581113779550, 53 | "contentHash": "a952a6adb69d9879fb011a39678255f6e8979f2c", 54 | "isMetadataFile": false, 55 | "state": "u", 56 | "isWorkspace": false 57 | } 58 | ], 59 | [ 60 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync", 61 | { 62 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync", 63 | "isDirectory": true, 64 | "size": 160, 65 | "modifiedTime": 1581018761000, 66 | "changeTime": 1581103373950, 67 | "contentHash": "2c54df0a15ad9f2e820539f11a43fd6d2df13136", 68 | "isMetadataFile": false, 69 | "state": "u", 70 | "isWorkspace": false, 71 | "isArtifactRoot": false 72 | } 73 | ], 74 | [ 75 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.html", 76 | { 77 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.html", 78 | "isDirectory": false, 79 | "size": 2282, 80 | "modifiedTime": 1581113523549, 81 | "changeTime": 1581113523549, 82 | "contentHash": "62985e64a4092631d8f35faf6eeccc230da2f24e", 83 | "isMetadataFile": false, 84 | "state": "u", 85 | "isWorkspace": false 86 | } 87 | ], 88 | [ 89 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js", 90 | { 91 | "state": "u", 92 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js", 93 | "isDirectory": false, 94 | "isMetadataFile": false, 95 | "size": 4988, 96 | "modifiedTime": 1581113986096, 97 | "changeTime": 1581113986096, 98 | "isWorkspace": false, 99 | "contentHash": "376989cee4ebaa23f49ddb12131f53e138952fd8" 100 | } 101 | ], 102 | [ 103 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js-meta.xml", 104 | { 105 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js-meta.xml", 106 | "isDirectory": false, 107 | "size": 268, 108 | "modifiedTime": 1581025213000, 109 | "changeTime": 1581103373945, 110 | "contentHash": "d8f3e4ad5b191b8520a786956d63508163be2d86", 111 | "isMetadataFile": true, 112 | "state": "u", 113 | "isWorkspace": false, 114 | "isArtifactRoot": false 115 | } 116 | ], 117 | [ 118 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS", 119 | { 120 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS", 121 | "isDirectory": true, 122 | "size": 416, 123 | "modifiedTime": 1581105441488, 124 | "changeTime": 1581105441488, 125 | "contentHash": "d24243e00f2fce2741ad45417adb3fea4ba8ebfb", 126 | "isMetadataFile": false, 127 | "state": "u", 128 | "isWorkspace": true 129 | } 130 | ], 131 | [ 132 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Async_JS_UtilityBar.flexipage-meta.xml", 133 | { 134 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Async_JS_UtilityBar.flexipage-meta.xml", 135 | "isDirectory": false, 136 | "size": 503, 137 | "modifiedTime": 1581104758447, 138 | "changeTime": 1581104758447, 139 | "contentHash": "801428cde8b73ede431be885ad2a5f103c547b08", 140 | "isMetadataFile": true, 141 | "state": "u" 142 | } 143 | ], 144 | [ 145 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Demo.flexipage-meta.xml", 146 | { 147 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Demo.flexipage-meta.xml", 148 | "isDirectory": false, 149 | "size": 702, 150 | "modifiedTime": 1581104758451, 151 | "changeTime": 1581104758451, 152 | "contentHash": "316227ce093f8e435c3ab4a74fe11c7194bceb78", 153 | "isMetadataFile": true, 154 | "state": "u" 155 | } 156 | ], 157 | [ 158 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs/Demo.tab-meta.xml", 159 | { 160 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs/Demo.tab-meta.xml", 161 | "isDirectory": false, 162 | "size": 266, 163 | "modifiedTime": 1581104758454, 164 | "changeTime": 1581104758454, 165 | "contentHash": "68e2c0f8e01f635ff589bf3dbef80bdb896b37ad", 166 | "isMetadataFile": true, 167 | "state": "u" 168 | } 169 | ], 170 | [ 171 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications/AsyncJS.app-meta.xml", 172 | { 173 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications/AsyncJS.app-meta.xml", 174 | "isDirectory": false, 175 | "size": 625, 176 | "modifiedTime": 1581104758457, 177 | "changeTime": 1581104758457, 178 | "contentHash": "e1c9eea9fc83d67a4942e95b87a88ee54214add6", 179 | "isMetadataFile": true, 180 | "state": "u" 181 | } 182 | ], 183 | [ 184 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets/AsyncJS.permissionset-meta.xml", 185 | { 186 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets/AsyncJS.permissionset-meta.xml", 187 | "isDirectory": false, 188 | "size": 442, 189 | "modifiedTime": 1581105166766, 190 | "changeTime": 1581105166766, 191 | "contentHash": "000eaf6f6e3ab9596ca9e2b94c3fd40f629c7651", 192 | "isMetadataFile": true, 193 | "state": "u" 194 | } 195 | ], 196 | [ 197 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml", 198 | { 199 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml", 200 | "isDirectory": false, 201 | "size": 1997, 202 | "modifiedTime": 1581104758464, 203 | "changeTime": 1581104758464, 204 | "contentHash": "f5a9a79b0a51379be4e1ff690518debaff33ecc2", 205 | "isMetadataFile": true, 206 | "state": "u" 207 | } 208 | ], 209 | [ 210 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages", 211 | { 212 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages", 213 | "isDirectory": true, 214 | "size": 128, 215 | "modifiedTime": 1581104758450, 216 | "changeTime": 1581104758450, 217 | "contentHash": "bc7ab23383d134afa2eb5cd1bb0277c6bdac1fbd", 218 | "isMetadataFile": false, 219 | "state": "u" 220 | } 221 | ], 222 | [ 223 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs", 224 | { 225 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs", 226 | "isDirectory": true, 227 | "size": 96, 228 | "modifiedTime": 1581104758454, 229 | "changeTime": 1581104758454, 230 | "contentHash": "27e8f7b485188049a8ccb6bc0edc3694c6635ab6", 231 | "isMetadataFile": false, 232 | "state": "u" 233 | } 234 | ], 235 | [ 236 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications", 237 | { 238 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications", 239 | "isDirectory": true, 240 | "size": 96, 241 | "modifiedTime": 1581104758457, 242 | "changeTime": 1581104758457, 243 | "contentHash": "1ea3bda383b253e4d2ba974abe33872fa3c00583", 244 | "isMetadataFile": false, 245 | "state": "u" 246 | } 247 | ], 248 | [ 249 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets", 250 | { 251 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets", 252 | "isDirectory": true, 253 | "size": 96, 254 | "modifiedTime": 1581104758460, 255 | "changeTime": 1581104758460, 256 | "contentHash": "ce6f149d8382dd702976914d5cd5040c3cfb9684", 257 | "isMetadataFile": false, 258 | "state": "u" 259 | } 260 | ], 261 | [ 262 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus", 263 | { 264 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus", 265 | "isDirectory": true, 266 | "size": 96, 267 | "modifiedTime": 1581104758464, 268 | "changeTime": 1581104758464, 269 | "contentHash": "7c65d70563206b380e20367663fe2cc611131a2d", 270 | "isMetadataFile": false, 271 | "state": "u" 272 | } 273 | ] 274 | ] -------------------------------------------------------------------------------- /.sfdx/orgs/test-d7njhea2fazi@example.com/sourcePathInfos.json.bak: -------------------------------------------------------------------------------- 1 | [ 2 | [ 3 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app", 4 | { 5 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app", 6 | "isDirectory": true, 7 | "size": 96, 8 | "modifiedTime": 1581103186749, 9 | "changeTime": 1581103186749, 10 | "contentHash": "b28b7af69320201d1cf206ebf28373980add1451", 11 | "isMetadataFile": false, 12 | "state": "u", 13 | "isWorkspace": false, 14 | "isArtifactRoot": true 15 | } 16 | ], 17 | [ 18 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main", 19 | { 20 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main", 21 | "isDirectory": true, 22 | "size": 96, 23 | "modifiedTime": 1581103186749, 24 | "changeTime": 1581103186749, 25 | "contentHash": "7505d64a54e061b7acd54ccd58b49dc43500b635", 26 | "isMetadataFile": false, 27 | "state": "u", 28 | "isWorkspace": false, 29 | "isArtifactRoot": false 30 | } 31 | ], 32 | [ 33 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default", 34 | { 35 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default", 36 | "isDirectory": true, 37 | "size": 256, 38 | "modifiedTime": 1581104758463, 39 | "changeTime": 1581104758463, 40 | "contentHash": "605f07c15ab90b9e7b3e271c72eb055bb46d6de8", 41 | "isMetadataFile": false, 42 | "state": "u" 43 | } 44 | ], 45 | [ 46 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc", 47 | { 48 | "state": "u", 49 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc", 50 | "isDirectory": true, 51 | "isMetadataFile": false, 52 | "size": 192, 53 | "modifiedTime": 1581113779550, 54 | "changeTime": 1581113779550, 55 | "isWorkspace": false, 56 | "contentHash": "a952a6adb69d9879fb011a39678255f6e8979f2c" 57 | } 58 | ], 59 | [ 60 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync", 61 | { 62 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync", 63 | "isDirectory": true, 64 | "size": 160, 65 | "modifiedTime": 1581018761000, 66 | "changeTime": 1581103373950, 67 | "contentHash": "2c54df0a15ad9f2e820539f11a43fd6d2df13136", 68 | "isMetadataFile": false, 69 | "state": "u", 70 | "isWorkspace": false, 71 | "isArtifactRoot": false 72 | } 73 | ], 74 | [ 75 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.html", 76 | { 77 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.html", 78 | "isDirectory": false, 79 | "size": 2282, 80 | "modifiedTime": 1581113523549, 81 | "changeTime": 1581113523549, 82 | "contentHash": "62985e64a4092631d8f35faf6eeccc230da2f24e", 83 | "isMetadataFile": false, 84 | "state": "u", 85 | "isWorkspace": false 86 | } 87 | ], 88 | [ 89 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js", 90 | { 91 | "state": "u", 92 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js", 93 | "isDirectory": false, 94 | "isMetadataFile": false, 95 | "size": 4909, 96 | "modifiedTime": 1581113909304, 97 | "changeTime": 1581113909304, 98 | "isWorkspace": false, 99 | "contentHash": "24e292a3c4abe63a25e196d4d8e75841a953ae89" 100 | } 101 | ], 102 | [ 103 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js-meta.xml", 104 | { 105 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/lwc/demoAsync/demoAsync.js-meta.xml", 106 | "isDirectory": false, 107 | "size": 268, 108 | "modifiedTime": 1581025213000, 109 | "changeTime": 1581103373945, 110 | "contentHash": "d8f3e4ad5b191b8520a786956d63508163be2d86", 111 | "isMetadataFile": true, 112 | "state": "u", 113 | "isWorkspace": false, 114 | "isArtifactRoot": false 115 | } 116 | ], 117 | [ 118 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS", 119 | { 120 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS", 121 | "isDirectory": true, 122 | "size": 416, 123 | "modifiedTime": 1581105441488, 124 | "changeTime": 1581105441488, 125 | "contentHash": "d24243e00f2fce2741ad45417adb3fea4ba8ebfb", 126 | "isMetadataFile": false, 127 | "state": "u", 128 | "isWorkspace": true 129 | } 130 | ], 131 | [ 132 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Async_JS_UtilityBar.flexipage-meta.xml", 133 | { 134 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Async_JS_UtilityBar.flexipage-meta.xml", 135 | "isDirectory": false, 136 | "size": 503, 137 | "modifiedTime": 1581104758447, 138 | "changeTime": 1581104758447, 139 | "contentHash": "801428cde8b73ede431be885ad2a5f103c547b08", 140 | "isMetadataFile": true, 141 | "state": "u" 142 | } 143 | ], 144 | [ 145 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Demo.flexipage-meta.xml", 146 | { 147 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages/Demo.flexipage-meta.xml", 148 | "isDirectory": false, 149 | "size": 702, 150 | "modifiedTime": 1581104758451, 151 | "changeTime": 1581104758451, 152 | "contentHash": "316227ce093f8e435c3ab4a74fe11c7194bceb78", 153 | "isMetadataFile": true, 154 | "state": "u" 155 | } 156 | ], 157 | [ 158 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs/Demo.tab-meta.xml", 159 | { 160 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs/Demo.tab-meta.xml", 161 | "isDirectory": false, 162 | "size": 266, 163 | "modifiedTime": 1581104758454, 164 | "changeTime": 1581104758454, 165 | "contentHash": "68e2c0f8e01f635ff589bf3dbef80bdb896b37ad", 166 | "isMetadataFile": true, 167 | "state": "u" 168 | } 169 | ], 170 | [ 171 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications/AsyncJS.app-meta.xml", 172 | { 173 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications/AsyncJS.app-meta.xml", 174 | "isDirectory": false, 175 | "size": 625, 176 | "modifiedTime": 1581104758457, 177 | "changeTime": 1581104758457, 178 | "contentHash": "e1c9eea9fc83d67a4942e95b87a88ee54214add6", 179 | "isMetadataFile": true, 180 | "state": "u" 181 | } 182 | ], 183 | [ 184 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets/AsyncJS.permissionset-meta.xml", 185 | { 186 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets/AsyncJS.permissionset-meta.xml", 187 | "isDirectory": false, 188 | "size": 442, 189 | "modifiedTime": 1581105166766, 190 | "changeTime": 1581105166766, 191 | "contentHash": "000eaf6f6e3ab9596ca9e2b94c3fd40f629c7651", 192 | "isMetadataFile": true, 193 | "state": "u" 194 | } 195 | ], 196 | [ 197 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml", 198 | { 199 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus/AppSwitcher.appMenu-meta.xml", 200 | "isDirectory": false, 201 | "size": 1997, 202 | "modifiedTime": 1581104758464, 203 | "changeTime": 1581104758464, 204 | "contentHash": "f5a9a79b0a51379be4e1ff690518debaff33ecc2", 205 | "isMetadataFile": true, 206 | "state": "u" 207 | } 208 | ], 209 | [ 210 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages", 211 | { 212 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/flexipages", 213 | "isDirectory": true, 214 | "size": 128, 215 | "modifiedTime": 1581104758450, 216 | "changeTime": 1581104758450, 217 | "contentHash": "bc7ab23383d134afa2eb5cd1bb0277c6bdac1fbd", 218 | "isMetadataFile": false, 219 | "state": "u" 220 | } 221 | ], 222 | [ 223 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs", 224 | { 225 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/tabs", 226 | "isDirectory": true, 227 | "size": 96, 228 | "modifiedTime": 1581104758454, 229 | "changeTime": 1581104758454, 230 | "contentHash": "27e8f7b485188049a8ccb6bc0edc3694c6635ab6", 231 | "isMetadataFile": false, 232 | "state": "u" 233 | } 234 | ], 235 | [ 236 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications", 237 | { 238 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/applications", 239 | "isDirectory": true, 240 | "size": 96, 241 | "modifiedTime": 1581104758457, 242 | "changeTime": 1581104758457, 243 | "contentHash": "1ea3bda383b253e4d2ba974abe33872fa3c00583", 244 | "isMetadataFile": false, 245 | "state": "u" 246 | } 247 | ], 248 | [ 249 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets", 250 | { 251 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/permissionsets", 252 | "isDirectory": true, 253 | "size": 96, 254 | "modifiedTime": 1581104758460, 255 | "changeTime": 1581104758460, 256 | "contentHash": "ce6f149d8382dd702976914d5cd5040c3cfb9684", 257 | "isMetadataFile": false, 258 | "state": "u" 259 | } 260 | ], 261 | [ 262 | "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus", 263 | { 264 | "sourcePath": "/Users/aperez/C1MW1077J1WV-2/Projects/2020/01-JAN/AsyncJS/force-app/main/default/appMenus", 265 | "isDirectory": true, 266 | "size": 96, 267 | "modifiedTime": 1581104758464, 268 | "changeTime": 1581104758464, 269 | "contentHash": "7c65d70563206b380e20367663fe2cc611131a2d", 270 | "isMetadataFile": false, 271 | "state": "u" 272 | } 273 | ] 274 | ] --------------------------------------------------------------------------------