@worktile/planet 12.1.1 → 12.1.2
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/application/planet-application-loader.d.ts +70 -0
- package/application/planet-application-loader.d.ts.map +1 -0
- package/application/planet-application-loader.ngfactory.d.ts.map +1 -0
- package/application/planet-application-ref.d.ts +36 -0
- package/application/planet-application-ref.d.ts.map +1 -0
- package/application/planet-application.service.d.ts +19 -0
- package/application/planet-application.service.d.ts.map +1 -0
- package/application/planet-application.service.ngfactory.d.ts.map +1 -0
- package/{packages/planet/src/application/portal-application.ts → application/portal-application.d.ts} +5 -18
- package/application/portal-application.d.ts.map +1 -0
- package/assets-loader.d.ts +33 -0
- package/assets-loader.d.ts.map +1 -0
- package/assets-loader.ngfactory.d.ts.map +1 -0
- package/bundles/worktile-planet.umd.js +2564 -0
- package/bundles/worktile-planet.umd.js.map +1 -0
- package/component/planet-component-loader.d.ts +28 -0
- package/component/planet-component-loader.d.ts.map +1 -0
- package/component/planet-component-loader.ngfactory.d.ts.map +1 -0
- package/component/planet-component-ref.d.ts +8 -0
- package/component/planet-component-ref.d.ts.map +1 -0
- package/{packages/planet/src/component/plant-component.config.ts → component/plant-component.config.d.ts} +4 -4
- package/component/plant-component.config.d.ts.map +1 -0
- package/debug.d.ts +22 -0
- package/debug.d.ts.map +1 -0
- package/empty/empty.component.d.ts +3 -0
- package/empty/empty.component.d.ts.map +1 -0
- package/empty/empty.component.ngfactory.d.ts.map +1 -0
- package/esm2015/application/planet-application-loader.js +457 -0
- package/esm2015/application/planet-application-ref.js +97 -0
- package/esm2015/application/planet-application.service.js +87 -0
- package/esm2015/application/portal-application.js +16 -0
- package/esm2015/assets-loader.js +217 -0
- package/esm2015/component/planet-component-loader.js +155 -0
- package/esm2015/component/planet-component-ref.js +3 -0
- package/esm2015/component/plant-component.config.js +7 -0
- package/esm2015/debug.js +33 -0
- package/esm2015/empty/empty.component.js +10 -0
- package/esm2015/global-event-dispatcher.js +71 -0
- package/esm2015/global-planet.js +54 -0
- package/esm2015/helpers.js +119 -0
- package/esm2015/module.js +27 -0
- package/esm2015/planet.class.js +9 -0
- package/esm2015/planet.js +91 -0
- package/esm2015/public-api.js +18 -0
- package/esm2015/sandbox/constants.js +7 -0
- package/esm2015/sandbox/exec.js +15 -0
- package/esm2015/sandbox/index.js +20 -0
- package/esm2015/sandbox/proxy/patches/document.js +12 -0
- package/esm2015/sandbox/proxy/patches/eventListener.js +41 -0
- package/esm2015/sandbox/proxy/patches/index.js +11 -0
- package/esm2015/sandbox/proxy/patches/storage.js +40 -0
- package/esm2015/sandbox/proxy/patches/timer.js +43 -0
- package/esm2015/sandbox/proxy/proxies/common.js +132 -0
- package/esm2015/sandbox/proxy/proxies/document.js +126 -0
- package/esm2015/sandbox/proxy/proxies/window.js +155 -0
- package/esm2015/sandbox/proxy/proxy-sandbox.js +49 -0
- package/esm2015/sandbox/proxy/types.js +2 -0
- package/esm2015/sandbox/sandbox.js +7 -0
- package/esm2015/sandbox/snapshot/snapshot-sandbox.js +12 -0
- package/esm2015/sandbox/types.js +2 -0
- package/esm2015/worktile-planet.js +6 -0
- package/fesm2015/worktile-planet.js +2048 -0
- package/fesm2015/worktile-planet.js.map +1 -0
- package/global-event-dispatcher.d.ts +20 -0
- package/global-event-dispatcher.d.ts.map +1 -0
- package/global-event-dispatcher.ngfactory.d.ts.map +1 -0
- package/global-planet.d.ts +23 -0
- package/global-planet.d.ts.map +1 -0
- package/helpers.d.ts +39 -0
- package/helpers.d.ts.map +1 -0
- package/module.d.ts +6 -0
- package/module.d.ts.map +1 -0
- package/module.ngfactory.d.ts.map +1 -0
- package/package.json +16 -121
- package/{packages/planet/src/planet.class.ts → planet.class.d.ts} +5 -26
- package/planet.class.d.ts.map +1 -0
- package/planet.d.ts +25 -0
- package/planet.d.ts.map +1 -0
- package/planet.ngfactory.d.ts.map +1 -0
- package/{packages/planet/src/public-api.ts → public-api.d.ts} +1 -4
- package/public-api.d.ts.map +1 -0
- package/sandbox/constants.d.ts +7 -0
- package/sandbox/constants.d.ts.map +1 -0
- package/sandbox/exec.d.ts +3 -0
- package/sandbox/exec.d.ts.map +1 -0
- package/sandbox/index.d.ts +7 -0
- package/sandbox/index.d.ts.map +1 -0
- package/sandbox/proxy/patches/document.d.ts +3 -0
- package/sandbox/proxy/patches/document.d.ts.map +1 -0
- package/sandbox/proxy/patches/eventListener.d.ts +3 -0
- package/sandbox/proxy/patches/eventListener.d.ts.map +1 -0
- package/sandbox/proxy/patches/index.d.ts +3 -0
- package/sandbox/proxy/patches/index.d.ts.map +1 -0
- package/sandbox/proxy/patches/storage.d.ts +15 -0
- package/sandbox/proxy/patches/storage.d.ts.map +1 -0
- package/sandbox/proxy/patches/timer.d.ts +3 -0
- package/sandbox/proxy/patches/timer.d.ts.map +1 -0
- package/sandbox/proxy/proxies/common.d.ts +13 -0
- package/sandbox/proxy/proxies/common.d.ts.map +1 -0
- package/sandbox/proxy/proxies/document.d.ts +14 -0
- package/sandbox/proxy/proxies/document.d.ts.map +1 -0
- package/sandbox/proxy/proxies/window.d.ts +13 -0
- package/sandbox/proxy/proxies/window.d.ts.map +1 -0
- package/sandbox/proxy/proxy-sandbox.d.ts +16 -0
- package/sandbox/proxy/proxy-sandbox.d.ts.map +1 -0
- package/{packages/planet/src/sandbox/proxy/types.ts → sandbox/proxy/types.d.ts} +2 -8
- package/sandbox/proxy/types.d.ts.map +1 -0
- package/sandbox/sandbox.d.ts +12 -0
- package/sandbox/sandbox.d.ts.map +1 -0
- package/sandbox/snapshot/snapshot-sandbox.d.ts +9 -0
- package/sandbox/snapshot/snapshot-sandbox.d.ts.map +1 -0
- package/sandbox/types.d.ts +2 -0
- package/sandbox/types.d.ts.map +1 -0
- package/worktile-planet.d.ts +6 -0
- package/worktile-planet.d.ts.map +1 -0
- package/worktile-planet.metadata.json +1 -0
- package/.all-contributorsrc +0 -84
- package/.circleci/config.yml +0 -17
- package/.coveralls.yml +0 -1
- package/.docgeni/public/assets/favicon.ico +0 -0
- package/.docgeni/public/index.html +0 -13
- package/.docgenirc.js +0 -35
- package/.dockerignore +0 -1
- package/.editorconfig +0 -22
- package/.github/FUNDING.yml +0 -12
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.prettierignore +0 -7
- package/.prettierrc +0 -28
- package/.travis.yml +0 -26
- package/.wpmrc.js +0 -11
- package/CHANGELOG.md +0 -391
- package/CODE_OF_CONDUCT.md +0 -76
- package/Dockerfile +0 -11
- package/LICENSE +0 -21
- package/README.md +0 -348
- package/README.zh-CN.md +0 -307
- package/SECURITY.md +0 -21
- package/angular.json +0 -373
- package/commitlint.config.js +0 -6
- package/docs/api/defineApplication.md +0 -46
- package/docs/api/globalEventDispatcher.md +0 -51
- package/docs/api/index.md +0 -5
- package/docs/api/planet.md +0 -117
- package/docs/guides/getting-started.md +0 -174
- package/docs/guides/index.md +0 -5
- package/docs/guides/intro.md +0 -216
- package/examples/app1/browserslist +0 -11
- package/examples/app1/extra-webpack.config.js +0 -33
- package/examples/app1/karma.conf.js +0 -31
- package/examples/app1/postcss.config.js +0 -1
- package/examples/app1/src/app/app.module.ts +0 -44
- package/examples/app1/src/app/app.routing.ts +0 -49
- package/examples/app1/src/app/counter.service.ts +0 -16
- package/examples/app1/src/app/dashboard/dashboard.component.html +0 -51
- package/examples/app1/src/app/dashboard/dashboard.component.ts +0 -70
- package/examples/app1/src/app/detail/detail.component.html +0 -8
- package/examples/app1/src/app/detail/detail.component.ts +0 -18
- package/examples/app1/src/app/overlay.ts +0 -26
- package/examples/app1/src/app/projects/dialog/projects-dialog.component.html +0 -10
- package/examples/app1/src/app/projects/dialog/projects-dialog.component.ts +0 -41
- package/examples/app1/src/app/projects/projects.component.ts +0 -33
- package/examples/app1/src/app/root/root.component.css +0 -3
- package/examples/app1/src/app/root/root.component.html +0 -16
- package/examples/app1/src/app/root/root.component.ts +0 -35
- package/examples/app1/src/app/services/initialized-data.resolver.ts +0 -15
- package/examples/app1/src/app/shared.module.ts +0 -57
- package/examples/app1/src/app/user/detail/user-detail.component.html +0 -5
- package/examples/app1/src/app/user/detail/user-detail.component.ts +0 -20
- package/examples/app1/src/app/user/user-list.component.html +0 -7
- package/examples/app1/src/app/user/user-list.component.ts +0 -20
- package/examples/app1/src/app/user/user.module.ts +0 -31
- package/examples/app1/src/assets/.gitkeep +0 -0
- package/examples/app1/src/assets/github.png +0 -0
- package/examples/app1/src/assets/main.css +0 -3
- package/examples/app1/src/environments/environment.prod.ts +0 -3
- package/examples/app1/src/environments/environment.ts +0 -16
- package/examples/app1/src/favicon.ico +0 -0
- package/examples/app1/src/index.html +0 -14
- package/examples/app1/src/main.ts +0 -35
- package/examples/app1/src/polyfills.ts +0 -84
- package/examples/app1/src/styles.scss +0 -35
- package/examples/app1/src/test.ts +0 -14
- package/examples/app1/temp.js +0 -221
- package/examples/app1/tsconfig.app.json +0 -10
- package/examples/app1/tsconfig.spec.json +0 -18
- package/examples/app1/tslint.json +0 -17
- package/examples/app1/webpack.config.js +0 -127
- package/examples/app2/browserslist +0 -11
- package/examples/app2/extra-webpack.config.js +0 -32
- package/examples/app2/karma.conf.js +0 -31
- package/examples/app2/src/app/app.module.ts +0 -90
- package/examples/app2/src/app/dashboard/dashboard.component.html +0 -21
- package/examples/app2/src/app/dashboard/dashboard.component.ts +0 -27
- package/examples/app2/src/app/overlay.ts +0 -26
- package/examples/app2/src/app/projects/detail/detail.component.html +0 -16
- package/examples/app2/src/app/projects/detail/detail.component.ts +0 -21
- package/examples/app2/src/app/projects/project-list.component.html +0 -29
- package/examples/app2/src/app/projects/project-list.component.ts +0 -58
- package/examples/app2/src/app/projects/project.resolver.ts +0 -15
- package/examples/app2/src/app/projects/projects.service.ts +0 -28
- package/examples/app2/src/app/projects/tasks/tasks.component.html +0 -10
- package/examples/app2/src/app/projects/tasks/tasks.component.ts +0 -16
- package/examples/app2/src/app/projects/view/view.component.html +0 -1
- package/examples/app2/src/app/projects/view/view.component.ts +0 -20
- package/examples/app2/src/app/root/root.component.html +0 -14
- package/examples/app2/src/app/root/root.component.scss +0 -12
- package/examples/app2/src/app/root/root.component.ts +0 -28
- package/examples/app2/src/app/shared.module.ts +0 -59
- package/examples/app2/src/assets/.gitkeep +0 -0
- package/examples/app2/src/environments/environment.prod.ts +0 -3
- package/examples/app2/src/environments/environment.ts +0 -16
- package/examples/app2/src/favicon.ico +0 -0
- package/examples/app2/src/index.html +0 -14
- package/examples/app2/src/main.ts +0 -36
- package/examples/app2/src/polyfills.ts +0 -84
- package/examples/app2/src/styles.scss +0 -28
- package/examples/app2/src/test.ts +0 -14
- package/examples/app2/tsconfig.app.json +0 -10
- package/examples/app2/tsconfig.spec.json +0 -18
- package/examples/app2/tslint.json +0 -7
- package/examples/app2/webpack.config.js +0 -92
- package/examples/common/app-root-context.ts +0 -10
- package/examples/common/cache.ts +0 -82
- package/examples/common/index.ts +0 -13
- package/examples/common/module.ts +0 -10
- package/examples/common/overlay-container.service.ts +0 -28
- package/examples/common/section-card/section-card.component.html +0 -5
- package/examples/common/section-card/section-card.component.scss +0 -15
- package/examples/common/section-card/section-card.component.ts +0 -11
- package/examples/common/utils.ts +0 -0
- package/examples/portal/src/app/a-detail/a-detail.component.html +0 -8
- package/examples/portal/src/app/a-detail/a-detail.component.ts +0 -18
- package/examples/portal/src/app/about/about.component.html +0 -27
- package/examples/portal/src/app/about/about.component.scss +0 -0
- package/examples/portal/src/app/about/about.component.spec.ts +0 -26
- package/examples/portal/src/app/about/about.component.ts +0 -26
- package/examples/portal/src/app/app-routing.module.ts +0 -57
- package/examples/portal/src/app/app.component.html +0 -73
- package/examples/portal/src/app/app.component.scss +0 -58
- package/examples/portal/src/app/app.component.spec.ts +0 -33
- package/examples/portal/src/app/app.component.ts +0 -111
- package/examples/portal/src/app/app.module.ts +0 -64
- package/examples/portal/src/app/custom-settings.service.ts +0 -44
- package/examples/portal/src/app/overlay.ts +0 -26
- package/examples/portal/src/app/settings/settings.component.html +0 -31
- package/examples/portal/src/app/settings/settings.component.scss +0 -3
- package/examples/portal/src/app/settings/settings.component.ts +0 -43
- package/examples/portal/src/assets/.gitkeep +0 -0
- package/examples/portal/src/assets/apps.json +0 -29
- package/examples/portal/src/assets/icons/sprite.defs.svg +0 -1
- package/examples/portal/src/assets/images/logo.svg +0 -16
- package/examples/portal/src/assets/ngx-planet-micro-front-end.gif +0 -0
- package/examples/portal/src/browserslist +0 -11
- package/examples/portal/src/environments/environment.prod.ts +0 -3
- package/examples/portal/src/environments/environment.ts +0 -16
- package/examples/portal/src/extra-webpack.config.js +0 -32
- package/examples/portal/src/favicon.ico +0 -0
- package/examples/portal/src/index.html +0 -14
- package/examples/portal/src/karma.conf.js +0 -31
- package/examples/portal/src/main.ts +0 -18
- package/examples/portal/src/polyfills.ts +0 -84
- package/examples/portal/src/reboot.scss +0 -14
- package/examples/portal/src/styles.scss +0 -14
- package/examples/portal/src/test.ts +0 -14
- package/examples/portal/src/tsconfig.app.json +0 -10
- package/examples/portal/src/tsconfig.spec.json +0 -9
- package/examples/portal/src/tslint.json +0 -7
- package/extra-webpack.config.js +0 -5
- package/nginx.conf +0 -17
- package/packages/planet/karma.conf.js +0 -37
- package/packages/planet/ng-package.json +0 -7
- package/packages/planet/package.json +0 -10
- package/packages/planet/src/application/planet-application-loader.spec.ts +0 -1102
- package/packages/planet/src/application/planet-application-loader.ts +0 -549
- package/packages/planet/src/application/planet-application-ref.spec.ts +0 -233
- package/packages/planet/src/application/planet-application-ref.ts +0 -131
- package/packages/planet/src/application/planet-application.service.spec.ts +0 -145
- package/packages/planet/src/application/planet-application.service.ts +0 -88
- package/packages/planet/src/application/portal-application.spec.ts +0 -53
- package/packages/planet/src/assets-loader.spec.ts +0 -689
- package/packages/planet/src/assets-loader.ts +0 -247
- package/packages/planet/src/component/planet-component-loader.spec.ts +0 -187
- package/packages/planet/src/component/planet-component-loader.ts +0 -173
- package/packages/planet/src/component/planet-component-ref.ts +0 -8
- package/packages/planet/src/debug.spec.ts +0 -58
- package/packages/planet/src/debug.ts +0 -66
- package/packages/planet/src/empty/empty.component.spec.ts +0 -34
- package/packages/planet/src/empty/empty.component.ts +0 -7
- package/packages/planet/src/global-event-dispatcher.spec.ts +0 -81
- package/packages/planet/src/global-event-dispatcher.ts +0 -82
- package/packages/planet/src/global-planet.spec.ts +0 -39
- package/packages/planet/src/global-planet.ts +0 -73
- package/packages/planet/src/helpers.spec.ts +0 -242
- package/packages/planet/src/helpers.ts +0 -125
- package/packages/planet/src/module.spec.ts +0 -79
- package/packages/planet/src/module.ts +0 -25
- package/packages/planet/src/planet.spec.ts +0 -226
- package/packages/planet/src/planet.ts +0 -113
- package/packages/planet/src/sandbox/constants.ts +0 -6
- package/packages/planet/src/sandbox/exec.ts +0 -22
- package/packages/planet/src/sandbox/index.ts +0 -24
- package/packages/planet/src/sandbox/proxy/patches/document.ts +0 -13
- package/packages/planet/src/sandbox/proxy/patches/eventListener.ts +0 -49
- package/packages/planet/src/sandbox/proxy/patches/index.ts +0 -13
- package/packages/planet/src/sandbox/proxy/patches/storage.ts +0 -53
- package/packages/planet/src/sandbox/proxy/patches/timer.ts +0 -50
- package/packages/planet/src/sandbox/proxy/proxies/common.ts +0 -137
- package/packages/planet/src/sandbox/proxy/proxies/document.ts +0 -140
- package/packages/planet/src/sandbox/proxy/proxies/window.ts +0 -176
- package/packages/planet/src/sandbox/proxy/proxy-sandbox.ts +0 -59
- package/packages/planet/src/sandbox/sandbox.ts +0 -20
- package/packages/planet/src/sandbox/snapshot/snapshot-sandbox.ts +0 -12
- package/packages/planet/src/sandbox/types.ts +0 -1
- package/packages/planet/src/test.ts +0 -16
- package/packages/planet/src/testing/app1.module.ts +0 -34
- package/packages/planet/src/testing/app2.module.ts +0 -24
- package/packages/planet/src/testing/applications.ts +0 -58
- package/packages/planet/src/testing/index.ts +0 -2
- package/packages/planet/src/testing/utils.ts +0 -31
- package/packages/planet/tsconfig.lib.json +0 -27
- package/packages/planet/tsconfig.lib.prod.json +0 -9
- package/packages/planet/tsconfig.spec.json +0 -17
- package/packages/planet/tslint.json +0 -7
- package/postcss.config.js +0 -3
- package/proxy.conf.js +0 -15
- package/tsconfig.json +0 -23
- package/tslint.json +0 -80
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { isFunction } from '../../../helpers';
|
|
2
|
+
import { DOCUMENT_BIND_FN, PLANET_SANDBOX_DOCUMENT_WHITELIST, RAW_NODE } from '../../constants';
|
|
3
|
+
import { hasOwnProp, createFakeObject, isInvalidSetAccessor, isNonWriteableValue, bind, isInvalidGetAccessor } from './common';
|
|
4
|
+
const rawDocument = Document;
|
|
5
|
+
const whitelist = ['cookie', 'title', 'location', ...(PLANET_SANDBOX_DOCUMENT_WHITELIST || [])];
|
|
6
|
+
export class ProxyDocument {
|
|
7
|
+
constructor() { }
|
|
8
|
+
createGetter() {
|
|
9
|
+
return (target, p, receiver) => {
|
|
10
|
+
const value = hasOwnProp(target, p) ? Reflect.get(target, p, receiver) : Reflect.get(document, p);
|
|
11
|
+
if (p === 'activeElement') {
|
|
12
|
+
return Reflect.get(document, p);
|
|
13
|
+
}
|
|
14
|
+
// TODO: 处理动态节点
|
|
15
|
+
// if (p === 'createElement') {
|
|
16
|
+
// return function(tagName: string, options: ElementCreationOptions) {
|
|
17
|
+
// const created = value.call(document, tagName, options);
|
|
18
|
+
// if (isObject(created)) {
|
|
19
|
+
// created[SANDBOX_INSTANCE] = sandbox;
|
|
20
|
+
// }
|
|
21
|
+
// return created;
|
|
22
|
+
// };
|
|
23
|
+
// }
|
|
24
|
+
if (isFunction(value)) {
|
|
25
|
+
let newValue = hasOwnProp(value, DOCUMENT_BIND_FN) ? value[DOCUMENT_BIND_FN] : null;
|
|
26
|
+
if (!newValue) {
|
|
27
|
+
newValue = bind(value, document);
|
|
28
|
+
}
|
|
29
|
+
const desc = Object.getOwnPropertyDescriptor(target, p);
|
|
30
|
+
if (desc && isNonWriteableValue(desc)) {
|
|
31
|
+
if (!Object.is(newValue, desc.value)) {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (isInvalidGetAccessor(desc)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
value[DOCUMENT_BIND_FN] = newValue;
|
|
39
|
+
return newValue;
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
createSetter() {
|
|
45
|
+
return (target, p, value, receiver) => {
|
|
46
|
+
const desc = Object.getOwnPropertyDescriptor(whitelist.includes(p) ? document : receiver || target, p);
|
|
47
|
+
if (desc && isNonWriteableValue(desc)) {
|
|
48
|
+
if (Object.is(value, desc.value)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (isInvalidSetAccessor(desc)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return whitelist.includes(p) ? Reflect.set(document, p, value) : Reflect.set(target, p, value, receiver);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
createDefineProperty() {
|
|
62
|
+
return (target, p, descriptor) => {
|
|
63
|
+
return whitelist.includes(p)
|
|
64
|
+
? Reflect.defineProperty(document, p, descriptor)
|
|
65
|
+
: Reflect.defineProperty(target, p, descriptor);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
create() {
|
|
69
|
+
let proxyDocument = null;
|
|
70
|
+
const fakeDocument = createFakeObject(document);
|
|
71
|
+
const getter = this.createGetter();
|
|
72
|
+
const fakeDocumentProto = new Proxy(fakeDocument, {
|
|
73
|
+
get: (...args) => {
|
|
74
|
+
return getter(...args);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const fakeDocumentCtor = function Document() {
|
|
78
|
+
if (!(this instanceof fakeDocumentCtor)) {
|
|
79
|
+
throw new TypeError(`Failed to construct 'Document': Please use the 'new' operator.`);
|
|
80
|
+
}
|
|
81
|
+
const docInstance = new rawDocument();
|
|
82
|
+
Object.setPrototypeOf(docInstance, fakeDocument);
|
|
83
|
+
return docInstance;
|
|
84
|
+
};
|
|
85
|
+
fakeDocumentCtor.prototype = fakeDocumentProto;
|
|
86
|
+
fakeDocumentCtor.prototype.constructor = fakeDocumentCtor;
|
|
87
|
+
if (Symbol.hasInstance) {
|
|
88
|
+
Object.defineProperty(fakeDocumentCtor, Symbol.hasInstance, {
|
|
89
|
+
configurable: true,
|
|
90
|
+
value(value) {
|
|
91
|
+
let proto = value;
|
|
92
|
+
if (proto === document) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
while ((proto = Object.getPrototypeOf(proto))) {
|
|
96
|
+
if (proto === fakeDocumentProto) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const cloned = function () { };
|
|
101
|
+
cloned.prototype = fakeDocument;
|
|
102
|
+
return value instanceof cloned;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
proxyDocument = new Proxy(Object.create(fakeDocumentProto, {
|
|
107
|
+
currentScript: {
|
|
108
|
+
value: null,
|
|
109
|
+
writable: true
|
|
110
|
+
},
|
|
111
|
+
[RAW_NODE]: {
|
|
112
|
+
writable: false,
|
|
113
|
+
configurable: false,
|
|
114
|
+
value: document
|
|
115
|
+
}
|
|
116
|
+
}), {
|
|
117
|
+
set: this.createSetter(),
|
|
118
|
+
defineProperty: this.createDefineProperty()
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
document: proxyDocument,
|
|
122
|
+
Document: fakeDocumentCtor
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL3NhbmRib3gvcHJveHkvcHJveGllcy9kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hHLE9BQU8sRUFDSCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsSUFBSSxFQUNKLG9CQUFvQixFQUN2QixNQUFNLFVBQVUsQ0FBQztBQUVsQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFDN0IsTUFBTSxTQUFTLEdBQWtCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLGlDQUFpQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFL0csTUFBTSxPQUFPLGFBQWE7SUFDdEIsZ0JBQWUsQ0FBQztJQUVSLFlBQVk7UUFDaEIsT0FBTyxDQUFDLE1BQVcsRUFBRSxDQUFjLEVBQUUsUUFBYyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsS0FBSyxlQUFlLEVBQUU7Z0JBQ3ZCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkM7WUFDRCxlQUFlO1lBQ2YsK0JBQStCO1lBQy9CLDBF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Q0FBQztvQkFDN0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7b0JBQ2hDLE9BQU8sS0FBSyxZQUFZLE1BQU0sQ0FBQztnQkFDbkMsQ0FBQzthQUNKLENBQUMsQ0FBQztTQUNOO1FBQ0QsYUFBYSxHQUFHLElBQUksS0FBSyxDQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQzdCLGFBQWEsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxRQUFRLEVBQUUsSUFBSTthQUNqQjtZQUNELENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ1IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLEtBQUssRUFBRSxRQUFRO2FBQ2xCO1NBQ0osQ0FBQyxFQUNGO1lBQ0ksR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtTQUM5QyxDQUNKLENBQUM7UUFDRixPQUFPO1lBQ0gsUUFBUSxFQUFFLGFBQWE7WUFDdkIsUUFBUSxFQUFFLGdCQUFnQjtTQUM3QixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRE9DVU1FTlRfQklORF9GTiwgUExBTkVUX1NBTkRCT1hfRE9DVU1FTlRfV0hJVEVMSVNULCBSQVdfTk9ERSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIGhhc093blByb3AsXG4gICAgY3JlYXRlRmFrZU9iamVjdCxcbiAgICBpc0ludmFsaWRTZXRBY2Nlc3NvcixcbiAgICBpc05vbldyaXRlYWJsZVZhbHVlLFxuICAgIGJpbmQsXG4gICAgaXNJbnZhbGlkR2V0QWNjZXNzb3Jcbn0gZnJvbSAnLi9jb21tb24nO1xuXG5jb25zdCByYXdEb2N1bWVudCA9IERvY3VtZW50O1xuY29uc3Qgd2hpdGVsaXN0OiBQcm9wZXJ0eUtleVtdID0gWydjb29raWUnLCAndGl0bGUnLCAnbG9jYXRpb24nLCAuLi4oUExBTkVUX1NBTkRCT1hfRE9DVU1FTlRfV0hJVEVMSVNUIHx8IFtdKV07XG5cbmV4cG9ydCBjbGFzcyBQcm94eURvY3VtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcDogUHJvcGVydHlLZXksIHJlY2VpdmVyPzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhhc093blByb3AodGFyZ2V0LCBwKSA/IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpIDogUmVmbGVjdC5nZXQoZG9jdW1lbnQsIHApO1xuICAgICAgICAgICAgaWYgKHAgPT09ICdhY3RpdmVFbGVtZW50Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldChkb2N1bWVudCwgcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiDlpITnkIbliqjmgIHoioLngrlcbiAgICAgICAgICAgIC8vIGlmIChwID09PSAnY3JlYXRlRWxlbWVudCcpIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gZnVuY3Rpb24odGFnTmFtZTogc3RyaW5nLCBvcHRpb25zOiBFbGVtZW50Q3JlYXRpb25PcHRpb25zKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB2YWx1ZS5jYWxsKGRvY3VtZW50LCB0YWdOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKGlzT2JqZWN0KGNyZWF0ZWQpKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjcmVhdGVkW1NBTkRCT1hfSU5TVEFOQ0VdID0gc2FuZGJveDtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gaGFzT3duUHJvcCh2YWx1ZSwgRE9DVU1FTlRfQklORF9GTikgPyB2YWx1ZVtET0NVTUVOVF9CSU5EX0ZOXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGJpbmQodmFsdWUsIGRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzYyAmJiBpc05vbldyaXRlYWJsZVZhbHVlKGRlc2MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmlzKG5ld1ZhbHVlLCBkZXNjLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0ludmFsaWRHZXRBY2Nlc3NvcihkZXNjKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZVtET0NVTUVOVF9CSU5EX0ZOXSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcDogUHJvcGVydHlLZXksIHZhbHVlOiBhbnksIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdoaXRlbGlzdC5pbmNsdWRlcyhwKSA/IGRvY3VtZW50IDogcmVjZWl2ZXIgfHwgdGFyZ2V0LCBwKTtcbiAgICAgICAgICAgIGlmIChkZXNjICYmIGlzTm9uV3JpdGVhYmxlVmFsdWUoZGVzYykpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmlzKHZhbHVlLCBkZXNjLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW52YWxpZFNldEFjY2Vzc29yKGRlc2MpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdoaXRlbGlzdC5pbmNsdWRlcyhwKSA/IFJlZmxlY3Quc2V0KGRvY3VtZW50LCBwLCB2YWx1ZSkgOiBSZWZsZWN0LnNldCh0YXJnZXQsIHAsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZpbmVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcDogUHJvcGVydHlLZXksIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHdoaXRlbGlzdC5pbmNsdWRlcyhwKVxuICAgICAgICAgICAgICAgID8gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgcCwgZGVzY3JpcHRvcilcbiAgICAgICAgICAgICAgICA6IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGxldCBwcm94eURvY3VtZW50ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZmFrZURvY3VtZW50ID0gY3JlYXRlRmFrZU9iamVjdChkb2N1bWVudCk7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IHRoaXMuY3JlYXRlR2V0dGVyKCk7XG4gICAgICAgIGNvbnN0IGZha2VEb2N1bWVudFByb3RvID0gbmV3IFByb3h5KGZha2VEb2N1bWVudCwge1xuICAgICAgICAgICAgZ2V0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIoLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmYWtlRG9jdW1lbnRDdG9yID0gZnVuY3Rpb24gRG9jdW1lbnQoKSB7XG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgZmFrZURvY3VtZW50Q3RvcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gY29uc3RydWN0ICdEb2N1bWVudCc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9jSW5zdGFuY2UgPSBuZXcgcmF3RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihkb2NJbnN0YW5jZSwgZmFrZURvY3VtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkb2NJbnN0YW5jZTtcbiAgICAgICAgfTtcbiAgICAgICAgZmFrZURvY3VtZW50Q3Rvci5wcm90b3R5cGUgPSBmYWtlRG9jdW1lbnRQcm90bztcbiAgICAgICAgZmFrZURvY3VtZW50Q3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBmYWtlRG9jdW1lbnRDdG9yO1xuICAgICAgICBpZiAoU3ltYm9sLmhhc0luc3RhbmNlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZURvY3VtZW50Q3RvciwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3RvID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm90byA9PT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgocHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvID09PSBmYWtlRG9jdW1lbnRQcm90bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lZCA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgICAgIGNsb25lZC5wcm90b3R5cGUgPSBmYWtlRG9jdW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGNsb25lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwcm94eURvY3VtZW50ID0gbmV3IFByb3h5KFxuICAgICAgICAgICAgT2JqZWN0LmNyZWF0ZShmYWtlRG9jdW1lbnRQcm90bywge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTY3JpcHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbUkFXX05PREVdOiB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRvY3VtZW50XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2V0OiB0aGlzLmNyZWF0ZVNldHRlcigpLFxuICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5OiB0aGlzLmNyZWF0ZURlZmluZVByb3BlcnR5KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBwcm94eURvY3VtZW50LFxuICAgICAgICAgICAgRG9jdW1lbnQ6IGZha2VEb2N1bWVudEN0b3JcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { hasOwnProp, createFakeObject, bind, isInvalidSetAccessor, isNonWriteableValue, isInvalidGetAccessor } from './common';
|
|
2
|
+
import { PLANET_SANDBOX_WINDOW_WHITELIST, SANDBOX_INSTANCE, WINDOW_BIND_FN } from '../../constants';
|
|
3
|
+
import { isFunction } from '../../../helpers';
|
|
4
|
+
const esGlobalFunctions = ('eval,isFinite,isNaN,parseFloat,parseInt,' +
|
|
5
|
+
// URL handling functions
|
|
6
|
+
'decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
|
|
7
|
+
// Constructor properties of the global object
|
|
8
|
+
'Array,ArrayBuffer,BigInt,BigInt64Array,BigUint64Array,Boolean,DataView,Date,Error,EvalError,' +
|
|
9
|
+
'FinalizationRegistry,Float32Array,Float64Array,Function,Int8Array,Int16Array,Int32Array,Map,Number,' +
|
|
10
|
+
'Object,Promise,Proxy,RangeError,ReferenceError,RegExp,Set,SharedArrayBuffer,String,Symbol,SyntaxError,' +
|
|
11
|
+
'TypeError,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array,URIError,WeakMap,WeakRef,WeakSet,' +
|
|
12
|
+
// Other Properties of the Global Object
|
|
13
|
+
'Atomics,JSON,Math,Reflect').split(',');
|
|
14
|
+
const whitelistVariables = PLANET_SANDBOX_WINDOW_WHITELIST || [];
|
|
15
|
+
function isConstructor(fn) {
|
|
16
|
+
const fp = fn.prototype;
|
|
17
|
+
const hasConstructor = fp && fp.constructor === fn && Object.getOwnPropertyNames(fp).length > 1;
|
|
18
|
+
const functionStr = !hasConstructor && fn.toString();
|
|
19
|
+
return hasConstructor || /^function\s+[A-Z]/.test(functionStr) || /^class\b/.test(functionStr);
|
|
20
|
+
}
|
|
21
|
+
const unscopables = {
|
|
22
|
+
undefined: true,
|
|
23
|
+
Array: true,
|
|
24
|
+
Object: true,
|
|
25
|
+
String: true,
|
|
26
|
+
Boolean: true,
|
|
27
|
+
Math: true,
|
|
28
|
+
Number: true,
|
|
29
|
+
Symbol: true,
|
|
30
|
+
parseFloat: true,
|
|
31
|
+
Float32Array: true
|
|
32
|
+
};
|
|
33
|
+
export class ProxyWindow {
|
|
34
|
+
constructor(sandbox) {
|
|
35
|
+
this.sandbox = sandbox;
|
|
36
|
+
this.definedVariables = new Set();
|
|
37
|
+
}
|
|
38
|
+
createGetter() {
|
|
39
|
+
return (target, key, receiver) => {
|
|
40
|
+
if (key === Symbol.unscopables) {
|
|
41
|
+
return unscopables;
|
|
42
|
+
}
|
|
43
|
+
if (key === SANDBOX_INSTANCE) {
|
|
44
|
+
return this.sandbox;
|
|
45
|
+
}
|
|
46
|
+
let value = null;
|
|
47
|
+
if (whitelistVariables.includes(key)) {
|
|
48
|
+
return Reflect.get(window, key);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
value = hasOwnProp(target, key) ? Reflect.get(target, key, receiver) : Reflect.get(window, key);
|
|
52
|
+
}
|
|
53
|
+
if (isFunction(value)) {
|
|
54
|
+
if (esGlobalFunctions.includes(key) ||
|
|
55
|
+
whitelistVariables.includes(key) ||
|
|
56
|
+
this.sandbox.rewriteVariables.includes(key) ||
|
|
57
|
+
this.definedVariables.has(key) ||
|
|
58
|
+
isConstructor(value)) {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const newValue = hasOwnProp(value, WINDOW_BIND_FN) ? value[WINDOW_BIND_FN] : bind(value, window);
|
|
63
|
+
const desc = Object.getOwnPropertyDescriptor(target, key);
|
|
64
|
+
if (isNonWriteableValue(desc)) {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
if (isInvalidGetAccessor(desc)) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
value[WINDOW_BIND_FN] = newValue;
|
|
71
|
+
return newValue;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
createSetter() {
|
|
80
|
+
return (target, key, value, receiver) => {
|
|
81
|
+
const desc = Object.getOwnPropertyDescriptor(whitelistVariables.includes(key) ? window : receiver ? receiver : target, key);
|
|
82
|
+
if (desc && isNonWriteableValue(desc)) {
|
|
83
|
+
if (!Object.is(value, desc.value)) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (isInvalidSetAccessor(desc)) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
if (whitelistVariables.includes(key)) {
|
|
94
|
+
return Reflect.set(window, key, value);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const success = Reflect.set(target, key, value, receiver);
|
|
98
|
+
if (success) {
|
|
99
|
+
if (this.sandbox.running) {
|
|
100
|
+
this.definedVariables.add(key);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return success;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
createDefineProperty() {
|
|
108
|
+
return (target, p, descriptor) => {
|
|
109
|
+
if (whitelistVariables.includes(p)) {
|
|
110
|
+
return Reflect.defineProperty(window, p, descriptor);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const success = Reflect.defineProperty(target, p, descriptor);
|
|
114
|
+
if (this.sandbox.running && success) {
|
|
115
|
+
this.definedVariables.add(p);
|
|
116
|
+
}
|
|
117
|
+
return success;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
createDeleteProperty() {
|
|
122
|
+
return (target, p) => {
|
|
123
|
+
if (hasOwnProp(target, p)) {
|
|
124
|
+
delete target[p];
|
|
125
|
+
if (this.sandbox.running && this.definedVariables.has(p)) {
|
|
126
|
+
this.definedVariables.delete(p);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
createHas() {
|
|
133
|
+
return (_target, key) => {
|
|
134
|
+
return !whitelistVariables.includes(key);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
create() {
|
|
138
|
+
const fakeWindow = createFakeObject(window, this.sandbox.rewriteVariables);
|
|
139
|
+
const baseHandlers = {
|
|
140
|
+
get: this.createGetter(),
|
|
141
|
+
set: this.createSetter(),
|
|
142
|
+
defineProperty: this.createDefineProperty(),
|
|
143
|
+
deleteProperty: this.createDeleteProperty()
|
|
144
|
+
};
|
|
145
|
+
const proxy = new Proxy(fakeWindow, Object.assign(Object.assign({}, baseHandlers), { has: this.createHas() }));
|
|
146
|
+
const subProxy = new Proxy(fakeWindow, baseHandlers);
|
|
147
|
+
proxy.self = subProxy;
|
|
148
|
+
proxy.window = subProxy;
|
|
149
|
+
proxy.globalThis = subProxy;
|
|
150
|
+
proxy.top = window.top === window ? subProxy : window.top;
|
|
151
|
+
proxy.parent = window.parent === window ? subProxy : window.top;
|
|
152
|
+
return proxy;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhbmV0L3NyYy9zYW5kYm94L3Byb3h5L3Byb3hpZXMvd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLElBQUksRUFDSixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUN2QixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzlDLE1BQU0saUJBQWlCLEdBQWtCLENBQ3JDLDBDQUEwQztJQUMxQyx5QkFBeUI7SUFDekIsNERBQTREO0lBQzVELDhDQUE4QztJQUM5Qyw4RkFBOEY7SUFDOUYscUdBQXFHO0lBQ3JHLHdHQUF3RztJQUN4RyxrR0FBa0c7SUFDbEcsd0NBQXdDO0lBQ3hDLDJCQUEyQixDQUM5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUViLE1BQU0sa0JBQWtCLEdBQUcsK0JBQStCLElBQUksRUFBRSxDQUFDO0FBRWpFLFNBQVMsYUFBYSxDQUFDLEVBQW9DO0lBQ3ZELE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDeEIsTUFBTSxjQUFjLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyRCxPQUFPLGNBQWMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBcUIsQ0FB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LEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3hCLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3hCLGNBQWMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDM0MsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtTQUM5QyxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxrQ0FDM0IsWUFBWSxLQUNmLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQ3ZCLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEIsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDNUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzFELEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNoRSxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGhhc093blByb3AsXG4gICAgY3JlYXRlRmFrZU9iamVjdCxcbiAgICBiaW5kLFxuICAgIGlzSW52YWxpZFNldEFjY2Vzc29yLFxuICAgIGlzTm9uV3JpdGVhYmxlVmFsdWUsXG4gICAgaXNJbnZhbGlkR2V0QWNjZXNzb3Jcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgUExBTkVUX1NBTkRCT1hfV0lORE9XX1dISVRFTElTVCwgU0FOREJPWF9JTlNUQU5DRSwgV0lORE9XX0JJTkRfRk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgUHJveHlTYW5kYm94SW5zdGFuY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGVzR2xvYmFsRnVuY3Rpb25zOiBQcm9wZXJ0eUtleVtdID0gKFxuICAgICdldmFsLGlzRmluaXRlLGlzTmFOLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gVVJMIGhhbmRsaW5nIGZ1bmN0aW9uc1xuICAgICdkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsJyArXG4gICAgLy8gQ29uc3RydWN0b3IgcHJvcGVydGllcyBvZiB0aGUgZ2xvYmFsIG9iamVjdFxuICAgICdBcnJheSxBcnJheUJ1ZmZlcixCaWdJbnQsQmlnSW50NjRBcnJheSxCaWdVaW50NjRBcnJheSxCb29sZWFuLERhdGFWaWV3LERhdGUsRXJyb3IsRXZhbEVycm9yLCcgK1xuICAgICdGaW5hbGl6YXRpb25SZWdpc3RyeSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5LEZ1bmN0aW9uLEludDhBcnJheSxJbnQxNkFycmF5LEludDMyQXJyYXksTWFwLE51bWJlciwnICtcbiAgICAnT2JqZWN0LFByb21pc2UsUHJveHksUmFuZ2VFcnJvcixSZWZlcmVuY2VFcnJvcixSZWdFeHAsU2V0LFNoYXJlZEFycmF5QnVmZmVyLFN0cmluZyxTeW1ib2wsU3ludGF4RXJyb3IsJyArXG4gICAgJ1R5cGVFcnJvcixVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LFVpbnQxNkFycmF5LFVpbnQzMkFycmF5LFVSSUVycm9yLFdlYWtNYXAsV2Vha1JlZixXZWFrU2V0LCcgK1xuICAgIC8vIE90aGVyIFByb3BlcnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3RcbiAgICAnQXRvbWljcyxKU09OLE1hdGgsUmVmbGVjdCdcbikuc3BsaXQoJywnKTtcblxuY29uc3Qgd2hpdGVsaXN0VmFyaWFibGVzID0gUExBTkVUX1NBTkRCT1hfV0lORE9XX1dISVRFTElTVCB8fCBbXTtcblxuZnVuY3Rpb24gaXNDb25zdHJ1Y3RvcihmbjogKCkgPT4gdm9pZCB8IEZ1bmN0aW9uQ29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBmcCA9IGZuLnByb3RvdHlwZTtcbiAgICBjb25zdCBoYXNDb25zdHJ1Y3RvciA9IGZwICYmIGZwLmNvbnN0cnVjdG9yID09PSBmbiAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcCkubGVuZ3RoID4gMTtcbiAgICBjb25zdCBmdW5jdGlvblN0ciA9ICFoYXNDb25zdHJ1Y3RvciAmJiBmbi50b1N0cmluZygpO1xuICAgIHJldHVybiBoYXNDb25zdHJ1Y3RvciB8fCAvXmZ1bmN0aW9uXFxzK1tBLVpdLy50ZXN0KGZ1bmN0aW9uU3RyIGFzIHN0cmluZykgfHwgL15jbGFzc1xcYi8udGVzdChmdW5jdGlvblN0ciBhcyBzdHJpbmcpO1xufVxuXG5jb25zdCB1bnNjb3BhYmxlcyA9IHtcbiAgICB1bmRlZmluZWQ6IHRydWUsXG4gICAgQXJyYXk6IHRydWUsXG4gICAgT2JqZWN0OiB0cnVlLFxuICAgIFN0cmluZzogdHJ1ZSxcbiAgICBCb29sZWFuOiB0cnVlLFxuICAgIE1hdGg6IHRydWUsXG4gICAgTnVtYmVyOiB0cnVlLFxuICAgIFN5bWJvbDogdHJ1ZSxcbiAgICBwYXJzZUZsb2F0OiB0cnVlLFxuICAgIEZsb2F0MzJBcnJheTogdHJ1ZVxufTtcblxuZXhwb3J0IGNsYXNzIFByb3h5V2luZG93IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbmRib3g6IFByb3h5U2FuZGJveEluc3RhbmNlKSB7fVxuXG4gICAgcHJpdmF0ZSBkZWZpbmVkVmFyaWFibGVzID0gbmV3IFNldCgpO1xuXG4gICAgcHJpdmF0ZSBjcmVhdGVHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0OiBXaW5kb3csIGtleTogUHJvcGVydHlLZXksIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IFN5bWJvbC51bnNjb3BhYmxlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bnNjb3BhYmxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkgPT09IFNBTkRCT1hfSU5TVEFOQ0UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zYW5kYm94O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh3aGl0ZWxpc3RWYXJpYWJsZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh3aW5kb3csIGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaGFzT3duUHJvcCh0YXJnZXQsIGtleSkgPyBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIDogUmVmbGVjdC5nZXQod2luZG93LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBlc0dsb2JhbEZ1bmN0aW9ucy5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdFZhcmlhYmxlcy5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2FuZGJveC5yZXdyaXRlVmFyaWFibGVzLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkVmFyaWFibGVzLmhhcyhrZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0b3IodmFsdWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGhhc093blByb3AodmFsdWUsIFdJTkRPV19CSU5EX0ZOKSA/IHZhbHVlW1dJTkRPV19CSU5EX0ZOXSA6IGJpbmQodmFsdWUsIHdpbmRvdyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9uV3JpdGVhYmxlVmFsdWUoZGVzYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnZhbGlkR2V0QWNjZXNzb3IoZGVzYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbV0lORE9XX0JJTkRfRk5dID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQ6IFdpbmRvdywga2V5OiBQcm9wZXJ0eUtleSwgdmFsdWU6IHVua25vd24sIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIHdoaXRlbGlzdFZhcmlhYmxlcy5pbmNsdWRlcyhrZXkpID8gd2luZG93IDogcmVjZWl2ZXIgPyByZWNlaXZlciA6IHRhcmdldCxcbiAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiBpc05vbldyaXRlYWJsZVZhbHVlKGRlc2MpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QuaXModmFsdWUsIGRlc2MudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnZhbGlkU2V0QWNjZXNzb3IoZGVzYykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2hpdGVsaXN0VmFyaWFibGVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQod2luZG93LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNhbmRib3gucnVubmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkVmFyaWFibGVzLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVmaW5lUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0OiBXaW5kb3csIHA6IFByb3BlcnR5S2V5LCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgICAgIGlmICh3aGl0ZWxpc3RWYXJpYWJsZXMuaW5jbHVkZXMocCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIHAsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHAsIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNhbmRib3gucnVubmluZyAmJiBzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZFZhcmlhYmxlcy5hZGQocCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVsZXRlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiAodGFyZ2V0OiBXaW5kb3csIHA6IFByb3BlcnR5S2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh0YXJnZXQsIHApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlICh0YXJnZXQgYXMgYW55KVtwXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zYW5kYm94LnJ1bm5pbmcgJiYgdGhpcy5kZWZpbmVkVmFyaWFibGVzLmhhcyhwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWRWYXJpYWJsZXMuZGVsZXRlKHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSGFzKCkge1xuICAgICAgICByZXR1cm4gKF90YXJnZXQ6IFdpbmRvdywga2V5OiBQcm9wZXJ0eUtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF3aGl0ZWxpc3RWYXJpYWJsZXMuaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGNvbnN0IGZha2VXaW5kb3cgPSBjcmVhdGVGYWtlT2JqZWN0KHdpbmRvdywgdGhpcy5zYW5kYm94LnJld3JpdGVWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCBiYXNlSGFuZGxlcnMgPSB7XG4gICAgICAgICAgICBnZXQ6IHRoaXMuY3JlYXRlR2V0dGVyKCksXG4gICAgICAgICAgICBzZXQ6IHRoaXMuY3JlYXRlU2V0dGVyKCksXG4gICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eTogdGhpcy5jcmVhdGVEZWZpbmVQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgZGVsZXRlUHJvcGVydHk6IHRoaXMuY3JlYXRlRGVsZXRlUHJvcGVydHkoKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShmYWtlV2luZG93LCB7XG4gICAgICAgICAgICAuLi5iYXNlSGFuZGxlcnMsXG4gICAgICAgICAgICBoYXM6IHRoaXMuY3JlYXRlSGFzKClcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN1YlByb3h5ID0gbmV3IFByb3h5KGZha2VXaW5kb3csIGJhc2VIYW5kbGVycyk7XG4gICAgICAgIHByb3h5LnNlbGYgPSBzdWJQcm94eTtcbiAgICAgICAgcHJveHkud2luZG93ID0gc3ViUHJveHk7XG4gICAgICAgIHByb3h5Lmdsb2JhbFRoaXMgPSBzdWJQcm94eTtcbiAgICAgICAgcHJveHkudG9wID0gd2luZG93LnRvcCA9PT0gd2luZG93ID8gc3ViUHJveHkgOiB3aW5kb3cudG9wO1xuICAgICAgICBwcm94eS5wYXJlbnQgPSB3aW5kb3cucGFyZW50ID09PSB3aW5kb3cgPyBzdWJQcm94eSA6IHdpbmRvdy50b3A7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ProxyWindow } from './proxies/window';
|
|
2
|
+
import { getSandboxPatchHandlers } from './patches';
|
|
3
|
+
import { Sandbox } from '../sandbox';
|
|
4
|
+
export class ProxySandbox extends Sandbox {
|
|
5
|
+
constructor(app, options) {
|
|
6
|
+
super();
|
|
7
|
+
this.app = app;
|
|
8
|
+
this.options = options;
|
|
9
|
+
this.running = false;
|
|
10
|
+
this.patchHandlers = [];
|
|
11
|
+
this.patchHandlers = getSandboxPatchHandlers(this);
|
|
12
|
+
this.start();
|
|
13
|
+
}
|
|
14
|
+
start() {
|
|
15
|
+
this.running = true;
|
|
16
|
+
this.rewriteVariables = this.getPatchRewriteVariables();
|
|
17
|
+
const proxyWindow = new ProxyWindow(this);
|
|
18
|
+
this.global = proxyWindow.create();
|
|
19
|
+
this.execPatchHandlers();
|
|
20
|
+
}
|
|
21
|
+
destroy() {
|
|
22
|
+
this.running = false;
|
|
23
|
+
this.patchHandlers.forEach(handler => {
|
|
24
|
+
if (handler.destroy) {
|
|
25
|
+
handler.destroy();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
getPatchRewriteVariables() {
|
|
30
|
+
return this.patchHandlers.reduce((pre, cur) => {
|
|
31
|
+
return [...pre, ...(cur.rewrite ? Object.keys(cur.rewrite) : [])];
|
|
32
|
+
}, []);
|
|
33
|
+
}
|
|
34
|
+
execPatchHandlers() {
|
|
35
|
+
this.patchHandlers.forEach(handler => {
|
|
36
|
+
if (handler.rewrite) {
|
|
37
|
+
for (const key in handler.rewrite) {
|
|
38
|
+
if (handler.rewrite[key]) {
|
|
39
|
+
this.global[key] = handler.rewrite[key];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (handler.init) {
|
|
44
|
+
handler === null || handler === void 0 ? void 0 : handler.init();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHktc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvc2FuZGJveC9wcm94eS9wcm94eS1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEQsT0FBTyxFQUFFLE9BQU8sRUFBa0IsTUFBTSxZQUFZLENBQUM7QUFFckQsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPO0lBU3JDLFlBQW1CLEdBQVcsRUFBUyxPQUF1QjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQURPLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQVJ2RCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBTWYsa0JBQWEsR0FBMEIsRUFBRSxDQUFDO1FBSTlDLElBQUksQ0FBQyxhQUFhLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNqQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDckI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUNqQixLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7b0JBQy9CLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUMzQztpQkFDSjthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNkLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLEVBQUUsQ0FBQzthQUNuQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJveHlXaW5kb3cgfSBmcm9tICcuL3Byb3hpZXMvd2luZG93JztcbmltcG9ydCB7IGdldFNhbmRib3hQYXRjaEhhbmRsZXJzIH0gZnJvbSAnLi9wYXRjaGVzJztcbmltcG9ydCB7IFNhbmRib3hQYXRjaEhhbmRsZXIgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFNhbmRib3gsIFNhbmRib3hPcHRpb25zIH0gZnJvbSAnLi4vc2FuZGJveCc7XG5cbmV4cG9ydCBjbGFzcyBQcm94eVNhbmRib3ggZXh0ZW5kcyBTYW5kYm94IHtcbiAgICBwdWJsaWMgcnVubmluZyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGdsb2JhbCE6IEdsb2JhbDtcblxuICAgIHB1YmxpYyByZXdyaXRlVmFyaWFibGVzITogUHJvcGVydHlLZXlbXTtcblxuICAgIHByaXZhdGUgcGF0Y2hIYW5kbGVyczogU2FuZGJveFBhdGNoSGFuZGxlcltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYXBwOiBzdHJpbmcsIHB1YmxpYyBvcHRpb25zOiBTYW5kYm94T3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhdGNoSGFuZGxlcnMgPSBnZXRTYW5kYm94UGF0Y2hIYW5kbGVycyh0aGlzKTtcbiAgICAgICAgdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnJld3JpdGVWYXJpYWJsZXMgPSB0aGlzLmdldFBhdGNoUmV3cml0ZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCBwcm94eVdpbmRvdyA9IG5ldyBQcm94eVdpbmRvdyh0aGlzKTtcbiAgICAgICAgdGhpcy5nbG9iYWwgPSBwcm94eVdpbmRvdy5jcmVhdGUoKTtcbiAgICAgICAgdGhpcy5leGVjUGF0Y2hIYW5kbGVycygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdGNoSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXRjaFJld3JpdGVWYXJpYWJsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhdGNoSGFuZGxlcnMucmVkdWNlPHN0cmluZ1tdPigocHJlLCBjdXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbLi4ucHJlLCAuLi4oY3VyLnJld3JpdGUgPyBPYmplY3Qua2V5cyhjdXIucmV3cml0ZSkgOiBbXSldO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGVjUGF0Y2hIYW5kbGVycygpIHtcbiAgICAgICAgdGhpcy5wYXRjaEhhbmRsZXJzLmZvckVhY2goaGFuZGxlciA9PiB7XG4gICAgICAgICAgICBpZiAoaGFuZGxlci5yZXdyaXRlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGFuZGxlci5yZXdyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnJld3JpdGVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxba2V5XSA9IGhhbmRsZXIucmV3cml0ZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhbmRsZXIuaW5pdCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXI/LmluaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL3NhbmRib3gvcHJveHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gU2FuZGJveEluc3RhbmNlICDkuLvopoHmmK/kuLrkuobop6PlhrPlvqrnjq/kvp3otZZcbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlTYW5kYm94SW5zdGFuY2Uge1xuICAgIGFwcDogc3RyaW5nO1xuXG4gICAgcnVubmluZzogYm9vbGVhbjtcblxuICAgIGdsb2JhbDogR2xvYmFsO1xuXG4gICAgcmV3cml0ZVZhcmlhYmxlczogUHJvcGVydHlLZXlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTYW5kYm94UGF0Y2hIYW5kbGVyIHtcbiAgICByZXdyaXRlPzogUmVjb3JkPFByb3BlcnR5S2V5LCBhbnk+O1xuICAgIGluaXQ/OiAoKSA9PiB2b2lkO1xuICAgIGRlc3Ryb3k/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBTYW5kYm94UGF0Y2ggPSAoc2FuZGJveD86IFByb3h5U2FuZGJveEluc3RhbmNlKSA9PiBTYW5kYm94UGF0Y2hIYW5kbGVyO1xuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { execScript } from './exec';
|
|
2
|
+
export class Sandbox {
|
|
3
|
+
execScript(code, url = '') {
|
|
4
|
+
execScript(code, url, this.global, !!this.options.strictGlobal);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvc2FuZGJveC9zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFPcEMsTUFBTSxPQUFnQixPQUFPO0lBU3pCLFVBQVUsQ0FBQyxJQUFZLEVBQUUsR0FBRyxHQUFHLEVBQUU7UUFDN0IsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU2NyaXB0IH0gZnJvbSAnLi9leGVjJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhbmRib3hPcHRpb25zIHtcbiAgICBzdHJpY3RHbG9iYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FuZGJveCB7XG4gICAgb3B0aW9ucyE6IFNhbmRib3hPcHRpb25zO1xuXG4gICAgZ2xvYmFsITogR2xvYmFsO1xuXG4gICAgYWJzdHJhY3Qgc3RhcnQoKTogdm9pZDtcblxuICAgIGFic3RyYWN0IGRlc3Ryb3koKTogdm9pZDtcblxuICAgIGV4ZWNTY3JpcHQoY29kZTogc3RyaW5nLCB1cmwgPSAnJykge1xuICAgICAgICBleGVjU2NyaXB0KGNvZGUsIHVybCwgdGhpcy5nbG9iYWwsICEhdGhpcy5vcHRpb25zLnN0cmljdEdsb2JhbCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Sandbox } from '../sandbox';
|
|
2
|
+
export class SnapshotSandbox extends Sandbox {
|
|
3
|
+
constructor(app, options) {
|
|
4
|
+
super();
|
|
5
|
+
this.app = app;
|
|
6
|
+
this.options = options;
|
|
7
|
+
this.start();
|
|
8
|
+
}
|
|
9
|
+
start() { }
|
|
10
|
+
destroy() { }
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3Qtc2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvc2FuZGJveC9zbmFwc2hvdC9zbmFwc2hvdC1zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sWUFBWSxDQUFDO0FBRXJELE1BQU0sT0FBTyxlQUFnQixTQUFRLE9BQU87SUFDeEMsWUFBbUIsR0FBVyxFQUFTLE9BQXVCO1FBQzFELEtBQUssRUFBRSxDQUFDO1FBRE8sUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRTFELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxLQUFJLENBQUM7SUFFVixPQUFPLEtBQUksQ0FBQztDQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FuZGJveCwgU2FuZGJveE9wdGlvbnMgfSBmcm9tICcuLi9zYW5kYm94JztcblxuZXhwb3J0IGNsYXNzIFNuYXBzaG90U2FuZGJveCBleHRlbmRzIFNhbmRib3gge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBhcHA6IHN0cmluZywgcHVibGljIG9wdGlvbnM6IFNhbmRib3hPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHt9XG5cbiAgICBkZXN0cm95KCkge31cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL3NhbmRib3gvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEdsb2JhbCA9IFJlY29yZDxQcm9wZXJ0eUtleSwgYW55PjtcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
export { globalPlanet as ɵa } from './global-planet';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3RpbGUtcGxhbmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhbmV0L3NyYy93b3JrdGlsZS1wbGFuZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge2dsb2JhbFBsYW5ldCBhcyDJtWF9IGZyb20gJy4vZ2xvYmFsLXBsYW5ldCc7Il19
|