@powerhousedao/reactor-browser 6.0.0-dev.7 → 6.0.0-dev.78
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/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/codegen.d.ts +4 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/src/actions/dispatch.d.ts.map +1 -1
- package/dist/src/actions/document.d.ts +17 -4
- package/dist/src/actions/document.d.ts.map +1 -1
- package/dist/src/actions/drive.d.ts +1 -1
- package/dist/src/actions/drive.d.ts.map +1 -1
- package/dist/src/actions/index.d.ts +1 -1
- package/dist/src/actions/index.d.ts.map +1 -1
- package/dist/src/actions/queue.d.ts +2 -2
- package/dist/src/actions/queue.d.ts.map +1 -1
- package/dist/src/actions/sign.d.ts.map +1 -1
- package/dist/src/analytics/context.d.ts.map +1 -1
- package/dist/src/analytics.js +67617 -3
- package/dist/src/connect.js +2516 -2
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/graphql/client.d.ts +33 -0
- package/dist/src/graphql/client.d.ts.map +1 -0
- package/dist/src/graphql/gen/schema.d.ts +1006 -0
- package/dist/src/graphql/gen/schema.d.ts.map +1 -0
- package/dist/src/hooks/add-ph-event-handlers.d.ts.map +1 -1
- package/dist/src/hooks/config/connect.d.ts +2 -2
- package/dist/src/hooks/connect.d.ts +4 -7
- package/dist/src/hooks/connect.d.ts.map +1 -1
- package/dist/src/hooks/connection-state.d.ts +11 -0
- package/dist/src/hooks/connection-state.d.ts.map +1 -0
- package/dist/src/hooks/document-operations.d.ts +20 -0
- package/dist/src/hooks/document-operations.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +4 -3
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/node-actions.d.ts +1 -0
- package/dist/src/hooks/node-actions.d.ts.map +1 -1
- package/dist/src/hooks/reactor.d.ts +7 -27
- package/dist/src/hooks/reactor.d.ts.map +1 -1
- package/dist/src/hooks/renown.d.ts +10 -1
- package/dist/src/hooks/renown.d.ts.map +1 -1
- package/dist/src/hooks/use-feature-flags.d.ts +0 -27
- package/dist/src/hooks/use-feature-flags.d.ts.map +1 -1
- package/dist/src/hooks/use-get-switchboard-link.d.ts.map +1 -1
- package/dist/src/hooks/vetra-packages.d.ts +7 -6
- package/dist/src/hooks/vetra-packages.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +31965 -15
- package/dist/src/package-manager.d.ts +13 -0
- package/dist/src/package-manager.d.ts.map +1 -0
- package/dist/src/pglite/drop.d.ts +1 -0
- package/dist/src/pglite/drop.d.ts.map +1 -1
- package/dist/src/pglite/index.d.ts +1 -1
- package/dist/src/pglite/index.d.ts.map +1 -1
- package/dist/src/re-exports.d.ts +3 -0
- package/dist/src/re-exports.d.ts.map +1 -0
- package/dist/src/reactor-client-document-cache.d.ts +0 -2
- package/dist/src/reactor-client-document-cache.d.ts.map +1 -1
- package/dist/src/reactor.d.ts +16 -7
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/registry/client.d.ts +8 -0
- package/dist/src/registry/client.d.ts.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/types.d.ts +9 -0
- package/dist/src/registry/types.d.ts.map +1 -0
- package/dist/src/relational/hooks/useRelationalDb.d.ts +3 -2
- package/dist/src/relational/hooks/useRelationalDb.d.ts.map +1 -1
- package/dist/src/relational/hooks/useRelationalQuery.d.ts +2 -2
- package/dist/src/relational/hooks/useRelationalQuery.d.ts.map +1 -1
- package/dist/src/relational/utils/createProcessorQuery.d.ts +4 -4
- package/dist/src/relational/utils/createProcessorQuery.d.ts.map +1 -1
- package/dist/src/remote-controller/action-tracker.d.ts +20 -0
- package/dist/src/remote-controller/action-tracker.d.ts.map +1 -0
- package/dist/src/remote-controller/index.d.ts +7 -0
- package/dist/src/remote-controller/index.d.ts.map +1 -0
- package/dist/src/remote-controller/remote-client.d.ts +24 -0
- package/dist/src/remote-controller/remote-client.d.ts.map +1 -0
- package/dist/src/remote-controller/remote-controller.d.ts +85 -0
- package/dist/src/remote-controller/remote-controller.d.ts.map +1 -0
- package/dist/src/remote-controller/types.d.ts +99 -0
- package/dist/src/remote-controller/types.d.ts.map +1 -0
- package/dist/src/remote-controller/utils.d.ts +26 -0
- package/dist/src/remote-controller/utils.d.ts.map +1 -0
- package/dist/src/renown/components/RenownAuthButton.d.ts +18 -0
- package/dist/src/renown/components/RenownAuthButton.d.ts.map +1 -0
- package/dist/src/renown/components/RenownLoginButton.d.ts +15 -0
- package/dist/src/renown/components/RenownLoginButton.d.ts.map +1 -0
- package/dist/src/renown/components/RenownUserButton.d.ts +19 -0
- package/dist/src/renown/components/RenownUserButton.d.ts.map +1 -0
- package/dist/src/renown/components/icons.d.ts +20 -0
- package/dist/src/renown/components/icons.d.ts.map +1 -0
- package/dist/src/renown/components/image-data.d.ts +3 -0
- package/dist/src/renown/components/image-data.d.ts.map +1 -0
- package/dist/src/renown/components/index.d.ts +8 -0
- package/dist/src/renown/components/index.d.ts.map +1 -0
- package/dist/src/renown/index.d.ts +2 -0
- package/dist/src/renown/index.d.ts.map +1 -1
- package/dist/src/renown/provider.d.ts +9 -0
- package/dist/src/renown/provider.d.ts.map +1 -0
- package/dist/src/renown/utils.d.ts +9 -4
- package/dist/src/renown/utils.d.ts.map +1 -1
- package/dist/src/storage/base-storage.d.ts +9 -0
- package/dist/src/storage/base-storage.d.ts.map +1 -0
- package/dist/src/storage/local-storage.d.ts +5 -0
- package/dist/src/storage/local-storage.d.ts.map +1 -0
- package/dist/src/types/global.d.ts +5 -16
- package/dist/src/types/global.d.ts.map +1 -1
- package/dist/src/types/vetra.d.ts +22 -4
- package/dist/src/types/vetra.d.ts.map +1 -1
- package/dist/src/utils/drive-url.d.ts +2 -0
- package/dist/src/utils/drive-url.d.ts.map +1 -0
- package/dist/src/utils/drives.d.ts +5 -35
- package/dist/src/utils/drives.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/vetra.d.ts.map +1 -1
- package/dist/test/remote-controller/action-tracker.test.d.ts +2 -0
- package/dist/test/remote-controller/action-tracker.test.d.ts.map +1 -0
- package/dist/test/remote-controller/remote-client.test.d.ts +2 -0
- package/dist/test/remote-controller/remote-client.test.d.ts.map +1 -0
- package/dist/test/remote-controller/remote-controller.test.d.ts +2 -0
- package/dist/test/remote-controller/remote-controller.test.d.ts.map +1 -0
- package/dist/test/remote-controller/utils.test.d.ts +2 -0
- package/dist/test/remote-controller/utils.test.d.ts.map +1 -0
- package/dist/test/renown/components.test.d.ts +2 -0
- package/dist/test/renown/components.test.d.ts.map +1 -0
- package/dist/test/renown/script.test.d.ts +2 -0
- package/dist/test/renown/script.test.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +41 -43
- package/dist/src/actions/dispatch.js +0 -47
- package/dist/src/actions/dispatch.js.map +0 -1
- package/dist/src/actions/document.js +0 -659
- package/dist/src/actions/document.js.map +0 -1
- package/dist/src/actions/drive.js +0 -255
- package/dist/src/actions/drive.js.map +0 -1
- package/dist/src/actions/index.js +0 -4
- package/dist/src/actions/index.js.map +0 -1
- package/dist/src/actions/queue.js +0 -160
- package/dist/src/actions/queue.js.map +0 -1
- package/dist/src/actions/sign.js +0 -71
- package/dist/src/actions/sign.js.map +0 -1
- package/dist/src/analytics/context.js +0 -148
- package/dist/src/analytics/context.js.map +0 -1
- package/dist/src/analytics/hooks/analytics-query.js +0 -157
- package/dist/src/analytics/hooks/analytics-query.js.map +0 -1
- package/dist/src/analytics/hooks/document-timeline.js +0 -10
- package/dist/src/analytics/hooks/document-timeline.js.map +0 -1
- package/dist/src/analytics/hooks/index.js +0 -4
- package/dist/src/analytics/hooks/index.js.map +0 -1
- package/dist/src/analytics/hooks/timeline-items.js +0 -104
- package/dist/src/analytics/hooks/timeline-items.js.map +0 -1
- package/dist/src/analytics/index.js +0 -3
- package/dist/src/analytics/index.js.map +0 -1
- package/dist/src/analytics/store/browser.js +0 -2
- package/dist/src/analytics/store/browser.js.map +0 -1
- package/dist/src/analytics/store/memory.js +0 -2
- package/dist/src/analytics/store/memory.js.map +0 -1
- package/dist/src/analytics/types.js +0 -2
- package/dist/src/analytics/types.js.map +0 -1
- package/dist/src/analytics.js.map +0 -1
- package/dist/src/connect.js.map +0 -1
- package/dist/src/constants.js +0 -3
- package/dist/src/constants.js.map +0 -1
- package/dist/src/context/index.js +0 -2
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/context/read-mode.js +0 -177
- package/dist/src/context/read-mode.js.map +0 -1
- package/dist/src/document-cache.js +0 -143
- package/dist/src/document-cache.js.map +0 -1
- package/dist/src/document-model.js +0 -6
- package/dist/src/document-model.js.map +0 -1
- package/dist/src/errors.js +0 -27
- package/dist/src/errors.js.map +0 -1
- package/dist/src/global/core.js +0 -22
- package/dist/src/global/core.js.map +0 -1
- package/dist/src/global/index.js +0 -2
- package/dist/src/global/index.js.map +0 -1
- package/dist/src/global/types.js +0 -2
- package/dist/src/global/types.js.map +0 -1
- package/dist/src/hooks/add-ph-event-handlers.js +0 -109
- package/dist/src/hooks/add-ph-event-handlers.js.map +0 -1
- package/dist/src/hooks/allowed-document-model-modules.js +0 -10
- package/dist/src/hooks/allowed-document-model-modules.js.map +0 -1
- package/dist/src/hooks/child-nodes.js +0 -15
- package/dist/src/hooks/child-nodes.js.map +0 -1
- package/dist/src/hooks/config/connect.js +0 -210
- package/dist/src/hooks/config/connect.js.map +0 -1
- package/dist/src/hooks/config/editor.js +0 -43
- package/dist/src/hooks/config/editor.js.map +0 -1
- package/dist/src/hooks/config/set-config-by-key.js +0 -15
- package/dist/src/hooks/config/set-config-by-key.js.map +0 -1
- package/dist/src/hooks/config/set-config-by-object.js +0 -84
- package/dist/src/hooks/config/set-config-by-object.js.map +0 -1
- package/dist/src/hooks/config/use-value-by-key.js +0 -23
- package/dist/src/hooks/config/use-value-by-key.js.map +0 -1
- package/dist/src/hooks/config/utils.js +0 -6
- package/dist/src/hooks/config/utils.js.map +0 -1
- package/dist/src/hooks/connect.js +0 -16
- package/dist/src/hooks/connect.js.map +0 -1
- package/dist/src/hooks/crypto.d.ts +0 -9
- package/dist/src/hooks/crypto.d.ts.map +0 -1
- package/dist/src/hooks/crypto.js +0 -13
- package/dist/src/hooks/crypto.js.map +0 -1
- package/dist/src/hooks/did.d.ts +0 -2
- package/dist/src/hooks/did.d.ts.map +0 -1
- package/dist/src/hooks/did.js +0 -3
- package/dist/src/hooks/did.js.map +0 -1
- package/dist/src/hooks/dispatch.js +0 -20
- package/dist/src/hooks/dispatch.js.map +0 -1
- package/dist/src/hooks/document-by-id.js +0 -13
- package/dist/src/hooks/document-by-id.js.map +0 -1
- package/dist/src/hooks/document-cache.js +0 -124
- package/dist/src/hooks/document-cache.js.map +0 -1
- package/dist/src/hooks/document-model-modules.js +0 -10
- package/dist/src/hooks/document-model-modules.js.map +0 -1
- package/dist/src/hooks/document-of-type.js +0 -22
- package/dist/src/hooks/document-of-type.js.map +0 -1
- package/dist/src/hooks/document-types.js +0 -13
- package/dist/src/hooks/document-types.js.map +0 -1
- package/dist/src/hooks/drive-by-id.js +0 -12
- package/dist/src/hooks/drive-by-id.js.map +0 -1
- package/dist/src/hooks/drives.js +0 -9
- package/dist/src/hooks/drives.js.map +0 -1
- package/dist/src/hooks/editor-modules.js +0 -43
- package/dist/src/hooks/editor-modules.js.map +0 -1
- package/dist/src/hooks/features.js +0 -6
- package/dist/src/hooks/features.js.map +0 -1
- package/dist/src/hooks/folder-by-id.js +0 -6
- package/dist/src/hooks/folder-by-id.js.map +0 -1
- package/dist/src/hooks/import-script-modules.js +0 -6
- package/dist/src/hooks/import-script-modules.js.map +0 -1
- package/dist/src/hooks/index.js +0 -41
- package/dist/src/hooks/index.js.map +0 -1
- package/dist/src/hooks/items-in-selected-drive.js +0 -35
- package/dist/src/hooks/items-in-selected-drive.js.map +0 -1
- package/dist/src/hooks/items-in-selected-folder.js +0 -33
- package/dist/src/hooks/items-in-selected-folder.js.map +0 -1
- package/dist/src/hooks/loading.js +0 -3
- package/dist/src/hooks/loading.js.map +0 -1
- package/dist/src/hooks/login-status.d.ts +0 -2
- package/dist/src/hooks/login-status.d.ts.map +0 -1
- package/dist/src/hooks/login-status.js +0 -3
- package/dist/src/hooks/login-status.js.map +0 -1
- package/dist/src/hooks/make-ph-event-functions.js +0 -46
- package/dist/src/hooks/make-ph-event-functions.js.map +0 -1
- package/dist/src/hooks/modals.js +0 -26
- package/dist/src/hooks/modals.js.map +0 -1
- package/dist/src/hooks/node-actions.js +0 -97
- package/dist/src/hooks/node-actions.js.map +0 -1
- package/dist/src/hooks/node-by-id.js +0 -7
- package/dist/src/hooks/node-by-id.js.map +0 -1
- package/dist/src/hooks/node-path.js +0 -23
- package/dist/src/hooks/node-path.js.map +0 -1
- package/dist/src/hooks/parent-folder.js +0 -13
- package/dist/src/hooks/parent-folder.js.map +0 -1
- package/dist/src/hooks/processor-manager.d.ts +0 -9
- package/dist/src/hooks/processor-manager.d.ts.map +0 -1
- package/dist/src/hooks/processor-manager.js +0 -9
- package/dist/src/hooks/processor-manager.js.map +0 -1
- package/dist/src/hooks/processor-modules.d.ts +0 -4
- package/dist/src/hooks/processor-modules.d.ts.map +0 -1
- package/dist/src/hooks/processor-modules.js +0 -12
- package/dist/src/hooks/processor-modules.js.map +0 -1
- package/dist/src/hooks/reactor.js +0 -44
- package/dist/src/hooks/reactor.js.map +0 -1
- package/dist/src/hooks/renown.js +0 -9
- package/dist/src/hooks/renown.js.map +0 -1
- package/dist/src/hooks/revision-history.js +0 -17
- package/dist/src/hooks/revision-history.js.map +0 -1
- package/dist/src/hooks/selected-document.js +0 -35
- package/dist/src/hooks/selected-document.js.map +0 -1
- package/dist/src/hooks/selected-drive.js +0 -63
- package/dist/src/hooks/selected-drive.js.map +0 -1
- package/dist/src/hooks/selected-folder.js +0 -10
- package/dist/src/hooks/selected-folder.js.map +0 -1
- package/dist/src/hooks/selected-node.js +0 -54
- package/dist/src/hooks/selected-node.js.map +0 -1
- package/dist/src/hooks/selected-timeline-item.js +0 -9
- package/dist/src/hooks/selected-timeline-item.js.map +0 -1
- package/dist/src/hooks/subgraph-modules.js +0 -6
- package/dist/src/hooks/subgraph-modules.js.map +0 -1
- package/dist/src/hooks/supported-document-types.js +0 -7
- package/dist/src/hooks/supported-document-types.js.map +0 -1
- package/dist/src/hooks/timeline-revision.js +0 -9
- package/dist/src/hooks/timeline-revision.js.map +0 -1
- package/dist/src/hooks/toast.js +0 -9
- package/dist/src/hooks/toast.js.map +0 -1
- package/dist/src/hooks/use-feature-flags.js +0 -73
- package/dist/src/hooks/use-feature-flags.js.map +0 -1
- package/dist/src/hooks/use-get-switchboard-link.js +0 -38
- package/dist/src/hooks/use-get-switchboard-link.js.map +0 -1
- package/dist/src/hooks/use-on-drop-file.js +0 -21
- package/dist/src/hooks/use-on-drop-file.js.map +0 -1
- package/dist/src/hooks/user-permissions.js +0 -17
- package/dist/src/hooks/user-permissions.js.map +0 -1
- package/dist/src/hooks/user.d.ts +0 -8
- package/dist/src/hooks/user.d.ts.map +0 -1
- package/dist/src/hooks/user.js +0 -9
- package/dist/src/hooks/user.js.map +0 -1
- package/dist/src/hooks/vetra-packages.js +0 -17
- package/dist/src/hooks/vetra-packages.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/pglite/drop.js +0 -19
- package/dist/src/pglite/drop.js.map +0 -1
- package/dist/src/pglite/hooks/index.js +0 -2
- package/dist/src/pglite/hooks/index.js.map +0 -1
- package/dist/src/pglite/hooks/usePGlite.js +0 -37
- package/dist/src/pglite/hooks/usePGlite.js.map +0 -1
- package/dist/src/pglite/index.js +0 -3
- package/dist/src/pglite/index.js.map +0 -1
- package/dist/src/reactor-client-document-cache.js +0 -142
- package/dist/src/reactor-client-document-cache.js.map +0 -1
- package/dist/src/reactor.js +0 -162
- package/dist/src/reactor.js.map +0 -1
- package/dist/src/relational/hooks/index.js +0 -3
- package/dist/src/relational/hooks/index.js.map +0 -1
- package/dist/src/relational/hooks/useRelationalDb.js +0 -36
- package/dist/src/relational/hooks/useRelationalDb.js.map +0 -1
- package/dist/src/relational/hooks/useRelationalQuery.js +0 -76
- package/dist/src/relational/hooks/useRelationalQuery.js.map +0 -1
- package/dist/src/relational/index.js +0 -3
- package/dist/src/relational/index.js.map +0 -1
- package/dist/src/relational/utils/createProcessorQuery.js +0 -24
- package/dist/src/relational/utils/createProcessorQuery.js.map +0 -1
- package/dist/src/relational/utils/index.js +0 -2
- package/dist/src/relational/utils/index.js.map +0 -1
- package/dist/src/renown/constants.js +0 -40
- package/dist/src/renown/constants.js.map +0 -1
- package/dist/src/renown/index.js +0 -3
- package/dist/src/renown/index.js.map +0 -1
- package/dist/src/renown/utils.js +0 -56
- package/dist/src/renown/utils.js.map +0 -1
- package/dist/src/storage/index.js +0 -2
- package/dist/src/storage/index.js.map +0 -1
- package/dist/src/storage/types.js +0 -2
- package/dist/src/storage/types.js.map +0 -1
- package/dist/src/types/config.js +0 -2
- package/dist/src/types/config.js.map +0 -1
- package/dist/src/types/documents.js +0 -2
- package/dist/src/types/documents.js.map +0 -1
- package/dist/src/types/global.js +0 -2
- package/dist/src/types/global.js.map +0 -1
- package/dist/src/types/index.js +0 -2
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/modals.js +0 -2
- package/dist/src/types/modals.js.map +0 -1
- package/dist/src/types/reactor.js +0 -2
- package/dist/src/types/reactor.js.map +0 -1
- package/dist/src/types/timeline.js +0 -2
- package/dist/src/types/timeline.js.map +0 -1
- package/dist/src/types/toast.js +0 -2
- package/dist/src/types/toast.js.map +0 -1
- package/dist/src/types/upload.js +0 -2
- package/dist/src/types/upload.js.map +0 -1
- package/dist/src/types/vetra.js +0 -2
- package/dist/src/types/vetra.js.map +0 -1
- package/dist/src/utils/documents.js +0 -20
- package/dist/src/utils/documents.js.map +0 -1
- package/dist/src/utils/drives.js +0 -142
- package/dist/src/utils/drives.js.map +0 -1
- package/dist/src/utils/export-document.js +0 -18
- package/dist/src/utils/export-document.js.map +0 -1
- package/dist/src/utils/get-revision-from-date.js +0 -10
- package/dist/src/utils/get-revision-from-date.js.map +0 -1
- package/dist/src/utils/index.js +0 -11
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/nodes.js +0 -17
- package/dist/src/utils/nodes.js.map +0 -1
- package/dist/src/utils/switchboard.js +0 -76
- package/dist/src/utils/switchboard.js.map +0 -1
- package/dist/src/utils/url.js +0 -77
- package/dist/src/utils/url.js.map +0 -1
- package/dist/src/utils/user.js +0 -15
- package/dist/src/utils/user.js.map +0 -1
- package/dist/src/utils/validate-document.js +0 -38
- package/dist/src/utils/validate-document.js.map +0 -1
- package/dist/src/utils/vetra.js +0 -86
- package/dist/src/utils/vetra.js.map +0 -1
- package/dist/test/analytics.test.js +0 -263
- package/dist/test/analytics.test.js.map +0 -1
- package/dist/test/document-cache.test.js +0 -457
- package/dist/test/document-cache.test.js.map +0 -1
- package/dist/test/drop.test.js +0 -86
- package/dist/test/drop.test.js.map +0 -1
- package/dist/test/getSwitchboardUrl.test.js +0 -107
- package/dist/test/getSwitchboardUrl.test.js.map +0 -1
- package/dist/test/hooks/document-cache.test.js +0 -642
- package/dist/test/hooks/document-cache.test.js.map +0 -1
- package/dist/test/reactor.test.js +0 -26
- package/dist/test/reactor.test.js.map +0 -1
- package/dist/test/switchboard.test.js +0 -27
- package/dist/test/switchboard.test.js.map +0 -1
- package/dist/vitest.config.js +0 -24
- package/dist/vitest.config.js.map +0 -1
package/dist/src/connect.js
CHANGED
|
@@ -1,2 +1,2516 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
19
|
+
var __toCommonJS = (from) => {
|
|
20
|
+
var entry = __moduleCache.get(from), desc;
|
|
21
|
+
if (entry)
|
|
22
|
+
return entry;
|
|
23
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
24
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
25
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
26
|
+
get: () => from[key],
|
|
27
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
28
|
+
}));
|
|
29
|
+
__moduleCache.set(from, entry);
|
|
30
|
+
return entry;
|
|
31
|
+
};
|
|
32
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
33
|
+
var __export = (target, all) => {
|
|
34
|
+
for (var name in all)
|
|
35
|
+
__defProp(target, name, {
|
|
36
|
+
get: all[name],
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
set: (newValue) => all[name] = () => newValue
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
43
|
+
|
|
44
|
+
// src/renown/utils.ts
|
|
45
|
+
import { logger } from "document-drive";
|
|
46
|
+
|
|
47
|
+
// src/renown/constants.ts
|
|
48
|
+
var RENOWN_URL = "https://www.renown.id";
|
|
49
|
+
var RENOWN_NETWORK_ID = "eip155";
|
|
50
|
+
var RENOWN_CHAIN_ID = "1";
|
|
51
|
+
var DOMAIN_TYPE = [
|
|
52
|
+
{ name: "name", type: "string" },
|
|
53
|
+
{ name: "version", type: "string" },
|
|
54
|
+
{ name: "chainId", type: "uint256" },
|
|
55
|
+
{ name: "verifyingContract", type: "address" }
|
|
56
|
+
];
|
|
57
|
+
var VERIFIABLE_CREDENTIAL_EIP712_TYPE = [
|
|
58
|
+
{ name: "@context", type: "string[]" },
|
|
59
|
+
{ name: "type", type: "string[]" },
|
|
60
|
+
{ name: "id", type: "string" },
|
|
61
|
+
{ name: "issuer", type: "Issuer" },
|
|
62
|
+
{ name: "credentialSubject", type: "CredentialSubject" },
|
|
63
|
+
{ name: "credentialSchema", type: "CredentialSchema" },
|
|
64
|
+
{ name: "issuanceDate", type: "string" },
|
|
65
|
+
{ name: "expirationDate", type: "string" }
|
|
66
|
+
];
|
|
67
|
+
var CREDENTIAL_SCHEMA_EIP712_TYPE = [
|
|
68
|
+
{ name: "id", type: "string" },
|
|
69
|
+
{ name: "type", type: "string" }
|
|
70
|
+
];
|
|
71
|
+
var CREDENTIAL_SUBJECT_TYPE = [
|
|
72
|
+
{ name: "app", type: "string" },
|
|
73
|
+
{ name: "id", type: "string" },
|
|
74
|
+
{ name: "name", type: "string" }
|
|
75
|
+
];
|
|
76
|
+
var ISSUER_TYPE = [
|
|
77
|
+
{ name: "id", type: "string" },
|
|
78
|
+
{ name: "ethereumAddress", type: "string" }
|
|
79
|
+
];
|
|
80
|
+
var CREDENTIAL_TYPES = {
|
|
81
|
+
EIP712Domain: DOMAIN_TYPE,
|
|
82
|
+
VerifiableCredential: VERIFIABLE_CREDENTIAL_EIP712_TYPE,
|
|
83
|
+
CredentialSchema: CREDENTIAL_SCHEMA_EIP712_TYPE,
|
|
84
|
+
CredentialSubject: CREDENTIAL_SUBJECT_TYPE,
|
|
85
|
+
Issuer: ISSUER_TYPE
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// src/renown/utils.ts
|
|
89
|
+
function openRenown(documentId) {
|
|
90
|
+
if (documentId) {
|
|
91
|
+
window.open(`${RENOWN_URL}/profile/${documentId}`, "_blank")?.focus();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const url = new URL(RENOWN_URL);
|
|
95
|
+
url.searchParams.set("connect", window.ph?.renown?.did ?? "");
|
|
96
|
+
url.searchParams.set("network", RENOWN_NETWORK_ID);
|
|
97
|
+
url.searchParams.set("chain", RENOWN_CHAIN_ID);
|
|
98
|
+
const returnUrl = new URL(window.location.pathname, window.location.origin);
|
|
99
|
+
url.searchParams.set("returnUrl", returnUrl.toJSON());
|
|
100
|
+
window.open(url, "_self")?.focus();
|
|
101
|
+
}
|
|
102
|
+
function consumeDidFromUrl() {
|
|
103
|
+
if (typeof window === "undefined")
|
|
104
|
+
return;
|
|
105
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
106
|
+
const userParam = urlParams.get("user");
|
|
107
|
+
if (!userParam)
|
|
108
|
+
return;
|
|
109
|
+
const userDid = decodeURIComponent(userParam);
|
|
110
|
+
const cleanUrl = new URL(window.location.href);
|
|
111
|
+
cleanUrl.searchParams.delete("user");
|
|
112
|
+
window.history.replaceState({}, "", cleanUrl.toString());
|
|
113
|
+
return userDid;
|
|
114
|
+
}
|
|
115
|
+
async function login(userDid, renown) {
|
|
116
|
+
if (!renown) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const did = userDid ?? consumeDidFromUrl();
|
|
120
|
+
try {
|
|
121
|
+
const user = renown.user;
|
|
122
|
+
if (user?.did && (user.did === did || !did)) {
|
|
123
|
+
return user;
|
|
124
|
+
}
|
|
125
|
+
if (!did) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
return await renown.login(did);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
logger.error("@error", error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function logout() {
|
|
134
|
+
const renown = window.ph?.renown;
|
|
135
|
+
await renown?.logout();
|
|
136
|
+
const url = new URL(window.location.href);
|
|
137
|
+
if (url.searchParams.has("user")) {
|
|
138
|
+
url.searchParams.delete("user");
|
|
139
|
+
window.history.replaceState(null, "", url.toString());
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ../../node_modules/.pnpm/change-case@5.4.4/node_modules/change-case/dist/index.js
|
|
143
|
+
var SPLIT_LOWER_UPPER_RE = /([\p{Ll}\d])(\p{Lu})/gu;
|
|
144
|
+
var SPLIT_UPPER_UPPER_RE = /(\p{Lu})([\p{Lu}][\p{Ll}])/gu;
|
|
145
|
+
var SPLIT_SEPARATE_NUMBER_RE = /(\d)\p{Ll}|(\p{L})\d/u;
|
|
146
|
+
var DEFAULT_STRIP_REGEXP = /[^\p{L}\d]+/giu;
|
|
147
|
+
var SPLIT_REPLACE_VALUE = "$1\x00$2";
|
|
148
|
+
var DEFAULT_PREFIX_SUFFIX_CHARACTERS = "";
|
|
149
|
+
function split(value) {
|
|
150
|
+
let result = value.trim();
|
|
151
|
+
result = result.replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE).replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);
|
|
152
|
+
result = result.replace(DEFAULT_STRIP_REGEXP, "\x00");
|
|
153
|
+
let start = 0;
|
|
154
|
+
let end = result.length;
|
|
155
|
+
while (result.charAt(start) === "\x00")
|
|
156
|
+
start++;
|
|
157
|
+
if (start === end)
|
|
158
|
+
return [];
|
|
159
|
+
while (result.charAt(end - 1) === "\x00")
|
|
160
|
+
end--;
|
|
161
|
+
return result.slice(start, end).split(/\0/g);
|
|
162
|
+
}
|
|
163
|
+
function splitSeparateNumbers(value) {
|
|
164
|
+
const words = split(value);
|
|
165
|
+
for (let i = 0;i < words.length; i++) {
|
|
166
|
+
const word = words[i];
|
|
167
|
+
const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);
|
|
168
|
+
if (match) {
|
|
169
|
+
const offset = match.index + (match[1] ?? match[2]).length;
|
|
170
|
+
words.splice(i, 1, word.slice(0, offset), word.slice(offset));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return words;
|
|
174
|
+
}
|
|
175
|
+
function capitalCase(input, options) {
|
|
176
|
+
const [prefix, words, suffix] = splitPrefixSuffix(input, options);
|
|
177
|
+
const lower = lowerFactory(options?.locale);
|
|
178
|
+
const upper = upperFactory(options?.locale);
|
|
179
|
+
return prefix + words.map(capitalCaseTransformFactory(lower, upper)).join(options?.delimiter ?? " ") + suffix;
|
|
180
|
+
}
|
|
181
|
+
function lowerFactory(locale) {
|
|
182
|
+
return locale === false ? (input) => input.toLowerCase() : (input) => input.toLocaleLowerCase(locale);
|
|
183
|
+
}
|
|
184
|
+
function upperFactory(locale) {
|
|
185
|
+
return locale === false ? (input) => input.toUpperCase() : (input) => input.toLocaleUpperCase(locale);
|
|
186
|
+
}
|
|
187
|
+
function capitalCaseTransformFactory(lower, upper) {
|
|
188
|
+
return (word) => `${upper(word[0])}${lower(word.slice(1))}`;
|
|
189
|
+
}
|
|
190
|
+
function splitPrefixSuffix(input, options = {}) {
|
|
191
|
+
const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);
|
|
192
|
+
const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
|
|
193
|
+
const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;
|
|
194
|
+
let prefixIndex = 0;
|
|
195
|
+
let suffixIndex = input.length;
|
|
196
|
+
while (prefixIndex < input.length) {
|
|
197
|
+
const char = input.charAt(prefixIndex);
|
|
198
|
+
if (!prefixCharacters.includes(char))
|
|
199
|
+
break;
|
|
200
|
+
prefixIndex++;
|
|
201
|
+
}
|
|
202
|
+
while (suffixIndex > prefixIndex) {
|
|
203
|
+
const index = suffixIndex - 1;
|
|
204
|
+
const char = input.charAt(index);
|
|
205
|
+
if (!suffixCharacters.includes(char))
|
|
206
|
+
break;
|
|
207
|
+
suffixIndex = index;
|
|
208
|
+
}
|
|
209
|
+
return [
|
|
210
|
+
input.slice(0, prefixIndex),
|
|
211
|
+
splitFn(input.slice(prefixIndex, suffixIndex)),
|
|
212
|
+
input.slice(suffixIndex)
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// src/hooks/make-ph-event-functions.ts
|
|
217
|
+
import { useSyncExternalStore } from "react";
|
|
218
|
+
function makePHEventFunctions(key) {
|
|
219
|
+
const setEventName = `ph:set${capitalCase(key)}`;
|
|
220
|
+
const updateEventName = `ph:${key}Updated`;
|
|
221
|
+
function setValue(value) {
|
|
222
|
+
const event = new CustomEvent(setEventName, {
|
|
223
|
+
detail: { [key]: value }
|
|
224
|
+
});
|
|
225
|
+
window.dispatchEvent(event);
|
|
226
|
+
}
|
|
227
|
+
function dispatchUpdatedEvent() {
|
|
228
|
+
const event = new CustomEvent(updateEventName);
|
|
229
|
+
window.dispatchEvent(event);
|
|
230
|
+
}
|
|
231
|
+
function handleSetValueEvent(event) {
|
|
232
|
+
const value = event.detail[key];
|
|
233
|
+
if (!window.ph)
|
|
234
|
+
throw new Error("ph global store is not defined");
|
|
235
|
+
window.ph[key] = value;
|
|
236
|
+
dispatchUpdatedEvent();
|
|
237
|
+
}
|
|
238
|
+
function addEventHandler() {
|
|
239
|
+
window.addEventListener(setEventName, handleSetValueEvent);
|
|
240
|
+
}
|
|
241
|
+
function subscribeToValue(onStoreChange) {
|
|
242
|
+
window.addEventListener(updateEventName, onStoreChange);
|
|
243
|
+
return () => {
|
|
244
|
+
window.removeEventListener(updateEventName, onStoreChange);
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function getSnapshot() {
|
|
248
|
+
if (!window.ph)
|
|
249
|
+
throw new Error("ph global store is not defined");
|
|
250
|
+
return window.ph[key];
|
|
251
|
+
}
|
|
252
|
+
function useValue() {
|
|
253
|
+
return useSyncExternalStore(subscribeToValue, getSnapshot);
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
useValue,
|
|
257
|
+
setValue,
|
|
258
|
+
addEventHandler
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/hooks/config/editor.ts
|
|
263
|
+
var isExternalControlsEnabledEventFunctions = makePHEventFunctions("isExternalControlsEnabled");
|
|
264
|
+
var setIsExternalControlsEnabled = isExternalControlsEnabledEventFunctions.setValue;
|
|
265
|
+
var useIsExternalControlsEnabled = isExternalControlsEnabledEventFunctions.useValue;
|
|
266
|
+
var addIsExternalControlsEnabledEventHandler = isExternalControlsEnabledEventFunctions.addEventHandler;
|
|
267
|
+
var isDragAndDropEnabledEventFunctions = makePHEventFunctions("isDragAndDropEnabled");
|
|
268
|
+
var setIsDragAndDropEnabled = isDragAndDropEnabledEventFunctions.setValue;
|
|
269
|
+
var useIsDragAndDropEnabled = isDragAndDropEnabledEventFunctions.useValue;
|
|
270
|
+
var addIsDragAndDropEnabledEventHandler = isDragAndDropEnabledEventFunctions.addEventHandler;
|
|
271
|
+
var allowedDocumentTypesEventFunctions = makePHEventFunctions("allowedDocumentTypes");
|
|
272
|
+
var setAllowedDocumentTypes = allowedDocumentTypesEventFunctions.setValue;
|
|
273
|
+
function useAllowedDocumentTypes() {
|
|
274
|
+
const definedAllowedDocumentTypes = allowedDocumentTypesEventFunctions.useValue();
|
|
275
|
+
return definedAllowedDocumentTypes;
|
|
276
|
+
}
|
|
277
|
+
var addAllowedDocumentTypesEventHandler = allowedDocumentTypesEventFunctions.addEventHandler;
|
|
278
|
+
var phDriveEditorConfigSetters = {
|
|
279
|
+
allowedDocumentTypes: setAllowedDocumentTypes,
|
|
280
|
+
isDragAndDropEnabled: setIsDragAndDropEnabled
|
|
281
|
+
};
|
|
282
|
+
var phDocumentEditorConfigSetters = {
|
|
283
|
+
isExternalControlsEnabled: setIsExternalControlsEnabled
|
|
284
|
+
};
|
|
285
|
+
var phDriveEditorConfigHooks = {
|
|
286
|
+
allowedDocumentTypes: useAllowedDocumentTypes,
|
|
287
|
+
isDragAndDropEnabled: useIsDragAndDropEnabled
|
|
288
|
+
};
|
|
289
|
+
var phDocumentEditorConfigHooks = {
|
|
290
|
+
isExternalControlsEnabled: useIsExternalControlsEnabled
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
// src/hooks/config/connect.ts
|
|
294
|
+
var {
|
|
295
|
+
useValue: useRouterBasename,
|
|
296
|
+
setValue: setRouterBasename,
|
|
297
|
+
addEventHandler: addRouterBasenameEventHandler
|
|
298
|
+
} = makePHEventFunctions("routerBasename");
|
|
299
|
+
var {
|
|
300
|
+
useValue: useVersion,
|
|
301
|
+
setValue: setVersion,
|
|
302
|
+
addEventHandler: addVersionEventHandler
|
|
303
|
+
} = makePHEventFunctions("version");
|
|
304
|
+
var {
|
|
305
|
+
useValue: useRequiresHardRefresh,
|
|
306
|
+
setValue: setRequiresHardRefresh,
|
|
307
|
+
addEventHandler: addRequiresHardRefreshEventHandler
|
|
308
|
+
} = makePHEventFunctions("requiresHardRefresh");
|
|
309
|
+
var {
|
|
310
|
+
useValue: useWarnOutdatedApp,
|
|
311
|
+
setValue: setWarnOutdatedApp,
|
|
312
|
+
addEventHandler: addWarnOutdatedAppEventHandler
|
|
313
|
+
} = makePHEventFunctions("warnOutdatedApp");
|
|
314
|
+
var {
|
|
315
|
+
useValue: useStudioMode,
|
|
316
|
+
setValue: setStudioMode,
|
|
317
|
+
addEventHandler: addStudioModeEventHandler
|
|
318
|
+
} = makePHEventFunctions("studioMode");
|
|
319
|
+
var {
|
|
320
|
+
useValue: useBasePath,
|
|
321
|
+
setValue: setBasePath,
|
|
322
|
+
addEventHandler: addBasePathEventHandler
|
|
323
|
+
} = makePHEventFunctions("basePath");
|
|
324
|
+
var {
|
|
325
|
+
useValue: useVersionCheckInterval,
|
|
326
|
+
setValue: setVersionCheckInterval,
|
|
327
|
+
addEventHandler: addVersionCheckIntervalEventHandler
|
|
328
|
+
} = makePHEventFunctions("versionCheckInterval");
|
|
329
|
+
var {
|
|
330
|
+
useValue: useCliVersion,
|
|
331
|
+
setValue: setCliVersion,
|
|
332
|
+
addEventHandler: addCliVersionEventHandler
|
|
333
|
+
} = makePHEventFunctions("cliVersion");
|
|
334
|
+
var {
|
|
335
|
+
useValue: useFileUploadOperationsChunkSize,
|
|
336
|
+
setValue: setFileUploadOperationsChunkSize,
|
|
337
|
+
addEventHandler: addFileUploadOperationsChunkSizeEventHandler
|
|
338
|
+
} = makePHEventFunctions("fileUploadOperationsChunkSize");
|
|
339
|
+
var {
|
|
340
|
+
useValue: useIsDocumentModelSelectionSettingsEnabled,
|
|
341
|
+
setValue: setIsDocumentModelSelectionSettingsEnabled,
|
|
342
|
+
addEventHandler: addIsDocumentModelSelectionSettingsEnabledEventHandler
|
|
343
|
+
} = makePHEventFunctions("isDocumentModelSelectionSettingsEnabled");
|
|
344
|
+
var {
|
|
345
|
+
useValue: useGaTrackingId,
|
|
346
|
+
setValue: setGaTrackingId,
|
|
347
|
+
addEventHandler: addGaTrackingIdEventHandler
|
|
348
|
+
} = makePHEventFunctions("gaTrackingId");
|
|
349
|
+
var {
|
|
350
|
+
useValue: useDefaultDrivesUrl,
|
|
351
|
+
setValue: setDefaultDrivesUrl,
|
|
352
|
+
addEventHandler: addDefaultDrivesUrlEventHandler
|
|
353
|
+
} = makePHEventFunctions("defaultDrivesUrl");
|
|
354
|
+
var {
|
|
355
|
+
useValue: useDrivesPreserveStrategy,
|
|
356
|
+
setValue: setDrivesPreserveStrategy,
|
|
357
|
+
addEventHandler: addDrivesPreserveStrategyEventHandler
|
|
358
|
+
} = makePHEventFunctions("drivesPreserveStrategy");
|
|
359
|
+
var {
|
|
360
|
+
useValue: useIsLocalDrivesEnabled,
|
|
361
|
+
setValue: setIsLocalDrivesEnabled,
|
|
362
|
+
addEventHandler: addIsLocalDrivesEnabledEventHandler
|
|
363
|
+
} = makePHEventFunctions("isLocalDrivesEnabled");
|
|
364
|
+
var {
|
|
365
|
+
useValue: useIsAddDriveEnabled,
|
|
366
|
+
setValue: setIsAddDriveEnabled,
|
|
367
|
+
addEventHandler: addIsAddDriveEnabledEventHandler
|
|
368
|
+
} = makePHEventFunctions("isAddDriveEnabled");
|
|
369
|
+
var {
|
|
370
|
+
useValue: useIsPublicDrivesEnabled,
|
|
371
|
+
setValue: setIsPublicDrivesEnabled,
|
|
372
|
+
addEventHandler: addIsPublicDrivesEnabledEventHandler
|
|
373
|
+
} = makePHEventFunctions("isPublicDrivesEnabled");
|
|
374
|
+
var {
|
|
375
|
+
useValue: useIsAddPublicDrivesEnabled,
|
|
376
|
+
setValue: setIsAddPublicDrivesEnabled,
|
|
377
|
+
addEventHandler: addIsAddPublicDrivesEnabledEventHandler
|
|
378
|
+
} = makePHEventFunctions("isAddPublicDrivesEnabled");
|
|
379
|
+
var {
|
|
380
|
+
useValue: useIsDeletePublicDrivesEnabled,
|
|
381
|
+
setValue: setIsDeletePublicDrivesEnabled,
|
|
382
|
+
addEventHandler: addIsDeletePublicDrivesEnabledEventHandler
|
|
383
|
+
} = makePHEventFunctions("isDeletePublicDrivesEnabled");
|
|
384
|
+
var {
|
|
385
|
+
useValue: useIsCloudDrivesEnabled,
|
|
386
|
+
setValue: setIsCloudDrivesEnabled,
|
|
387
|
+
addEventHandler: addIsCloudDrivesEnabledEventHandler
|
|
388
|
+
} = makePHEventFunctions("isCloudDrivesEnabled");
|
|
389
|
+
var {
|
|
390
|
+
useValue: useIsAddCloudDrivesEnabled,
|
|
391
|
+
setValue: setIsAddCloudDrivesEnabled,
|
|
392
|
+
addEventHandler: addIsAddCloudDrivesEnabledEventHandler
|
|
393
|
+
} = makePHEventFunctions("isAddCloudDrivesEnabled");
|
|
394
|
+
var {
|
|
395
|
+
useValue: useIsDeleteCloudDrivesEnabled,
|
|
396
|
+
setValue: setIsDeleteCloudDrivesEnabled,
|
|
397
|
+
addEventHandler: addIsDeleteCloudDrivesEnabledEventHandler
|
|
398
|
+
} = makePHEventFunctions("isDeleteCloudDrivesEnabled");
|
|
399
|
+
var {
|
|
400
|
+
useValue: useLocalDrivesEnabled,
|
|
401
|
+
setValue: setLocalDrivesEnabled,
|
|
402
|
+
addEventHandler: addLocalDrivesEnabledEventHandler
|
|
403
|
+
} = makePHEventFunctions("isLocalDrivesEnabled");
|
|
404
|
+
var {
|
|
405
|
+
useValue: useIsAddLocalDrivesEnabled,
|
|
406
|
+
setValue: setIsAddLocalDrivesEnabled,
|
|
407
|
+
addEventHandler: addIsAddLocalDrivesEnabledEventHandler
|
|
408
|
+
} = makePHEventFunctions("isAddLocalDrivesEnabled");
|
|
409
|
+
var {
|
|
410
|
+
useValue: useIsDeleteLocalDrivesEnabled,
|
|
411
|
+
setValue: setIsDeleteLocalDrivesEnabled,
|
|
412
|
+
addEventHandler: addIsDeleteLocalDrivesEnabledEventHandler
|
|
413
|
+
} = makePHEventFunctions("isDeleteLocalDrivesEnabled");
|
|
414
|
+
var {
|
|
415
|
+
useValue: useIsEditorDebugModeEnabled,
|
|
416
|
+
setValue: setIsEditorDebugModeEnabled,
|
|
417
|
+
addEventHandler: addIsEditorDebugModeEnabledEventHandler
|
|
418
|
+
} = makePHEventFunctions("isEditorDebugModeEnabled");
|
|
419
|
+
var {
|
|
420
|
+
useValue: useIsEditorReadModeEnabled,
|
|
421
|
+
setValue: setIsEditorReadModeEnabled,
|
|
422
|
+
addEventHandler: addIsEditorReadModeEnabledEventHandler
|
|
423
|
+
} = makePHEventFunctions("isEditorReadModeEnabled");
|
|
424
|
+
var {
|
|
425
|
+
useValue: useIsAnalyticsDatabaseWorkerEnabled,
|
|
426
|
+
setValue: setIsAnalyticsDatabaseWorkerEnabled,
|
|
427
|
+
addEventHandler: addIsAnalyticsDatabaseWorkerEnabledEventHandler
|
|
428
|
+
} = makePHEventFunctions("isAnalyticsDatabaseWorkerEnabled");
|
|
429
|
+
var {
|
|
430
|
+
useValue: useIsDiffAnalyticsEnabled,
|
|
431
|
+
setValue: setIsDiffAnalyticsEnabled,
|
|
432
|
+
addEventHandler: addIsDiffAnalyticsEnabledEventHandler
|
|
433
|
+
} = makePHEventFunctions("isDiffAnalyticsEnabled");
|
|
434
|
+
var {
|
|
435
|
+
useValue: useIsDriveAnalyticsEnabled,
|
|
436
|
+
setValue: setIsDriveAnalyticsEnabled,
|
|
437
|
+
addEventHandler: addIsDriveAnalyticsEnabledEventHandler
|
|
438
|
+
} = makePHEventFunctions("isDriveAnalyticsEnabled");
|
|
439
|
+
var {
|
|
440
|
+
useValue: useRenownUrl,
|
|
441
|
+
setValue: setRenownUrl,
|
|
442
|
+
addEventHandler: addRenownUrlEventHandler
|
|
443
|
+
} = makePHEventFunctions("renownUrl");
|
|
444
|
+
var {
|
|
445
|
+
useValue: useRenownNetworkId,
|
|
446
|
+
setValue: setRenownNetworkId,
|
|
447
|
+
addEventHandler: addRenownNetworkIdEventHandler
|
|
448
|
+
} = makePHEventFunctions("renownNetworkId");
|
|
449
|
+
var {
|
|
450
|
+
useValue: useRenownChainId,
|
|
451
|
+
setValue: setRenownChainId,
|
|
452
|
+
addEventHandler: addRenownChainIdEventHandler
|
|
453
|
+
} = makePHEventFunctions("renownChainId");
|
|
454
|
+
var {
|
|
455
|
+
useValue: useSentryRelease,
|
|
456
|
+
setValue: setSentryRelease,
|
|
457
|
+
addEventHandler: addSentryReleaseEventHandler
|
|
458
|
+
} = makePHEventFunctions("sentryRelease");
|
|
459
|
+
var {
|
|
460
|
+
useValue: useSentryDsn,
|
|
461
|
+
setValue: setSentryDsn,
|
|
462
|
+
addEventHandler: addSentryDsnEventHandler
|
|
463
|
+
} = makePHEventFunctions("sentryDsn");
|
|
464
|
+
var {
|
|
465
|
+
useValue: useSentryEnv,
|
|
466
|
+
setValue: setSentryEnv,
|
|
467
|
+
addEventHandler: addSentryEnvEventHandler
|
|
468
|
+
} = makePHEventFunctions("sentryEnv");
|
|
469
|
+
var {
|
|
470
|
+
useValue: useIsSentryTracingEnabled,
|
|
471
|
+
setValue: setIsSentryTracingEnabled,
|
|
472
|
+
addEventHandler: addIsSentryTracingEnabledEventHandler
|
|
473
|
+
} = makePHEventFunctions("isSentryTracingEnabled");
|
|
474
|
+
var {
|
|
475
|
+
useValue: useIsExternalProcessorsEnabled,
|
|
476
|
+
setValue: setIsExternalProcessorsEnabled,
|
|
477
|
+
addEventHandler: addIsExternalProcessorsEnabledEventHandler
|
|
478
|
+
} = makePHEventFunctions("isExternalProcessorsEnabled");
|
|
479
|
+
var {
|
|
480
|
+
useValue: useIsExternalPackagesEnabled,
|
|
481
|
+
setValue: setIsExternalPackagesEnabled,
|
|
482
|
+
addEventHandler: addIsExternalPackagesEnabledEventHandler
|
|
483
|
+
} = makePHEventFunctions("isExternalPackagesEnabled");
|
|
484
|
+
var enabledEditorsEventFunctions = makePHEventFunctions("enabledEditors");
|
|
485
|
+
var setEnabledEditors = enabledEditorsEventFunctions.setValue;
|
|
486
|
+
var useEnabledEditors = enabledEditorsEventFunctions.useValue;
|
|
487
|
+
var addEnabledEditorsEventHandler = enabledEditorsEventFunctions.addEventHandler;
|
|
488
|
+
var disabledEditorsEventFunctions = makePHEventFunctions("disabledEditors");
|
|
489
|
+
var setDisabledEditors = disabledEditorsEventFunctions.setValue;
|
|
490
|
+
var useDisabledEditors = disabledEditorsEventFunctions.useValue;
|
|
491
|
+
var addDisabledEditorsEventHandler = disabledEditorsEventFunctions.addEventHandler;
|
|
492
|
+
var isRelationalProcessorsEnabled = makePHEventFunctions("isRelationalProcessorsEnabled");
|
|
493
|
+
var setIsRelationalProcessorsEnabled = isRelationalProcessorsEnabled.setValue;
|
|
494
|
+
var useIsRelationalProcessorsEnabled = isRelationalProcessorsEnabled.useValue;
|
|
495
|
+
var addIsRelationalProcessorsEnabledEventHandler = isRelationalProcessorsEnabled.addEventHandler;
|
|
496
|
+
var isExternalRelationalProcessorsEnabled = makePHEventFunctions("isExternalRelationalProcessorsEnabled");
|
|
497
|
+
var setIsExternalRelationalProcessorsEnabled = isExternalRelationalProcessorsEnabled.setValue;
|
|
498
|
+
var useIsExternalRelationalProcessorsEnabled = isExternalRelationalProcessorsEnabled.useValue;
|
|
499
|
+
var addIsExternalRelationalProcessorsEnabledEventHandler = isExternalRelationalProcessorsEnabled.addEventHandler;
|
|
500
|
+
var isAnalyticsEnabledEventFunctions = makePHEventFunctions("isAnalyticsEnabled");
|
|
501
|
+
var setIsAnalyticsEnabled = isAnalyticsEnabledEventFunctions.setValue;
|
|
502
|
+
var useIsAnalyticsEnabled = isAnalyticsEnabledEventFunctions.useValue;
|
|
503
|
+
var addIsAnalyticsEnabledEventHandler = isAnalyticsEnabledEventFunctions.addEventHandler;
|
|
504
|
+
var isAnalyticsExternalProcessorsEnabled = makePHEventFunctions("isAnalyticsExternalProcessorsEnabled");
|
|
505
|
+
var setIsAnalyticsExternalProcessorsEnabled = isAnalyticsExternalProcessorsEnabled.setValue;
|
|
506
|
+
var useIsAnalyticsExternalProcessorsEnabled = isAnalyticsExternalProcessorsEnabled.useValue;
|
|
507
|
+
var addIsAnalyticsExternalProcessorsEnabledEventHandler = isAnalyticsExternalProcessorsEnabled.addEventHandler;
|
|
508
|
+
var analyticsDatabaseNameEventFunctions = makePHEventFunctions("analyticsDatabaseName");
|
|
509
|
+
var setAnalyticsDatabaseName = analyticsDatabaseNameEventFunctions.setValue;
|
|
510
|
+
var useAnalyticsDatabaseName = analyticsDatabaseNameEventFunctions.useValue;
|
|
511
|
+
var addAnalyticsDatabaseNameEventHandler = analyticsDatabaseNameEventFunctions.addEventHandler;
|
|
512
|
+
var logLevelEventFunctions = makePHEventFunctions("logLevel");
|
|
513
|
+
var setLogLevel = logLevelEventFunctions.setValue;
|
|
514
|
+
var useLogLevel = logLevelEventFunctions.useValue;
|
|
515
|
+
var addLogLevelEventHandler = logLevelEventFunctions.addEventHandler;
|
|
516
|
+
var allowListEventFunctions = makePHEventFunctions("allowList");
|
|
517
|
+
var setAllowList = allowListEventFunctions.setValue;
|
|
518
|
+
var useAllowList = allowListEventFunctions.useValue;
|
|
519
|
+
var addAllowListEventHandler = allowListEventFunctions.addEventHandler;
|
|
520
|
+
var nonUserConfigSetters = {
|
|
521
|
+
routerBasename: setRouterBasename,
|
|
522
|
+
version: setVersion,
|
|
523
|
+
requiresHardRefresh: setRequiresHardRefresh,
|
|
524
|
+
warnOutdatedApp: setWarnOutdatedApp,
|
|
525
|
+
studioMode: setStudioMode,
|
|
526
|
+
basePath: setBasePath,
|
|
527
|
+
versionCheckInterval: setVersionCheckInterval,
|
|
528
|
+
cliVersion: setCliVersion,
|
|
529
|
+
fileUploadOperationsChunkSize: setFileUploadOperationsChunkSize,
|
|
530
|
+
isDocumentModelSelectionSettingsEnabled: setIsDocumentModelSelectionSettingsEnabled,
|
|
531
|
+
gaTrackingId: setGaTrackingId,
|
|
532
|
+
defaultDrivesUrl: setDefaultDrivesUrl,
|
|
533
|
+
drivesPreserveStrategy: setDrivesPreserveStrategy,
|
|
534
|
+
isLocalDrivesEnabled: setIsLocalDrivesEnabled,
|
|
535
|
+
isAddDriveEnabled: setIsAddDriveEnabled,
|
|
536
|
+
isPublicDrivesEnabled: setIsPublicDrivesEnabled,
|
|
537
|
+
isAddPublicDrivesEnabled: setIsAddPublicDrivesEnabled,
|
|
538
|
+
isDeletePublicDrivesEnabled: setIsDeletePublicDrivesEnabled,
|
|
539
|
+
isCloudDrivesEnabled: setIsCloudDrivesEnabled,
|
|
540
|
+
isAddCloudDrivesEnabled: setIsAddCloudDrivesEnabled,
|
|
541
|
+
isDeleteCloudDrivesEnabled: setIsDeleteCloudDrivesEnabled,
|
|
542
|
+
isAddLocalDrivesEnabled: setIsAddLocalDrivesEnabled,
|
|
543
|
+
isDeleteLocalDrivesEnabled: setIsDeleteLocalDrivesEnabled,
|
|
544
|
+
isEditorDebugModeEnabled: setIsEditorDebugModeEnabled,
|
|
545
|
+
isEditorReadModeEnabled: setIsEditorReadModeEnabled,
|
|
546
|
+
isRelationalProcessorsEnabled: setIsRelationalProcessorsEnabled,
|
|
547
|
+
isExternalRelationalProcessorsEnabled: setIsExternalRelationalProcessorsEnabled,
|
|
548
|
+
isAnalyticsEnabled: setIsAnalyticsEnabled,
|
|
549
|
+
analyticsDatabaseName: setAnalyticsDatabaseName,
|
|
550
|
+
isAnalyticsExternalProcessorsEnabled: setIsAnalyticsExternalProcessorsEnabled,
|
|
551
|
+
isAnalyticsDatabaseWorkerEnabled: setIsAnalyticsDatabaseWorkerEnabled,
|
|
552
|
+
isDiffAnalyticsEnabled: setIsDiffAnalyticsEnabled,
|
|
553
|
+
isDriveAnalyticsEnabled: setIsDriveAnalyticsEnabled,
|
|
554
|
+
renownUrl: setRenownUrl,
|
|
555
|
+
renownNetworkId: setRenownNetworkId,
|
|
556
|
+
renownChainId: setRenownChainId,
|
|
557
|
+
sentryRelease: setSentryRelease,
|
|
558
|
+
sentryDsn: setSentryDsn,
|
|
559
|
+
sentryEnv: setSentryEnv,
|
|
560
|
+
isSentryTracingEnabled: setIsSentryTracingEnabled,
|
|
561
|
+
isExternalProcessorsEnabled: setIsExternalProcessorsEnabled,
|
|
562
|
+
isExternalPackagesEnabled: setIsExternalPackagesEnabled,
|
|
563
|
+
allowList: setAllowList,
|
|
564
|
+
logLevel: setLogLevel,
|
|
565
|
+
disabledEditors: setDisabledEditors,
|
|
566
|
+
enabledEditors: setEnabledEditors
|
|
567
|
+
};
|
|
568
|
+
var phGlobalConfigSetters = {
|
|
569
|
+
...phDriveEditorConfigSetters,
|
|
570
|
+
...phDocumentEditorConfigSetters,
|
|
571
|
+
...nonUserConfigSetters
|
|
572
|
+
};
|
|
573
|
+
var nonUserConfigHooks = {
|
|
574
|
+
routerBasename: useRouterBasename,
|
|
575
|
+
version: useVersion,
|
|
576
|
+
requiresHardRefresh: useRequiresHardRefresh,
|
|
577
|
+
warnOutdatedApp: useWarnOutdatedApp,
|
|
578
|
+
studioMode: useStudioMode,
|
|
579
|
+
basePath: useBasePath,
|
|
580
|
+
versionCheckInterval: useVersionCheckInterval,
|
|
581
|
+
cliVersion: useCliVersion,
|
|
582
|
+
fileUploadOperationsChunkSize: useFileUploadOperationsChunkSize,
|
|
583
|
+
isDocumentModelSelectionSettingsEnabled: useIsDocumentModelSelectionSettingsEnabled,
|
|
584
|
+
gaTrackingId: useGaTrackingId,
|
|
585
|
+
defaultDrivesUrl: useDefaultDrivesUrl,
|
|
586
|
+
drivesPreserveStrategy: useDrivesPreserveStrategy,
|
|
587
|
+
isAddDriveEnabled: useIsAddDriveEnabled,
|
|
588
|
+
isPublicDrivesEnabled: useIsPublicDrivesEnabled,
|
|
589
|
+
isAddPublicDrivesEnabled: useIsAddPublicDrivesEnabled,
|
|
590
|
+
isDeletePublicDrivesEnabled: useIsDeletePublicDrivesEnabled,
|
|
591
|
+
isCloudDrivesEnabled: useIsCloudDrivesEnabled,
|
|
592
|
+
isAddCloudDrivesEnabled: useIsAddCloudDrivesEnabled,
|
|
593
|
+
isDeleteCloudDrivesEnabled: useIsDeleteCloudDrivesEnabled,
|
|
594
|
+
isLocalDrivesEnabled: useIsLocalDrivesEnabled,
|
|
595
|
+
isAddLocalDrivesEnabled: useIsAddLocalDrivesEnabled,
|
|
596
|
+
isDeleteLocalDrivesEnabled: useIsDeleteLocalDrivesEnabled,
|
|
597
|
+
isEditorDebugModeEnabled: useIsEditorDebugModeEnabled,
|
|
598
|
+
isEditorReadModeEnabled: useIsEditorReadModeEnabled,
|
|
599
|
+
isAnalyticsDatabaseWorkerEnabled: useIsAnalyticsDatabaseWorkerEnabled,
|
|
600
|
+
isDiffAnalyticsEnabled: useIsDiffAnalyticsEnabled,
|
|
601
|
+
isDriveAnalyticsEnabled: useIsDriveAnalyticsEnabled,
|
|
602
|
+
renownUrl: useRenownUrl,
|
|
603
|
+
renownNetworkId: useRenownNetworkId,
|
|
604
|
+
renownChainId: useRenownChainId,
|
|
605
|
+
sentryRelease: useSentryRelease,
|
|
606
|
+
sentryDsn: useSentryDsn,
|
|
607
|
+
sentryEnv: useSentryEnv,
|
|
608
|
+
isSentryTracingEnabled: useIsSentryTracingEnabled,
|
|
609
|
+
isExternalProcessorsEnabled: useIsExternalProcessorsEnabled,
|
|
610
|
+
isExternalPackagesEnabled: useIsExternalPackagesEnabled,
|
|
611
|
+
allowList: useAllowList,
|
|
612
|
+
isAnalyticsEnabled: useIsAnalyticsEnabled,
|
|
613
|
+
isAnalyticsExternalProcessorsEnabled: useIsAnalyticsExternalProcessorsEnabled,
|
|
614
|
+
isRelationalProcessorsEnabled: useIsRelationalProcessorsEnabled,
|
|
615
|
+
isExternalRelationalProcessorsEnabled: useIsExternalRelationalProcessorsEnabled,
|
|
616
|
+
analyticsDatabaseName: useAnalyticsDatabaseName,
|
|
617
|
+
logLevel: useLogLevel,
|
|
618
|
+
disabledEditors: useDisabledEditors,
|
|
619
|
+
enabledEditors: useEnabledEditors
|
|
620
|
+
};
|
|
621
|
+
var phGlobalConfigHooks = {
|
|
622
|
+
...phDriveEditorConfigHooks,
|
|
623
|
+
...phDocumentEditorConfigHooks,
|
|
624
|
+
...nonUserConfigHooks
|
|
625
|
+
};
|
|
626
|
+
|
|
627
|
+
// src/hooks/features.ts
|
|
628
|
+
var featuresEventFunctions = makePHEventFunctions("features");
|
|
629
|
+
var useFeatures = featuresEventFunctions.useValue;
|
|
630
|
+
var setFeatures = featuresEventFunctions.setValue;
|
|
631
|
+
var addFeaturesEventHandler = featuresEventFunctions.addEventHandler;
|
|
632
|
+
|
|
633
|
+
// src/hooks/document-cache.ts
|
|
634
|
+
import { use, useCallback, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
635
|
+
|
|
636
|
+
// src/document-cache.ts
|
|
637
|
+
function addPromiseState(promise) {
|
|
638
|
+
if ("status" in promise) {
|
|
639
|
+
return promise;
|
|
640
|
+
}
|
|
641
|
+
const promiseWithState = promise;
|
|
642
|
+
promiseWithState.status = "pending";
|
|
643
|
+
promiseWithState.then((value) => {
|
|
644
|
+
promiseWithState.status = "fulfilled";
|
|
645
|
+
promiseWithState.value = value;
|
|
646
|
+
}, (reason) => {
|
|
647
|
+
promiseWithState.status = "rejected";
|
|
648
|
+
promiseWithState.reason = reason;
|
|
649
|
+
throw reason;
|
|
650
|
+
});
|
|
651
|
+
return promiseWithState;
|
|
652
|
+
}
|
|
653
|
+
function readPromiseState(promise) {
|
|
654
|
+
return "status" in promise ? promise : { status: "pending" };
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
class DocumentCache {
|
|
658
|
+
reactor;
|
|
659
|
+
documents = new Map;
|
|
660
|
+
batchPromises = new Map;
|
|
661
|
+
listeners = new Map;
|
|
662
|
+
constructor(reactor) {
|
|
663
|
+
this.reactor = reactor;
|
|
664
|
+
reactor.on("documentDeleted", (documentId) => {
|
|
665
|
+
const listeners = this.listeners.get(documentId);
|
|
666
|
+
this.documents.delete(documentId);
|
|
667
|
+
this.#invalidateBatchesContaining(documentId);
|
|
668
|
+
if (listeners) {
|
|
669
|
+
listeners.forEach((listener) => listener());
|
|
670
|
+
}
|
|
671
|
+
this.listeners.delete(documentId);
|
|
672
|
+
});
|
|
673
|
+
reactor.on("operationsAdded", (documentId) => {
|
|
674
|
+
if (this.documents.has(documentId)) {
|
|
675
|
+
this.#updateDocument(documentId).catch(console.warn);
|
|
676
|
+
}
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
#invalidateBatchesContaining(documentId) {
|
|
680
|
+
for (const key of this.batchPromises.keys()) {
|
|
681
|
+
if (key.split(",").includes(documentId)) {
|
|
682
|
+
this.batchPromises.delete(key);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
async#updateDocument(documentId) {
|
|
687
|
+
const result = this.get(documentId, true);
|
|
688
|
+
await result;
|
|
689
|
+
const listeners = this.listeners.get(documentId);
|
|
690
|
+
if (listeners) {
|
|
691
|
+
listeners.forEach((listener) => listener());
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
get(id, refetch) {
|
|
695
|
+
const currentData = this.documents.get(id);
|
|
696
|
+
if (currentData) {
|
|
697
|
+
if (currentData.status === "pending") {
|
|
698
|
+
return currentData;
|
|
699
|
+
}
|
|
700
|
+
if (!refetch) {
|
|
701
|
+
return currentData;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
const documentPromise = this.reactor.getDocument(id);
|
|
705
|
+
this.documents.set(id, addPromiseState(documentPromise));
|
|
706
|
+
return documentPromise;
|
|
707
|
+
}
|
|
708
|
+
getBatch(ids) {
|
|
709
|
+
const key = ids.join(",");
|
|
710
|
+
const cached = this.batchPromises.get(key);
|
|
711
|
+
const hasDeletedDocuments = ids.some((id) => !this.documents.has(id));
|
|
712
|
+
const currentPromises = ids.map((id) => this.get(id));
|
|
713
|
+
if (hasDeletedDocuments) {
|
|
714
|
+
const batchPromise2 = Promise.all(currentPromises);
|
|
715
|
+
this.batchPromises.set(key, {
|
|
716
|
+
promises: currentPromises,
|
|
717
|
+
promise: batchPromise2
|
|
718
|
+
});
|
|
719
|
+
return batchPromise2;
|
|
720
|
+
}
|
|
721
|
+
if (cached) {
|
|
722
|
+
const samePromises = currentPromises.every((p, i) => p === cached.promises[i]);
|
|
723
|
+
if (samePromises) {
|
|
724
|
+
return cached.promise;
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
const states = currentPromises.map((p) => readPromiseState(p));
|
|
728
|
+
const allFulfilled = states.every((s) => s.status === "fulfilled");
|
|
729
|
+
if (allFulfilled) {
|
|
730
|
+
const values = states.map((s) => s.value);
|
|
731
|
+
const batchPromise2 = Promise.resolve(values);
|
|
732
|
+
batchPromise2.status = "fulfilled";
|
|
733
|
+
batchPromise2.value = values;
|
|
734
|
+
this.batchPromises.set(key, {
|
|
735
|
+
promises: currentPromises,
|
|
736
|
+
promise: batchPromise2
|
|
737
|
+
});
|
|
738
|
+
return batchPromise2;
|
|
739
|
+
}
|
|
740
|
+
if (cached) {
|
|
741
|
+
return cached.promise;
|
|
742
|
+
}
|
|
743
|
+
const batchPromise = Promise.all(currentPromises);
|
|
744
|
+
this.batchPromises.set(key, {
|
|
745
|
+
promises: currentPromises,
|
|
746
|
+
promise: batchPromise
|
|
747
|
+
});
|
|
748
|
+
return batchPromise;
|
|
749
|
+
}
|
|
750
|
+
subscribe(id, callback) {
|
|
751
|
+
const ids = Array.isArray(id) ? id : [id];
|
|
752
|
+
for (const id2 of ids) {
|
|
753
|
+
const listeners = this.listeners.get(id2) ?? [];
|
|
754
|
+
this.listeners.set(id2, [...listeners, callback]);
|
|
755
|
+
}
|
|
756
|
+
return () => {
|
|
757
|
+
for (const id2 of ids) {
|
|
758
|
+
const listeners = this.listeners.get(id2) ?? [];
|
|
759
|
+
this.listeners.set(id2, listeners.filter((listener) => listener !== callback));
|
|
760
|
+
}
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
// src/hooks/document-cache.ts
|
|
766
|
+
var documentEventFunctions = makePHEventFunctions("documentCache");
|
|
767
|
+
var useDocumentCache = documentEventFunctions.useValue;
|
|
768
|
+
var setDocumentCache = documentEventFunctions.setValue;
|
|
769
|
+
var addDocumentCacheEventHandler = documentEventFunctions.addEventHandler;
|
|
770
|
+
function getDocumentQueryState(promise) {
|
|
771
|
+
const state = readPromiseState(promise);
|
|
772
|
+
switch (state.status) {
|
|
773
|
+
case "pending":
|
|
774
|
+
return {
|
|
775
|
+
status: "pending",
|
|
776
|
+
isPending: true,
|
|
777
|
+
error: undefined,
|
|
778
|
+
data: undefined
|
|
779
|
+
};
|
|
780
|
+
case "fulfilled":
|
|
781
|
+
return {
|
|
782
|
+
status: "success",
|
|
783
|
+
isPending: false,
|
|
784
|
+
error: undefined,
|
|
785
|
+
data: state.value
|
|
786
|
+
};
|
|
787
|
+
case "rejected":
|
|
788
|
+
return {
|
|
789
|
+
status: "error",
|
|
790
|
+
isPending: false,
|
|
791
|
+
error: state.reason,
|
|
792
|
+
data: undefined
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
function useDocument(id) {
|
|
797
|
+
const documentCache = useDocumentCache();
|
|
798
|
+
const document = useSyncExternalStore2((cb) => id && documentCache ? documentCache.subscribe(id, cb) : () => {}, () => id ? documentCache?.get(id) : undefined);
|
|
799
|
+
return document ? use(document) : undefined;
|
|
800
|
+
}
|
|
801
|
+
function useDocuments(ids) {
|
|
802
|
+
const documentCache = useDocumentCache();
|
|
803
|
+
const documents = useSyncExternalStore2((cb) => ids?.length && documentCache ? documentCache.subscribe(ids, cb) : () => {}, () => ids?.length && documentCache ? documentCache.getBatch(ids) : undefined);
|
|
804
|
+
return documents ? use(documents) : [];
|
|
805
|
+
}
|
|
806
|
+
function useGetDocument() {
|
|
807
|
+
const documentCache = useDocumentCache();
|
|
808
|
+
return useCallback((id) => {
|
|
809
|
+
if (!documentCache) {
|
|
810
|
+
return Promise.reject(new Error("Document cache not initialized"));
|
|
811
|
+
}
|
|
812
|
+
return documentCache.get(id);
|
|
813
|
+
}, [documentCache]);
|
|
814
|
+
}
|
|
815
|
+
function useGetDocuments() {
|
|
816
|
+
const documentCache = useDocumentCache();
|
|
817
|
+
return useCallback((ids) => {
|
|
818
|
+
if (!documentCache) {
|
|
819
|
+
return Promise.reject(new Error("Document cache not initialized"));
|
|
820
|
+
}
|
|
821
|
+
return documentCache.getBatch(ids);
|
|
822
|
+
}, [documentCache]);
|
|
823
|
+
}
|
|
824
|
+
function useGetDocumentAsync(id) {
|
|
825
|
+
const documentCache = useDocumentCache();
|
|
826
|
+
if (!id || !documentCache) {
|
|
827
|
+
return {
|
|
828
|
+
status: "initial",
|
|
829
|
+
data: undefined,
|
|
830
|
+
isPending: false,
|
|
831
|
+
error: undefined,
|
|
832
|
+
reload: undefined
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
const promise = documentCache.get(id);
|
|
836
|
+
const state = getDocumentQueryState(promise);
|
|
837
|
+
return { ...state, reload: () => documentCache.get(id, true) };
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
// src/hooks/drives.ts
|
|
841
|
+
var drivesEventFunctions = makePHEventFunctions("drives");
|
|
842
|
+
var useDrives = drivesEventFunctions.useValue;
|
|
843
|
+
var setDrives = drivesEventFunctions.setValue;
|
|
844
|
+
var addDrivesEventHandler = drivesEventFunctions.addEventHandler;
|
|
845
|
+
|
|
846
|
+
// src/hooks/loading.ts
|
|
847
|
+
var {
|
|
848
|
+
useValue: useLoading,
|
|
849
|
+
setValue: setLoading,
|
|
850
|
+
addEventHandler: addLoadingEventHandler
|
|
851
|
+
} = makePHEventFunctions("loading");
|
|
852
|
+
|
|
853
|
+
// src/hooks/modals.ts
|
|
854
|
+
var modalEventFunctions = makePHEventFunctions("modal");
|
|
855
|
+
var usePHModal = modalEventFunctions.useValue;
|
|
856
|
+
var setPHModal = modalEventFunctions.setValue;
|
|
857
|
+
var addModalEventHandler = modalEventFunctions.addEventHandler;
|
|
858
|
+
function showPHModal(modal) {
|
|
859
|
+
setPHModal(modal);
|
|
860
|
+
}
|
|
861
|
+
function closePHModal() {
|
|
862
|
+
setPHModal(undefined);
|
|
863
|
+
}
|
|
864
|
+
function showCreateDocumentModal(documentType) {
|
|
865
|
+
setPHModal({ type: "createDocument", documentType });
|
|
866
|
+
}
|
|
867
|
+
function showDeleteNodeModal(nodeOrId) {
|
|
868
|
+
const id = typeof nodeOrId === "string" ? nodeOrId : nodeOrId.id;
|
|
869
|
+
setPHModal({ type: "deleteItem", id });
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
// src/hooks/reactor.ts
|
|
873
|
+
var reactorClientModuleEventFunctions = makePHEventFunctions("reactorClientModule");
|
|
874
|
+
var reactorClientEventFunctions = makePHEventFunctions("reactorClient");
|
|
875
|
+
var useReactorClientModule = reactorClientModuleEventFunctions.useValue;
|
|
876
|
+
var setReactorClientModule = reactorClientModuleEventFunctions.setValue;
|
|
877
|
+
var addReactorClientModuleEventHandler = reactorClientModuleEventFunctions.addEventHandler;
|
|
878
|
+
var useReactorClient = reactorClientEventFunctions.useValue;
|
|
879
|
+
var setReactorClient = reactorClientEventFunctions.setValue;
|
|
880
|
+
var addReactorClientEventHandler = reactorClientEventFunctions.addEventHandler;
|
|
881
|
+
var useSync = () => useReactorClientModule()?.reactorModule?.syncModule?.syncManager;
|
|
882
|
+
var useSyncList = () => {
|
|
883
|
+
const sync = useSync();
|
|
884
|
+
return sync?.list() ?? [];
|
|
885
|
+
};
|
|
886
|
+
var useModelRegistry = () => useReactorClientModule()?.reactorModule?.documentModelRegistry;
|
|
887
|
+
var useDatabase = () => useReactorClientModule()?.reactorModule?.database;
|
|
888
|
+
var usePGlite = () => useReactorClientModule()?.pg;
|
|
889
|
+
|
|
890
|
+
// src/hooks/renown.ts
|
|
891
|
+
import { useEffect, useState } from "react";
|
|
892
|
+
var renownEventFunctions = makePHEventFunctions("renown");
|
|
893
|
+
var useRenown = renownEventFunctions.useValue;
|
|
894
|
+
var setRenown = renownEventFunctions.setValue;
|
|
895
|
+
function useDid() {
|
|
896
|
+
const renown = useRenown();
|
|
897
|
+
return renown?.did;
|
|
898
|
+
}
|
|
899
|
+
function useUser() {
|
|
900
|
+
const renown = useRenown();
|
|
901
|
+
const [user, setUser] = useState(() => renown?.user);
|
|
902
|
+
useEffect(() => {
|
|
903
|
+
setUser(renown?.user);
|
|
904
|
+
if (!renown)
|
|
905
|
+
return;
|
|
906
|
+
return renown.on("user", setUser);
|
|
907
|
+
}, [renown]);
|
|
908
|
+
return user;
|
|
909
|
+
}
|
|
910
|
+
function useLoginStatus() {
|
|
911
|
+
const renown = useRenown();
|
|
912
|
+
const [status, setStatus] = useState(() => renown ? renown.status : "initializing");
|
|
913
|
+
useEffect(() => {
|
|
914
|
+
setStatus(renown ? renown.status : "initializing");
|
|
915
|
+
if (!renown)
|
|
916
|
+
return;
|
|
917
|
+
return renown.on("status", setStatus);
|
|
918
|
+
}, [renown]);
|
|
919
|
+
return status;
|
|
920
|
+
}
|
|
921
|
+
var addRenownEventHandler = renownEventFunctions.addEventHandler;
|
|
922
|
+
|
|
923
|
+
// src/hooks/revision-history.ts
|
|
924
|
+
var revisionHistoryEventFunctions = makePHEventFunctions("revisionHistoryVisible");
|
|
925
|
+
var useRevisionHistoryVisible = revisionHistoryEventFunctions.useValue;
|
|
926
|
+
var setRevisionHistoryVisible = revisionHistoryEventFunctions.setValue;
|
|
927
|
+
var addRevisionHistoryVisibleEventHandler = revisionHistoryEventFunctions.addEventHandler;
|
|
928
|
+
function showRevisionHistory() {
|
|
929
|
+
setRevisionHistoryVisible(true);
|
|
930
|
+
}
|
|
931
|
+
function hideRevisionHistory() {
|
|
932
|
+
setRevisionHistoryVisible(false);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
// ../../node_modules/.pnpm/slug@11.0.1/node_modules/slug/slug.js
|
|
936
|
+
var base64;
|
|
937
|
+
if (typeof window !== "undefined") {
|
|
938
|
+
if (window.btoa) {
|
|
939
|
+
base64 = function(input) {
|
|
940
|
+
return btoa(unescape(encodeURIComponent(input)));
|
|
941
|
+
};
|
|
942
|
+
} else {
|
|
943
|
+
base64 = function(input) {
|
|
944
|
+
const str = unescape(encodeURIComponent(input + ""));
|
|
945
|
+
let output = "";
|
|
946
|
+
for (let block, charCode, idx = 0, map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";str.charAt(idx | 0) || (map = "=", idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) {
|
|
947
|
+
charCode = str.charCodeAt(idx += 3 / 4);
|
|
948
|
+
if (charCode > 255) {
|
|
949
|
+
throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
|
|
950
|
+
}
|
|
951
|
+
block = block << 8 | charCode;
|
|
952
|
+
}
|
|
953
|
+
return output;
|
|
954
|
+
};
|
|
955
|
+
}
|
|
956
|
+
} else {
|
|
957
|
+
base64 = function(input) {
|
|
958
|
+
return Buffer.from(input).toString("base64");
|
|
959
|
+
};
|
|
960
|
+
}
|
|
961
|
+
function slug(string, opts) {
|
|
962
|
+
let result = slugify(string, opts);
|
|
963
|
+
const fallback = opts && opts.fallback !== undefined ? opts.fallback : slug.defaults.fallback;
|
|
964
|
+
if (fallback === true && result === "") {
|
|
965
|
+
result = slugify(base64(string), opts);
|
|
966
|
+
}
|
|
967
|
+
return result;
|
|
968
|
+
}
|
|
969
|
+
var locales = {
|
|
970
|
+
bg: { Й: "Y", й: "y", X: "H", x: "h", Ц: "Ts", ц: "ts", Щ: "Sht", щ: "sht", Ъ: "A", ъ: "a", Ь: "Y", ь: "y" },
|
|
971
|
+
de: { Ä: "AE", ä: "ae", Ö: "OE", ö: "oe", Ü: "UE", ü: "ue" },
|
|
972
|
+
sr: { đ: "dj", Đ: "DJ" },
|
|
973
|
+
uk: { И: "Y", и: "y", Й: "Y", й: "y", Ц: "Ts", ц: "ts", Х: "Kh", х: "kh", Щ: "Shch", щ: "shch", Г: "H", г: "h" }
|
|
974
|
+
};
|
|
975
|
+
var defaultLocale = {};
|
|
976
|
+
function slugify(string, opts) {
|
|
977
|
+
if (typeof string !== "string") {
|
|
978
|
+
throw new Error("slug() requires a string argument, received " + typeof string);
|
|
979
|
+
}
|
|
980
|
+
if (!string.isWellFormed()) {
|
|
981
|
+
throw new Error("slug() received a malformed string with lone surrogates");
|
|
982
|
+
}
|
|
983
|
+
if (typeof opts === "string") {
|
|
984
|
+
opts = { replacement: opts };
|
|
985
|
+
}
|
|
986
|
+
opts = opts ? Object.assign({}, opts) : {};
|
|
987
|
+
opts.mode = opts.mode || slug.defaults.mode;
|
|
988
|
+
const defaults = slug.defaults.modes[opts.mode];
|
|
989
|
+
const keys = ["replacement", "multicharmap", "charmap", "remove", "lower", "trim"];
|
|
990
|
+
for (let key, i = 0, l = keys.length;i < l; i++) {
|
|
991
|
+
key = keys[i];
|
|
992
|
+
opts[key] = key in opts ? opts[key] : defaults[key];
|
|
993
|
+
}
|
|
994
|
+
const localeMap = locales[opts.locale] || defaultLocale;
|
|
995
|
+
let lengths = [];
|
|
996
|
+
for (const key in opts.multicharmap) {
|
|
997
|
+
if (!Object.prototype.hasOwnProperty.call(opts.multicharmap, key)) {
|
|
998
|
+
continue;
|
|
999
|
+
}
|
|
1000
|
+
const len = key.length;
|
|
1001
|
+
if (lengths.indexOf(len) === -1) {
|
|
1002
|
+
lengths.push(len);
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
lengths = lengths.sort(function(a, b) {
|
|
1006
|
+
return b - a;
|
|
1007
|
+
});
|
|
1008
|
+
const disallowedChars = opts.mode === "rfc3986" ? /[^\w\s\-.~]/ : /[^A-Za-z0-9\s]/;
|
|
1009
|
+
let result = "";
|
|
1010
|
+
for (let char, i = 0, l = string.length;i < l; i++) {
|
|
1011
|
+
char = string[i];
|
|
1012
|
+
let matchedMultichar = false;
|
|
1013
|
+
for (let j = 0;j < lengths.length; j++) {
|
|
1014
|
+
const len = lengths[j];
|
|
1015
|
+
const str = string.substr(i, len);
|
|
1016
|
+
if (opts.multicharmap[str]) {
|
|
1017
|
+
i += len - 1;
|
|
1018
|
+
char = opts.multicharmap[str];
|
|
1019
|
+
matchedMultichar = true;
|
|
1020
|
+
break;
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
if (!matchedMultichar) {
|
|
1024
|
+
if (localeMap[char]) {
|
|
1025
|
+
char = localeMap[char];
|
|
1026
|
+
} else if (opts.charmap[char]) {
|
|
1027
|
+
char = opts.charmap[char].replace(opts.replacement, " ");
|
|
1028
|
+
} else if (char.includes(opts.replacement)) {
|
|
1029
|
+
char = char.replace(opts.replacement, " ");
|
|
1030
|
+
} else {
|
|
1031
|
+
char = char.replace(disallowedChars, "");
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
result += char;
|
|
1035
|
+
}
|
|
1036
|
+
if (opts.remove) {
|
|
1037
|
+
result = result.replace(opts.remove, "");
|
|
1038
|
+
}
|
|
1039
|
+
if (opts.trim) {
|
|
1040
|
+
result = result.trim();
|
|
1041
|
+
}
|
|
1042
|
+
result = result.replace(/\s+/g, opts.replacement);
|
|
1043
|
+
if (opts.lower) {
|
|
1044
|
+
result = result.toLowerCase();
|
|
1045
|
+
}
|
|
1046
|
+
return result;
|
|
1047
|
+
}
|
|
1048
|
+
var initialMulticharmap = {
|
|
1049
|
+
फ़: "Fi",
|
|
1050
|
+
ग़: "Ghi",
|
|
1051
|
+
ख़: "Khi",
|
|
1052
|
+
क़: "Qi",
|
|
1053
|
+
ड़: "ugDha",
|
|
1054
|
+
ढ़: "ugDhha",
|
|
1055
|
+
य़: "Yi",
|
|
1056
|
+
ज़: "Za",
|
|
1057
|
+
בִי: "i",
|
|
1058
|
+
בֵ: "e",
|
|
1059
|
+
בֵי: "e",
|
|
1060
|
+
בֶ: "e",
|
|
1061
|
+
בַ: "a",
|
|
1062
|
+
בָ: "a",
|
|
1063
|
+
בֹ: "o",
|
|
1064
|
+
וֹ: "o",
|
|
1065
|
+
בֻ: "u",
|
|
1066
|
+
וּ: "u",
|
|
1067
|
+
בּ: "b",
|
|
1068
|
+
כּ: "k",
|
|
1069
|
+
ךּ: "k",
|
|
1070
|
+
פּ: "p",
|
|
1071
|
+
שׁ: "sh",
|
|
1072
|
+
שׂ: "s",
|
|
1073
|
+
בְ: "e",
|
|
1074
|
+
חֱ: "e",
|
|
1075
|
+
חֲ: "a",
|
|
1076
|
+
חֳ: "o",
|
|
1077
|
+
בִ: "i"
|
|
1078
|
+
};
|
|
1079
|
+
var initialCharmap = {
|
|
1080
|
+
À: "A",
|
|
1081
|
+
Á: "A",
|
|
1082
|
+
Â: "A",
|
|
1083
|
+
Ã: "A",
|
|
1084
|
+
Ä: "A",
|
|
1085
|
+
Å: "A",
|
|
1086
|
+
Æ: "AE",
|
|
1087
|
+
Ç: "C",
|
|
1088
|
+
È: "E",
|
|
1089
|
+
É: "E",
|
|
1090
|
+
Ê: "E",
|
|
1091
|
+
Ë: "E",
|
|
1092
|
+
Ì: "I",
|
|
1093
|
+
Í: "I",
|
|
1094
|
+
Î: "I",
|
|
1095
|
+
Ï: "I",
|
|
1096
|
+
Ð: "D",
|
|
1097
|
+
Ñ: "N",
|
|
1098
|
+
Ò: "O",
|
|
1099
|
+
Ó: "O",
|
|
1100
|
+
Ô: "O",
|
|
1101
|
+
Õ: "O",
|
|
1102
|
+
Ö: "O",
|
|
1103
|
+
Ő: "O",
|
|
1104
|
+
Ø: "O",
|
|
1105
|
+
Ō: "O",
|
|
1106
|
+
Ù: "U",
|
|
1107
|
+
Ú: "U",
|
|
1108
|
+
Û: "U",
|
|
1109
|
+
Ü: "U",
|
|
1110
|
+
Ű: "U",
|
|
1111
|
+
Ý: "Y",
|
|
1112
|
+
Þ: "TH",
|
|
1113
|
+
ß: "ss",
|
|
1114
|
+
à: "a",
|
|
1115
|
+
á: "a",
|
|
1116
|
+
â: "a",
|
|
1117
|
+
ã: "a",
|
|
1118
|
+
ä: "a",
|
|
1119
|
+
å: "a",
|
|
1120
|
+
æ: "ae",
|
|
1121
|
+
ç: "c",
|
|
1122
|
+
è: "e",
|
|
1123
|
+
é: "e",
|
|
1124
|
+
ê: "e",
|
|
1125
|
+
ë: "e",
|
|
1126
|
+
ì: "i",
|
|
1127
|
+
í: "i",
|
|
1128
|
+
î: "i",
|
|
1129
|
+
ï: "i",
|
|
1130
|
+
ð: "d",
|
|
1131
|
+
ñ: "n",
|
|
1132
|
+
ò: "o",
|
|
1133
|
+
ó: "o",
|
|
1134
|
+
ô: "o",
|
|
1135
|
+
õ: "o",
|
|
1136
|
+
ö: "o",
|
|
1137
|
+
ő: "o",
|
|
1138
|
+
ø: "o",
|
|
1139
|
+
ō: "o",
|
|
1140
|
+
Œ: "OE",
|
|
1141
|
+
œ: "oe",
|
|
1142
|
+
ù: "u",
|
|
1143
|
+
ú: "u",
|
|
1144
|
+
û: "u",
|
|
1145
|
+
ü: "u",
|
|
1146
|
+
ű: "u",
|
|
1147
|
+
ý: "y",
|
|
1148
|
+
þ: "th",
|
|
1149
|
+
ÿ: "y",
|
|
1150
|
+
ẞ: "SS",
|
|
1151
|
+
α: "a",
|
|
1152
|
+
β: "b",
|
|
1153
|
+
γ: "g",
|
|
1154
|
+
δ: "d",
|
|
1155
|
+
ε: "e",
|
|
1156
|
+
ζ: "z",
|
|
1157
|
+
η: "h",
|
|
1158
|
+
θ: "th",
|
|
1159
|
+
ι: "i",
|
|
1160
|
+
κ: "k",
|
|
1161
|
+
λ: "l",
|
|
1162
|
+
μ: "m",
|
|
1163
|
+
ν: "n",
|
|
1164
|
+
ξ: "3",
|
|
1165
|
+
ο: "o",
|
|
1166
|
+
π: "p",
|
|
1167
|
+
ρ: "r",
|
|
1168
|
+
σ: "s",
|
|
1169
|
+
τ: "t",
|
|
1170
|
+
υ: "y",
|
|
1171
|
+
φ: "f",
|
|
1172
|
+
χ: "x",
|
|
1173
|
+
ψ: "ps",
|
|
1174
|
+
ω: "w",
|
|
1175
|
+
ά: "a",
|
|
1176
|
+
έ: "e",
|
|
1177
|
+
ί: "i",
|
|
1178
|
+
ό: "o",
|
|
1179
|
+
ύ: "y",
|
|
1180
|
+
ή: "h",
|
|
1181
|
+
ώ: "w",
|
|
1182
|
+
ς: "s",
|
|
1183
|
+
ϊ: "i",
|
|
1184
|
+
ΰ: "y",
|
|
1185
|
+
ϋ: "y",
|
|
1186
|
+
ΐ: "i",
|
|
1187
|
+
Α: "A",
|
|
1188
|
+
Β: "B",
|
|
1189
|
+
Γ: "G",
|
|
1190
|
+
Δ: "D",
|
|
1191
|
+
Ε: "E",
|
|
1192
|
+
Ζ: "Z",
|
|
1193
|
+
Η: "H",
|
|
1194
|
+
Θ: "Th",
|
|
1195
|
+
Ι: "I",
|
|
1196
|
+
Κ: "K",
|
|
1197
|
+
Λ: "L",
|
|
1198
|
+
Μ: "M",
|
|
1199
|
+
Ν: "N",
|
|
1200
|
+
Ξ: "3",
|
|
1201
|
+
Ο: "O",
|
|
1202
|
+
Π: "P",
|
|
1203
|
+
Ρ: "R",
|
|
1204
|
+
Σ: "S",
|
|
1205
|
+
Τ: "T",
|
|
1206
|
+
Υ: "Y",
|
|
1207
|
+
Φ: "F",
|
|
1208
|
+
Χ: "X",
|
|
1209
|
+
Ψ: "PS",
|
|
1210
|
+
Ω: "W",
|
|
1211
|
+
Ά: "A",
|
|
1212
|
+
Έ: "E",
|
|
1213
|
+
Ί: "I",
|
|
1214
|
+
Ό: "O",
|
|
1215
|
+
Ύ: "Y",
|
|
1216
|
+
Ή: "H",
|
|
1217
|
+
Ώ: "W",
|
|
1218
|
+
Ϊ: "I",
|
|
1219
|
+
Ϋ: "Y",
|
|
1220
|
+
ş: "s",
|
|
1221
|
+
Ş: "S",
|
|
1222
|
+
ı: "i",
|
|
1223
|
+
İ: "I",
|
|
1224
|
+
ğ: "g",
|
|
1225
|
+
Ğ: "G",
|
|
1226
|
+
а: "a",
|
|
1227
|
+
б: "b",
|
|
1228
|
+
в: "v",
|
|
1229
|
+
г: "g",
|
|
1230
|
+
д: "d",
|
|
1231
|
+
е: "e",
|
|
1232
|
+
ё: "yo",
|
|
1233
|
+
ж: "zh",
|
|
1234
|
+
з: "z",
|
|
1235
|
+
и: "i",
|
|
1236
|
+
й: "j",
|
|
1237
|
+
к: "k",
|
|
1238
|
+
л: "l",
|
|
1239
|
+
м: "m",
|
|
1240
|
+
н: "n",
|
|
1241
|
+
о: "o",
|
|
1242
|
+
п: "p",
|
|
1243
|
+
р: "r",
|
|
1244
|
+
с: "s",
|
|
1245
|
+
т: "t",
|
|
1246
|
+
у: "u",
|
|
1247
|
+
ф: "f",
|
|
1248
|
+
х: "h",
|
|
1249
|
+
ц: "c",
|
|
1250
|
+
ч: "ch",
|
|
1251
|
+
ш: "sh",
|
|
1252
|
+
щ: "sh",
|
|
1253
|
+
ъ: "u",
|
|
1254
|
+
ы: "y",
|
|
1255
|
+
ь: "",
|
|
1256
|
+
э: "e",
|
|
1257
|
+
ю: "yu",
|
|
1258
|
+
я: "ya",
|
|
1259
|
+
А: "A",
|
|
1260
|
+
Б: "B",
|
|
1261
|
+
В: "V",
|
|
1262
|
+
Г: "G",
|
|
1263
|
+
Д: "D",
|
|
1264
|
+
Е: "E",
|
|
1265
|
+
Ё: "Yo",
|
|
1266
|
+
Ж: "Zh",
|
|
1267
|
+
З: "Z",
|
|
1268
|
+
И: "I",
|
|
1269
|
+
Й: "J",
|
|
1270
|
+
К: "K",
|
|
1271
|
+
Л: "L",
|
|
1272
|
+
М: "M",
|
|
1273
|
+
Н: "N",
|
|
1274
|
+
О: "O",
|
|
1275
|
+
П: "P",
|
|
1276
|
+
Р: "R",
|
|
1277
|
+
С: "S",
|
|
1278
|
+
Т: "T",
|
|
1279
|
+
У: "U",
|
|
1280
|
+
Ф: "F",
|
|
1281
|
+
Х: "H",
|
|
1282
|
+
Ц: "C",
|
|
1283
|
+
Ч: "Ch",
|
|
1284
|
+
Ш: "Sh",
|
|
1285
|
+
Щ: "Sh",
|
|
1286
|
+
Ъ: "U",
|
|
1287
|
+
Ы: "Y",
|
|
1288
|
+
Ь: "",
|
|
1289
|
+
Э: "E",
|
|
1290
|
+
Ю: "Yu",
|
|
1291
|
+
Я: "Ya",
|
|
1292
|
+
Є: "Ye",
|
|
1293
|
+
І: "I",
|
|
1294
|
+
Ї: "Yi",
|
|
1295
|
+
Ґ: "G",
|
|
1296
|
+
є: "ye",
|
|
1297
|
+
і: "i",
|
|
1298
|
+
ї: "yi",
|
|
1299
|
+
ґ: "g",
|
|
1300
|
+
č: "c",
|
|
1301
|
+
ď: "d",
|
|
1302
|
+
ě: "e",
|
|
1303
|
+
ň: "n",
|
|
1304
|
+
ř: "r",
|
|
1305
|
+
š: "s",
|
|
1306
|
+
ť: "t",
|
|
1307
|
+
ů: "u",
|
|
1308
|
+
ž: "z",
|
|
1309
|
+
Č: "C",
|
|
1310
|
+
Ď: "D",
|
|
1311
|
+
Ě: "E",
|
|
1312
|
+
Ň: "N",
|
|
1313
|
+
Ř: "R",
|
|
1314
|
+
Š: "S",
|
|
1315
|
+
Ť: "T",
|
|
1316
|
+
Ů: "U",
|
|
1317
|
+
Ž: "Z",
|
|
1318
|
+
ľ: "l",
|
|
1319
|
+
ĺ: "l",
|
|
1320
|
+
ŕ: "r",
|
|
1321
|
+
Ľ: "L",
|
|
1322
|
+
Ĺ: "L",
|
|
1323
|
+
Ŕ: "R",
|
|
1324
|
+
ą: "a",
|
|
1325
|
+
ć: "c",
|
|
1326
|
+
ę: "e",
|
|
1327
|
+
ł: "l",
|
|
1328
|
+
ń: "n",
|
|
1329
|
+
ś: "s",
|
|
1330
|
+
ź: "z",
|
|
1331
|
+
ż: "z",
|
|
1332
|
+
Ą: "A",
|
|
1333
|
+
Ć: "C",
|
|
1334
|
+
Ę: "E",
|
|
1335
|
+
Ł: "L",
|
|
1336
|
+
Ń: "N",
|
|
1337
|
+
Ś: "S",
|
|
1338
|
+
Ź: "Z",
|
|
1339
|
+
Ż: "Z",
|
|
1340
|
+
ā: "a",
|
|
1341
|
+
ē: "e",
|
|
1342
|
+
ģ: "g",
|
|
1343
|
+
ī: "i",
|
|
1344
|
+
ķ: "k",
|
|
1345
|
+
ļ: "l",
|
|
1346
|
+
ņ: "n",
|
|
1347
|
+
ū: "u",
|
|
1348
|
+
Ā: "A",
|
|
1349
|
+
Ē: "E",
|
|
1350
|
+
Ģ: "G",
|
|
1351
|
+
Ī: "I",
|
|
1352
|
+
Ķ: "K",
|
|
1353
|
+
Ļ: "L",
|
|
1354
|
+
Ņ: "N",
|
|
1355
|
+
Ū: "U",
|
|
1356
|
+
أ: "a",
|
|
1357
|
+
إ: "i",
|
|
1358
|
+
ب: "b",
|
|
1359
|
+
ت: "t",
|
|
1360
|
+
ث: "th",
|
|
1361
|
+
ج: "g",
|
|
1362
|
+
ح: "h",
|
|
1363
|
+
خ: "kh",
|
|
1364
|
+
د: "d",
|
|
1365
|
+
ذ: "th",
|
|
1366
|
+
ر: "r",
|
|
1367
|
+
ز: "z",
|
|
1368
|
+
س: "s",
|
|
1369
|
+
ش: "sh",
|
|
1370
|
+
ص: "s",
|
|
1371
|
+
ض: "d",
|
|
1372
|
+
ط: "t",
|
|
1373
|
+
ظ: "th",
|
|
1374
|
+
ع: "aa",
|
|
1375
|
+
غ: "gh",
|
|
1376
|
+
ف: "f",
|
|
1377
|
+
ق: "k",
|
|
1378
|
+
ك: "k",
|
|
1379
|
+
ل: "l",
|
|
1380
|
+
م: "m",
|
|
1381
|
+
ن: "n",
|
|
1382
|
+
ه: "h",
|
|
1383
|
+
و: "o",
|
|
1384
|
+
ي: "y",
|
|
1385
|
+
ء: "aa",
|
|
1386
|
+
ة: "a",
|
|
1387
|
+
آ: "a",
|
|
1388
|
+
ا: "a",
|
|
1389
|
+
پ: "p",
|
|
1390
|
+
ژ: "zh",
|
|
1391
|
+
گ: "g",
|
|
1392
|
+
چ: "ch",
|
|
1393
|
+
ک: "k",
|
|
1394
|
+
ی: "i",
|
|
1395
|
+
ė: "e",
|
|
1396
|
+
į: "i",
|
|
1397
|
+
ų: "u",
|
|
1398
|
+
Ė: "E",
|
|
1399
|
+
Į: "I",
|
|
1400
|
+
Ų: "U",
|
|
1401
|
+
ț: "t",
|
|
1402
|
+
Ț: "T",
|
|
1403
|
+
ţ: "t",
|
|
1404
|
+
Ţ: "T",
|
|
1405
|
+
ș: "s",
|
|
1406
|
+
Ș: "S",
|
|
1407
|
+
ă: "a",
|
|
1408
|
+
Ă: "A",
|
|
1409
|
+
Ạ: "A",
|
|
1410
|
+
Ả: "A",
|
|
1411
|
+
Ầ: "A",
|
|
1412
|
+
Ấ: "A",
|
|
1413
|
+
Ậ: "A",
|
|
1414
|
+
Ẩ: "A",
|
|
1415
|
+
Ẫ: "A",
|
|
1416
|
+
Ằ: "A",
|
|
1417
|
+
Ắ: "A",
|
|
1418
|
+
Ặ: "A",
|
|
1419
|
+
Ẳ: "A",
|
|
1420
|
+
Ẵ: "A",
|
|
1421
|
+
Ẹ: "E",
|
|
1422
|
+
Ẻ: "E",
|
|
1423
|
+
Ẽ: "E",
|
|
1424
|
+
Ề: "E",
|
|
1425
|
+
Ế: "E",
|
|
1426
|
+
Ệ: "E",
|
|
1427
|
+
Ể: "E",
|
|
1428
|
+
Ễ: "E",
|
|
1429
|
+
Ị: "I",
|
|
1430
|
+
Ỉ: "I",
|
|
1431
|
+
Ĩ: "I",
|
|
1432
|
+
Ọ: "O",
|
|
1433
|
+
Ỏ: "O",
|
|
1434
|
+
Ồ: "O",
|
|
1435
|
+
Ố: "O",
|
|
1436
|
+
Ộ: "O",
|
|
1437
|
+
Ổ: "O",
|
|
1438
|
+
Ỗ: "O",
|
|
1439
|
+
Ơ: "O",
|
|
1440
|
+
Ờ: "O",
|
|
1441
|
+
Ớ: "O",
|
|
1442
|
+
Ợ: "O",
|
|
1443
|
+
Ở: "O",
|
|
1444
|
+
Ỡ: "O",
|
|
1445
|
+
Ụ: "U",
|
|
1446
|
+
Ủ: "U",
|
|
1447
|
+
Ũ: "U",
|
|
1448
|
+
Ư: "U",
|
|
1449
|
+
Ừ: "U",
|
|
1450
|
+
Ứ: "U",
|
|
1451
|
+
Ự: "U",
|
|
1452
|
+
Ử: "U",
|
|
1453
|
+
Ữ: "U",
|
|
1454
|
+
Ỳ: "Y",
|
|
1455
|
+
Ỵ: "Y",
|
|
1456
|
+
Ỷ: "Y",
|
|
1457
|
+
Ỹ: "Y",
|
|
1458
|
+
Đ: "D",
|
|
1459
|
+
ạ: "a",
|
|
1460
|
+
ả: "a",
|
|
1461
|
+
ầ: "a",
|
|
1462
|
+
ấ: "a",
|
|
1463
|
+
ậ: "a",
|
|
1464
|
+
ẩ: "a",
|
|
1465
|
+
ẫ: "a",
|
|
1466
|
+
ằ: "a",
|
|
1467
|
+
ắ: "a",
|
|
1468
|
+
ặ: "a",
|
|
1469
|
+
ẳ: "a",
|
|
1470
|
+
ẵ: "a",
|
|
1471
|
+
ẹ: "e",
|
|
1472
|
+
ẻ: "e",
|
|
1473
|
+
ẽ: "e",
|
|
1474
|
+
ề: "e",
|
|
1475
|
+
ế: "e",
|
|
1476
|
+
ệ: "e",
|
|
1477
|
+
ể: "e",
|
|
1478
|
+
ễ: "e",
|
|
1479
|
+
ị: "i",
|
|
1480
|
+
ỉ: "i",
|
|
1481
|
+
ĩ: "i",
|
|
1482
|
+
ọ: "o",
|
|
1483
|
+
ỏ: "o",
|
|
1484
|
+
ồ: "o",
|
|
1485
|
+
ố: "o",
|
|
1486
|
+
ộ: "o",
|
|
1487
|
+
ổ: "o",
|
|
1488
|
+
ỗ: "o",
|
|
1489
|
+
ơ: "o",
|
|
1490
|
+
ờ: "o",
|
|
1491
|
+
ớ: "o",
|
|
1492
|
+
ợ: "o",
|
|
1493
|
+
ở: "o",
|
|
1494
|
+
ỡ: "o",
|
|
1495
|
+
ụ: "u",
|
|
1496
|
+
ủ: "u",
|
|
1497
|
+
ũ: "u",
|
|
1498
|
+
ư: "u",
|
|
1499
|
+
ừ: "u",
|
|
1500
|
+
ứ: "u",
|
|
1501
|
+
ự: "u",
|
|
1502
|
+
ử: "u",
|
|
1503
|
+
ữ: "u",
|
|
1504
|
+
ỳ: "y",
|
|
1505
|
+
ỵ: "y",
|
|
1506
|
+
ỷ: "y",
|
|
1507
|
+
ỹ: "y",
|
|
1508
|
+
đ: "d",
|
|
1509
|
+
Ә: "AE",
|
|
1510
|
+
ә: "ae",
|
|
1511
|
+
Ғ: "GH",
|
|
1512
|
+
ғ: "gh",
|
|
1513
|
+
Қ: "KH",
|
|
1514
|
+
қ: "kh",
|
|
1515
|
+
Ң: "NG",
|
|
1516
|
+
ң: "ng",
|
|
1517
|
+
Ү: "UE",
|
|
1518
|
+
ү: "ue",
|
|
1519
|
+
Ұ: "U",
|
|
1520
|
+
ұ: "u",
|
|
1521
|
+
Һ: "H",
|
|
1522
|
+
һ: "h",
|
|
1523
|
+
Ө: "OE",
|
|
1524
|
+
ө: "oe",
|
|
1525
|
+
ђ: "dj",
|
|
1526
|
+
ј: "j",
|
|
1527
|
+
љ: "lj",
|
|
1528
|
+
њ: "nj",
|
|
1529
|
+
ћ: "c",
|
|
1530
|
+
џ: "dz",
|
|
1531
|
+
Ђ: "Dj",
|
|
1532
|
+
Ј: "j",
|
|
1533
|
+
Љ: "Lj",
|
|
1534
|
+
Њ: "Nj",
|
|
1535
|
+
Ћ: "C",
|
|
1536
|
+
Џ: "Dz",
|
|
1537
|
+
nj: "nj",
|
|
1538
|
+
lj: "lj",
|
|
1539
|
+
Nj: "NJ",
|
|
1540
|
+
Lj: "LJ",
|
|
1541
|
+
अ: "a",
|
|
1542
|
+
आ: "aa",
|
|
1543
|
+
ए: "e",
|
|
1544
|
+
ई: "ii",
|
|
1545
|
+
ऍ: "ei",
|
|
1546
|
+
ऎ: "ae",
|
|
1547
|
+
ऐ: "ai",
|
|
1548
|
+
इ: "i",
|
|
1549
|
+
ओ: "o",
|
|
1550
|
+
ऑ: "oi",
|
|
1551
|
+
ऒ: "oii",
|
|
1552
|
+
ऊ: "uu",
|
|
1553
|
+
औ: "ou",
|
|
1554
|
+
उ: "u",
|
|
1555
|
+
ब: "B",
|
|
1556
|
+
भ: "Bha",
|
|
1557
|
+
च: "Ca",
|
|
1558
|
+
छ: "Chha",
|
|
1559
|
+
ड: "Da",
|
|
1560
|
+
ढ: "Dha",
|
|
1561
|
+
फ: "Fa",
|
|
1562
|
+
ग: "Ga",
|
|
1563
|
+
घ: "Gha",
|
|
1564
|
+
ग़: "Ghi",
|
|
1565
|
+
ह: "Ha",
|
|
1566
|
+
ज: "Ja",
|
|
1567
|
+
झ: "Jha",
|
|
1568
|
+
क: "Ka",
|
|
1569
|
+
ख: "Kha",
|
|
1570
|
+
ख़: "Khi",
|
|
1571
|
+
ल: "L",
|
|
1572
|
+
ळ: "Li",
|
|
1573
|
+
ऌ: "Li",
|
|
1574
|
+
ऴ: "Lii",
|
|
1575
|
+
ॡ: "Lii",
|
|
1576
|
+
म: "Ma",
|
|
1577
|
+
न: "Na",
|
|
1578
|
+
ङ: "Na",
|
|
1579
|
+
ञ: "Nia",
|
|
1580
|
+
ण: "Nae",
|
|
1581
|
+
ऩ: "Ni",
|
|
1582
|
+
ॐ: "oms",
|
|
1583
|
+
प: "Pa",
|
|
1584
|
+
क़: "Qi",
|
|
1585
|
+
र: "Ra",
|
|
1586
|
+
ऋ: "Ri",
|
|
1587
|
+
ॠ: "Ri",
|
|
1588
|
+
ऱ: "Ri",
|
|
1589
|
+
स: "Sa",
|
|
1590
|
+
श: "Sha",
|
|
1591
|
+
ष: "Shha",
|
|
1592
|
+
ट: "Ta",
|
|
1593
|
+
त: "Ta",
|
|
1594
|
+
ठ: "Tha",
|
|
1595
|
+
द: "Tha",
|
|
1596
|
+
थ: "Tha",
|
|
1597
|
+
ध: "Thha",
|
|
1598
|
+
ड़: "ugDha",
|
|
1599
|
+
ढ़: "ugDhha",
|
|
1600
|
+
व: "Va",
|
|
1601
|
+
य: "Ya",
|
|
1602
|
+
य़: "Yi",
|
|
1603
|
+
ज़: "Za",
|
|
1604
|
+
ə: "e",
|
|
1605
|
+
Ə: "E",
|
|
1606
|
+
ა: "a",
|
|
1607
|
+
ბ: "b",
|
|
1608
|
+
გ: "g",
|
|
1609
|
+
დ: "d",
|
|
1610
|
+
ე: "e",
|
|
1611
|
+
ვ: "v",
|
|
1612
|
+
ზ: "z",
|
|
1613
|
+
თ: "t",
|
|
1614
|
+
ი: "i",
|
|
1615
|
+
კ: "k",
|
|
1616
|
+
ლ: "l",
|
|
1617
|
+
მ: "m",
|
|
1618
|
+
ნ: "n",
|
|
1619
|
+
ო: "o",
|
|
1620
|
+
პ: "p",
|
|
1621
|
+
ჟ: "zh",
|
|
1622
|
+
რ: "r",
|
|
1623
|
+
ს: "s",
|
|
1624
|
+
ტ: "t",
|
|
1625
|
+
უ: "u",
|
|
1626
|
+
ფ: "p",
|
|
1627
|
+
ქ: "k",
|
|
1628
|
+
ღ: "gh",
|
|
1629
|
+
ყ: "q",
|
|
1630
|
+
შ: "sh",
|
|
1631
|
+
ჩ: "ch",
|
|
1632
|
+
ც: "ts",
|
|
1633
|
+
ძ: "dz",
|
|
1634
|
+
წ: "ts",
|
|
1635
|
+
ჭ: "ch",
|
|
1636
|
+
ხ: "kh",
|
|
1637
|
+
ჯ: "j",
|
|
1638
|
+
ჰ: "h",
|
|
1639
|
+
ב: "v",
|
|
1640
|
+
גּ: "g",
|
|
1641
|
+
ג: "g",
|
|
1642
|
+
ד: "d",
|
|
1643
|
+
דּ: "d",
|
|
1644
|
+
ה: "h",
|
|
1645
|
+
ו: "v",
|
|
1646
|
+
ז: "z",
|
|
1647
|
+
ח: "h",
|
|
1648
|
+
ט: "t",
|
|
1649
|
+
י: "y",
|
|
1650
|
+
כ: "kh",
|
|
1651
|
+
ך: "kh",
|
|
1652
|
+
ל: "l",
|
|
1653
|
+
מ: "m",
|
|
1654
|
+
ם: "m",
|
|
1655
|
+
נ: "n",
|
|
1656
|
+
ן: "n",
|
|
1657
|
+
ס: "s",
|
|
1658
|
+
פ: "f",
|
|
1659
|
+
ף: "f",
|
|
1660
|
+
ץ: "ts",
|
|
1661
|
+
צ: "ts",
|
|
1662
|
+
ק: "k",
|
|
1663
|
+
ר: "r",
|
|
1664
|
+
תּ: "t",
|
|
1665
|
+
ת: "t"
|
|
1666
|
+
};
|
|
1667
|
+
slug.charmap = Object.assign({}, initialCharmap);
|
|
1668
|
+
slug.multicharmap = Object.assign({}, initialMulticharmap);
|
|
1669
|
+
slug.defaults = {
|
|
1670
|
+
charmap: slug.charmap,
|
|
1671
|
+
mode: "pretty",
|
|
1672
|
+
modes: {
|
|
1673
|
+
rfc3986: {
|
|
1674
|
+
replacement: "-",
|
|
1675
|
+
remove: null,
|
|
1676
|
+
lower: true,
|
|
1677
|
+
charmap: slug.charmap,
|
|
1678
|
+
multicharmap: slug.multicharmap,
|
|
1679
|
+
trim: true
|
|
1680
|
+
},
|
|
1681
|
+
pretty: {
|
|
1682
|
+
replacement: "-",
|
|
1683
|
+
remove: null,
|
|
1684
|
+
lower: true,
|
|
1685
|
+
charmap: slug.charmap,
|
|
1686
|
+
multicharmap: slug.multicharmap,
|
|
1687
|
+
trim: true
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
multicharmap: slug.multicharmap,
|
|
1691
|
+
fallback: true
|
|
1692
|
+
};
|
|
1693
|
+
slug.reset = function() {
|
|
1694
|
+
slug.defaults.modes.rfc3986.charmap = slug.defaults.modes.pretty.charmap = slug.charmap = slug.defaults.charmap = Object.assign({}, initialCharmap);
|
|
1695
|
+
slug.defaults.modes.rfc3986.multicharmap = slug.defaults.modes.pretty.multicharmap = slug.multicharmap = slug.defaults.multicharmap = Object.assign({}, initialMulticharmap);
|
|
1696
|
+
defaultLocale = "";
|
|
1697
|
+
};
|
|
1698
|
+
slug.extend = function(customMap) {
|
|
1699
|
+
const keys = Object.keys(customMap);
|
|
1700
|
+
const multi = {};
|
|
1701
|
+
const single = {};
|
|
1702
|
+
for (let i = 0;i < keys.length; i++) {
|
|
1703
|
+
if (keys[i].length > 1) {
|
|
1704
|
+
multi[keys[i]] = customMap[keys[i]];
|
|
1705
|
+
} else {
|
|
1706
|
+
single[keys[i]] = customMap[keys[i]];
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
Object.assign(slug.charmap, single);
|
|
1710
|
+
Object.assign(slug.multicharmap, multi);
|
|
1711
|
+
};
|
|
1712
|
+
slug.setLocale = function(locale) {
|
|
1713
|
+
defaultLocale = locales[locale] || {};
|
|
1714
|
+
};
|
|
1715
|
+
var slug_default = slug;
|
|
1716
|
+
|
|
1717
|
+
// src/utils/url.ts
|
|
1718
|
+
function resolveUrlPathname(path) {
|
|
1719
|
+
return new URL(path.replace(/^\/+/, ""), window.location.origin + (window.ph?.basePath ?? "/")).pathname;
|
|
1720
|
+
}
|
|
1721
|
+
function getPathWithoutBase(path) {
|
|
1722
|
+
const basePath = window.ph?.basePath ?? "/";
|
|
1723
|
+
return path.replace(basePath, basePath.endsWith("/") ? "/" : "");
|
|
1724
|
+
}
|
|
1725
|
+
function makeDriveUrlComponent(drive) {
|
|
1726
|
+
if (!drive)
|
|
1727
|
+
return "";
|
|
1728
|
+
return `/d/${slug_default(drive.header.slug)}`;
|
|
1729
|
+
}
|
|
1730
|
+
function makeNodeSlug(node) {
|
|
1731
|
+
if (!node)
|
|
1732
|
+
return "";
|
|
1733
|
+
const nodeName = node.name;
|
|
1734
|
+
if (!nodeName)
|
|
1735
|
+
return slug_default(node.id);
|
|
1736
|
+
return slug_default(`${nodeName}-${node.id}`);
|
|
1737
|
+
}
|
|
1738
|
+
function extractNodeSlugFromPath(path) {
|
|
1739
|
+
const currentPath = getPathWithoutBase(path);
|
|
1740
|
+
const match = /^\/d\/[^/]+\/([^/]+)$/.exec(currentPath);
|
|
1741
|
+
return match?.[1];
|
|
1742
|
+
}
|
|
1743
|
+
function findUuid(input) {
|
|
1744
|
+
if (!input)
|
|
1745
|
+
return;
|
|
1746
|
+
const uuidRegex = /\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/;
|
|
1747
|
+
const match = uuidRegex.exec(input);
|
|
1748
|
+
return match?.[0];
|
|
1749
|
+
}
|
|
1750
|
+
function extractNodeIdFromSlug(nodeSlug) {
|
|
1751
|
+
const nodeId = findUuid(nodeSlug);
|
|
1752
|
+
return nodeId;
|
|
1753
|
+
}
|
|
1754
|
+
function extractNodeIdFromPath(path) {
|
|
1755
|
+
const nodeSlug = extractNodeSlugFromPath(path);
|
|
1756
|
+
const nodeId = extractNodeIdFromSlug(nodeSlug);
|
|
1757
|
+
return nodeId;
|
|
1758
|
+
}
|
|
1759
|
+
function extractDriveSlugFromPath(path) {
|
|
1760
|
+
const currentPath = getPathWithoutBase(path);
|
|
1761
|
+
const match = /^\/d\/([^/]+)/.exec(currentPath);
|
|
1762
|
+
return match?.[1] ?? "";
|
|
1763
|
+
}
|
|
1764
|
+
function extractDriveIdFromSlug(driveSlug) {
|
|
1765
|
+
const driveId = findUuid(driveSlug);
|
|
1766
|
+
return driveId;
|
|
1767
|
+
}
|
|
1768
|
+
function extractDriveIdFromPath(path) {
|
|
1769
|
+
const driveSlug = extractDriveSlugFromPath(path);
|
|
1770
|
+
const driveId = extractDriveIdFromSlug(driveSlug);
|
|
1771
|
+
return driveId;
|
|
1772
|
+
}
|
|
1773
|
+
function createUrlWithPreservedParams(pathname) {
|
|
1774
|
+
const search = window.location.search;
|
|
1775
|
+
return search ? `${pathname}${search}` : pathname;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
// src/hooks/dispatch.ts
|
|
1779
|
+
import { logger as logger5 } from "document-drive";
|
|
1780
|
+
|
|
1781
|
+
// src/actions/dispatch.ts
|
|
1782
|
+
import { logger as logger4 } from "document-drive";
|
|
1783
|
+
|
|
1784
|
+
// src/actions/queue.ts
|
|
1785
|
+
import { logger as logger2 } from "document-drive";
|
|
1786
|
+
async function queueActions(document, actionOrActions) {
|
|
1787
|
+
if (!document) {
|
|
1788
|
+
throw new Error("No document provided");
|
|
1789
|
+
}
|
|
1790
|
+
if (!actionOrActions) {
|
|
1791
|
+
throw new Error("No actions provided");
|
|
1792
|
+
}
|
|
1793
|
+
const actions = Array.isArray(actionOrActions) ? actionOrActions : [actionOrActions];
|
|
1794
|
+
if (actions.length === 0) {
|
|
1795
|
+
throw new Error("No actions provided");
|
|
1796
|
+
}
|
|
1797
|
+
const reactorClient = window.ph?.reactorClient;
|
|
1798
|
+
if (!reactorClient) {
|
|
1799
|
+
throw new Error("ReactorClient not initialized");
|
|
1800
|
+
}
|
|
1801
|
+
return await reactorClient.execute(document.header.id, "main", actions);
|
|
1802
|
+
}
|
|
1803
|
+
async function queueOperations(documentId, operationOrOperations) {
|
|
1804
|
+
if (!documentId) {
|
|
1805
|
+
throw new Error("No documentId provided");
|
|
1806
|
+
}
|
|
1807
|
+
if (!operationOrOperations) {
|
|
1808
|
+
throw new Error("No operations provided");
|
|
1809
|
+
}
|
|
1810
|
+
const operations = Array.isArray(operationOrOperations) ? operationOrOperations : [operationOrOperations];
|
|
1811
|
+
if (operations.length === 0) {
|
|
1812
|
+
throw new Error("No operations provided");
|
|
1813
|
+
}
|
|
1814
|
+
const reactorClient = window.ph?.reactorClient;
|
|
1815
|
+
if (!reactorClient) {
|
|
1816
|
+
throw new Error("ReactorClient not initialized");
|
|
1817
|
+
}
|
|
1818
|
+
const actions = operations.map((op) => op.action);
|
|
1819
|
+
return await reactorClient.execute(documentId, "main", actions);
|
|
1820
|
+
}
|
|
1821
|
+
async function uploadOperations(documentId, allOperations, pushOperations, options) {
|
|
1822
|
+
const operationsLimit = options?.operationsLimit || 50;
|
|
1823
|
+
const onProgress = options?.onProgress;
|
|
1824
|
+
logger2.verbose(`uploadDocumentOperations(documentId:${documentId}, ops: ${Object.keys(allOperations).join(",")}, limit:${operationsLimit})`);
|
|
1825
|
+
const allOperationsArray = Object.values(allOperations).filter((ops) => ops !== undefined);
|
|
1826
|
+
const totalOperations = allOperationsArray.reduce((total, operations) => total + operations.length, 0);
|
|
1827
|
+
let uploadedOperations = 0;
|
|
1828
|
+
for (const operations of allOperationsArray) {
|
|
1829
|
+
for (let i = 0;i < operations.length; i += operationsLimit) {
|
|
1830
|
+
logger2.verbose(`uploadDocumentOperations:for(i:${i}, ops:${operations.length}, limit:${operationsLimit}): START`);
|
|
1831
|
+
const chunk = operations.slice(i, i + operationsLimit);
|
|
1832
|
+
const operation = chunk.at(-1);
|
|
1833
|
+
if (!operation) {
|
|
1834
|
+
break;
|
|
1835
|
+
}
|
|
1836
|
+
const scope = operation.action.scope;
|
|
1837
|
+
await pushOperations(documentId, chunk);
|
|
1838
|
+
uploadedOperations += chunk.length;
|
|
1839
|
+
if (onProgress) {
|
|
1840
|
+
const progress = Math.round(uploadedOperations / totalOperations * 100);
|
|
1841
|
+
onProgress({
|
|
1842
|
+
stage: "uploading",
|
|
1843
|
+
progress,
|
|
1844
|
+
totalOperations,
|
|
1845
|
+
uploadedOperations
|
|
1846
|
+
});
|
|
1847
|
+
}
|
|
1848
|
+
logger2.verbose(`uploadDocumentOperations:for:waitForUpdate(${documentId}:${scope} rev ${operation.index}): NEXT`);
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
logger2.verbose(`uploadDocumentOperations:for:waitForUpdate(${documentId}): END`);
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
// src/actions/sign.ts
|
|
1855
|
+
import { logger as logger3 } from "document-drive";
|
|
1856
|
+
import { buildSignedAction } from "document-model/core";
|
|
1857
|
+
async function signAction(action, document) {
|
|
1858
|
+
const reactor = window.ph?.reactorClient;
|
|
1859
|
+
if (!reactor)
|
|
1860
|
+
return action;
|
|
1861
|
+
const documentModelModule = await reactor.getDocumentModelModule(document.header.documentType);
|
|
1862
|
+
const reducer = documentModelModule.reducer;
|
|
1863
|
+
const renown = window.ph?.renown;
|
|
1864
|
+
if (!renown?.user)
|
|
1865
|
+
return action;
|
|
1866
|
+
if (!action.context?.signer)
|
|
1867
|
+
return action;
|
|
1868
|
+
const actionSigner = action.context.signer;
|
|
1869
|
+
const unsafeSignedAction = await buildSignedAction(action, reducer, document, actionSigner, renown.crypto.sign);
|
|
1870
|
+
return unsafeSignedAction;
|
|
1871
|
+
}
|
|
1872
|
+
function addActionContext(action) {
|
|
1873
|
+
const renown = window.ph?.renown;
|
|
1874
|
+
if (!renown?.user)
|
|
1875
|
+
return action;
|
|
1876
|
+
const signer = {
|
|
1877
|
+
app: {
|
|
1878
|
+
name: "Connect",
|
|
1879
|
+
key: renown.did
|
|
1880
|
+
},
|
|
1881
|
+
user: {
|
|
1882
|
+
address: renown.user.address,
|
|
1883
|
+
networkId: renown.user.networkId,
|
|
1884
|
+
chainId: renown.user.chainId
|
|
1885
|
+
},
|
|
1886
|
+
signatures: []
|
|
1887
|
+
};
|
|
1888
|
+
return {
|
|
1889
|
+
context: { signer },
|
|
1890
|
+
...action
|
|
1891
|
+
};
|
|
1892
|
+
}
|
|
1893
|
+
async function makeSignedActionWithContext(action, document) {
|
|
1894
|
+
if (!action) {
|
|
1895
|
+
logger3.error("No action found");
|
|
1896
|
+
return;
|
|
1897
|
+
}
|
|
1898
|
+
if (!document) {
|
|
1899
|
+
logger3.error("No document found");
|
|
1900
|
+
return;
|
|
1901
|
+
}
|
|
1902
|
+
const signedAction = await signAction(action, document);
|
|
1903
|
+
const signedActionWithContext = addActionContext(signedAction);
|
|
1904
|
+
return signedActionWithContext;
|
|
1905
|
+
}
|
|
1906
|
+
async function makeSignedActionsWithContext(actionOrActions, document) {
|
|
1907
|
+
if (!actionOrActions) {
|
|
1908
|
+
logger3.error("No actions found");
|
|
1909
|
+
return;
|
|
1910
|
+
}
|
|
1911
|
+
const actions = Array.isArray(actionOrActions) ? actionOrActions : [actionOrActions];
|
|
1912
|
+
const signedActionsWithContext = await Promise.all(actions.map((action) => makeSignedActionWithContext(action, document)));
|
|
1913
|
+
return signedActionsWithContext.filter((a) => a !== undefined);
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
// src/actions/dispatch.ts
|
|
1917
|
+
async function getDocument(documentId) {
|
|
1918
|
+
try {
|
|
1919
|
+
return await window.ph?.reactorClient?.get(documentId);
|
|
1920
|
+
} catch (error) {
|
|
1921
|
+
logger4.debug(`Failed to get document with id ${documentId}:`, error);
|
|
1922
|
+
return;
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
function getActionErrors(result, actions) {
|
|
1926
|
+
return actions.reduce((errors, a) => {
|
|
1927
|
+
const scopeOperations = result.operations[a.scope];
|
|
1928
|
+
if (!scopeOperations) {
|
|
1929
|
+
return errors;
|
|
1930
|
+
}
|
|
1931
|
+
const op = scopeOperations.findLast((op2) => op2.action.id === a.id);
|
|
1932
|
+
if (op?.error) {
|
|
1933
|
+
errors.push(new Error(op.error));
|
|
1934
|
+
}
|
|
1935
|
+
return errors;
|
|
1936
|
+
}, new Array);
|
|
1937
|
+
}
|
|
1938
|
+
async function dispatchActions(actionOrActions, documentOrDocumentId, onErrors, onSuccess) {
|
|
1939
|
+
const document = typeof documentOrDocumentId === "string" ? await getDocument(documentOrDocumentId) : documentOrDocumentId;
|
|
1940
|
+
if (!document) {
|
|
1941
|
+
logger4.error(`Document with id ${JSON.stringify(documentOrDocumentId)} not found`);
|
|
1942
|
+
return;
|
|
1943
|
+
}
|
|
1944
|
+
const signedActionsWithContext = await makeSignedActionsWithContext(actionOrActions, document);
|
|
1945
|
+
if (!signedActionsWithContext) {
|
|
1946
|
+
logger4.error("No signed actions with context found");
|
|
1947
|
+
return;
|
|
1948
|
+
}
|
|
1949
|
+
const result = await queueActions(document, signedActionsWithContext);
|
|
1950
|
+
if (onErrors && result) {
|
|
1951
|
+
const errors = getActionErrors(result, signedActionsWithContext);
|
|
1952
|
+
if (errors.length) {
|
|
1953
|
+
onErrors(errors);
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
if (onSuccess && result) {
|
|
1957
|
+
onSuccess(result);
|
|
1958
|
+
}
|
|
1959
|
+
return result;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
// src/hooks/dispatch.ts
|
|
1963
|
+
function useDispatch(document) {
|
|
1964
|
+
function dispatch(actionOrActions, onErrors, onSuccess) {
|
|
1965
|
+
dispatchActions(actionOrActions, document, onErrors, onSuccess).catch(logger5.error);
|
|
1966
|
+
}
|
|
1967
|
+
return [document, dispatch];
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
// src/hooks/selected-drive.ts
|
|
1971
|
+
var selectedDriveIdEventFunctions = makePHEventFunctions("selectedDriveId");
|
|
1972
|
+
var useSelectedDriveId = selectedDriveIdEventFunctions.useValue;
|
|
1973
|
+
var setSelectedDriveId = selectedDriveIdEventFunctions.setValue;
|
|
1974
|
+
var addSelectedDriveIdEventHandler = selectedDriveIdEventFunctions.addEventHandler;
|
|
1975
|
+
function useSelectedDrive() {
|
|
1976
|
+
const drive = useSelectedDriveSafe();
|
|
1977
|
+
if (!drive[0]) {
|
|
1978
|
+
throw new Error("There is no drive selected. Did you mean to call 'useSelectedDriveSafe'?");
|
|
1979
|
+
}
|
|
1980
|
+
return drive;
|
|
1981
|
+
}
|
|
1982
|
+
function useSelectedDriveSafe() {
|
|
1983
|
+
const selectedDriveId = useSelectedDriveId();
|
|
1984
|
+
const drives = useDrives();
|
|
1985
|
+
const selectedDrive = drives?.find((drive2) => drive2.header.id === selectedDriveId);
|
|
1986
|
+
const [drive, dispatch] = useDispatch(selectedDrive);
|
|
1987
|
+
if (!selectedDrive) {
|
|
1988
|
+
return [undefined, undefined];
|
|
1989
|
+
}
|
|
1990
|
+
return [drive, dispatch];
|
|
1991
|
+
}
|
|
1992
|
+
function setSelectedDrive(driveOrDriveSlug) {
|
|
1993
|
+
const driveSlug = typeof driveOrDriveSlug === "string" ? driveOrDriveSlug : driveOrDriveSlug?.header.slug;
|
|
1994
|
+
const drive = window.ph?.drives?.find((d) => d.header.slug === driveSlug);
|
|
1995
|
+
const driveId = drive?.header.id;
|
|
1996
|
+
setSelectedDriveId(driveId);
|
|
1997
|
+
if (!driveId) {
|
|
1998
|
+
const pathname2 = resolveUrlPathname("/");
|
|
1999
|
+
if (pathname2 === window.location.pathname) {
|
|
2000
|
+
return;
|
|
2001
|
+
}
|
|
2002
|
+
window.history.pushState(null, "", createUrlWithPreservedParams(pathname2));
|
|
2003
|
+
return;
|
|
2004
|
+
}
|
|
2005
|
+
const pathname = resolveUrlPathname(`/d/${driveSlug}`);
|
|
2006
|
+
if (pathname === window.location.pathname) {
|
|
2007
|
+
return;
|
|
2008
|
+
}
|
|
2009
|
+
window.history.pushState(null, "", createUrlWithPreservedParams(pathname));
|
|
2010
|
+
}
|
|
2011
|
+
function addSetSelectedDriveOnPopStateEventHandler() {
|
|
2012
|
+
window.addEventListener("popstate", () => {
|
|
2013
|
+
const pathname = window.location.pathname;
|
|
2014
|
+
const driveId = extractDriveIdFromPath(pathname);
|
|
2015
|
+
const selectedDriveId = window.ph?.selectedDriveId;
|
|
2016
|
+
if (driveId !== selectedDriveId) {
|
|
2017
|
+
setSelectedDrive(driveId);
|
|
2018
|
+
}
|
|
2019
|
+
});
|
|
2020
|
+
}
|
|
2021
|
+
|
|
2022
|
+
// src/utils/nodes.ts
|
|
2023
|
+
function sortNodesByName(nodes) {
|
|
2024
|
+
return nodes.toSorted((a, b) => a.name.localeCompare(b.name));
|
|
2025
|
+
}
|
|
2026
|
+
function isFileNodeKind(node) {
|
|
2027
|
+
if (!node)
|
|
2028
|
+
return false;
|
|
2029
|
+
return node.kind.toUpperCase() === "FILE";
|
|
2030
|
+
}
|
|
2031
|
+
function isFolderNodeKind(node) {
|
|
2032
|
+
if (!node)
|
|
2033
|
+
return false;
|
|
2034
|
+
return node.kind.toUpperCase() === "FOLDER";
|
|
2035
|
+
}
|
|
2036
|
+
|
|
2037
|
+
// src/hooks/document-by-id.ts
|
|
2038
|
+
function useDocumentById(id) {
|
|
2039
|
+
const document = useDocument(id);
|
|
2040
|
+
const [, dispatch] = useDispatch(document);
|
|
2041
|
+
return [document, dispatch];
|
|
2042
|
+
}
|
|
2043
|
+
function useDocumentsByIds(ids) {
|
|
2044
|
+
return useDocuments(ids);
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
// src/hooks/items-in-selected-drive.ts
|
|
2048
|
+
function useNodesInSelectedDrive() {
|
|
2049
|
+
const [selectedDrive] = useSelectedDriveSafe();
|
|
2050
|
+
return selectedDrive?.state.global.nodes;
|
|
2051
|
+
}
|
|
2052
|
+
function useFileNodesInSelectedDrive() {
|
|
2053
|
+
const nodes = useNodesInSelectedDrive();
|
|
2054
|
+
return nodes?.filter((n) => isFileNodeKind(n));
|
|
2055
|
+
}
|
|
2056
|
+
function useFolderNodesInSelectedDrive() {
|
|
2057
|
+
const nodes = useNodesInSelectedDrive();
|
|
2058
|
+
return nodes?.filter((n) => isFolderNodeKind(n));
|
|
2059
|
+
}
|
|
2060
|
+
function useDocumentsInSelectedDrive() {
|
|
2061
|
+
const fileNodes = useFileNodesInSelectedDrive();
|
|
2062
|
+
const fileNodeIds = fileNodes?.map((node) => node.id);
|
|
2063
|
+
return useDocumentsByIds(fileNodeIds);
|
|
2064
|
+
}
|
|
2065
|
+
function useDocumentTypesInSelectedDrive() {
|
|
2066
|
+
const documentsInSelectedDrive = useDocumentsInSelectedDrive();
|
|
2067
|
+
const documentModelDocumentsInSelectedDrive = documentsInSelectedDrive?.filter(isDocumentModelDocument);
|
|
2068
|
+
const documentTypesFromDocumentModelDocuments = documentModelDocumentsInSelectedDrive?.map((doc) => doc.state.global.id);
|
|
2069
|
+
return documentTypesFromDocumentModelDocuments;
|
|
2070
|
+
}
|
|
2071
|
+
function isDocumentModelDocument(document) {
|
|
2072
|
+
return document.header.documentType === "powerhouse/document-model";
|
|
2073
|
+
}
|
|
2074
|
+
|
|
2075
|
+
// src/hooks/selected-node.ts
|
|
2076
|
+
var selectedNodeIdEventFunctions = makePHEventFunctions("selectedNodeId");
|
|
2077
|
+
var useSelectedNodeId = selectedNodeIdEventFunctions.useValue;
|
|
2078
|
+
var setSelectedNodeId = selectedNodeIdEventFunctions.setValue;
|
|
2079
|
+
var addSelectedNodeIdEventHandler = selectedNodeIdEventFunctions.addEventHandler;
|
|
2080
|
+
function useSelectedNode() {
|
|
2081
|
+
const selectedNodeId = useSelectedNodeId();
|
|
2082
|
+
const nodes = useNodesInSelectedDrive();
|
|
2083
|
+
return nodes?.find((n) => n.id === selectedNodeId);
|
|
2084
|
+
}
|
|
2085
|
+
function setSelectedNode(nodeOrNodeSlug) {
|
|
2086
|
+
const nodeSlug = typeof nodeOrNodeSlug === "string" ? nodeOrNodeSlug : makeNodeSlug(nodeOrNodeSlug);
|
|
2087
|
+
const nodeId = extractNodeIdFromSlug(nodeSlug);
|
|
2088
|
+
setSelectedNodeId(nodeId);
|
|
2089
|
+
const driveSlugFromPath = extractDriveSlugFromPath(window.location.pathname);
|
|
2090
|
+
if (!driveSlugFromPath) {
|
|
2091
|
+
return;
|
|
2092
|
+
}
|
|
2093
|
+
if (!nodeSlug) {
|
|
2094
|
+
const pathname2 = resolveUrlPathname(`/d/${driveSlugFromPath}`);
|
|
2095
|
+
if (pathname2 === window.location.pathname) {
|
|
2096
|
+
return;
|
|
2097
|
+
}
|
|
2098
|
+
window.history.pushState(null, "", createUrlWithPreservedParams(pathname2));
|
|
2099
|
+
return;
|
|
2100
|
+
}
|
|
2101
|
+
const pathname = resolveUrlPathname(`/d/${driveSlugFromPath}/${nodeSlug}`);
|
|
2102
|
+
if (pathname === window.location.pathname) {
|
|
2103
|
+
return;
|
|
2104
|
+
}
|
|
2105
|
+
window.history.pushState(null, "", createUrlWithPreservedParams(pathname));
|
|
2106
|
+
}
|
|
2107
|
+
function addResetSelectedNodeEventHandler() {
|
|
2108
|
+
window.addEventListener("ph:selectedDriveIdUpdated", () => {
|
|
2109
|
+
setSelectedNodeId(undefined);
|
|
2110
|
+
});
|
|
2111
|
+
}
|
|
2112
|
+
function addSetSelectedNodeOnPopStateEventHandler() {
|
|
2113
|
+
window.addEventListener("popstate", () => {
|
|
2114
|
+
const pathname = window.location.pathname;
|
|
2115
|
+
const nodeSlug = extractNodeSlugFromPath(pathname);
|
|
2116
|
+
const selectedNodeId = window.ph?.selectedNodeId;
|
|
2117
|
+
if (nodeSlug !== selectedNodeId) {
|
|
2118
|
+
setSelectedNode(nodeSlug);
|
|
2119
|
+
}
|
|
2120
|
+
});
|
|
2121
|
+
}
|
|
2122
|
+
|
|
2123
|
+
// src/hooks/selected-timeline-item.ts
|
|
2124
|
+
var selectedTimelineItemEventFunctions = makePHEventFunctions("selectedTimelineItem");
|
|
2125
|
+
var useSelectedTimelineItem = selectedTimelineItemEventFunctions.useValue;
|
|
2126
|
+
var setSelectedTimelineItem = selectedTimelineItemEventFunctions.setValue;
|
|
2127
|
+
var addSelectedTimelineItemEventHandler = selectedTimelineItemEventFunctions.addEventHandler;
|
|
2128
|
+
|
|
2129
|
+
// src/hooks/timeline-revision.ts
|
|
2130
|
+
var selectedTimelineRevisionEventFunctions = makePHEventFunctions("selectedTimelineRevision");
|
|
2131
|
+
var useSelectedTimelineRevision = selectedTimelineRevisionEventFunctions.useValue;
|
|
2132
|
+
var setSelectedTimelineRevision = selectedTimelineRevisionEventFunctions.setValue;
|
|
2133
|
+
var addSelectedTimelineRevisionEventHandler = selectedTimelineRevisionEventFunctions.addEventHandler;
|
|
2134
|
+
|
|
2135
|
+
// src/hooks/toast.ts
|
|
2136
|
+
var toastEventFunctions = makePHEventFunctions("toast");
|
|
2137
|
+
var usePHToast = toastEventFunctions.useValue;
|
|
2138
|
+
var setPHToast = toastEventFunctions.setValue;
|
|
2139
|
+
var addToastEventHandler = toastEventFunctions.addEventHandler;
|
|
2140
|
+
|
|
2141
|
+
// src/hooks/vetra-packages.ts
|
|
2142
|
+
import { DuplicateModuleError } from "@powerhousedao/reactor";
|
|
2143
|
+
import { useSyncExternalStore as useSyncExternalStore3 } from "react";
|
|
2144
|
+
var vetraPackageManagerFunctions = makePHEventFunctions("vetraPackageManager");
|
|
2145
|
+
var useVetraPackageManager = vetraPackageManagerFunctions.useValue;
|
|
2146
|
+
var useVetraPackages = () => {
|
|
2147
|
+
const packageManager = useVetraPackageManager();
|
|
2148
|
+
return useSyncExternalStore3((cb) => packageManager ? packageManager.subscribe(cb) : () => {}, () => packageManager?.packages ?? []);
|
|
2149
|
+
};
|
|
2150
|
+
var addVetraPackageManagerEventHandler = vetraPackageManagerFunctions.addEventHandler;
|
|
2151
|
+
function setVetraPackageManager(packageManager) {
|
|
2152
|
+
vetraPackageManagerFunctions.setValue(packageManager);
|
|
2153
|
+
updateReactorClientDocumentModels(packageManager.packages);
|
|
2154
|
+
packageManager.subscribe(({ packages }) => {
|
|
2155
|
+
updateReactorClientDocumentModels(packages);
|
|
2156
|
+
});
|
|
2157
|
+
}
|
|
2158
|
+
function updateReactorClientDocumentModels(packages) {
|
|
2159
|
+
const documentModelModules = packages.flatMap((pkg) => pkg.modules.documentModelModules).filter((module) => module !== undefined);
|
|
2160
|
+
const registry = window.ph?.reactorClientModule?.reactorModule?.documentModelRegistry;
|
|
2161
|
+
if (!registry || documentModelModules.length === 0)
|
|
2162
|
+
return;
|
|
2163
|
+
for (const module of documentModelModules) {
|
|
2164
|
+
try {
|
|
2165
|
+
registry.registerModules(module);
|
|
2166
|
+
} catch (error) {
|
|
2167
|
+
if (DuplicateModuleError.isError(error)) {
|
|
2168
|
+
continue;
|
|
2169
|
+
}
|
|
2170
|
+
throw error;
|
|
2171
|
+
}
|
|
2172
|
+
}
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
// src/hooks/add-ph-event-handlers.ts
|
|
2176
|
+
var phGlobalEventHandlerRegisterFunctions = {
|
|
2177
|
+
loading: addLoadingEventHandler,
|
|
2178
|
+
reactorClientModule: addReactorClientModuleEventHandler,
|
|
2179
|
+
reactorClient: addReactorClientEventHandler,
|
|
2180
|
+
features: addFeaturesEventHandler,
|
|
2181
|
+
modal: addModalEventHandler,
|
|
2182
|
+
renown: addRenownEventHandler,
|
|
2183
|
+
drives: addDrivesEventHandler,
|
|
2184
|
+
documentCache: addDocumentCacheEventHandler,
|
|
2185
|
+
selectedDriveId: () => {
|
|
2186
|
+
addSelectedDriveIdEventHandler();
|
|
2187
|
+
addSetSelectedDriveOnPopStateEventHandler();
|
|
2188
|
+
addResetSelectedNodeEventHandler();
|
|
2189
|
+
},
|
|
2190
|
+
selectedNodeId: () => {
|
|
2191
|
+
addSelectedNodeIdEventHandler();
|
|
2192
|
+
addSetSelectedNodeOnPopStateEventHandler();
|
|
2193
|
+
},
|
|
2194
|
+
vetraPackageManager: addVetraPackageManagerEventHandler,
|
|
2195
|
+
selectedTimelineRevision: addSelectedTimelineRevisionEventHandler,
|
|
2196
|
+
revisionHistoryVisible: addRevisionHistoryVisibleEventHandler,
|
|
2197
|
+
selectedTimelineItem: addSelectedTimelineItemEventHandler,
|
|
2198
|
+
routerBasename: addRouterBasenameEventHandler,
|
|
2199
|
+
version: addVersionEventHandler,
|
|
2200
|
+
logLevel: addLogLevelEventHandler,
|
|
2201
|
+
requiresHardRefresh: addRequiresHardRefreshEventHandler,
|
|
2202
|
+
warnOutdatedApp: addWarnOutdatedAppEventHandler,
|
|
2203
|
+
studioMode: addStudioModeEventHandler,
|
|
2204
|
+
basePath: addBasePathEventHandler,
|
|
2205
|
+
versionCheckInterval: addVersionCheckIntervalEventHandler,
|
|
2206
|
+
cliVersion: addCliVersionEventHandler,
|
|
2207
|
+
fileUploadOperationsChunkSize: addFileUploadOperationsChunkSizeEventHandler,
|
|
2208
|
+
isDocumentModelSelectionSettingsEnabled: addIsDocumentModelSelectionSettingsEnabledEventHandler,
|
|
2209
|
+
gaTrackingId: addGaTrackingIdEventHandler,
|
|
2210
|
+
allowList: addAllowListEventHandler,
|
|
2211
|
+
defaultDrivesUrl: addDefaultDrivesUrlEventHandler,
|
|
2212
|
+
drivesPreserveStrategy: addDrivesPreserveStrategyEventHandler,
|
|
2213
|
+
allowedDocumentTypes: addAllowedDocumentTypesEventHandler,
|
|
2214
|
+
enabledEditors: addEnabledEditorsEventHandler,
|
|
2215
|
+
disabledEditors: addDisabledEditorsEventHandler,
|
|
2216
|
+
isAddDriveEnabled: addIsAddDriveEnabledEventHandler,
|
|
2217
|
+
isLocalDrivesEnabled: addIsLocalDrivesEnabledEventHandler,
|
|
2218
|
+
isPublicDrivesEnabled: addIsPublicDrivesEnabledEventHandler,
|
|
2219
|
+
isAddPublicDrivesEnabled: addIsAddPublicDrivesEnabledEventHandler,
|
|
2220
|
+
isDeletePublicDrivesEnabled: addIsDeletePublicDrivesEnabledEventHandler,
|
|
2221
|
+
isCloudDrivesEnabled: addIsCloudDrivesEnabledEventHandler,
|
|
2222
|
+
isAddCloudDrivesEnabled: addIsAddCloudDrivesEnabledEventHandler,
|
|
2223
|
+
isDeleteCloudDrivesEnabled: addIsDeleteCloudDrivesEnabledEventHandler,
|
|
2224
|
+
isAddLocalDrivesEnabled: addIsAddLocalDrivesEnabledEventHandler,
|
|
2225
|
+
isDeleteLocalDrivesEnabled: addIsDeleteLocalDrivesEnabledEventHandler,
|
|
2226
|
+
isDragAndDropEnabled: addIsDragAndDropEnabledEventHandler,
|
|
2227
|
+
isExternalControlsEnabled: addIsExternalControlsEnabledEventHandler,
|
|
2228
|
+
isEditorDebugModeEnabled: addIsEditorDebugModeEnabledEventHandler,
|
|
2229
|
+
isEditorReadModeEnabled: addIsEditorReadModeEnabledEventHandler,
|
|
2230
|
+
isRelationalProcessorsEnabled: addIsRelationalProcessorsEnabledEventHandler,
|
|
2231
|
+
isExternalRelationalProcessorsEnabled: addIsExternalRelationalProcessorsEnabledEventHandler,
|
|
2232
|
+
isAnalyticsEnabled: addIsAnalyticsEnabledEventHandler,
|
|
2233
|
+
isAnalyticsExternalProcessorsEnabled: addIsAnalyticsExternalProcessorsEnabledEventHandler,
|
|
2234
|
+
analyticsDatabaseName: addAnalyticsDatabaseNameEventHandler,
|
|
2235
|
+
isAnalyticsDatabaseWorkerEnabled: addIsAnalyticsDatabaseWorkerEnabledEventHandler,
|
|
2236
|
+
isDiffAnalyticsEnabled: addIsDiffAnalyticsEnabledEventHandler,
|
|
2237
|
+
isDriveAnalyticsEnabled: addIsDriveAnalyticsEnabledEventHandler,
|
|
2238
|
+
renownUrl: addRenownUrlEventHandler,
|
|
2239
|
+
renownNetworkId: addRenownNetworkIdEventHandler,
|
|
2240
|
+
renownChainId: addRenownChainIdEventHandler,
|
|
2241
|
+
sentryRelease: addSentryReleaseEventHandler,
|
|
2242
|
+
sentryDsn: addSentryDsnEventHandler,
|
|
2243
|
+
sentryEnv: addSentryEnvEventHandler,
|
|
2244
|
+
isSentryTracingEnabled: addIsSentryTracingEnabledEventHandler,
|
|
2245
|
+
isExternalProcessorsEnabled: addIsExternalProcessorsEnabledEventHandler,
|
|
2246
|
+
isExternalPackagesEnabled: addIsExternalPackagesEnabledEventHandler,
|
|
2247
|
+
toast: addToastEventHandler
|
|
2248
|
+
};
|
|
2249
|
+
function addPHEventHandlers() {
|
|
2250
|
+
for (const fn of Object.values(phGlobalEventHandlerRegisterFunctions)) {
|
|
2251
|
+
fn();
|
|
2252
|
+
}
|
|
2253
|
+
}
|
|
2254
|
+
// src/hooks/config/set-config-by-key.ts
|
|
2255
|
+
function setPHGlobalConfigByKey(key, value) {
|
|
2256
|
+
const setter = phGlobalConfigSetters[key];
|
|
2257
|
+
setter(value);
|
|
2258
|
+
}
|
|
2259
|
+
function setPHDriveEditorConfigByKey(key, value) {
|
|
2260
|
+
const setter = phDriveEditorConfigSetters[key];
|
|
2261
|
+
setter(value);
|
|
2262
|
+
}
|
|
2263
|
+
function setPHDocumentEditorConfigByKey(key, value) {
|
|
2264
|
+
const setter = phDocumentEditorConfigSetters[key];
|
|
2265
|
+
setter(value);
|
|
2266
|
+
}
|
|
2267
|
+
// src/hooks/config/set-config-by-object.ts
|
|
2268
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
2269
|
+
|
|
2270
|
+
// src/hooks/config/utils.ts
|
|
2271
|
+
function callGlobalSetterForKey(key, value) {
|
|
2272
|
+
const setter = phGlobalConfigSetters[key];
|
|
2273
|
+
setter(value);
|
|
2274
|
+
}
|
|
2275
|
+
|
|
2276
|
+
// src/hooks/config/set-config-by-object.ts
|
|
2277
|
+
function setDefaultPHGlobalConfig(config) {
|
|
2278
|
+
for (const key of Object.keys(config)) {
|
|
2279
|
+
callGlobalSetterForKey(key, config[key]);
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
function useSetDefaultPHGlobalConfig(config) {
|
|
2283
|
+
const [isInitialized, setIsInitialized] = useState2(false);
|
|
2284
|
+
useEffect2(() => {
|
|
2285
|
+
if (isInitialized)
|
|
2286
|
+
return;
|
|
2287
|
+
setDefaultPHGlobalConfig(config);
|
|
2288
|
+
setIsInitialized(true);
|
|
2289
|
+
}, [config, isInitialized]);
|
|
2290
|
+
}
|
|
2291
|
+
function useResetPHGlobalConfig(defaultConfigForReset) {
|
|
2292
|
+
return function reset() {
|
|
2293
|
+
setPHGlobalConfig(defaultConfigForReset);
|
|
2294
|
+
};
|
|
2295
|
+
}
|
|
2296
|
+
function setPHGlobalConfig(config) {
|
|
2297
|
+
for (const key of Object.keys(config)) {
|
|
2298
|
+
callGlobalSetterForKey(key, config[key]);
|
|
2299
|
+
}
|
|
2300
|
+
}
|
|
2301
|
+
function useSetPHGlobalConfig(config) {
|
|
2302
|
+
const [isInitialized, setIsInitialized] = useState2(false);
|
|
2303
|
+
useEffect2(() => {
|
|
2304
|
+
if (isInitialized)
|
|
2305
|
+
return;
|
|
2306
|
+
setPHGlobalConfig(config);
|
|
2307
|
+
setIsInitialized(true);
|
|
2308
|
+
}, [config, isInitialized]);
|
|
2309
|
+
}
|
|
2310
|
+
function setPHDriveEditorConfig(config) {
|
|
2311
|
+
for (const key of Object.keys(config)) {
|
|
2312
|
+
callGlobalSetterForKey(key, config[key]);
|
|
2313
|
+
}
|
|
2314
|
+
}
|
|
2315
|
+
function setPHDocumentEditorConfig(config) {
|
|
2316
|
+
for (const key of Object.keys(config)) {
|
|
2317
|
+
callGlobalSetterForKey(key, config[key]);
|
|
2318
|
+
}
|
|
2319
|
+
}
|
|
2320
|
+
function useSetPHDriveEditorConfig(config) {
|
|
2321
|
+
const [isInitialized, setIsInitialized] = useState2(false);
|
|
2322
|
+
useEffect2(() => {
|
|
2323
|
+
if (isInitialized)
|
|
2324
|
+
return;
|
|
2325
|
+
setPHDriveEditorConfig(config);
|
|
2326
|
+
setIsInitialized(true);
|
|
2327
|
+
}, [config, isInitialized]);
|
|
2328
|
+
}
|
|
2329
|
+
function useSetPHDocumentEditorConfig(config) {
|
|
2330
|
+
const [isInitialized, setIsInitialized] = useState2(false);
|
|
2331
|
+
useEffect2(() => {
|
|
2332
|
+
if (isInitialized)
|
|
2333
|
+
return;
|
|
2334
|
+
setPHDocumentEditorConfig(config);
|
|
2335
|
+
setIsInitialized(true);
|
|
2336
|
+
}, [config, isInitialized]);
|
|
2337
|
+
}
|
|
2338
|
+
// src/hooks/config/use-value-by-key.ts
|
|
2339
|
+
function usePHGlobalConfigByKey(key) {
|
|
2340
|
+
const useValueHook = phGlobalConfigHooks[key];
|
|
2341
|
+
return useValueHook();
|
|
2342
|
+
}
|
|
2343
|
+
function usePHDriveEditorConfigByKey(key) {
|
|
2344
|
+
const useValueHook = phDriveEditorConfigHooks[key];
|
|
2345
|
+
return useValueHook();
|
|
2346
|
+
}
|
|
2347
|
+
function usePHDocumentEditorConfigByKey(key) {
|
|
2348
|
+
const useValueHook = phDocumentEditorConfigHooks[key];
|
|
2349
|
+
return useValueHook();
|
|
2350
|
+
}
|
|
2351
|
+
// src/hooks/connection-state.ts
|
|
2352
|
+
import { useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
2353
|
+
function useConnectionStates() {
|
|
2354
|
+
const syncManager = useSync();
|
|
2355
|
+
const [states, setStates] = useState3(() => buildSnapshot(syncManager));
|
|
2356
|
+
const unsubscribesRef = useRef([]);
|
|
2357
|
+
useEffect3(() => {
|
|
2358
|
+
if (!syncManager)
|
|
2359
|
+
return;
|
|
2360
|
+
function subscribe() {
|
|
2361
|
+
for (const unsub of unsubscribesRef.current) {
|
|
2362
|
+
unsub();
|
|
2363
|
+
}
|
|
2364
|
+
unsubscribesRef.current = [];
|
|
2365
|
+
const remotes = syncManager.list();
|
|
2366
|
+
for (const remote of remotes) {
|
|
2367
|
+
const unsub = remote.channel.onConnectionStateChange(() => {
|
|
2368
|
+
setStates(buildSnapshot(syncManager));
|
|
2369
|
+
});
|
|
2370
|
+
unsubscribesRef.current.push(unsub);
|
|
2371
|
+
}
|
|
2372
|
+
setStates(buildSnapshot(syncManager));
|
|
2373
|
+
}
|
|
2374
|
+
subscribe();
|
|
2375
|
+
const interval = setInterval(subscribe, 5000);
|
|
2376
|
+
return () => {
|
|
2377
|
+
clearInterval(interval);
|
|
2378
|
+
for (const unsub of unsubscribesRef.current) {
|
|
2379
|
+
unsub();
|
|
2380
|
+
}
|
|
2381
|
+
unsubscribesRef.current = [];
|
|
2382
|
+
};
|
|
2383
|
+
}, [syncManager]);
|
|
2384
|
+
return states;
|
|
2385
|
+
}
|
|
2386
|
+
function useConnectionState(remoteName) {
|
|
2387
|
+
const states = useConnectionStates();
|
|
2388
|
+
return states.get(remoteName);
|
|
2389
|
+
}
|
|
2390
|
+
function buildSnapshot(syncManager) {
|
|
2391
|
+
const map = new Map;
|
|
2392
|
+
if (!syncManager)
|
|
2393
|
+
return map;
|
|
2394
|
+
for (const remote of syncManager.list()) {
|
|
2395
|
+
map.set(remote.name, remote.channel.getConnectionState());
|
|
2396
|
+
}
|
|
2397
|
+
return map;
|
|
2398
|
+
}
|
|
2399
|
+
export {
|
|
2400
|
+
useWarnOutdatedApp,
|
|
2401
|
+
useVersionCheckInterval,
|
|
2402
|
+
useVersion,
|
|
2403
|
+
useUser,
|
|
2404
|
+
useSyncList,
|
|
2405
|
+
useSync,
|
|
2406
|
+
useStudioMode,
|
|
2407
|
+
useSetPHGlobalConfig,
|
|
2408
|
+
useSetDefaultPHGlobalConfig,
|
|
2409
|
+
useSentryRelease,
|
|
2410
|
+
useSentryEnv,
|
|
2411
|
+
useSentryDsn,
|
|
2412
|
+
useRouterBasename,
|
|
2413
|
+
useResetPHGlobalConfig,
|
|
2414
|
+
useRequiresHardRefresh,
|
|
2415
|
+
useRenownUrl,
|
|
2416
|
+
useRenownNetworkId,
|
|
2417
|
+
useRenownChainId,
|
|
2418
|
+
useRenown,
|
|
2419
|
+
useReactorClientModule,
|
|
2420
|
+
useReactorClient,
|
|
2421
|
+
usePHGlobalConfigByKey,
|
|
2422
|
+
usePGlite,
|
|
2423
|
+
useModelRegistry,
|
|
2424
|
+
useLoginStatus,
|
|
2425
|
+
useLogLevel,
|
|
2426
|
+
useLoading,
|
|
2427
|
+
useIsSentryTracingEnabled,
|
|
2428
|
+
useIsPublicDrivesEnabled,
|
|
2429
|
+
useIsLocalDrivesEnabled,
|
|
2430
|
+
useIsExternalProcessorsEnabled,
|
|
2431
|
+
useIsExternalPackagesEnabled,
|
|
2432
|
+
useIsEditorReadModeEnabled,
|
|
2433
|
+
useIsEditorDebugModeEnabled,
|
|
2434
|
+
useIsDriveAnalyticsEnabled,
|
|
2435
|
+
useIsDocumentModelSelectionSettingsEnabled,
|
|
2436
|
+
useIsDiffAnalyticsEnabled,
|
|
2437
|
+
useIsDeletePublicDrivesEnabled,
|
|
2438
|
+
useIsDeleteLocalDrivesEnabled,
|
|
2439
|
+
useIsDeleteCloudDrivesEnabled,
|
|
2440
|
+
useIsCloudDrivesEnabled,
|
|
2441
|
+
useIsAnalyticsDatabaseWorkerEnabled,
|
|
2442
|
+
useIsAddPublicDrivesEnabled,
|
|
2443
|
+
useIsAddLocalDrivesEnabled,
|
|
2444
|
+
useIsAddDriveEnabled,
|
|
2445
|
+
useIsAddCloudDrivesEnabled,
|
|
2446
|
+
useGaTrackingId,
|
|
2447
|
+
useFileUploadOperationsChunkSize,
|
|
2448
|
+
useEnabledEditors,
|
|
2449
|
+
useDrivesPreserveStrategy,
|
|
2450
|
+
useDocumentCache,
|
|
2451
|
+
useDisabledEditors,
|
|
2452
|
+
useDid,
|
|
2453
|
+
useDefaultDrivesUrl,
|
|
2454
|
+
useDatabase,
|
|
2455
|
+
useConnectionStates,
|
|
2456
|
+
useConnectionState,
|
|
2457
|
+
useCliVersion,
|
|
2458
|
+
useBasePath,
|
|
2459
|
+
useAnalyticsDatabaseName,
|
|
2460
|
+
useAllowList,
|
|
2461
|
+
setWarnOutdatedApp,
|
|
2462
|
+
setVersionCheckInterval,
|
|
2463
|
+
setVersion,
|
|
2464
|
+
setStudioMode,
|
|
2465
|
+
setSentryRelease,
|
|
2466
|
+
setSentryEnv,
|
|
2467
|
+
setSentryDsn,
|
|
2468
|
+
setRouterBasename,
|
|
2469
|
+
setRequiresHardRefresh,
|
|
2470
|
+
setRenownUrl,
|
|
2471
|
+
setRenownNetworkId,
|
|
2472
|
+
setRenownChainId,
|
|
2473
|
+
setRenown,
|
|
2474
|
+
setReactorClientModule,
|
|
2475
|
+
setReactorClient,
|
|
2476
|
+
setPHGlobalConfigByKey,
|
|
2477
|
+
setPHGlobalConfig,
|
|
2478
|
+
setLogLevel,
|
|
2479
|
+
setLoading,
|
|
2480
|
+
setIsSentryTracingEnabled,
|
|
2481
|
+
setIsPublicDrivesEnabled,
|
|
2482
|
+
setIsLocalDrivesEnabled,
|
|
2483
|
+
setIsExternalProcessorsEnabled,
|
|
2484
|
+
setIsExternalPackagesEnabled,
|
|
2485
|
+
setIsEditorReadModeEnabled,
|
|
2486
|
+
setIsEditorDebugModeEnabled,
|
|
2487
|
+
setIsDriveAnalyticsEnabled,
|
|
2488
|
+
setIsDocumentModelSelectionSettingsEnabled,
|
|
2489
|
+
setIsDiffAnalyticsEnabled,
|
|
2490
|
+
setIsDeletePublicDrivesEnabled,
|
|
2491
|
+
setIsDeleteLocalDrivesEnabled,
|
|
2492
|
+
setIsDeleteCloudDrivesEnabled,
|
|
2493
|
+
setIsCloudDrivesEnabled,
|
|
2494
|
+
setIsAnalyticsDatabaseWorkerEnabled,
|
|
2495
|
+
setIsAddPublicDrivesEnabled,
|
|
2496
|
+
setIsAddLocalDrivesEnabled,
|
|
2497
|
+
setIsAddDriveEnabled,
|
|
2498
|
+
setIsAddCloudDrivesEnabled,
|
|
2499
|
+
setGaTrackingId,
|
|
2500
|
+
setFileUploadOperationsChunkSize,
|
|
2501
|
+
setEnabledEditors,
|
|
2502
|
+
setDrivesPreserveStrategy,
|
|
2503
|
+
setDrives,
|
|
2504
|
+
setDocumentCache,
|
|
2505
|
+
setDisabledEditors,
|
|
2506
|
+
setDefaultPHGlobalConfig,
|
|
2507
|
+
setDefaultDrivesUrl,
|
|
2508
|
+
setCliVersion,
|
|
2509
|
+
setBasePath,
|
|
2510
|
+
setAnalyticsDatabaseName,
|
|
2511
|
+
setAllowList,
|
|
2512
|
+
openRenown,
|
|
2513
|
+
logout,
|
|
2514
|
+
login,
|
|
2515
|
+
addPHEventHandlers
|
|
2516
|
+
};
|