ember-inspector 4.13.1 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ember-cli +1 -9
- package/.github/workflows/build.yml +33 -112
- package/.github/workflows/plan-release.yml +26 -48
- package/.github/workflows/publish.yml +129 -31
- package/.prettierignore +2 -13
- package/.prettierrc.js +10 -4
- package/.release-plan.json +13 -4
- package/.stylelintignore +8 -0
- package/.stylelintrc.js +10 -1
- package/.template-lintrc.js +2 -1
- package/.tool-versions +2 -2
- package/.watchmanconfig +1 -1
- package/CHANGELOG.md +137 -0
- package/DEVELOPMENT.md +50 -0
- package/PRIVACY.md +3 -0
- package/README.md +14 -50
- package/RELEASE.md +15 -50
- package/app/components/app-picker.hbs +2 -2
- package/app/components/component-tree-item.hbs +14 -14
- package/app/components/component-tree-toolbar.hbs +17 -3
- package/app/components/{date-property-field.js → date-property-field.ts} +6 -5
- package/app/components/deprecation-item-source.hbs +1 -1
- package/app/components/deprecation-item.hbs +1 -1
- package/app/components/deprecations-toolbar.hbs +1 -1
- package/app/components/item-types.hbs +7 -7
- package/app/components/list-cell.hbs +3 -3
- package/app/components/list-content.hbs +4 -3
- package/app/components/list-content.ts +96 -0
- package/app/components/list.hbs +3 -3
- package/app/components/list.js +7 -7
- package/app/components/model-types-toolbar.hbs +3 -3
- package/app/components/object-inspector/component-parents.hbs +33 -0
- package/app/components/object-inspector/component-parents.js +43 -0
- package/app/components/object-inspector/dependent-keys.hbs +4 -4
- package/app/components/object-inspector/errors.hbs +4 -4
- package/app/components/object-inspector/properties-all.hbs +1 -1
- package/app/components/object-inspector/properties-base.js +2 -0
- package/app/components/object-inspector/properties-grouped.hbs +5 -5
- package/app/components/object-inspector/property.hbs +36 -34
- package/app/components/object-inspector/property.ts +34 -17
- package/app/components/object-inspector/sort-properties.js +12 -4
- package/app/components/object-inspector/toggle.hbs +9 -0
- package/app/components/object-inspector/toggle.js +6 -0
- package/app/components/object-inspector.hbs +11 -9
- package/app/components/object-inspector.js +1 -1
- package/app/components/promise-item.hbs +11 -11
- package/app/components/promise-item.js +8 -6
- package/app/components/promise-tree-toolbar.hbs +5 -5
- package/app/components/records-toolbar.hbs +2 -2
- package/app/components/render-item.hbs +4 -4
- package/app/components/render-item.ts +12 -9
- package/app/components/render-tree-toolbar.hbs +1 -1
- package/app/components/route-cell-name.hbs +1 -1
- package/app/components/route-cell-name.js +3 -2
- package/app/components/route-tree-toolbar.hbs +2 -2
- package/app/components/scroll-container.js +2 -0
- package/app/components/side-nav.hbs +5 -5
- package/app/components/side-nav.js +1 -1
- package/{lib/ui/addon/components → app/components/ui}/drag-handle.hbs +4 -4
- package/{lib/ui/addon/components → app/components/ui}/drag-handle.js +3 -1
- package/{lib/ui/addon/components → app/components/ui}/empty-message.hbs +1 -1
- package/{lib/ui/addon/components → app/components/ui}/error-page.hbs +3 -3
- package/{lib/ui/addon/components → app/components/ui}/resizable-column.js +1 -1
- package/{lib/ui/addon/components → app/components/ui}/toolbar-clear-button.hbs +1 -1
- package/{lib/ui/addon/components → app/components/ui}/toolbar-reload-button.hbs +1 -1
- package/{lib/ui/addon/components → app/components/ui}/toolbar-search-field.hbs +2 -2
- package/app/computed/{debounce.js → debounce.ts} +7 -5
- package/app/config/environment.d.ts +5 -2
- package/app/controllers/app-config.js +1 -0
- package/app/controllers/application.js +36 -71
- package/app/controllers/component-tree.js +26 -7
- package/app/controllers/container-type.js +2 -1
- package/app/controllers/container-types/{index.js → index.ts} +5 -2
- package/app/controllers/container-types.js +3 -6
- package/app/controllers/deprecations.js +16 -11
- package/app/controllers/libraries.js +1 -0
- package/app/controllers/model-types.js +7 -13
- package/app/controllers/promise-tree.ts +149 -0
- package/app/controllers/records.js +18 -26
- package/app/controllers/{render-tree.js → render-tree.ts} +54 -45
- package/app/controllers/route-tree.js +7 -5
- package/app/helpers/build-style.js +1 -1
- package/app/index.html +1 -19
- package/app/initializers/setup.js +1 -1
- package/app/libs/promise-assembler.ts +249 -0
- package/app/libs/resizable-columns.js +10 -10
- package/app/models/{promise.js → promise.ts} +72 -69
- package/app/{router.js → router.ts} +1 -1
- package/app/routes/app-detected.js +3 -5
- package/app/routes/application.js +9 -13
- package/app/routes/deprecations.js +7 -16
- package/app/routes/launch.js +2 -1
- package/app/routes/libraries.js +2 -1
- package/app/routes/model-type.js +2 -3
- package/app/routes/model-types.ts +57 -0
- package/app/routes/promise-tree.ts +63 -0
- package/app/routes/records.ts +78 -0
- package/app/routes/render-tree.ts +93 -0
- package/app/routes/route-tree.js +0 -1
- package/app/routes/{tab.js → tab.ts} +9 -2
- package/app/routes/whats-new.js +6 -4
- package/app/services/adapters/{basic.js → basic.ts} +36 -30
- package/app/services/adapters/{bookmarklet.js → bookmarklet.ts} +17 -24
- package/app/services/adapters/{chrome.js → chrome.ts} +1 -2
- package/app/services/adapters/{web-extension.js → web-extension.ts} +46 -46
- package/app/services/adapters/websocket.ts +40 -0
- package/app/services/layout.ts +124 -0
- package/app/services/port.ts +195 -0
- package/app/services/storage/{local.js → local.ts} +7 -20
- package/app/services/storage/{memory.js → memory.ts} +6 -21
- package/app/services/{storage.js → storage.ts} +25 -23
- package/app/styles/app.scss +1 -0
- package/app/styles/base.scss +6 -2
- package/app/styles/colors.scss +33 -31
- package/app/styles/component_tree.scss +56 -51
- package/app/styles/dropdown.scss +2 -2
- package/app/styles/ember-table.scss +3 -3
- package/app/styles/mixin.scss +26 -26
- package/app/styles/object_inspector.scss +30 -21
- package/{lib/ui/addon/styles → app/styles/ui}/_disclosure-triangle.scss +3 -1
- package/{lib/ui/addon/styles → app/styles/ui}/_drag-handle.scss +7 -7
- package/{lib/ui/addon/styles → app/styles/ui}/_empty-message.scss +1 -1
- package/{lib/ui/addon/styles → app/styles/ui}/_error-page.scss +8 -7
- package/{lib/ui/addon/styles → app/styles/ui}/_list.scss +46 -45
- package/{lib/ui/addon/styles → app/styles/ui}/_nav.scss +29 -27
- package/app/styles/ui/_object-inspector-toggle.scss +4 -0
- package/{lib/ui/addon/styles → app/styles/ui}/_pill.scss +4 -4
- package/{lib/ui/addon/styles → app/styles/ui}/_send-to-console.scss +1 -1
- package/{lib/ui/addon/styles → app/styles/ui}/_split.scss +26 -20
- package/app/styles/ui/_ui.scss +13 -0
- package/{lib/ui/addon/styles → app/styles/ui}/toolbar/_checkbox.scss +5 -5
- package/app/styles/ui/toolbar/_icon-button.scss +80 -0
- package/{lib/ui/addon/styles → app/styles/ui}/toolbar/_index.scss +6 -5
- package/{lib/ui/addon/styles → app/styles/ui}/toolbar/_radio.scss +10 -10
- package/{lib/ui/addon/styles → app/styles/ui}/toolbar/_search.scss +5 -3
- package/app/styles/utils.scss +408 -122
- package/app/templates/application.hbs +22 -19
- package/app/templates/component-tree.hbs +4 -1
- package/app/templates/deprecations.hbs +2 -3
- package/app/templates/info.hbs +10 -10
- package/app/templates/promise-tree.hbs +1 -1
- package/app/templates/render-tree.hbs +1 -1
- package/app/templates/route-tree.hbs +1 -1
- package/app/utils/escape-reg-exp.ts +3 -2
- package/app/utils/nullish.ts +7 -0
- package/app/utils/parse-text.ts +4 -5
- package/app/utils/truncate.js +0 -1
- package/config/ember-cli-update.json +5 -3
- package/config/ember-try.js +117 -72
- package/config/environment.js +1 -1
- package/config/optional-features.json +2 -1
- package/dist/bookmarklet/load_inspector.js +31 -11
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js +1135 -0
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js.LICENSE.txt +18 -0
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.524.aca67dc376e8cd35b522.js +40 -0
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.582.d3d80e94c4f59dc3b65d.js +42 -0
- package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.css +997 -156
- package/dist/bookmarklet/panes-3-16-0/assets/ember-inspector.js +560 -613
- package/dist/bookmarklet/panes-3-16-0/assets/svg/ellipsis.svg +3 -3
- package/dist/bookmarklet/panes-3-16-0/assets/svg/focus-point-round.svg +9 -0
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-bug.svg +1 -1
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-components.svg +2 -2
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-container.svg +1 -1
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-data.svg +1 -1
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-deprecations.svg +3 -3
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-info.svg +3 -3
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-promises.svg +2 -2
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-render-performance.svg +2 -2
- package/dist/bookmarklet/panes-3-16-0/assets/svg/nav-route-tree.svg +7 -7
- package/dist/bookmarklet/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
- package/dist/bookmarklet/panes-3-16-0/assets/vendor.css +4 -841
- package/dist/bookmarklet/panes-3-16-0/assets/vendor.js +4277 -5152
- package/dist/bookmarklet/panes-3-16-0/base-object-HAEdWjmg.js +59 -0
- package/dist/bookmarklet/panes-3-16-0/basic-B1dkgN3d.js +149 -0
- package/dist/bookmarklet/panes-3-16-0/basic-debug.js +10 -0
- package/dist/bookmarklet/panes-3-16-0/bookmarklet-BZWtwuX-.js +32 -0
- package/dist/bookmarklet/panes-3-16-0/bookmarklet-debug.js +10 -0
- package/dist/bookmarklet/panes-3-16-0/chrome-P6FSEUf1.js +10 -0
- package/dist/bookmarklet/panes-3-16-0/chrome-debug.js +10 -0
- package/dist/bookmarklet/panes-3-16-0/ember.js +166 -0
- package/dist/bookmarklet/panes-3-16-0/ember_debug.js +7 -11018
- package/dist/bookmarklet/panes-3-16-0/evented-BCTya3yE.js +62 -0
- package/dist/bookmarklet/panes-3-16-0/firefox-8F84zphP.js +30 -0
- package/dist/bookmarklet/panes-3-16-0/firefox-debug.js +10 -0
- package/dist/bookmarklet/panes-3-16-0/index.html +4 -23
- package/dist/bookmarklet/panes-3-16-0/internals-CRmXMEzb.js +12 -0
- package/dist/bookmarklet/panes-3-16-0/load-ember-debug-in-webpage-DCWcJhQm.js +29 -0
- package/dist/bookmarklet/panes-3-16-0/main.js +7669 -0
- package/dist/bookmarklet/panes-3-16-0/port.js +108 -0
- package/dist/bookmarklet/panes-3-16-0/profile-node.js +60 -0
- package/dist/bookmarklet/panes-3-16-0/promise-assembler.js +218 -0
- package/dist/bookmarklet/panes-3-16-0/runloop-6_0lpzTA.js +1138 -0
- package/dist/bookmarklet/panes-3-16-0/start-inspector-BIYQArZn.js +334 -0
- package/dist/bookmarklet/panes-3-16-0/type-check.js +119 -0
- package/dist/bookmarklet/panes-3-16-0/version.js +90 -0
- package/dist/bookmarklet/panes-3-16-0/versions.js +4 -0
- package/dist/bookmarklet/panes-3-16-0/web-extension-OWnXJ_XK.js +144 -0
- package/dist/bookmarklet/panes-3-16-0/websocket-BSUvUqER.js +58 -0
- package/dist/bookmarklet/panes-3-16-0/websocket-debug.js +10 -0
- package/dist/chrome/background.js +26 -21
- package/dist/chrome/boot.js +1 -1
- package/dist/chrome/content-script.js +12 -11
- package/dist/chrome/devtools.js +12 -3
- package/dist/chrome/manifest.json +4 -2
- package/dist/chrome/options.js +17 -12
- package/dist/chrome/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js +1135 -0
- package/dist/chrome/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js.LICENSE.txt +18 -0
- package/dist/chrome/panes-3-16-0/assets/chunk.524.aca67dc376e8cd35b522.js +40 -0
- package/dist/chrome/panes-3-16-0/assets/chunk.582.d3d80e94c4f59dc3b65d.js +42 -0
- package/dist/chrome/panes-3-16-0/assets/ember-inspector.css +997 -156
- package/dist/chrome/panes-3-16-0/assets/ember-inspector.js +560 -613
- package/dist/chrome/panes-3-16-0/assets/svg/ellipsis.svg +3 -3
- package/dist/chrome/panes-3-16-0/assets/svg/focus-point-round.svg +9 -0
- package/dist/chrome/panes-3-16-0/assets/svg/nav-bug.svg +1 -1
- package/dist/chrome/panes-3-16-0/assets/svg/nav-components.svg +2 -2
- package/dist/chrome/panes-3-16-0/assets/svg/nav-container.svg +1 -1
- package/dist/chrome/panes-3-16-0/assets/svg/nav-data.svg +1 -1
- package/dist/chrome/panes-3-16-0/assets/svg/nav-deprecations.svg +3 -3
- package/dist/chrome/panes-3-16-0/assets/svg/nav-info.svg +3 -3
- package/dist/chrome/panes-3-16-0/assets/svg/nav-promises.svg +2 -2
- package/dist/chrome/panes-3-16-0/assets/svg/nav-render-performance.svg +2 -2
- package/dist/chrome/panes-3-16-0/assets/svg/nav-route-tree.svg +7 -7
- package/dist/chrome/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
- package/dist/chrome/panes-3-16-0/assets/vendor.css +4 -841
- package/dist/chrome/panes-3-16-0/assets/vendor.js +4277 -5152
- package/dist/chrome/panes-3-16-0/base-object-HAEdWjmg.js +59 -0
- package/dist/chrome/panes-3-16-0/basic-B1dkgN3d.js +149 -0
- package/dist/chrome/panes-3-16-0/basic-debug.js +10 -0
- package/dist/chrome/panes-3-16-0/bookmarklet-BZWtwuX-.js +32 -0
- package/dist/chrome/panes-3-16-0/bookmarklet-debug.js +10 -0
- package/dist/chrome/panes-3-16-0/chrome-P6FSEUf1.js +10 -0
- package/dist/chrome/panes-3-16-0/chrome-debug.js +10 -0
- package/dist/chrome/panes-3-16-0/ember.js +166 -0
- package/dist/chrome/panes-3-16-0/ember_debug.js +7 -11018
- package/dist/chrome/panes-3-16-0/evented-BCTya3yE.js +62 -0
- package/dist/chrome/panes-3-16-0/firefox-8F84zphP.js +30 -0
- package/dist/chrome/panes-3-16-0/firefox-debug.js +10 -0
- package/dist/chrome/panes-3-16-0/index.html +4 -23
- package/dist/chrome/panes-3-16-0/internals-CRmXMEzb.js +12 -0
- package/dist/chrome/panes-3-16-0/load-ember-debug-in-webpage-DCWcJhQm.js +29 -0
- package/dist/chrome/panes-3-16-0/main.js +7669 -0
- package/dist/chrome/panes-3-16-0/port.js +108 -0
- package/dist/chrome/panes-3-16-0/profile-node.js +60 -0
- package/dist/chrome/panes-3-16-0/promise-assembler.js +218 -0
- package/dist/chrome/panes-3-16-0/runloop-6_0lpzTA.js +1138 -0
- package/dist/chrome/panes-3-16-0/start-inspector-BIYQArZn.js +334 -0
- package/dist/chrome/panes-3-16-0/type-check.js +119 -0
- package/dist/chrome/panes-3-16-0/version.js +90 -0
- package/dist/chrome/panes-3-16-0/versions.js +4 -0
- package/dist/chrome/panes-3-16-0/web-extension-OWnXJ_XK.js +144 -0
- package/dist/chrome/panes-3-16-0/websocket-BSUvUqER.js +58 -0
- package/dist/chrome/panes-3-16-0/websocket-debug.js +10 -0
- package/dist/chrome/scripts/in-page-script.js +19 -13
- package/dist/firefox/background.js +26 -21
- package/dist/firefox/boot.js +1 -1
- package/dist/firefox/content-script.js +12 -11
- package/dist/firefox/devtools.js +12 -3
- package/dist/firefox/manifest.json +4 -2
- package/dist/firefox/options.js +17 -12
- package/dist/firefox/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js +1135 -0
- package/dist/firefox/panes-3-16-0/assets/chunk.443.86a005e528b587663b78.js.LICENSE.txt +18 -0
- package/dist/firefox/panes-3-16-0/assets/chunk.524.aca67dc376e8cd35b522.js +40 -0
- package/dist/firefox/panes-3-16-0/assets/chunk.582.d3d80e94c4f59dc3b65d.js +42 -0
- package/dist/firefox/panes-3-16-0/assets/ember-inspector.css +997 -156
- package/dist/firefox/panes-3-16-0/assets/ember-inspector.js +560 -613
- package/dist/firefox/panes-3-16-0/assets/svg/ellipsis.svg +3 -3
- package/dist/firefox/panes-3-16-0/assets/svg/focus-point-round.svg +9 -0
- package/dist/firefox/panes-3-16-0/assets/svg/nav-bug.svg +1 -1
- package/dist/firefox/panes-3-16-0/assets/svg/nav-components.svg +2 -2
- package/dist/firefox/panes-3-16-0/assets/svg/nav-container.svg +1 -1
- package/dist/firefox/panes-3-16-0/assets/svg/nav-data.svg +1 -1
- package/dist/firefox/panes-3-16-0/assets/svg/nav-deprecations.svg +3 -3
- package/dist/firefox/panes-3-16-0/assets/svg/nav-info.svg +3 -3
- package/dist/firefox/panes-3-16-0/assets/svg/nav-promises.svg +2 -2
- package/dist/firefox/panes-3-16-0/assets/svg/nav-render-performance.svg +2 -2
- package/dist/firefox/panes-3-16-0/assets/svg/nav-route-tree.svg +7 -7
- package/dist/firefox/panes-3-16-0/assets/svg/sidebar-toggle-trailing.svg +9 -0
- package/dist/firefox/panes-3-16-0/assets/vendor.css +4 -841
- package/dist/firefox/panes-3-16-0/assets/vendor.js +4277 -5152
- package/dist/firefox/panes-3-16-0/base-object-HAEdWjmg.js +59 -0
- package/dist/firefox/panes-3-16-0/basic-B1dkgN3d.js +149 -0
- package/dist/firefox/panes-3-16-0/basic-debug.js +10 -0
- package/dist/firefox/panes-3-16-0/bookmarklet-BZWtwuX-.js +32 -0
- package/dist/firefox/panes-3-16-0/bookmarklet-debug.js +10 -0
- package/dist/firefox/panes-3-16-0/chrome-P6FSEUf1.js +10 -0
- package/dist/firefox/panes-3-16-0/chrome-debug.js +10 -0
- package/dist/firefox/panes-3-16-0/ember.js +166 -0
- package/dist/firefox/panes-3-16-0/ember_debug.js +7 -11018
- package/dist/firefox/panes-3-16-0/evented-BCTya3yE.js +62 -0
- package/dist/firefox/panes-3-16-0/firefox-8F84zphP.js +30 -0
- package/dist/firefox/panes-3-16-0/firefox-debug.js +10 -0
- package/dist/firefox/panes-3-16-0/index.html +4 -23
- package/dist/firefox/panes-3-16-0/internals-CRmXMEzb.js +12 -0
- package/dist/firefox/panes-3-16-0/load-ember-debug-in-webpage-DCWcJhQm.js +29 -0
- package/dist/firefox/panes-3-16-0/main.js +7669 -0
- package/dist/firefox/panes-3-16-0/port.js +108 -0
- package/dist/firefox/panes-3-16-0/profile-node.js +60 -0
- package/dist/firefox/panes-3-16-0/promise-assembler.js +218 -0
- package/dist/firefox/panes-3-16-0/runloop-6_0lpzTA.js +1138 -0
- package/dist/firefox/panes-3-16-0/start-inspector-BIYQArZn.js +334 -0
- package/dist/firefox/panes-3-16-0/type-check.js +119 -0
- package/dist/firefox/panes-3-16-0/version.js +90 -0
- package/dist/firefox/panes-3-16-0/versions.js +4 -0
- package/dist/firefox/panes-3-16-0/web-extension-OWnXJ_XK.js +144 -0
- package/dist/firefox/panes-3-16-0/websocket-BSUvUqER.js +58 -0
- package/dist/firefox/panes-3-16-0/websocket-debug.js +10 -0
- package/dist/firefox/scripts/in-page-script.js +19 -13
- package/dist/websocket/assets/chunk.443.86a005e528b587663b78.js +1135 -0
- package/dist/websocket/assets/chunk.443.86a005e528b587663b78.js.LICENSE.txt +18 -0
- package/dist/websocket/assets/chunk.524.aca67dc376e8cd35b522.js +40 -0
- package/dist/websocket/assets/chunk.582.d3d80e94c4f59dc3b65d.js +42 -0
- package/dist/websocket/assets/ember-inspector.css +997 -156
- package/dist/websocket/assets/ember-inspector.js +560 -613
- package/dist/websocket/assets/svg/ellipsis.svg +3 -3
- package/dist/websocket/assets/svg/focus-point-round.svg +9 -0
- package/dist/websocket/assets/svg/nav-bug.svg +1 -1
- package/dist/websocket/assets/svg/nav-components.svg +2 -2
- package/dist/websocket/assets/svg/nav-container.svg +1 -1
- package/dist/websocket/assets/svg/nav-data.svg +1 -1
- package/dist/websocket/assets/svg/nav-deprecations.svg +3 -3
- package/dist/websocket/assets/svg/nav-info.svg +3 -3
- package/dist/websocket/assets/svg/nav-promises.svg +2 -2
- package/dist/websocket/assets/svg/nav-render-performance.svg +2 -2
- package/dist/websocket/assets/svg/nav-route-tree.svg +7 -7
- package/dist/websocket/assets/svg/sidebar-toggle-trailing.svg +9 -0
- package/dist/websocket/assets/vendor.css +4 -841
- package/dist/websocket/assets/vendor.js +4277 -5152
- package/dist/websocket/base-object-HAEdWjmg.js +59 -0
- package/dist/websocket/basic-B1dkgN3d.js +149 -0
- package/dist/websocket/basic-debug.js +10 -0
- package/dist/websocket/bookmarklet-BZWtwuX-.js +32 -0
- package/dist/websocket/bookmarklet-debug.js +10 -0
- package/dist/websocket/chrome-P6FSEUf1.js +10 -0
- package/dist/websocket/chrome-debug.js +10 -0
- package/dist/websocket/ember.js +166 -0
- package/dist/websocket/ember_debug.js +7 -11018
- package/dist/websocket/evented-BCTya3yE.js +62 -0
- package/dist/websocket/firefox-8F84zphP.js +30 -0
- package/dist/websocket/firefox-debug.js +10 -0
- package/dist/websocket/index.html +4 -23
- package/dist/websocket/internals-CRmXMEzb.js +12 -0
- package/dist/websocket/load-ember-debug-in-webpage-DCWcJhQm.js +29 -0
- package/dist/websocket/main.js +7669 -0
- package/dist/websocket/port.js +108 -0
- package/dist/websocket/profile-node.js +60 -0
- package/dist/websocket/promise-assembler.js +218 -0
- package/dist/websocket/runloop-6_0lpzTA.js +1138 -0
- package/dist/websocket/start-inspector-BIYQArZn.js +334 -0
- package/dist/websocket/type-check.js +119 -0
- package/dist/websocket/version.js +90 -0
- package/dist/websocket/versions.js +4 -0
- package/dist/websocket/web-extension-OWnXJ_XK.js +144 -0
- package/dist/websocket/websocket-BSUvUqER.js +58 -0
- package/dist/websocket/websocket-debug.js +10 -0
- package/ember-cli-build.js +31 -140
- package/ember_debug/adapters/basic.js +10 -29
- package/ember_debug/adapters/bookmarklet.js +1 -0
- package/ember_debug/adapters/firefox.js +3 -3
- package/ember_debug/adapters/web-extension.js +6 -5
- package/ember_debug/adapters/websocket.js +2 -2
- package/ember_debug/babel.config.cjs +11 -0
- package/ember_debug/container-debug.js +1 -1
- package/ember_debug/data-debug.js +7 -8
- package/ember_debug/debug-port.js +1 -1
- package/ember_debug/deprecation-debug.js +14 -14
- package/ember_debug/entrypoints/basic-debug.js +10 -0
- package/ember_debug/entrypoints/bookmarklet-debug.js +10 -0
- package/ember_debug/entrypoints/chrome-debug.js +10 -0
- package/ember_debug/entrypoints/firefox-debug.js +10 -0
- package/ember_debug/entrypoints/websocket-debug.js +10 -0
- package/ember_debug/general-debug.js +4 -4
- package/ember_debug/lib/boot-ember-inspector.js +9 -0
- package/ember_debug/lib/get-applications.js +28 -0
- package/ember_debug/lib/load-ember-debug-in-webpage.js +32 -0
- package/ember_debug/lib/send-apps.js +14 -0
- package/ember_debug/lib/send-version-miss.js +38 -0
- package/ember_debug/lib/setup-instance-initializer.js +17 -0
- package/ember_debug/lib/start-inspector.js +195 -0
- package/ember_debug/lib/version-test.js +73 -0
- package/ember_debug/lib/versions.js +3 -0
- package/ember_debug/libs/capture-render-tree.js +1 -2
- package/ember_debug/libs/promise-assembler.js +5 -4
- package/ember_debug/libs/render-tree.js +37 -44
- package/ember_debug/libs/source-map.js +7 -6
- package/ember_debug/libs/view-inspection.js +25 -17
- package/ember_debug/main.js +18 -21
- package/ember_debug/models/profile-manager.js +6 -6
- package/ember_debug/models/profile-node.js +1 -1
- package/ember_debug/models/promise.js +2 -2
- package/ember_debug/object-inspector.js +74 -65
- package/ember_debug/package.json +27 -0
- package/ember_debug/port.js +5 -4
- package/ember_debug/promise-debug.js +5 -5
- package/ember_debug/render-debug.js +5 -5
- package/ember_debug/rollup.config.js +24 -0
- package/ember_debug/route-debug.js +10 -9
- package/ember_debug/services/session.js +2 -2
- package/ember_debug/utils/classify.js +1 -1
- package/ember_debug/utils/ember/object/internals.js +1 -11
- package/ember_debug/utils/ember/own-runloop.js +1 -1
- package/ember_debug/utils/ember/runloop.js +7 -10
- package/ember_debug/utils/ember-object-names.js +11 -9
- package/ember_debug/utils/ember.js +222 -40
- package/ember_debug/utils/evented.js +1 -1
- package/ember_debug/utils/get-object-name.js +3 -3
- package/ember_debug/utils/type-check.js +9 -5
- package/ember_debug/view-debug.js +12 -6
- package/eslint.config.mjs +173 -0
- package/gulpfile.js +1 -1
- package/package.json +97 -95
- package/patches/ember-cli-inject-live-reload.patch +16 -0
- package/pnpm-workspace.yaml +3 -0
- package/public/assets/svg/ellipsis.svg +3 -3
- package/public/assets/svg/focus-point-round.svg +9 -0
- package/public/assets/svg/nav-bug.svg +1 -1
- package/public/assets/svg/nav-components.svg +2 -2
- package/public/assets/svg/nav-container.svg +1 -1
- package/public/assets/svg/nav-data.svg +1 -1
- package/public/assets/svg/nav-deprecations.svg +3 -3
- package/public/assets/svg/nav-info.svg +3 -3
- package/public/assets/svg/nav-promises.svg +2 -2
- package/public/assets/svg/nav-render-performance.svg +2 -2
- package/public/assets/svg/nav-route-tree.svg +7 -7
- package/public/assets/svg/sidebar-toggle-trailing.svg +9 -0
- package/scripts/download-panes.js +1 -1
- package/skeletons/bookmarklet/load_inspector.js +31 -11
- package/skeletons/web-extension/background.js +26 -21
- package/skeletons/web-extension/boot.js +1 -1
- package/skeletons/web-extension/content-script.js +12 -11
- package/skeletons/web-extension/devtools.js +12 -3
- package/skeletons/web-extension/manifest.json +3 -1
- package/skeletons/web-extension/options.js +17 -12
- package/skeletons/web-extension/scripts/in-page-script.js +19 -13
- package/testem.js +0 -1
- package/tests/acceptance/app-picker-test.js +4 -4
- package/tests/acceptance/component-tree-test.js +96 -57
- package/tests/acceptance/container-test.js +0 -2
- package/tests/acceptance/data-test.js +14 -11
- package/tests/acceptance/deprecation-test.js +8 -12
- package/tests/acceptance/info-test.js +2 -2
- package/tests/acceptance/object-inspector-test.js +62 -110
- package/tests/acceptance/promise-test.js +1 -11
- package/tests/acceptance/render-tree-test.js +2 -2
- package/tests/acceptance/route-tree-test.js +12 -14
- package/tests/acceptance/whats-new-test.js +11 -11
- package/tests/ember_debug/container-debug-test.js +5 -14
- package/tests/ember_debug/deprecation-debug-test.js +15 -6
- package/tests/ember_debug/ember-data-test.js +7 -1
- package/tests/ember_debug/ember-debug-test.js +13 -13
- package/tests/ember_debug/object-inspector-test.js +115 -50
- package/tests/ember_debug/profile-manager-test.js +153 -170
- package/tests/ember_debug/profile-node-test.js +9 -5
- package/tests/ember_debug/promise-assembler-test.js +18 -10
- package/tests/ember_debug/promise-debug-test.js +19 -15
- package/tests/ember_debug/render-debug-test.js +8 -1
- package/tests/ember_debug/route-debug-test.js +14 -8
- package/tests/ember_debug/view-debug-test.js +267 -183
- package/tests/helpers/{index.js → index.ts} +6 -5
- package/tests/helpers/setup-ember-debug-test.js +22 -2
- package/tests/index.html +1 -2
- package/tests/integration/injection-test.js +37 -81
- package/tests/test-adapter.js +15 -15
- package/tests/test-helper.js +6 -4
- package/tests/unit/check-current-route-test.js +0 -4
- package/tests/unit/resizable-columns-test.js +53 -51
- package/tests/unit/utils/parse-text-test.js +3 -3
- package/tests/unit/utils/search-match-test.js +5 -5
- package/tests/unit/utils/type-check-test.js +27 -0
- package/tsconfig.json +3 -1
- package/types/ember-inspector/index.d.ts +2 -1
- package/types/global.d.ts +1 -7
- package/.eslintignore +0 -33
- package/.eslintrc.js +0 -86
- package/app/components/list-content.js +0 -130
- package/app/controllers/promise-tree.js +0 -130
- package/app/libs/promise-assembler.js +0 -169
- package/app/routes/model-types.js +0 -47
- package/app/routes/promise-tree.js +0 -48
- package/app/routes/records.js +0 -55
- package/app/routes/render-tree.js +0 -66
- package/app/services/adapters/websocket.js +0 -31
- package/app/services/layout.js +0 -39
- package/app/services/port.js +0 -90
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.143.76a242242ec46a377266.js +0 -28
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.178.b6064b368cf24cc346ec.js +0 -9
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js +0 -2620
- package/dist/bookmarklet/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js.LICENSE.txt +0 -67
- package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
- package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
- package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
- package/dist/bookmarklet/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
- package/dist/chrome/panes-3-16-0/assets/chunk.143.76a242242ec46a377266.js +0 -28
- package/dist/chrome/panes-3-16-0/assets/chunk.178.b6064b368cf24cc346ec.js +0 -9
- package/dist/chrome/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js +0 -2620
- package/dist/chrome/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js.LICENSE.txt +0 -67
- package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
- package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
- package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
- package/dist/chrome/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
- package/dist/firefox/panes-3-16-0/assets/chunk.143.76a242242ec46a377266.js +0 -28
- package/dist/firefox/panes-3-16-0/assets/chunk.178.b6064b368cf24cc346ec.js +0 -9
- package/dist/firefox/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js +0 -2620
- package/dist/firefox/panes-3-16-0/assets/chunk.359.0be5d21f60d2b5d6d423.js.LICENSE.txt +0 -67
- package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff +0 -0
- package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Bold.woff2 +0 -0
- package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff +0 -0
- package/dist/firefox/panes-3-16-0/assets/fonts/Inter-Regular.woff2 +0 -0
- package/dist/websocket/assets/chunk.143.76a242242ec46a377266.js +0 -28
- package/dist/websocket/assets/chunk.178.b6064b368cf24cc346ec.js +0 -9
- package/dist/websocket/assets/chunk.359.0be5d21f60d2b5d6d423.js +0 -2620
- package/dist/websocket/assets/chunk.359.0be5d21f60d2b5d6d423.js.LICENSE.txt +0 -67
- package/dist/websocket/assets/fonts/Inter-Bold.woff +0 -0
- package/dist/websocket/assets/fonts/Inter-Bold.woff2 +0 -0
- package/dist/websocket/assets/fonts/Inter-Regular.woff +0 -0
- package/dist/websocket/assets/fonts/Inter-Regular.woff2 +0 -0
- package/ember_debug/.eslintrc.js +0 -13
- package/ember_debug/utils/ember/debug.js +0 -20
- package/ember_debug/utils/ember/instrumentation.js +0 -11
- package/ember_debug/utils/ember/loader.js +0 -22
- package/ember_debug/utils/rsvp.js +0 -20
- package/ember_debug/vendor/loader.js +0 -54
- package/ember_debug/vendor/startup-wrapper.js +0 -399
- package/lib/ui/addon/styles/_object-inspector-toggle.scss +0 -12
- package/lib/ui/addon/styles/addon.scss +0 -13
- package/lib/ui/addon/styles/toolbar/_icon-button.scss +0 -61
- package/lib/ui/app/components/ui/disclosure-triangle.js +0 -1
- package/lib/ui/app/components/ui/disclosure.js +0 -1
- package/lib/ui/app/components/ui/drag-handle.js +0 -1
- package/lib/ui/app/components/ui/draggable-column.js +0 -1
- package/lib/ui/app/components/ui/empty-message.js +0 -1
- package/lib/ui/app/components/ui/error-page.js +0 -1
- package/lib/ui/app/components/ui/open-links-in-new-window.js +0 -1
- package/lib/ui/app/components/ui/resizable-column.js +0 -1
- package/lib/ui/app/components/ui/send-to-console.js +0 -1
- package/lib/ui/app/components/ui/toolbar-clear-button.js +0 -1
- package/lib/ui/app/components/ui/toolbar-divider.js +0 -1
- package/lib/ui/app/components/ui/toolbar-reload-button.js +0 -1
- package/lib/ui/app/components/ui/toolbar-search-field.js +0 -1
- package/lib/ui/app/components/ui/warning-message.js +0 -1
- package/lib/ui/index.js +0 -34
- package/lib/ui/package.json +0 -13
- package/public/assets/fonts/Inter-Bold.woff +0 -0
- package/public/assets/fonts/Inter-Bold.woff2 +0 -0
- package/public/assets/fonts/Inter-Regular.woff +0 -0
- package/public/assets/fonts/Inter-Regular.woff2 +0 -0
- package/tests/helpers/trigger-port.js +0 -6
- /package/app/{app.js → app.ts} +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/disclosure-triangle.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/disclosure.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/disclosure.js +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/draggable-column.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/draggable-column.js +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/open-links-in-new-window.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/open-links-in-new-window.js +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/resizable-column.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/send-to-console.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/toolbar-divider.hbs +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/toolbar-search-field.js +0 -0
- /package/{lib/ui/addon/components → app/components/ui}/warning-message.hbs +0 -0
- /package/app/controllers/{info.js → info.ts} +0 -0
- /package/app/services/adapters/{firefox.js → firefox.ts} +0 -0
- /package/{lib/ui/addon/styles → app/styles/ui}/_goto-source.scss +0 -0
- /package/{lib/ui/addon/styles → app/styles/ui}/_warning.scss +0 -0
- /package/{lib/ui/addon/styles → app/styles/ui}/toolbar/_divider.scss +0 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { EMBER_VERSIONS_SUPPORTED } from './versions.js';
|
|
2
|
+
import { Namespace, Application, guidFor, VERSION } from './ember.js';
|
|
3
|
+
|
|
4
|
+
/* eslint-disable ember/no-test-import-export */
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @method compare
|
|
8
|
+
* @param {Number} val
|
|
9
|
+
* @param {Number} number
|
|
10
|
+
* @return {Number}
|
|
11
|
+
* 0: same
|
|
12
|
+
* -1: <
|
|
13
|
+
* 1: >
|
|
14
|
+
*/
|
|
15
|
+
function compare(val, number) {
|
|
16
|
+
if (val === number) {
|
|
17
|
+
return 0;
|
|
18
|
+
} else if (val < number) {
|
|
19
|
+
return -1;
|
|
20
|
+
} else if (val > number) {
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Remove -alpha, -beta, etc from versions
|
|
27
|
+
*
|
|
28
|
+
* @param {String} version
|
|
29
|
+
* @return {String} The cleaned up version
|
|
30
|
+
*/
|
|
31
|
+
function cleanupVersion(version) {
|
|
32
|
+
return version.replace(/-.*/g, '');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Compares two Ember versions.
|
|
37
|
+
*
|
|
38
|
+
* Returns:
|
|
39
|
+
* `-1` if version1 < version
|
|
40
|
+
* 0 if version1 == version2
|
|
41
|
+
* 1 if version1 > version2
|
|
42
|
+
*
|
|
43
|
+
* @param {String} version1
|
|
44
|
+
* @param {String} version2
|
|
45
|
+
* @return {Boolean} result of the comparison
|
|
46
|
+
*/
|
|
47
|
+
function compareVersion(version1, version2) {
|
|
48
|
+
let compared, i;
|
|
49
|
+
version1 = cleanupVersion(version1).split('.');
|
|
50
|
+
version2 = cleanupVersion(version2).split('.');
|
|
51
|
+
for (i = 0; i < 3; i++) {
|
|
52
|
+
compared = compare(+version1[i], +version2[i]);
|
|
53
|
+
if (compared !== 0) {
|
|
54
|
+
return compared;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Checks if a version is between two different versions.
|
|
62
|
+
* version should be >= left side, < right side
|
|
63
|
+
*
|
|
64
|
+
* @param {String} version1
|
|
65
|
+
* @param {String} version2
|
|
66
|
+
* @return {Boolean}
|
|
67
|
+
*/
|
|
68
|
+
function versionTest(version, between) {
|
|
69
|
+
var fromVersion = between[0];
|
|
70
|
+
var toVersion = between[1];
|
|
71
|
+
if (compareVersion(version, fromVersion) === -1) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return !toVersion || compareVersion(version, toVersion) === -1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function sendApps(adapter, apps) {
|
|
78
|
+
const serializedApps = apps.map(app => {
|
|
79
|
+
return {
|
|
80
|
+
applicationName: app.applicationName,
|
|
81
|
+
applicationId: app.applicationId
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
adapter.sendMessage({
|
|
85
|
+
type: 'apps-loaded',
|
|
86
|
+
apps: serializedApps,
|
|
87
|
+
from: 'inspectedWindow'
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Get all the Ember.Application instances from Ember.Namespace.NAMESPACES
|
|
93
|
+
* and add our own applicationId and applicationName to them
|
|
94
|
+
* @return {*}
|
|
95
|
+
*/
|
|
96
|
+
function getApplications() {
|
|
97
|
+
var namespaces = Namespace.NAMESPACES;
|
|
98
|
+
var apps = namespaces.filter(function (namespace) {
|
|
99
|
+
return namespace instanceof Application;
|
|
100
|
+
});
|
|
101
|
+
return apps.map(function (app) {
|
|
102
|
+
// Add applicationId and applicationName to the app
|
|
103
|
+
var applicationId = guidFor(app);
|
|
104
|
+
var applicationName = app.name || app.modulePrefix || `(unknown app - ${applicationId})`;
|
|
105
|
+
Object.assign(app, {
|
|
106
|
+
applicationId,
|
|
107
|
+
applicationName
|
|
108
|
+
});
|
|
109
|
+
return app;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function bootEmberInspector(appInstance) {
|
|
114
|
+
appInstance.application.__inspector__booted = true;
|
|
115
|
+
appInstance.__inspector__booted = true;
|
|
116
|
+
|
|
117
|
+
// Boot the inspector (or re-boot if already booted, for example in tests)
|
|
118
|
+
window.EmberInspector._application = appInstance.application;
|
|
119
|
+
window.EmberInspector.owner = appInstance;
|
|
120
|
+
window.EmberInspector.start(true);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function setupInstanceInitializer(app, callback) {
|
|
124
|
+
if (!app.__inspector__setup) {
|
|
125
|
+
app.__inspector__setup = true;
|
|
126
|
+
|
|
127
|
+
// We include the app's guid in the initializer name because in Ember versions < 3
|
|
128
|
+
// registering an instance initializer with the same name, even if on a different app,
|
|
129
|
+
// triggers an error because instance initializers seem to be global instead of per app.
|
|
130
|
+
app.instanceInitializer({
|
|
131
|
+
name: 'ember-inspector-app-instance-booted-' + guidFor(app),
|
|
132
|
+
initialize: function (instance) {
|
|
133
|
+
callback(instance);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let channel = new MessageChannel();
|
|
140
|
+
let port = channel.port1;
|
|
141
|
+
window.postMessage('debugger-client', '*', [channel.port2]);
|
|
142
|
+
let registeredMiss = false;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* This function is called if the app's Ember version
|
|
146
|
+
* is not supported by this version of the inspector.
|
|
147
|
+
*
|
|
148
|
+
* It sends a message to the inspector app to redirect
|
|
149
|
+
* to an inspector version that supports this Ember version.
|
|
150
|
+
*/
|
|
151
|
+
function sendVersionMiss(VERSION) {
|
|
152
|
+
if (registeredMiss) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
registeredMiss = true;
|
|
156
|
+
port.addEventListener('message', message => {
|
|
157
|
+
if (message.type === 'check-version') {
|
|
158
|
+
sendVersionMismatch();
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
sendVersionMismatch();
|
|
162
|
+
port.start();
|
|
163
|
+
function sendVersionMismatch() {
|
|
164
|
+
port.postMessage({
|
|
165
|
+
name: 'version-mismatch',
|
|
166
|
+
version: VERSION,
|
|
167
|
+
from: 'inspectedWindow'
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* eslint-disable ember/no-test-import-export */
|
|
173
|
+
function onReady(callback) {
|
|
174
|
+
if (document.readyState === 'complete' || document.readyState === 'interactive') {
|
|
175
|
+
setTimeout(completed);
|
|
176
|
+
} else {
|
|
177
|
+
document.addEventListener('DOMContentLoaded', completed, false);
|
|
178
|
+
// For some reason DOMContentLoaded doesn't always work
|
|
179
|
+
window.addEventListener('load', completed, false);
|
|
180
|
+
}
|
|
181
|
+
function completed() {
|
|
182
|
+
document.removeEventListener('DOMContentLoaded', completed, false);
|
|
183
|
+
window.removeEventListener('load', completed, false);
|
|
184
|
+
callback();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function onEmberReady(callback) {
|
|
188
|
+
var triggered = false;
|
|
189
|
+
var triggerOnce = function () {
|
|
190
|
+
if (triggered) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
triggered = true;
|
|
194
|
+
callback();
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// Newest Ember versions >= 1.10
|
|
198
|
+
|
|
199
|
+
const later = () => setTimeout(triggerOnce, 0);
|
|
200
|
+
window.addEventListener('Ember', later, {
|
|
201
|
+
once: true
|
|
202
|
+
});
|
|
203
|
+
// Oldest Ember versions or if this was injected after Ember has loaded.
|
|
204
|
+
onReady(triggerOnce);
|
|
205
|
+
}
|
|
206
|
+
function startInspector(adapter) {
|
|
207
|
+
// There's probably a better way
|
|
208
|
+
// to determine when the application starts
|
|
209
|
+
// but this definitely works
|
|
210
|
+
function onApplicationStart(callback) {
|
|
211
|
+
const adapterInstance = new adapter();
|
|
212
|
+
adapterInstance.onMessageReceived(function (message) {
|
|
213
|
+
if (message.type === 'app-picker-loaded') {
|
|
214
|
+
sendApps(adapterInstance, getApplications());
|
|
215
|
+
}
|
|
216
|
+
if (message.type === 'app-selected') {
|
|
217
|
+
let current = window.EmberInspector._application;
|
|
218
|
+
let selected = getApplications().find(app => guidFor(app) === message.applicationId);
|
|
219
|
+
if (selected && current !== selected && selected.__deprecatedInstance__) {
|
|
220
|
+
bootEmberInspector(selected.__deprecatedInstance__);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
var apps = getApplications();
|
|
225
|
+
sendApps(adapterInstance, apps);
|
|
226
|
+
function loadInstance(app) {
|
|
227
|
+
const applicationInstances = app._applicationInstances && [...app._applicationInstances];
|
|
228
|
+
let instance = app.__deprecatedInstance__ || applicationInstances[0];
|
|
229
|
+
if (instance) {
|
|
230
|
+
// App started
|
|
231
|
+
setupInstanceInitializer(app, callback);
|
|
232
|
+
callback(instance);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
var app;
|
|
237
|
+
for (var i = 0, l = apps.length; i < l; i++) {
|
|
238
|
+
app = apps[i];
|
|
239
|
+
// We check for the existance of an application instance because
|
|
240
|
+
// in Ember > 3 tests don't destroy the app when they're done but the app has no booted instances.
|
|
241
|
+
if (app._readinessDeferrals === 0) {
|
|
242
|
+
if (loadInstance(app)) {
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// app already run initializers, but no instance, use _bootPromise and didBecomeReady
|
|
248
|
+
if (app._bootPromise) {
|
|
249
|
+
app._bootPromise.then(app => {
|
|
250
|
+
loadInstance(app);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
app.reopen({
|
|
254
|
+
didBecomeReady() {
|
|
255
|
+
this._super.apply(this, arguments);
|
|
256
|
+
setTimeout(() => loadInstance(app), 0);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
Application.initializer({
|
|
261
|
+
name: 'ember-inspector-booted',
|
|
262
|
+
initialize: function (app) {
|
|
263
|
+
setupInstanceInitializer(app, callback);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return async function startInspector() {
|
|
268
|
+
// global to prevent injection
|
|
269
|
+
if (window.NO_EMBER_DEBUG) {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* If we don't have a way to know the Ember version at this point
|
|
275
|
+
* because the Ember app has not loaded and provided it somehow,
|
|
276
|
+
* we can't continue (we need the version to know what version of
|
|
277
|
+
* the Inspector to load).
|
|
278
|
+
*/
|
|
279
|
+
if (!VERSION) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* This is used to redirect to an old snapshot of the Inspector if the
|
|
285
|
+
* inspected app uses an older Ember version than supported versions.
|
|
286
|
+
* The code fits the Inspector supporting Ember back to 3.16: any version
|
|
287
|
+
* before 3.16 is necessarily a classic Ember app with Ember defined.
|
|
288
|
+
*/
|
|
289
|
+
if (!versionTest(VERSION, EMBER_VERSIONS_SUPPORTED)) {
|
|
290
|
+
// Wrong inspector version. Redirect to the correct version.
|
|
291
|
+
sendVersionMiss(VERSION);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// prevent from injecting twice
|
|
296
|
+
if (!window.EmberInspector) {
|
|
297
|
+
let emberDebugMainModule = (await import('./main.js')).default;
|
|
298
|
+
if (!emberDebugMainModule) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
window.EmberInspector = emberDebugMainModule;
|
|
302
|
+
window.EmberInspector.Adapter = adapter;
|
|
303
|
+
onApplicationStart(function appStarted(instance) {
|
|
304
|
+
let app = instance.application;
|
|
305
|
+
if (!('__inspector__booted' in app)) {
|
|
306
|
+
// Watch for app reset/destroy
|
|
307
|
+
app.reopen({
|
|
308
|
+
reset: function () {
|
|
309
|
+
this.__inspector__booted = false;
|
|
310
|
+
this._super.apply(this, arguments);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
if (instance && !('__inspector__booted' in instance)) {
|
|
315
|
+
instance.reopen({
|
|
316
|
+
// Clean up on instance destruction
|
|
317
|
+
willDestroy() {
|
|
318
|
+
if (window.EmberInspector.owner === instance) {
|
|
319
|
+
window.EmberInspector.destroyContainer();
|
|
320
|
+
window.EmberInspector.clear();
|
|
321
|
+
}
|
|
322
|
+
return this._super.apply(this, arguments);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
if (!window.EmberInspector._application) {
|
|
326
|
+
setTimeout(() => bootEmberInspector(instance), 0);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export { onEmberReady, startInspector };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { EmberObject, inspect as inspect$1, Debug, meta, ComputedProperty, InternalsMetal } from './ember.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check if given key on the passed object is a computed property
|
|
5
|
+
* @param object
|
|
6
|
+
* @param key
|
|
7
|
+
* @return {boolean|*}
|
|
8
|
+
*/
|
|
9
|
+
function isComputed(object, key) {
|
|
10
|
+
// Ember > 3.10
|
|
11
|
+
if (Debug.isComputed && Debug.isComputed(object, key)) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (meta(object) && meta(object).peekDescriptors(key)) {
|
|
15
|
+
return !!meta(object).peekDescriptors(key)._getter;
|
|
16
|
+
}
|
|
17
|
+
if (getDescriptorFor(object, key) instanceof ComputedProperty) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* This allows us to pass in a COMPUTED_DECORATOR function and get the descriptor for it.
|
|
24
|
+
* It should be implemented Ember side eventually.
|
|
25
|
+
* @param {EmberObject} object The object we are inspecting
|
|
26
|
+
* @param {String} key The key for the property on the object
|
|
27
|
+
*/
|
|
28
|
+
function getDescriptorFor(object, key) {
|
|
29
|
+
if (object[key]?.isDescriptor) {
|
|
30
|
+
return object[key];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// exists longer than ember 3.10
|
|
34
|
+
if (Debug.isComputed) {
|
|
35
|
+
const {
|
|
36
|
+
descriptorForDecorator,
|
|
37
|
+
descriptorForProperty
|
|
38
|
+
} = InternalsMetal || {};
|
|
39
|
+
return descriptorForDecorator?.(object[key]) || descriptorForProperty?.(object, key);
|
|
40
|
+
}
|
|
41
|
+
return object[key];
|
|
42
|
+
}
|
|
43
|
+
function typeOf(obj) {
|
|
44
|
+
return Object.prototype.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
|
|
45
|
+
}
|
|
46
|
+
function inspect(value) {
|
|
47
|
+
if (typeof value === 'function') {
|
|
48
|
+
return `${value.name || 'function'}() { ... }`;
|
|
49
|
+
} else if (value instanceof EmberObject) {
|
|
50
|
+
return value.toString();
|
|
51
|
+
} else if (value instanceof HTMLElement) {
|
|
52
|
+
return `<${value.tagName.toLowerCase()}>`;
|
|
53
|
+
} else if (typeOf(value) === 'array') {
|
|
54
|
+
if (value.length === 0) {
|
|
55
|
+
return '[]';
|
|
56
|
+
} else if (value.length === 1) {
|
|
57
|
+
return `[ ${inspect(value[0])} ]`;
|
|
58
|
+
} else {
|
|
59
|
+
return `[ ${inspect(value[0])}, ... ]`;
|
|
60
|
+
}
|
|
61
|
+
} else if (value instanceof Error) {
|
|
62
|
+
return `Error: ${value.message}`;
|
|
63
|
+
} else if (value === null) {
|
|
64
|
+
return 'null';
|
|
65
|
+
} else if (typeOf(value) === 'date') {
|
|
66
|
+
return value.toString();
|
|
67
|
+
} else if (typeof value === 'object') {
|
|
68
|
+
// `Ember.inspect` is able to handle this use case,
|
|
69
|
+
// but it is very slow as it loops over all props,
|
|
70
|
+
// so summarize to just first 2 props
|
|
71
|
+
// if it defines a toString, we use that instead
|
|
72
|
+
if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString && value.toString !== Function.prototype.toString) {
|
|
73
|
+
try {
|
|
74
|
+
return `<Object:${value.toString()}>`;
|
|
75
|
+
} catch {
|
|
76
|
+
//
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let ret = [];
|
|
80
|
+
let v;
|
|
81
|
+
let count = 0;
|
|
82
|
+
let broken = false;
|
|
83
|
+
for (let key in value) {
|
|
84
|
+
if (!('hasOwnProperty' in value) || value.hasOwnProperty(key)) {
|
|
85
|
+
if (count++ > 1) {
|
|
86
|
+
broken = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
v = value[key];
|
|
90
|
+
if (v === 'toString') {
|
|
91
|
+
continue;
|
|
92
|
+
} // ignore useless items
|
|
93
|
+
if (typeOf(v).includes('function')) {
|
|
94
|
+
v = `function ${v.name}() { ... }`;
|
|
95
|
+
}
|
|
96
|
+
if (typeOf(v) === 'array') {
|
|
97
|
+
v = `[Array : ${v.length}]`;
|
|
98
|
+
}
|
|
99
|
+
if (typeOf(v) === 'object') {
|
|
100
|
+
v = '[Object]';
|
|
101
|
+
}
|
|
102
|
+
// to avoid TypeError: Cannot convert a Symbol value to a string
|
|
103
|
+
if (typeOf(v) === 'symbol') {
|
|
104
|
+
v = v.toString();
|
|
105
|
+
}
|
|
106
|
+
ret.push(`${key}: ${v}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let suffix = ' }';
|
|
110
|
+
if (broken) {
|
|
111
|
+
suffix = ' ...}';
|
|
112
|
+
}
|
|
113
|
+
return `{ ${ret.join(', ')}${suffix}`;
|
|
114
|
+
} else {
|
|
115
|
+
return inspect$1(value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { getDescriptorFor, inspect, isComputed, typeOf };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares two Ember versions.
|
|
3
|
+
*
|
|
4
|
+
* Returns:
|
|
5
|
+
* `-1` if version1 < version
|
|
6
|
+
* 0 if version1 == version2
|
|
7
|
+
* 1 if version1 > version2
|
|
8
|
+
*
|
|
9
|
+
* @param {String} version1
|
|
10
|
+
* @param {String} version2
|
|
11
|
+
* @return {Boolean} result of the comparison
|
|
12
|
+
*/
|
|
13
|
+
function compareVersion(version1, version2) {
|
|
14
|
+
let compared, i;
|
|
15
|
+
version1 = cleanupVersion(version1).split('.');
|
|
16
|
+
version2 = cleanupVersion(version2).split('.');
|
|
17
|
+
for (i = 0; i < 3; i++) {
|
|
18
|
+
compared = compare(+version1[i], +version2[i]);
|
|
19
|
+
if (compared !== 0) {
|
|
20
|
+
return compared;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param specifier e.g. ^5.12.0
|
|
29
|
+
* @param version 5.13
|
|
30
|
+
* @return {boolean}
|
|
31
|
+
*/
|
|
32
|
+
function isInVersionSpecifier(specifier, version) {
|
|
33
|
+
let compared, i, version2;
|
|
34
|
+
let operator = specifier[0];
|
|
35
|
+
if (Number.isNaN(+operator)) {
|
|
36
|
+
specifier = specifier.slice(1);
|
|
37
|
+
}
|
|
38
|
+
specifier = cleanupVersion(specifier).split('.');
|
|
39
|
+
version2 = cleanupVersion(version).split('.');
|
|
40
|
+
if (operator === '~' && specifier[1] !== version2[1]) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (operator === '^' && specifier[0] !== version2[0]) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (operator === '>' && specifier[0] > version2[0]) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
for (i = 0; i < 3; i++) {
|
|
50
|
+
compared = compare(+specifier[i], +version2[i]);
|
|
51
|
+
if (compared < 0) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if (compared > 0) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Remove -alpha, -beta, etc from versions
|
|
63
|
+
*
|
|
64
|
+
* @param {String} version
|
|
65
|
+
* @return {String} The cleaned up version
|
|
66
|
+
*/
|
|
67
|
+
function cleanupVersion(version) {
|
|
68
|
+
return version.replace(/-.*/g, '');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @method compare
|
|
73
|
+
* @param {Number} val
|
|
74
|
+
* @param {Number} number
|
|
75
|
+
* @return {Number}
|
|
76
|
+
* 0: same
|
|
77
|
+
* -1: <
|
|
78
|
+
* 1: >
|
|
79
|
+
*/
|
|
80
|
+
function compare(val, number) {
|
|
81
|
+
if (val === number) {
|
|
82
|
+
return 0;
|
|
83
|
+
} else if (val < number) {
|
|
84
|
+
return -1;
|
|
85
|
+
} else if (val > number) {
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export { compareVersion, isInVersionSpecifier };
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { B as BasicAdapter } from './basic-B1dkgN3d.js';
|
|
2
|
+
import { typeOf } from './type-check.js';
|
|
3
|
+
import { getEnv } from './ember.js';
|
|
4
|
+
import { r as run } from './runloop-6_0lpzTA.js';
|
|
5
|
+
|
|
6
|
+
const {
|
|
7
|
+
isArray
|
|
8
|
+
} = Array;
|
|
9
|
+
const {
|
|
10
|
+
keys
|
|
11
|
+
} = Object;
|
|
12
|
+
class WebExtension extends BasicAdapter {
|
|
13
|
+
// eslint-disable-next-line ember/classic-decorator-hooks
|
|
14
|
+
init() {
|
|
15
|
+
this._channel = new MessageChannel();
|
|
16
|
+
this._chromePort = this._channel?.port1;
|
|
17
|
+
super.init();
|
|
18
|
+
}
|
|
19
|
+
connect() {
|
|
20
|
+
const channel = this._channel;
|
|
21
|
+
return super.connect().then(() => {
|
|
22
|
+
window.postMessage('debugger-client', '*', [channel.port2]);
|
|
23
|
+
this._listen();
|
|
24
|
+
}, null);
|
|
25
|
+
}
|
|
26
|
+
sendMessage(options = {}) {
|
|
27
|
+
// If prototype extensions are disabled, `Ember.A()` arrays
|
|
28
|
+
// would not be considered native arrays, so it's not possible to
|
|
29
|
+
// "clone" them through postMessage unless they are converted to a
|
|
30
|
+
// native array.
|
|
31
|
+
options = deepClone(options);
|
|
32
|
+
try {
|
|
33
|
+
this._chromePort.postMessage(options);
|
|
34
|
+
} catch (e) {
|
|
35
|
+
console.log('failed to send message', e);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Open the devtools "Elements" and select an DOM node.
|
|
41
|
+
*
|
|
42
|
+
* @param {Node|Function} value The DOM node to select
|
|
43
|
+
*/
|
|
44
|
+
inspectValue(value) {
|
|
45
|
+
// NOTE:
|
|
46
|
+
//
|
|
47
|
+
// Basically, we are just trying to call `inspect(node)` here.
|
|
48
|
+
// However, `inspect` is a special function that is in the global
|
|
49
|
+
// scope but not on the global object (i.e. `window.inspect`) does
|
|
50
|
+
// not work. This sometimes causes problems, because, e.g. if the
|
|
51
|
+
// page has a div with the ID `inspect`, `window.inspect` will point
|
|
52
|
+
// to that div and shadow the "global" inspect function with no way
|
|
53
|
+
// to get it back. That causes "`inspect` is not a function" errors.
|
|
54
|
+
//
|
|
55
|
+
// As it turns out, however, when the extension page evals, the
|
|
56
|
+
// `inspect` function does not get shadowed. So, we can ask the
|
|
57
|
+
// inspector extension page to call that function for us, using
|
|
58
|
+
// `inspected.Window.eval('inspect(node)')`.
|
|
59
|
+
//
|
|
60
|
+
// However, since we cannot just send the DOM node directly to the
|
|
61
|
+
// extension, we will have to store it in a temporary global variable
|
|
62
|
+
// so that the extension can find it.
|
|
63
|
+
|
|
64
|
+
let name = `__EMBER_INSPECTOR_${(Math.random() * 100000000).toFixed(0)}`;
|
|
65
|
+
window[name] = value;
|
|
66
|
+
this.namespace.port.send('view:inspectJSValue', {
|
|
67
|
+
name
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
_listen() {
|
|
71
|
+
let chromePort = this._chromePort;
|
|
72
|
+
chromePort.addEventListener('message', event => {
|
|
73
|
+
const message = event.data;
|
|
74
|
+
|
|
75
|
+
// We should generally not be run-wrapping here. Starting a runloop in
|
|
76
|
+
// ember-debug will cause the inspected app to revalidate/rerender. We
|
|
77
|
+
// are generally not intending to cause changes to the rendered output
|
|
78
|
+
// of the app, so this is generally unnecessary, and in big apps this
|
|
79
|
+
// could be quite slow. There is nothing special about the `view:*`
|
|
80
|
+
// messages – I (GC) just happened to have reviewed all of them recently
|
|
81
|
+
// and can be quite sure that they don't need the runloop. We should
|
|
82
|
+
// audit the rest of them and see if we can remove the else branch. I
|
|
83
|
+
// think we most likely can. In the limited cases (if any) where the
|
|
84
|
+
// runloop is needed, the callback code should just do the wrapping
|
|
85
|
+
// themselves.
|
|
86
|
+
if (message.type.startsWith('view:')) {
|
|
87
|
+
this._messageReceived(message);
|
|
88
|
+
} else {
|
|
89
|
+
run(() => {
|
|
90
|
+
this._messageReceived(message);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
chromePort.start();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// On some older Ember version `Ember.ENV.EXTEND_PROTOTYPES` is not
|
|
99
|
+
// guarenteed to be an object. While this code only support 3.4+ (all
|
|
100
|
+
// of which normalizes `EXTEND_PROTOTYPES` for us), startup-wrapper.js
|
|
101
|
+
// eagerly require/load ember-debug modules, which ultimately causes
|
|
102
|
+
// this top-level code to run, even we are going to pick a different
|
|
103
|
+
// adapter later. See GH #1114.
|
|
104
|
+
const HAS_ARRAY_PROTOTYPE_EXTENSIONS = (() => {
|
|
105
|
+
try {
|
|
106
|
+
return getEnv().EXTEND_PROTOTYPES.Array === true;
|
|
107
|
+
} catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
})();
|
|
111
|
+
let deepClone;
|
|
112
|
+
if (HAS_ARRAY_PROTOTYPE_EXTENSIONS) {
|
|
113
|
+
deepClone = function deepClone(item) {
|
|
114
|
+
return item;
|
|
115
|
+
};
|
|
116
|
+
} else {
|
|
117
|
+
/**
|
|
118
|
+
* Recursively clones all arrays. Needed because Chrome
|
|
119
|
+
* refuses to clone Ember Arrays when extend prototypes is disabled.
|
|
120
|
+
*
|
|
121
|
+
* If the item passed is an array, a clone of the array is returned.
|
|
122
|
+
* If the item is an object or an array, or array properties/items are cloned.
|
|
123
|
+
*
|
|
124
|
+
* @param {Mixed} item The item to clone
|
|
125
|
+
* @return {Mixed}
|
|
126
|
+
*/
|
|
127
|
+
deepClone = function deepClone(item) {
|
|
128
|
+
let clone = item;
|
|
129
|
+
if (isArray(item)) {
|
|
130
|
+
clone = new Array(item.length);
|
|
131
|
+
item.forEach((child, key) => {
|
|
132
|
+
clone[key] = deepClone(child);
|
|
133
|
+
});
|
|
134
|
+
} else if (item && typeOf(item) === 'object') {
|
|
135
|
+
clone = {};
|
|
136
|
+
keys(item).forEach(key => {
|
|
137
|
+
clone[key] = deepClone(item[key]);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return clone;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export { WebExtension as W };
|