cyberia 3.2.5 → 3.2.12
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/.github/workflows/engine-cyberia.cd.yml +8 -2
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +2 -2
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +563 -1
- package/CLI-HELP.md +130 -34
- package/Dockerfile +0 -4
- package/README.md +194 -607
- package/bin/build.js +42 -12
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +1367 -281
- package/bin/deploy.js +582 -3
- package/bin/index.js +1367 -281
- package/bump.config.js +26 -0
- package/conf.js +195 -111
- package/deployment.yaml +6 -222
- package/hardhat/package-lock.json +118 -149
- package/hardhat/package.json +5 -4
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +45 -24
- package/proxy.yaml +10 -118
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +83 -48
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +15 -15
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +11 -11
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +31 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
- package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +17 -17
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +15 -15
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +45 -43
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +16 -16
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +22 -36
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +29 -26
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.router.js +17 -12
- package/src/api/test/test.service.js +8 -8
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +103 -55
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +732 -217
- package/src/cli/db.js +106 -62
- package/src/cli/deploy.js +260 -149
- package/src/cli/fs.js +90 -9
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +106 -16
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +336 -86
- package/src/cli/repository.js +136 -53
- package/src/cli/run.js +599 -76
- package/src/cli/secrets.js +11 -2
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +9 -3
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +30 -36
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +40 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +544 -219
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +81 -177
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +211 -276
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
- package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
- package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
- package/src/client/ssr/{pages → views}/Test.js +2 -2
- package/src/client/sw/core.sw.js +274 -0
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +185 -105
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +101 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +62 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +46 -47
- package/src/server/client-build.js +371 -132
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +91 -87
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +192 -45
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +34 -8
- package/src/server/valkey.js +143 -235
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/bin/file.js +0 -196
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -38,6 +38,8 @@ import { ssrFactory } from './ssr.js';
|
|
|
38
38
|
* @memberof clientBuild
|
|
39
39
|
*/
|
|
40
40
|
const copyNonExistingFiles = (src, dest) => {
|
|
41
|
+
if (dir.basename(src) === '.git') return;
|
|
42
|
+
|
|
41
43
|
// Ensure source exists
|
|
42
44
|
if (!fs.existsSync(src)) {
|
|
43
45
|
throw new Error(`Source directory does not exist: ${src}`);
|
|
@@ -74,6 +76,224 @@ const copyNonExistingFiles = (src, dest) => {
|
|
|
74
76
|
}
|
|
75
77
|
};
|
|
76
78
|
|
|
79
|
+
const splitFileByMb = ({ filePath, partSizeMb, logger }) => {
|
|
80
|
+
const partSizeBytes = Math.floor(Number(partSizeMb) * 1024 * 1024);
|
|
81
|
+
if (!Number.isFinite(partSizeBytes) || partSizeBytes <= 0) {
|
|
82
|
+
throw new Error(`Invalid --split value: ${partSizeMb}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Clean ALL stale part files (any naming variant) before writing new ones
|
|
86
|
+
const zipDir = dir.dirname(filePath);
|
|
87
|
+
const zipBase = dir.basename(filePath);
|
|
88
|
+
if (fs.existsSync(zipDir)) {
|
|
89
|
+
fs.readdirSync(zipDir)
|
|
90
|
+
.filter((name) => name.startsWith(`${zipBase}.part`) || name.startsWith(`${zipBase}-part`))
|
|
91
|
+
.forEach((name) => fs.removeSync(dir.join(zipDir, name)));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
95
|
+
const partPaths = [];
|
|
96
|
+
|
|
97
|
+
for (let offset = 0, partIndex = 0; offset < fileBuffer.length; offset += partSizeBytes, partIndex++) {
|
|
98
|
+
const partBuffer = fileBuffer.subarray(offset, offset + partSizeBytes);
|
|
99
|
+
const partPath = `${filePath}.part${String(partIndex + 1).padStart(3, '0')}`;
|
|
100
|
+
fs.writeFileSync(partPath, partBuffer);
|
|
101
|
+
partPaths.push(partPath);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
logger.warn('split zip', {
|
|
105
|
+
filePath,
|
|
106
|
+
partSizeMb: Number(partSizeMb),
|
|
107
|
+
parts: partPaths.length,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
return partPaths;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const getZipPartPaths = (zipPath) => {
|
|
114
|
+
const zipDir = dir.dirname(zipPath);
|
|
115
|
+
const zipBase = dir.basename(zipPath);
|
|
116
|
+
const partPrefixDot = `${zipBase}.part`;
|
|
117
|
+
const partPrefixDash = `${zipBase}-part`;
|
|
118
|
+
|
|
119
|
+
const parsePartIndex = (rawSuffix) => {
|
|
120
|
+
// Strip optional .zip suffix added by pull/download (e.g. '001.zip' → '001')
|
|
121
|
+
const digits = rawSuffix.replace(/\.zip$/i, '');
|
|
122
|
+
return /^\d+$/.test(digits) ? Number(digits) : NaN;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const getPartIndex = (name) => {
|
|
126
|
+
if (name.startsWith(partPrefixDot)) return parsePartIndex(name.slice(partPrefixDot.length));
|
|
127
|
+
if (name.startsWith(partPrefixDash)) return parsePartIndex(name.slice(partPrefixDash.length));
|
|
128
|
+
return NaN;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
return fs
|
|
132
|
+
.readdirSync(zipDir)
|
|
133
|
+
.filter((name) => Number.isFinite(getPartIndex(name)))
|
|
134
|
+
.sort((a, b) => getPartIndex(a) - getPartIndex(b))
|
|
135
|
+
.map((name) => dir.join(zipDir, name));
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const resolveClientBuildZip = (buildPrefix) => {
|
|
139
|
+
const normalizedPrefix = buildPrefix.replace(/\.zip(?:[.-]part\d+|[.-]part\*)?$/, '').replace(/[.-]part\*$/, '');
|
|
140
|
+
const candidatePrefixes = uniqueArray([
|
|
141
|
+
normalizedPrefix,
|
|
142
|
+
normalizedPrefix.endsWith('-') ? normalizedPrefix : `${normalizedPrefix}-`,
|
|
143
|
+
]);
|
|
144
|
+
|
|
145
|
+
for (const prefix of candidatePrefixes) {
|
|
146
|
+
const zipPath = `${prefix}.zip`;
|
|
147
|
+
if (fs.existsSync(zipPath)) {
|
|
148
|
+
return {
|
|
149
|
+
buildPrefix: prefix,
|
|
150
|
+
zipPath,
|
|
151
|
+
partPaths: [],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const partPaths = fs.existsSync(dir.dirname(zipPath)) ? getZipPartPaths(zipPath) : [];
|
|
156
|
+
if (partPaths.length > 0) {
|
|
157
|
+
return {
|
|
158
|
+
buildPrefix: prefix,
|
|
159
|
+
zipPath,
|
|
160
|
+
partPaths,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const searchDir = dir.dirname(normalizedPrefix);
|
|
166
|
+
const prefixBase = dir.basename(normalizedPrefix);
|
|
167
|
+
if (!fs.existsSync(searchDir)) {
|
|
168
|
+
throw new Error(`Build directory not found: ${searchDir}`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const matches = uniqueArray(
|
|
172
|
+
fs
|
|
173
|
+
.readdirSync(searchDir)
|
|
174
|
+
.filter((name) => name.startsWith(prefixBase) && /\.zip(?:[.-]part\d+)?$/.test(name))
|
|
175
|
+
.map((name) => name.replace(/[.-]part\d+$/, '')),
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
if (matches.length === 1) {
|
|
179
|
+
const zipPath = dir.join(searchDir, matches[0]);
|
|
180
|
+
const partPaths = getZipPartPaths(zipPath);
|
|
181
|
+
return {
|
|
182
|
+
buildPrefix: zipPath.replace(/\.zip$/, ''),
|
|
183
|
+
zipPath,
|
|
184
|
+
partPaths,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (matches.length > 1) {
|
|
189
|
+
throw new Error(
|
|
190
|
+
`Multiple build zip matches found for '${buildPrefix}': ${matches.join(', ')}. Use a more specific --unzip path.`,
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
throw new Error(`No build zip or split parts found for: ${buildPrefix}`);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Merges split ZIP parts back into a single ZIP file.
|
|
199
|
+
* @param {object} options
|
|
200
|
+
* @param {string} options.buildPrefix - The build prefix path (e.g. build/underpost.net/underpost.net-).
|
|
201
|
+
* @param {object} options.logger - Logger instance.
|
|
202
|
+
* @returns {{ zipPath: string, partPaths: string[], mergedBytes: number }}
|
|
203
|
+
*/
|
|
204
|
+
const mergeClientBuildZip = ({ buildPrefix, logger }) => {
|
|
205
|
+
// Normalize to get the zip path, then look for parts directly (bypassing resolveClientBuildZip
|
|
206
|
+
// which prefers an existing monolithic zip over parts).
|
|
207
|
+
const normalizedPrefix = buildPrefix.replace(/\.zip(?:[.-]part\d+)?$/, '').replace(/[-.]$/, '') + '-';
|
|
208
|
+
const candidatePrefixes = uniqueArray([buildPrefix, buildPrefix.endsWith('-') ? buildPrefix : `${buildPrefix}-`]);
|
|
209
|
+
|
|
210
|
+
let zipPath;
|
|
211
|
+
let partPaths = [];
|
|
212
|
+
|
|
213
|
+
for (const prefix of candidatePrefixes) {
|
|
214
|
+
const candidate = prefix.endsWith('.zip') ? prefix : `${prefix}.zip`;
|
|
215
|
+
const parts = getZipPartPaths(candidate);
|
|
216
|
+
if (parts.length > 0) {
|
|
217
|
+
zipPath = candidate;
|
|
218
|
+
partPaths = parts;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (partPaths.length === 0) {
|
|
224
|
+
// Fall back to resolveClientBuildZip for the zipPath
|
|
225
|
+
const resolved = resolveClientBuildZip(buildPrefix);
|
|
226
|
+
zipPath = resolved.zipPath;
|
|
227
|
+
logger.warn('merge-zip: no split parts found, nothing to merge', { buildPrefix, zipPath });
|
|
228
|
+
return { zipPath, partPaths, mergedBytes: 0 };
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// For each part, extract raw bytes: if the part file is a Cloudinary wrapper zip
|
|
232
|
+
// (downloaded via pull without --omit-unzip or with --omit-unzip keeping the .zip),
|
|
233
|
+
// extract the inner entry rather than using the wrapper bytes.
|
|
234
|
+
const readPartBytes = (partPath) => {
|
|
235
|
+
const rawBytes = fs.readFileSync(partPath);
|
|
236
|
+
// Check for ZIP magic bytes (PK\x03\x04)
|
|
237
|
+
if (rawBytes[0] === 0x50 && rawBytes[1] === 0x4b && rawBytes[2] === 0x03 && rawBytes[3] === 0x04) {
|
|
238
|
+
try {
|
|
239
|
+
const wrapperZip = new AdmZip(rawBytes);
|
|
240
|
+
const entries = wrapperZip.getEntries();
|
|
241
|
+
// The inner entry is the original part file (without the outer .zip wrapper)
|
|
242
|
+
const partBase = dir.basename(partPath).replace(/\.zip$/i, '');
|
|
243
|
+
const entry = entries.find((e) => e.entryName === partBase || e.entryName.endsWith('/' + partBase));
|
|
244
|
+
if (entry) {
|
|
245
|
+
return entry.getData();
|
|
246
|
+
}
|
|
247
|
+
// Fallback: single-entry archive
|
|
248
|
+
if (entries.length === 1) {
|
|
249
|
+
return entries[0].getData();
|
|
250
|
+
}
|
|
251
|
+
} catch (_) {
|
|
252
|
+
// Not a valid zip or extraction failed — use raw bytes
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return rawBytes;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const mergedBuffer = Buffer.concat(partPaths.map(readPartBytes));
|
|
259
|
+
fs.writeFileSync(zipPath, mergedBuffer);
|
|
260
|
+
|
|
261
|
+
logger.warn('merge-zip: merged split parts into zip', {
|
|
262
|
+
zipPath,
|
|
263
|
+
parts: partPaths.length,
|
|
264
|
+
mergedBytes: mergedBuffer.length,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
return { zipPath, partPaths, mergedBytes: mergedBuffer.length };
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
const unzipClientBuild = ({ buildPrefix, logger }) => {
|
|
271
|
+
const { zipPath, partPaths, buildPrefix: resolvedBuildPrefix } = resolveClientBuildZip(buildPrefix);
|
|
272
|
+
const outputPath = resolvedBuildPrefix.replace(/-$/, '');
|
|
273
|
+
|
|
274
|
+
fs.removeSync(outputPath);
|
|
275
|
+
fs.mkdirSync(outputPath, { recursive: true });
|
|
276
|
+
|
|
277
|
+
const zip =
|
|
278
|
+
partPaths.length > 0
|
|
279
|
+
? new AdmZip(Buffer.concat(partPaths.map((partPath) => fs.readFileSync(partPath))))
|
|
280
|
+
: new AdmZip(zipPath);
|
|
281
|
+
|
|
282
|
+
zip.extractAllTo(outputPath, true);
|
|
283
|
+
|
|
284
|
+
logger.warn('unzip build', {
|
|
285
|
+
source: partPaths.length > 0 ? partPaths : [zipPath],
|
|
286
|
+
outputPath,
|
|
287
|
+
splitParts: partPaths.length,
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
outputPath,
|
|
292
|
+
zipPath,
|
|
293
|
+
partPaths,
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
|
|
77
297
|
/** @type {string} Default XSL sitemap template used when no `sitemap` source file exists in the public directory. */
|
|
78
298
|
const defaultSitemapXsl = `<?xml version="1.0" encoding="UTF-8"?>
|
|
79
299
|
<xsl:stylesheet version="1.0"
|
|
@@ -233,6 +453,7 @@ const defaultSitemapXsl = `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
233
453
|
* @param {Array} options.liveClientBuildPaths - List of paths to build incrementally.
|
|
234
454
|
* @param {Array} options.instances - List of instances to build.
|
|
235
455
|
* @param {boolean} options.buildZip - Whether to create zip files of the builds.
|
|
456
|
+
* @param {string|number} options.split - Optional zip split size in MB.
|
|
236
457
|
* @param {boolean} options.fullBuild - Whether to perform a full build.
|
|
237
458
|
* @param {boolean} options.iconsBuild - Whether to build icons.
|
|
238
459
|
* @returns {Promise<void>} - Promise that resolves when the build is complete.
|
|
@@ -245,6 +466,7 @@ const buildClient = async (
|
|
|
245
466
|
liveClientBuildPaths: [],
|
|
246
467
|
instances: [],
|
|
247
468
|
buildZip: false,
|
|
469
|
+
split: '',
|
|
248
470
|
fullBuild: false,
|
|
249
471
|
iconsBuild: false,
|
|
250
472
|
},
|
|
@@ -311,35 +533,18 @@ const buildClient = async (
|
|
|
311
533
|
|
|
312
534
|
buildAcmeChallengePath(acmeChallengeFullPath);
|
|
313
535
|
|
|
314
|
-
if (publicClientId && publicClientId.startsWith('html-website-templates')) {
|
|
315
|
-
if (!fs.existsSync(`/home/dd/html-website-templates/`))
|
|
316
|
-
shellExec(`cd /home/dd && git clone https://github.com/designmodo/html-website-templates.git`);
|
|
317
|
-
if (!fs.existsSync(`${rootClientPath}/index.php`)) {
|
|
318
|
-
fs.copySync(`/home/dd/html-website-templates/${publicClientId.split('-publicClientId-')[1]}`, rootClientPath);
|
|
319
|
-
Underpost.repo.initLocalRepo({ path: rootClientPath });
|
|
320
|
-
shellExec(`cd ${rootClientPath} && git add . && git commit -m "Base template implementation"`);
|
|
321
|
-
// git remote add origin git@github.com:<username>/<repo>.git
|
|
322
|
-
fs.writeFileSync(`${rootClientPath}/.git/.htaccess`, `Deny from all`, 'utf8');
|
|
323
|
-
}
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
536
|
fs.removeSync(rootClientPath);
|
|
328
537
|
|
|
329
538
|
if (fs.existsSync(`./src/client/public/${publicClientId}`)) {
|
|
330
539
|
if (iconsBuild === true) await buildIcons({ publicClientId, metadata });
|
|
331
540
|
|
|
332
|
-
fs.copySync(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
filter: function (name) {
|
|
336
|
-
console.log(name);
|
|
337
|
-
return true;
|
|
338
|
-
},
|
|
339
|
-
} */,
|
|
340
|
-
);
|
|
541
|
+
fs.copySync(`./src/client/public/${publicClientId}`, rootClientPath, {
|
|
542
|
+
filter: (sourcePath) => !sourcePath.split(dir.sep).includes('.git'),
|
|
543
|
+
});
|
|
341
544
|
} else if (fs.existsSync(`./engine-private/src/client/public/${publicClientId}`)) {
|
|
342
|
-
fs.copySync(`./engine-private/src/client/public/${publicClientId}`, rootClientPath
|
|
545
|
+
fs.copySync(`./engine-private/src/client/public/${publicClientId}`, rootClientPath, {
|
|
546
|
+
filter: (sourcePath) => !sourcePath.split(dir.sep).includes('.git'),
|
|
547
|
+
});
|
|
343
548
|
}
|
|
344
549
|
if (dists)
|
|
345
550
|
for (const dist of dists) {
|
|
@@ -463,28 +668,18 @@ const buildClient = async (
|
|
|
463
668
|
for (const module of services) {
|
|
464
669
|
if (!fs.existsSync(`${rootClientPath}/services/${module}`))
|
|
465
670
|
fs.mkdirSync(`${rootClientPath}/services/${module}`, { recursive: true });
|
|
671
|
+
const moduleDir = `./src/client/services/${module}`;
|
|
672
|
+
if (!fs.existsSync(moduleDir)) continue;
|
|
466
673
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
674
|
+
const serviceFiles = fs
|
|
675
|
+
.readdirSync(moduleDir)
|
|
676
|
+
.filter((name) => name.endsWith('.service.js') || name.endsWith('.management.js'))
|
|
677
|
+
.sort();
|
|
471
678
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
basePath: 'services',
|
|
476
|
-
module,
|
|
477
|
-
baseHost,
|
|
478
|
-
minify: minifyBuild,
|
|
479
|
-
});
|
|
480
|
-
fs.writeFileSync(jsPublicPath, jsSrc, 'utf8');
|
|
481
|
-
}
|
|
482
|
-
}
|
|
679
|
+
for (const serviceFile of serviceFiles) {
|
|
680
|
+
const jsSrcPath = `${moduleDir}/${serviceFile}`;
|
|
681
|
+
const jsPublicPath = `${rootClientPath}/services/${module}/${serviceFile}`;
|
|
483
682
|
|
|
484
|
-
for (const module of services) {
|
|
485
|
-
if (fs.existsSync(`./src/client/services/${module}/${module}.management.js`)) {
|
|
486
|
-
const jsSrcPath = `./src/client/services/${module}/${module}.management.js`;
|
|
487
|
-
const jsPublicPath = `${rootClientPath}/services/${module}/${module}.management.js`;
|
|
488
683
|
if (enableLiveRebuild && !options.liveClientBuildPaths.find((p) => p.srcBuildPath === jsSrcPath)) continue;
|
|
489
684
|
|
|
490
685
|
const jsSrc = await transformClientJs(jsSrcPath, {
|
|
@@ -497,6 +692,30 @@ const buildClient = async (
|
|
|
497
692
|
});
|
|
498
693
|
fs.writeFileSync(jsPublicPath, jsSrc, 'utf8');
|
|
499
694
|
}
|
|
695
|
+
|
|
696
|
+
// Auto-build guest module files when user module is processed
|
|
697
|
+
if (module === 'user') {
|
|
698
|
+
const guestModuleDir = './src/client/services/user';
|
|
699
|
+
const guestServicePath = `${guestModuleDir}/guest.service.js`;
|
|
700
|
+
if (fs.existsSync(guestServicePath)) {
|
|
701
|
+
if (!fs.existsSync(`${rootClientPath}/services/user`))
|
|
702
|
+
fs.mkdirSync(`${rootClientPath}/services/user`, { recursive: true });
|
|
703
|
+
|
|
704
|
+
const guestJsPublicPath = `${rootClientPath}/services/user/guest.service.js`;
|
|
705
|
+
|
|
706
|
+
if (!enableLiveRebuild || options.liveClientBuildPaths.find((p) => p.srcBuildPath === guestServicePath)) {
|
|
707
|
+
const guestJsSrc = await transformClientJs(guestServicePath, {
|
|
708
|
+
dists,
|
|
709
|
+
proxyPath: path,
|
|
710
|
+
basePath: 'services',
|
|
711
|
+
module: 'user',
|
|
712
|
+
baseHost,
|
|
713
|
+
minify: minifyBuild,
|
|
714
|
+
});
|
|
715
|
+
fs.writeFileSync(guestJsPublicPath, guestJsSrc, 'utf8');
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
}
|
|
500
719
|
}
|
|
501
720
|
}
|
|
502
721
|
|
|
@@ -505,19 +724,24 @@ const buildClient = async (
|
|
|
505
724
|
const ssrPath = path === '/' ? path : `${path}/`;
|
|
506
725
|
const Render = await ssrFactory();
|
|
507
726
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
727
|
+
const swSrcPath = `./src/client/sw/core.sw.js`;
|
|
728
|
+
const swPublicPath = `${rootClientPath}/sw.js`;
|
|
729
|
+
const swShouldRebuild =
|
|
730
|
+
views && !(enableLiveRebuild && !options.liveClientBuildPaths.find((p) => p.srcBuildPath === swSrcPath));
|
|
731
|
+
// Transformed SW JS is held in memory; it gets prepended with renderPayload
|
|
732
|
+
// and written once below, after PRE_CACHED_RESOURCES are known.
|
|
733
|
+
let swTransformedJs = '';
|
|
734
|
+
if (swShouldRebuild) {
|
|
735
|
+
swTransformedJs = await transformClientJs(swSrcPath, {
|
|
736
|
+
dists,
|
|
737
|
+
proxyPath: path,
|
|
738
|
+
baseHost,
|
|
739
|
+
minify: minifyBuild,
|
|
740
|
+
externalizeBareImports: false,
|
|
741
|
+
});
|
|
742
|
+
}
|
|
520
743
|
|
|
744
|
+
if (views) {
|
|
521
745
|
if (
|
|
522
746
|
!(
|
|
523
747
|
enableLiveRebuild &&
|
|
@@ -527,9 +751,8 @@ const buildClient = async (
|
|
|
527
751
|
)
|
|
528
752
|
)
|
|
529
753
|
for (const view of views) {
|
|
530
|
-
const buildPath = `${
|
|
531
|
-
|
|
532
|
-
}${view.path === '/' ? view.path : `${view.path}/`}`;
|
|
754
|
+
const buildPath = `${rootClientPath[rootClientPath.length - 1] === '/' ? rootClientPath.slice(0, -1) : rootClientPath
|
|
755
|
+
}${view.path === '/' ? view.path : `${view.path}/`}`;
|
|
533
756
|
|
|
534
757
|
if (!fs.existsSync(buildPath)) fs.mkdirSync(buildPath, { recursive: true });
|
|
535
758
|
|
|
@@ -545,9 +768,8 @@ const buildClient = async (
|
|
|
545
768
|
fs.writeFileSync(`${buildPath}${buildId}.js`, jsSrc, 'utf8');
|
|
546
769
|
const title = metadata.title ? metadata.title : title;
|
|
547
770
|
|
|
548
|
-
const canonicalURL = `https://${host}${path}${
|
|
549
|
-
|
|
550
|
-
}`;
|
|
771
|
+
const canonicalURL = `https://${host}${path}${view.path === '/' ? (path === '/' ? '' : '/') : path === '/' ? `${view.path.slice(1)}/` : `${view.path}/`
|
|
772
|
+
}`;
|
|
551
773
|
|
|
552
774
|
let ssrHeadComponents = ``;
|
|
553
775
|
let ssrBodyComponents = ``;
|
|
@@ -681,12 +903,12 @@ const buildClient = async (
|
|
|
681
903
|
`${buildPath}index.html`,
|
|
682
904
|
minifyBuild
|
|
683
905
|
? await minify(htmlSrc, {
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
906
|
+
minifyCSS: true,
|
|
907
|
+
minifyJS: true,
|
|
908
|
+
collapseBooleanAttributes: true,
|
|
909
|
+
collapseInlineTagWhitespace: true,
|
|
910
|
+
collapseWhitespace: true,
|
|
911
|
+
})
|
|
690
912
|
: htmlSrc,
|
|
691
913
|
'utf8',
|
|
692
914
|
);
|
|
@@ -744,79 +966,85 @@ Sitemap: ${sitemapBaseUrl}/sitemap.xml`,
|
|
|
744
966
|
}
|
|
745
967
|
|
|
746
968
|
if (client) {
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
969
|
+
const proxyPrefix = path === '/' ? '' : path;
|
|
970
|
+
const buildIndexUrl = (routePath) => `${proxyPrefix}${routePath === '/' ? '' : routePath}/index.html`;
|
|
971
|
+
|
|
972
|
+
// SSR views: a single declarative array. The role of each view (regular
|
|
973
|
+
// page vs. offline/maintenance fallback) is expressed by per-entry flags;
|
|
974
|
+
// fallback-flagged views are also precached so the SW can serve them
|
|
975
|
+
// when the network is unreachable.
|
|
976
|
+
const ssrClientConf = confSSR[getCapVariableName(client)] || {};
|
|
977
|
+
const ssrViews = Array.isArray(ssrClientConf.views) ? ssrClientConf.views : [];
|
|
978
|
+
const PRE_CACHED_RESOURCES = [];
|
|
979
|
+
let offlineFallbackUrl = null;
|
|
980
|
+
let maintenanceFallbackUrl = null;
|
|
981
|
+
|
|
982
|
+
for (const view of ssrViews) {
|
|
983
|
+
const SsrComponent = await ssrFactory(`./src/client/ssr/views/${view.client}.js`);
|
|
984
|
+
|
|
985
|
+
const htmlSrc = Render({
|
|
986
|
+
title: view.title,
|
|
987
|
+
ssrPath,
|
|
988
|
+
ssrHeadComponents: '<base target="_top">',
|
|
989
|
+
ssrBodyComponents: SsrComponent(),
|
|
990
|
+
renderPayload: {
|
|
991
|
+
apiBaseProxyPath,
|
|
992
|
+
apiBaseHost,
|
|
993
|
+
apiBasePath: process.env.BASE_API,
|
|
994
|
+
version: Underpost.version,
|
|
995
|
+
...(isDevelopment ? { dev: true } : undefined),
|
|
996
|
+
},
|
|
997
|
+
renderApi: { JSONweb },
|
|
998
|
+
});
|
|
759
999
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
ssrPath,
|
|
768
|
-
ssrHeadComponents: '<base target="_top">',
|
|
769
|
-
ssrBodyComponents: SsrComponent(),
|
|
770
|
-
renderPayload: {
|
|
771
|
-
apiBaseProxyPath,
|
|
772
|
-
apiBaseHost,
|
|
773
|
-
apiBasePath: process.env.BASE_API,
|
|
774
|
-
version: Underpost.version,
|
|
775
|
-
...(isDevelopment ? { dev: true } : undefined),
|
|
776
|
-
},
|
|
777
|
-
renderApi: {
|
|
778
|
-
JSONweb,
|
|
779
|
-
},
|
|
780
|
-
});
|
|
781
|
-
|
|
782
|
-
const buildPath = `${
|
|
783
|
-
rootClientPath[rootClientPath.length - 1] === '/' ? rootClientPath.slice(0, -1) : rootClientPath
|
|
784
|
-
}${page.path === '/' ? page.path : `${page.path}/`}`;
|
|
785
|
-
|
|
786
|
-
PRE_CACHED_RESOURCES.push(`${path === '/' ? '' : path}${page.path === '/' ? '' : page.path}/index.html`);
|
|
787
|
-
|
|
788
|
-
if (!fs.existsSync(buildPath)) fs.mkdirSync(buildPath, { recursive: true });
|
|
789
|
-
|
|
790
|
-
const buildHtmlPath = `${buildPath}index.html`;
|
|
791
|
-
|
|
792
|
-
logger.info('ssr page build', buildHtmlPath);
|
|
793
|
-
|
|
794
|
-
fs.writeFileSync(
|
|
795
|
-
buildHtmlPath,
|
|
796
|
-
minifyBuild
|
|
797
|
-
? await minify(htmlSrc, {
|
|
798
|
-
minifyCSS: true,
|
|
799
|
-
minifyJS: true,
|
|
800
|
-
collapseBooleanAttributes: true,
|
|
801
|
-
collapseInlineTagWhitespace: true,
|
|
802
|
-
collapseWhitespace: true,
|
|
803
|
-
})
|
|
804
|
-
: htmlSrc,
|
|
805
|
-
'utf8',
|
|
806
|
-
);
|
|
807
|
-
}
|
|
1000
|
+
const buildPath = `${rootClientPath[rootClientPath.length - 1] === '/' ? rootClientPath.slice(0, -1) : rootClientPath
|
|
1001
|
+
}${view.path === '/' ? view.path : `${view.path}/`}`;
|
|
1002
|
+
|
|
1003
|
+
const indexUrl = buildIndexUrl(view.path);
|
|
1004
|
+
if (view.offlineDefault) {
|
|
1005
|
+
offlineFallbackUrl = indexUrl;
|
|
1006
|
+
PRE_CACHED_RESOURCES.push(indexUrl);
|
|
808
1007
|
}
|
|
1008
|
+
if (view.maintenanceDefault) {
|
|
1009
|
+
maintenanceFallbackUrl = indexUrl;
|
|
1010
|
+
PRE_CACHED_RESOURCES.push(indexUrl);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
if (!fs.existsSync(buildPath)) fs.mkdirSync(buildPath, { recursive: true });
|
|
1014
|
+
const buildHtmlPath = `${buildPath}index.html`;
|
|
1015
|
+
logger.info('ssr view build', buildHtmlPath);
|
|
1016
|
+
|
|
1017
|
+
fs.writeFileSync(
|
|
1018
|
+
buildHtmlPath,
|
|
1019
|
+
minifyBuild
|
|
1020
|
+
? await minify(htmlSrc, {
|
|
1021
|
+
minifyCSS: true,
|
|
1022
|
+
minifyJS: true,
|
|
1023
|
+
collapseBooleanAttributes: true,
|
|
1024
|
+
collapseInlineTagWhitespace: true,
|
|
1025
|
+
collapseWhitespace: true,
|
|
1026
|
+
})
|
|
1027
|
+
: htmlSrc,
|
|
1028
|
+
'utf8',
|
|
1029
|
+
);
|
|
809
1030
|
}
|
|
810
1031
|
|
|
811
|
-
{
|
|
1032
|
+
if (swShouldRebuild) {
|
|
1033
|
+
const cacheScope = path === '/' ? 'root' : path.replaceAll('/', '_');
|
|
812
1034
|
const renderPayload = {
|
|
813
1035
|
PRE_CACHED_RESOURCES: uniqueArray(PRE_CACHED_RESOURCES),
|
|
814
1036
|
PROXY_PATH: path,
|
|
1037
|
+
CACHE_PREFIX: `engine-core-${cacheScope}`,
|
|
1038
|
+
OFFLINE_URL: offlineFallbackUrl || buildIndexUrl('/offline'),
|
|
1039
|
+
MAINTENANCE_URL: maintenanceFallbackUrl || buildIndexUrl('/maintenance'),
|
|
815
1040
|
};
|
|
1041
|
+
|
|
1042
|
+
// Single write: prepend the payload prelude to the transformed SW JS.
|
|
816
1043
|
fs.writeFileSync(
|
|
817
|
-
|
|
1044
|
+
swPublicPath,
|
|
818
1045
|
`self.renderPayload = ${JSONweb(renderPayload)};
|
|
819
|
-
|
|
1046
|
+
self.__WB_DISABLE_DEV_LOGS = true;
|
|
1047
|
+
${swTransformedJs}`,
|
|
820
1048
|
'utf8',
|
|
821
1049
|
);
|
|
822
1050
|
}
|
|
@@ -838,13 +1066,24 @@ ${fs.readFileSync(`${rootClientPath}/sw.js`, 'utf8')}`,
|
|
|
838
1066
|
}
|
|
839
1067
|
|
|
840
1068
|
const buildId = `${host}-${path.replaceAll('/', '')}`;
|
|
1069
|
+
const zipPath = `./build/${buildId}.zip`;
|
|
1070
|
+
|
|
1071
|
+
logger.warn('write zip', zipPath);
|
|
841
1072
|
|
|
842
|
-
|
|
1073
|
+
zip.writeZip(zipPath);
|
|
843
1074
|
|
|
844
|
-
|
|
1075
|
+
if (options.split) {
|
|
1076
|
+
splitFileByMb({
|
|
1077
|
+
filePath: zipPath,
|
|
1078
|
+
partSizeMb: options.split,
|
|
1079
|
+
logger,
|
|
1080
|
+
});
|
|
1081
|
+
fs.removeSync(zipPath);
|
|
1082
|
+
logger.warn('removed original zip after split', { zipPath });
|
|
1083
|
+
}
|
|
845
1084
|
}
|
|
846
1085
|
}
|
|
847
1086
|
}
|
|
848
1087
|
};
|
|
849
1088
|
|
|
850
|
-
export { buildClient, copyNonExistingFiles };
|
|
1089
|
+
export { buildClient, copyNonExistingFiles, unzipClientBuild, mergeClientBuildZip };
|