@fecommunity/reactpress 3.7.0 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/reactpress-cli-shim.js +2 -6
- package/bin/reactpress-theme-client.js +2 -0
- package/bin/reactpress.js +1 -380
- package/out/.source-fingerprint-cli +1 -0
- package/out/bin/reactpress-cli-shim.d.ts +3 -0
- package/out/bin/reactpress-cli-shim.d.ts.map +1 -0
- package/out/bin/reactpress-cli-shim.js +28 -0
- package/out/bin/reactpress-cli-shim.js.map +1 -0
- package/out/bin/reactpress-theme-client.d.ts +3 -0
- package/out/bin/reactpress-theme-client.d.ts.map +1 -0
- package/out/bin/reactpress-theme-client.js +113 -0
- package/out/bin/reactpress-theme-client.js.map +1 -0
- package/out/bin/reactpress.d.ts +3 -0
- package/out/bin/reactpress.d.ts.map +1 -0
- package/out/bin/reactpress.js +534 -0
- package/out/bin/reactpress.js.map +1 -0
- package/out/core/services/config.d.ts +12 -0
- package/out/core/services/config.d.ts.map +1 -0
- package/out/core/services/config.js +137 -0
- package/out/core/services/config.js.map +1 -0
- package/out/core/services/database/index.d.ts +17 -0
- package/out/core/services/database/index.d.ts.map +1 -0
- package/out/core/services/database/index.js +242 -0
- package/out/core/services/database/index.js.map +1 -0
- package/out/core/services/database/mysql.d.ts +14 -0
- package/out/core/services/database/mysql.d.ts.map +1 -0
- package/out/core/services/database/mysql.js +82 -0
- package/out/core/services/database/mysql.js.map +1 -0
- package/out/core/services/database/profile.d.ts +6 -0
- package/out/core/services/database/profile.d.ts.map +1 -0
- package/out/core/services/database/profile.js +60 -0
- package/out/core/services/database/profile.js.map +1 -0
- package/out/core/services/database/sqlite.d.ts +10 -0
- package/out/core/services/database/sqlite.d.ts.map +1 -0
- package/out/core/services/database/sqlite.js +73 -0
- package/out/core/services/database/sqlite.js.map +1 -0
- package/out/core/services/exec.d.ts +21 -0
- package/out/core/services/exec.d.ts.map +1 -0
- package/out/core/services/exec.js +56 -0
- package/out/core/services/exec.js.map +1 -0
- package/out/core/services/init.d.ts +11 -0
- package/out/core/services/init.d.ts.map +1 -0
- package/out/core/services/init.js +60 -0
- package/out/core/services/init.js.map +1 -0
- package/out/core/services/local-site.d.ts +24 -0
- package/out/core/services/local-site.d.ts.map +1 -0
- package/out/core/services/local-site.js +144 -0
- package/out/core/services/local-site.js.map +1 -0
- package/out/core/utils/cli-context.d.ts +3 -0
- package/out/core/utils/cli-context.d.ts.map +1 -0
- package/out/core/utils/cli-context.js +12 -0
- package/out/core/utils/cli-context.js.map +1 -0
- package/out/core/utils/paths.d.ts +20 -0
- package/out/core/utils/paths.d.ts.map +1 -0
- package/out/core/utils/paths.js +34 -0
- package/out/core/utils/paths.js.map +1 -0
- package/out/core/utils/platform.d.ts +7 -0
- package/out/core/utils/platform.d.ts.map +1 -0
- package/out/core/utils/platform.js +28 -0
- package/out/core/utils/platform.js.map +1 -0
- package/out/core/utils/port.d.ts +4 -0
- package/out/core/utils/port.d.ts.map +1 -0
- package/out/core/utils/port.js +32 -0
- package/out/core/utils/port.js.map +1 -0
- package/out/lib/api-dev-runner.d.ts +3 -0
- package/out/lib/api-dev-runner.d.ts.map +1 -0
- package/{lib → out/lib}/api-dev-runner.js +4 -1
- package/out/lib/api-dev-runner.js.map +1 -0
- package/out/lib/api-dev.d.ts +2 -0
- package/out/lib/api-dev.d.ts.map +1 -0
- package/out/lib/api-dev.js +101 -0
- package/out/lib/api-dev.js.map +1 -0
- package/out/lib/bootstrap.d.ts +18 -0
- package/out/lib/bootstrap.d.ts.map +1 -0
- package/out/lib/bootstrap.js +93 -0
- package/out/lib/bootstrap.js.map +1 -0
- package/out/lib/build.d.ts +2 -0
- package/out/lib/build.d.ts.map +1 -0
- package/out/lib/build.js +191 -0
- package/out/lib/build.js.map +1 -0
- package/out/lib/db-backup.d.ts +2 -0
- package/out/lib/db-backup.d.ts.map +1 -0
- package/out/lib/db-backup.js +68 -0
- package/out/lib/db-backup.js.map +1 -0
- package/out/lib/dev-banner.d.ts +2 -0
- package/out/lib/dev-banner.d.ts.map +1 -0
- package/out/lib/dev-banner.js +102 -0
- package/out/lib/dev-banner.js.map +1 -0
- package/out/lib/dev-child-io.d.ts +2 -0
- package/out/lib/dev-child-io.d.ts.map +1 -0
- package/out/lib/dev-child-io.js +80 -0
- package/out/lib/dev-child-io.js.map +1 -0
- package/out/lib/dev-log.d.ts +2 -0
- package/out/lib/dev-log.d.ts.map +1 -0
- package/out/lib/dev-log.js +64 -0
- package/out/lib/dev-log.js.map +1 -0
- package/out/lib/dev-session.d.ts +2 -0
- package/out/lib/dev-session.d.ts.map +1 -0
- package/out/lib/dev-session.js +95 -0
- package/out/lib/dev-session.js.map +1 -0
- package/out/lib/dev.d.ts +2 -0
- package/out/lib/dev.d.ts.map +1 -0
- package/out/lib/dev.js +906 -0
- package/out/lib/dev.js.map +1 -0
- package/out/lib/docker.d.ts +2 -0
- package/out/lib/docker.d.ts.map +1 -0
- package/out/lib/docker.js +398 -0
- package/out/lib/docker.js.map +1 -0
- package/out/lib/doctor.d.ts +2 -0
- package/out/lib/doctor.d.ts.map +1 -0
- package/out/lib/doctor.js +260 -0
- package/out/lib/doctor.js.map +1 -0
- package/out/lib/health-parse.d.ts +5 -0
- package/out/lib/health-parse.d.ts.map +1 -0
- package/out/lib/health-parse.js +36 -0
- package/out/lib/health-parse.js.map +1 -0
- package/out/lib/health-parse.test.d.ts +2 -0
- package/out/lib/health-parse.test.d.ts.map +1 -0
- package/out/lib/health-parse.test.js +19 -0
- package/out/lib/health-parse.test.js.map +1 -0
- package/out/lib/http.d.ts +2 -0
- package/out/lib/http.d.ts.map +1 -0
- package/out/lib/http.js +234 -0
- package/out/lib/http.js.map +1 -0
- package/out/lib/i18n/index.d.ts +2 -0
- package/out/lib/i18n/index.d.ts.map +1 -0
- package/out/lib/i18n/index.js +29 -0
- package/out/lib/i18n/index.js.map +1 -0
- package/out/lib/i18n/strings.d.ts +2 -0
- package/out/lib/i18n/strings.d.ts.map +1 -0
- package/out/lib/i18n/strings.js +1140 -0
- package/out/lib/i18n/strings.js.map +1 -0
- package/out/lib/lifecycle.d.ts +2 -0
- package/out/lib/lifecycle.d.ts.map +1 -0
- package/out/lib/lifecycle.js +169 -0
- package/out/lib/lifecycle.js.map +1 -0
- package/out/lib/nginx.d.ts +2 -0
- package/out/lib/nginx.d.ts.map +1 -0
- package/out/lib/nginx.js +618 -0
- package/out/lib/nginx.js.map +1 -0
- package/out/lib/paths.d.ts +2 -0
- package/out/lib/paths.d.ts.map +1 -0
- package/out/lib/paths.js +106 -0
- package/out/lib/paths.js.map +1 -0
- package/out/lib/plugin-build.d.ts +2 -0
- package/out/lib/plugin-build.d.ts.map +1 -0
- package/out/lib/plugin-build.js +104 -0
- package/out/lib/plugin-build.js.map +1 -0
- package/out/lib/plugin-cli.d.ts +2 -0
- package/out/lib/plugin-cli.d.ts.map +1 -0
- package/out/lib/plugin-cli.js +142 -0
- package/out/lib/plugin-cli.js.map +1 -0
- package/out/lib/pm2.d.ts +2 -0
- package/out/lib/pm2.d.ts.map +1 -0
- package/out/lib/pm2.js +32 -0
- package/out/lib/pm2.js.map +1 -0
- package/out/lib/ports.d.ts +2 -0
- package/out/lib/ports.d.ts.map +1 -0
- package/out/lib/ports.js +394 -0
- package/out/lib/ports.js.map +1 -0
- package/out/lib/process.d.ts +2 -0
- package/out/lib/process.d.ts.map +1 -0
- package/out/lib/process.js +47 -0
- package/out/lib/process.js.map +1 -0
- package/out/lib/prod-memory.d.ts +6 -0
- package/out/lib/prod-memory.d.ts.map +1 -0
- package/out/lib/prod-memory.js +57 -0
- package/out/lib/prod-memory.js.map +1 -0
- package/out/lib/project-type.d.ts +2 -0
- package/out/lib/project-type.d.ts.map +1 -0
- package/out/lib/project-type.js +77 -0
- package/out/lib/project-type.js.map +1 -0
- package/out/lib/publish.d.ts +3 -0
- package/out/lib/publish.d.ts.map +1 -0
- package/out/lib/publish.js +388 -0
- package/out/lib/publish.js.map +1 -0
- package/out/lib/remote-dev.d.ts +2 -0
- package/out/lib/remote-dev.d.ts.map +1 -0
- package/out/lib/remote-dev.js +158 -0
- package/out/lib/remote-dev.js.map +1 -0
- package/out/lib/root.d.ts +2 -0
- package/out/lib/root.d.ts.map +1 -0
- package/out/lib/root.js +85 -0
- package/out/lib/root.js.map +1 -0
- package/out/lib/spawn.d.ts +2 -0
- package/out/lib/spawn.d.ts.map +1 -0
- package/out/lib/spawn.js +96 -0
- package/out/lib/spawn.js.map +1 -0
- package/out/lib/status.d.ts +2 -0
- package/out/lib/status.d.ts.map +1 -0
- package/out/lib/status.js +78 -0
- package/out/lib/status.js.map +1 -0
- package/out/lib/theme-catalog.d.ts +2 -0
- package/out/lib/theme-catalog.d.ts.map +1 -0
- package/out/lib/theme-catalog.js +6 -0
- package/out/lib/theme-catalog.js.map +1 -0
- package/out/lib/theme-cli.d.ts +2 -0
- package/out/lib/theme-cli.d.ts.map +1 -0
- package/out/lib/theme-cli.js +50 -0
- package/out/lib/theme-cli.js.map +1 -0
- package/out/lib/theme-dev.d.ts +2 -0
- package/out/lib/theme-dev.d.ts.map +1 -0
- package/out/lib/theme-dev.js +759 -0
- package/out/lib/theme-dev.js.map +1 -0
- package/out/lib/theme-env.d.ts +2 -0
- package/out/lib/theme-env.d.ts.map +1 -0
- package/out/lib/theme-env.js +101 -0
- package/out/lib/theme-env.js.map +1 -0
- package/out/lib/theme-install.d.ts +2 -0
- package/out/lib/theme-install.d.ts.map +1 -0
- package/out/lib/theme-install.js +363 -0
- package/out/lib/theme-install.js.map +1 -0
- package/out/lib/theme-lock.d.ts +2 -0
- package/out/lib/theme-lock.d.ts.map +1 -0
- package/out/lib/theme-lock.js +70 -0
- package/out/lib/theme-lock.js.map +1 -0
- package/out/lib/theme-paths.d.ts +2 -0
- package/out/lib/theme-paths.d.ts.map +1 -0
- package/out/lib/theme-paths.js +73 -0
- package/out/lib/theme-paths.js.map +1 -0
- package/out/lib/theme-placeholder-cover.d.ts +13 -0
- package/out/lib/theme-placeholder-cover.d.ts.map +1 -0
- package/out/lib/theme-placeholder-cover.js +95 -0
- package/out/lib/theme-placeholder-cover.js.map +1 -0
- package/out/lib/theme-preview-frame.d.ts +2 -0
- package/out/lib/theme-preview-frame.d.ts.map +1 -0
- package/out/lib/theme-preview-frame.js +107 -0
- package/out/lib/theme-preview-frame.js.map +1 -0
- package/out/lib/theme-preview-pool.d.ts +2 -0
- package/out/lib/theme-preview-pool.d.ts.map +1 -0
- package/out/lib/theme-preview-pool.js +484 -0
- package/out/lib/theme-preview-pool.js.map +1 -0
- package/out/lib/theme-preview-proxy.d.ts +2 -0
- package/out/lib/theme-preview-proxy.d.ts.map +1 -0
- package/out/lib/theme-preview-proxy.js +101 -0
- package/out/lib/theme-preview-proxy.js.map +1 -0
- package/out/lib/theme-prod.d.ts +2 -0
- package/out/lib/theme-prod.d.ts.map +1 -0
- package/out/lib/theme-prod.js +400 -0
- package/out/lib/theme-prod.js.map +1 -0
- package/out/lib/theme-registry.d.ts +2 -0
- package/out/lib/theme-registry.d.ts.map +1 -0
- package/out/lib/theme-registry.js +135 -0
- package/out/lib/theme-registry.js.map +1 -0
- package/out/lib/theme-runtime.d.ts +2 -0
- package/out/lib/theme-runtime.d.ts.map +1 -0
- package/out/lib/theme-runtime.js +344 -0
- package/out/lib/theme-runtime.js.map +1 -0
- package/out/lib/theme-sources.d.ts +2 -0
- package/out/lib/theme-sources.d.ts.map +1 -0
- package/out/lib/theme-sources.js +347 -0
- package/out/lib/theme-sources.js.map +1 -0
- package/out/lib/theme-warmup.d.ts +2 -0
- package/out/lib/theme-warmup.d.ts.map +1 -0
- package/out/lib/theme-warmup.js +167 -0
- package/out/lib/theme-warmup.js.map +1 -0
- package/out/lib/toolkit-build.d.ts +2 -0
- package/out/lib/toolkit-build.d.ts.map +1 -0
- package/out/lib/toolkit-build.js +57 -0
- package/out/lib/toolkit-build.js.map +1 -0
- package/out/types/config.d.ts +57 -0
- package/out/types/config.d.ts.map +1 -0
- package/out/types/config.js +3 -0
- package/out/types/config.js.map +1 -0
- package/out/ui/banner.d.ts +2 -0
- package/out/ui/banner.d.ts.map +1 -0
- package/out/ui/banner.js +358 -0
- package/out/ui/banner.js.map +1 -0
- package/out/ui/interactive.d.ts +2 -0
- package/out/ui/interactive.d.ts.map +1 -0
- package/out/ui/interactive.js +328 -0
- package/out/ui/interactive.js.map +1 -0
- package/out/ui/theme.d.ts +2 -0
- package/out/ui/theme.d.ts.map +1 -0
- package/out/ui/theme.js +250 -0
- package/out/ui/theme.js.map +1 -0
- package/package.json +13 -7
- package/server/dist/common/api-messages.d.ts +9 -0
- package/server/dist/common/api-messages.js +9 -0
- package/server/dist/common/api-messages.js.map +1 -1
- package/server/dist/database/typeorm-options.d.ts +3 -0
- package/server/dist/database/typeorm-options.js +60 -0
- package/server/dist/database/typeorm-options.js.map +1 -0
- package/server/dist/modules/api-key/api-key.controller.js.map +1 -1
- package/server/dist/modules/api-key/api-key.entity.js.map +1 -1
- package/server/dist/modules/api-key/api-key.guard.js +2 -3
- package/server/dist/modules/api-key/api-key.guard.js.map +1 -1
- package/server/dist/modules/api-key/api-key.module.js.map +1 -1
- package/server/dist/modules/api-key/api-key.service.js +1 -1
- package/server/dist/modules/api-key/api-key.service.js.map +1 -1
- package/server/dist/modules/article/article-revision.entity.js +3 -3
- package/server/dist/modules/article/article-revision.entity.js.map +1 -1
- package/server/dist/modules/article/article-slug.util.d.ts +2 -0
- package/server/dist/modules/article/article-slug.util.js +19 -0
- package/server/dist/modules/article/article-slug.util.js.map +1 -0
- package/server/dist/modules/article/scheduled-publish.service.js.map +1 -1
- package/server/dist/modules/bootstrap/bootstrap.constants.d.ts +20 -0
- package/server/dist/modules/bootstrap/bootstrap.constants.js +171 -0
- package/server/dist/modules/bootstrap/bootstrap.constants.js.map +1 -0
- package/server/dist/modules/bootstrap/bootstrap.service.d.ts +22 -0
- package/server/dist/modules/bootstrap/bootstrap.service.js +183 -0
- package/server/dist/modules/bootstrap/bootstrap.service.js.map +1 -0
- package/server/dist/modules/bootstrap/install-locale.d.ts +2 -0
- package/server/dist/modules/bootstrap/install-locale.js +11 -0
- package/server/dist/modules/bootstrap/install-locale.js.map +1 -0
- package/server/dist/modules/extension/extension.module.d.ts +9 -0
- package/server/dist/modules/extension/extension.module.js +50 -0
- package/server/dist/modules/extension/extension.module.js.map +1 -0
- package/server/dist/modules/extension/plugin-loader.service.d.ts +12 -0
- package/server/dist/modules/extension/plugin-loader.service.js +96 -0
- package/server/dist/modules/extension/plugin-loader.service.js.map +1 -0
- package/server/dist/modules/extension/plugin-registry.bridge.d.ts +3 -0
- package/server/dist/modules/extension/plugin-registry.bridge.js +44 -0
- package/server/dist/modules/extension/plugin-registry.bridge.js.map +1 -0
- package/server/dist/modules/extension/plugin.controller.d.ts +22 -0
- package/server/dist/modules/extension/plugin.controller.js +155 -0
- package/server/dist/modules/extension/plugin.controller.js.map +1 -0
- package/server/dist/modules/extension/plugin.service.d.ts +52 -0
- package/server/dist/modules/extension/plugin.service.js +391 -0
- package/server/dist/modules/extension/plugin.service.js.map +1 -0
- package/server/dist/modules/extension/preview-draft.store.d.ts +13 -0
- package/server/dist/modules/extension/preview-draft.store.js +41 -0
- package/server/dist/modules/extension/preview-draft.store.js.map +1 -0
- package/server/dist/modules/extension/theme-registry.bridge.d.ts +56 -0
- package/server/dist/modules/extension/theme-registry.bridge.js +46 -0
- package/server/dist/modules/extension/theme-registry.bridge.js.map +1 -0
- package/server/dist/modules/extension/theme.controller.d.ts +66 -0
- package/server/dist/modules/extension/theme.controller.js +301 -0
- package/server/dist/modules/extension/theme.controller.js.map +1 -0
- package/server/dist/modules/extension/theme.service.d.ts +140 -0
- package/server/dist/modules/extension/theme.service.js +1039 -0
- package/server/dist/modules/extension/theme.service.js.map +1 -0
- package/server/dist/modules/file/file-optimization.controller.d.ts +12 -0
- package/server/dist/modules/file/file-optimization.controller.js +79 -0
- package/server/dist/modules/file/file-optimization.controller.js.map +1 -0
- package/server/dist/modules/file/file-optimization.service.d.ts +36 -0
- package/server/dist/modules/file/file-optimization.service.js +385 -0
- package/server/dist/modules/file/file-optimization.service.js.map +1 -0
- package/server/dist/modules/file/file-optimization.types.d.ts +66 -0
- package/server/dist/modules/file/file-optimization.types.js +5 -0
- package/server/dist/modules/file/file-optimization.types.js.map +1 -0
- package/server/dist/modules/file/image-optimizer-plugin.guard.d.ts +7 -0
- package/server/dist/modules/file/image-optimizer-plugin.guard.js +33 -0
- package/server/dist/modules/file/image-optimizer-plugin.guard.js.map +1 -0
- package/server/dist/modules/health/health.controller.js +2 -4
- package/server/dist/modules/health/health.controller.js.map +1 -1
- package/server/dist/modules/health/health.module.js.map +1 -1
- package/server/dist/modules/hook/hook.module.d.ts +2 -0
- package/server/dist/modules/hook/hook.module.js +22 -0
- package/server/dist/modules/hook/hook.module.js.map +1 -0
- package/server/dist/modules/hook/hook.service.d.ts +26 -0
- package/server/dist/modules/hook/hook.service.js +105 -0
- package/server/dist/modules/hook/hook.service.js.map +1 -0
- package/server/dist/modules/webhook/webhook.controller.js.map +1 -1
- package/server/dist/modules/webhook/webhook.entity.js.map +1 -1
- package/server/dist/modules/webhook/webhook.module.js.map +1 -1
- package/server/dist/modules/webhook/webhook.service.d.ts +1 -1
- package/server/dist/modules/webhook/webhook.service.js +5 -2
- package/server/dist/modules/webhook/webhook.service.js.map +1 -1
- package/server/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/server/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
- package/server/dist/tsconfig.tsbuildinfo +1 -0
- package/server/dist/utils/image-processor.util.d.ts +23 -0
- package/server/dist/utils/image-processor.util.js +88 -0
- package/server/dist/utils/image-processor.util.js.map +1 -0
- package/server/dist/utils/local-api-quiet.util.d.ts +1 -0
- package/server/dist/utils/local-api-quiet.util.js +8 -0
- package/server/dist/utils/local-api-quiet.util.js.map +1 -0
- package/server/dist/utils/project-root.util.d.ts +2 -0
- package/server/dist/utils/project-root.util.js +42 -0
- package/server/dist/utils/project-root.util.js.map +1 -0
- package/server/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/server/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
- package/templates/config.local.json +13 -0
- package/templates/env.local.default +10 -0
- package/templates/theme-catalog.json +27 -0
- package/lib/api-dev.js +0 -89
- package/lib/bootstrap.js +0 -114
- package/lib/build.js +0 -162
- package/lib/db-backup.js +0 -67
- package/lib/dev-banner.js +0 -72
- package/lib/dev.js +0 -141
- package/lib/docker.js +0 -275
- package/lib/doctor.js +0 -266
- package/lib/http.js +0 -182
- package/lib/i18n/index.js +0 -32
- package/lib/i18n/strings.js +0 -846
- package/lib/lifecycle.js +0 -190
- package/lib/nginx.js +0 -342
- package/lib/paths.js +0 -108
- package/lib/pm2.js +0 -32
- package/lib/process.js +0 -45
- package/lib/project-type.js +0 -72
- package/lib/publish.js +0 -968
- package/lib/root.js +0 -88
- package/lib/spawn.js +0 -92
- package/lib/status.js +0 -132
- package/ui/banner.js +0 -441
- package/ui/interactive.js +0 -380
- package/ui/theme.js +0 -265
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
/**
|
|
5
|
+
* ReactPress theme sources — unified model.
|
|
6
|
+
*
|
|
7
|
+
* TWO SOURCES (how a theme is installed into `.reactpress/runtime/{id}/`):
|
|
8
|
+
* local — copy from `themes/{id}/` (must contain `theme.json`)
|
|
9
|
+
* npm — `npm pack` a package spec, then copy into runtime
|
|
10
|
+
*
|
|
11
|
+
* NPM REGISTRY SPEC (canonical):
|
|
12
|
+
* themes/{anchor}/package.json → dependencies + reactpress.theme (see npm-catalog.schema.json)
|
|
13
|
+
* themes/package.json → reactpress.npm: ["{anchor}", …]
|
|
14
|
+
*
|
|
15
|
+
* THREE LAYERS:
|
|
16
|
+
* themes/ registry — what is available to install
|
|
17
|
+
* .reactpress/runtime/ materialized — installed copies the CLI runs
|
|
18
|
+
* DB + *.json activation — which theme is active / previewing
|
|
19
|
+
*
|
|
20
|
+
* Legacy: reactpress.bundled / catalog keys; inline objects in reactpress.npm array.
|
|
21
|
+
*/
|
|
22
|
+
const fs = require('fs');
|
|
23
|
+
const path = require('path');
|
|
24
|
+
const { THEMES_PACKAGE_REL, themesRoot } = require('./theme-paths');
|
|
25
|
+
function readJsonFile(filePath) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function isNonEmptyString(value) {
|
|
34
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
35
|
+
}
|
|
36
|
+
function formatNpmInstallSpec(name, version) {
|
|
37
|
+
return `${name.trim()}@${version.trim()}`;
|
|
38
|
+
}
|
|
39
|
+
/** Split `package@version` into structured dependency (supports scoped packages). */
|
|
40
|
+
function parseNpmSpecToDependency(spec) {
|
|
41
|
+
const trimmed = String(spec || '').trim();
|
|
42
|
+
const atIndex = trimmed.lastIndexOf('@');
|
|
43
|
+
if (atIndex <= 0)
|
|
44
|
+
return null;
|
|
45
|
+
const name = trimmed.slice(0, atIndex).trim();
|
|
46
|
+
const version = trimmed.slice(atIndex + 1).trim();
|
|
47
|
+
if (!name || !version)
|
|
48
|
+
return null;
|
|
49
|
+
return { name, version };
|
|
50
|
+
}
|
|
51
|
+
function readPackageDependencies(raw) {
|
|
52
|
+
const deps = raw?.dependencies;
|
|
53
|
+
if (!deps || typeof deps !== 'object')
|
|
54
|
+
return null;
|
|
55
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
56
|
+
if (isNonEmptyString(name) && isNonEmptyString(version)) {
|
|
57
|
+
return { name: name.trim(), version: String(version).trim() };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
function readThemeDependency(theme, raw) {
|
|
63
|
+
const fromDeps = raw ? readPackageDependencies(raw) : null;
|
|
64
|
+
if (fromDeps)
|
|
65
|
+
return fromDeps;
|
|
66
|
+
if (theme && typeof theme === 'object') {
|
|
67
|
+
const dep = theme.dependency;
|
|
68
|
+
if (dep && typeof dep === 'object' && isNonEmptyString(dep.name) && isNonEmptyString(dep.version)) {
|
|
69
|
+
return { name: dep.name.trim(), version: dep.version.trim() };
|
|
70
|
+
}
|
|
71
|
+
if (isNonEmptyString(theme.npm)) {
|
|
72
|
+
return parseNpmSpecToDependency(theme.npm);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const pkgName = typeof raw?.name === 'string' ? raw.name : undefined;
|
|
76
|
+
const pkgVersion = typeof raw?.version === 'string' ? raw.version : undefined;
|
|
77
|
+
if (isNonEmptyString(pkgName) && isNonEmptyString(pkgVersion)) {
|
|
78
|
+
return { name: pkgName.trim(), version: pkgVersion.trim() };
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
function resolveThemeNpmSpec(theme, raw) {
|
|
83
|
+
const dependency = readThemeDependency(theme, raw);
|
|
84
|
+
return dependency ? formatNpmInstallSpec(dependency.name, dependency.version) : undefined;
|
|
85
|
+
}
|
|
86
|
+
function isValidNpmCatalogEntry(entry) {
|
|
87
|
+
return (entry &&
|
|
88
|
+
isNonEmptyString(entry.id) &&
|
|
89
|
+
isNonEmptyString(entry.name) &&
|
|
90
|
+
(isNonEmptyString(entry.npm) ||
|
|
91
|
+
(entry.dependency &&
|
|
92
|
+
typeof entry.dependency === 'object' &&
|
|
93
|
+
isNonEmptyString(entry.dependency.name) &&
|
|
94
|
+
isNonEmptyString(entry.dependency.version))));
|
|
95
|
+
}
|
|
96
|
+
function normalizeNpmCatalogEntry(entry) {
|
|
97
|
+
if (!entry || !isNonEmptyString(entry.id) || !isNonEmptyString(entry.name))
|
|
98
|
+
return null;
|
|
99
|
+
let dependency = entry.dependency &&
|
|
100
|
+
typeof entry.dependency === 'object' &&
|
|
101
|
+
isNonEmptyString(entry.dependency.name) &&
|
|
102
|
+
isNonEmptyString(entry.dependency.version)
|
|
103
|
+
? { name: entry.dependency.name.trim(), version: entry.dependency.version.trim() }
|
|
104
|
+
: undefined;
|
|
105
|
+
let npmSpec = isNonEmptyString(entry.npm) ? entry.npm.trim() : undefined;
|
|
106
|
+
if (dependency) {
|
|
107
|
+
npmSpec = formatNpmInstallSpec(dependency.name, dependency.version);
|
|
108
|
+
}
|
|
109
|
+
else if (npmSpec) {
|
|
110
|
+
dependency = parseNpmSpecToDependency(npmSpec) ?? undefined;
|
|
111
|
+
}
|
|
112
|
+
if (!npmSpec)
|
|
113
|
+
return null;
|
|
114
|
+
return {
|
|
115
|
+
id: entry.id.trim(),
|
|
116
|
+
name: entry.name,
|
|
117
|
+
version: typeof entry.version === 'string' ? entry.version : '0.0.0',
|
|
118
|
+
description: entry.description,
|
|
119
|
+
author: entry.author,
|
|
120
|
+
authorUri: entry.authorUri,
|
|
121
|
+
themeUri: entry.themeUri,
|
|
122
|
+
previewUrl: entry.previewUrl,
|
|
123
|
+
cover: entry.cover,
|
|
124
|
+
tags: Array.isArray(entry.tags) ? entry.tags : undefined,
|
|
125
|
+
dependency,
|
|
126
|
+
npm: npmSpec,
|
|
127
|
+
featured: entry.featured === true,
|
|
128
|
+
requires: entry.requires,
|
|
129
|
+
dir: typeof entry.dir === 'string' ? entry.dir.trim() : undefined,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Read `themes/package.json` registry lists (local ids + npm catalog refs). */
|
|
133
|
+
function readThemesRegistryMeta(projectRoot) {
|
|
134
|
+
const pkgPath = path.join(path.resolve(projectRoot), THEMES_PACKAGE_REL);
|
|
135
|
+
if (!fs.existsSync(pkgPath)) {
|
|
136
|
+
return { local: [], npm: [] };
|
|
137
|
+
}
|
|
138
|
+
const raw = readJsonFile(pkgPath);
|
|
139
|
+
if (!raw?.reactpress || typeof raw.reactpress !== 'object') {
|
|
140
|
+
return { local: [], npm: [] };
|
|
141
|
+
}
|
|
142
|
+
const reactpress = raw.reactpress;
|
|
143
|
+
const localSource = reactpress.local ?? reactpress.bundled;
|
|
144
|
+
const npmSource = reactpress.npm ?? reactpress.catalog;
|
|
145
|
+
const local = Array.isArray(localSource)
|
|
146
|
+
? localSource.filter((id) => isNonEmptyString(id)).map((id) => id.trim())
|
|
147
|
+
: [];
|
|
148
|
+
const npm = Array.isArray(npmSource) ? npmSource : [];
|
|
149
|
+
return { local, npm };
|
|
150
|
+
}
|
|
151
|
+
/** @deprecated Use readThemesRegistryMeta — kept for existing imports. */
|
|
152
|
+
function readThemesPackageMeta(projectRoot) {
|
|
153
|
+
const { local, npm } = readThemesRegistryMeta(projectRoot);
|
|
154
|
+
const catalog = npm
|
|
155
|
+
.map((item) => {
|
|
156
|
+
if (isNonEmptyString(item))
|
|
157
|
+
return item.trim();
|
|
158
|
+
if (item && typeof item === 'object' && isNonEmptyString(item.id))
|
|
159
|
+
return item.id.trim();
|
|
160
|
+
return null;
|
|
161
|
+
})
|
|
162
|
+
.filter(Boolean);
|
|
163
|
+
return { bundled: local, catalog, local, npm };
|
|
164
|
+
}
|
|
165
|
+
function readNpmEntryFromPackageDir(catalogDir, pkgPath) {
|
|
166
|
+
const raw = readJsonFile(pkgPath);
|
|
167
|
+
if (!raw)
|
|
168
|
+
return null;
|
|
169
|
+
const theme = raw.reactpress && typeof raw.reactpress === 'object' && raw.reactpress.theme
|
|
170
|
+
? raw.reactpress.theme
|
|
171
|
+
: null;
|
|
172
|
+
if (!theme || !isNonEmptyString(theme.id))
|
|
173
|
+
return null;
|
|
174
|
+
const pkgVersion = typeof raw.version === 'string' ? raw.version : '0.0.0';
|
|
175
|
+
const dependency = readThemeDependency(theme, raw);
|
|
176
|
+
const npmSpec = dependency ? formatNpmInstallSpec(dependency.name, dependency.version) : undefined;
|
|
177
|
+
if (!npmSpec)
|
|
178
|
+
return null;
|
|
179
|
+
return normalizeNpmCatalogEntry({
|
|
180
|
+
id: theme.id,
|
|
181
|
+
dir: catalogDir,
|
|
182
|
+
name: isNonEmptyString(theme.name) ? theme.name : isNonEmptyString(raw.description) ? raw.description : theme.id,
|
|
183
|
+
version: isNonEmptyString(theme.version) ? theme.version : dependency.version ?? pkgVersion,
|
|
184
|
+
description: isNonEmptyString(theme.description) ? theme.description : isNonEmptyString(raw.description) ? raw.description : undefined,
|
|
185
|
+
author: isNonEmptyString(theme.author) ? theme.author : raw.author,
|
|
186
|
+
authorUri: isNonEmptyString(theme.authorUri) ? theme.authorUri : undefined,
|
|
187
|
+
themeUri: isNonEmptyString(theme.themeUri) ? theme.themeUri : isNonEmptyString(raw.homepage) ? raw.homepage : undefined,
|
|
188
|
+
previewUrl: isNonEmptyString(theme.previewUrl) ? theme.previewUrl.trim() : undefined,
|
|
189
|
+
cover: isNonEmptyString(theme.cover) ? theme.cover.trim() : undefined,
|
|
190
|
+
tags: Array.isArray(theme.tags) ? theme.tags : undefined,
|
|
191
|
+
dependency,
|
|
192
|
+
npm: npmSpec,
|
|
193
|
+
featured: theme.featured === true,
|
|
194
|
+
requires: isNonEmptyString(theme.requires) ? theme.requires : undefined,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function readInlineNpmEntry(item) {
|
|
198
|
+
if (!item || typeof item !== 'object')
|
|
199
|
+
return null;
|
|
200
|
+
const dependency = readPackageDependencies(item) ??
|
|
201
|
+
(item.dependency &&
|
|
202
|
+
typeof item.dependency === 'object' &&
|
|
203
|
+
isNonEmptyString(item.dependency.name) &&
|
|
204
|
+
isNonEmptyString(item.dependency.version)
|
|
205
|
+
? { name: item.dependency.name.trim(), version: item.dependency.version.trim() }
|
|
206
|
+
: isNonEmptyString(item.npm)
|
|
207
|
+
? parseNpmSpecToDependency(item.npm)
|
|
208
|
+
: undefined);
|
|
209
|
+
if (!dependency && !isNonEmptyString(item.npm))
|
|
210
|
+
return null;
|
|
211
|
+
return normalizeNpmCatalogEntry({
|
|
212
|
+
id: item.id,
|
|
213
|
+
name: item.name,
|
|
214
|
+
version: item.version,
|
|
215
|
+
description: item.description,
|
|
216
|
+
author: item.author,
|
|
217
|
+
authorUri: item.authorUri,
|
|
218
|
+
themeUri: item.themeUri,
|
|
219
|
+
previewUrl: item.previewUrl,
|
|
220
|
+
cover: item.cover,
|
|
221
|
+
tags: item.tags,
|
|
222
|
+
dependency,
|
|
223
|
+
npm: dependency ? formatNpmInstallSpec(dependency.name, dependency.version) : item.npm,
|
|
224
|
+
featured: item.featured,
|
|
225
|
+
requires: item.requires,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/** Local theme ids registered in themes/package.json with theme.json on disk. */
|
|
229
|
+
function readLocalThemeSources(projectRoot) {
|
|
230
|
+
const root = path.resolve(projectRoot);
|
|
231
|
+
const { local } = readThemesRegistryMeta(root);
|
|
232
|
+
const templates = themesRoot(root);
|
|
233
|
+
const sources = [];
|
|
234
|
+
for (const id of local) {
|
|
235
|
+
const themeJson = path.join(templates, id, 'theme.json');
|
|
236
|
+
if (!fs.existsSync(themeJson))
|
|
237
|
+
continue;
|
|
238
|
+
const manifest = readJsonFile(themeJson);
|
|
239
|
+
if (!manifest?.id)
|
|
240
|
+
continue;
|
|
241
|
+
sources.push({
|
|
242
|
+
kind: 'local',
|
|
243
|
+
id: manifest.id,
|
|
244
|
+
dir: id,
|
|
245
|
+
manifest,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
return sources;
|
|
249
|
+
}
|
|
250
|
+
/** npm catalog entries — anchor dirs (themes/{anchor}/package.json) are canonical. */
|
|
251
|
+
function readNpmThemeSources(projectRoot) {
|
|
252
|
+
const root = path.resolve(projectRoot);
|
|
253
|
+
const { npm } = readThemesRegistryMeta(root);
|
|
254
|
+
const templates = themesRoot(root);
|
|
255
|
+
const byId = new Map();
|
|
256
|
+
for (const item of npm) {
|
|
257
|
+
if (isNonEmptyString(item)) {
|
|
258
|
+
const dir = item.trim();
|
|
259
|
+
const entry = readNpmEntryFromPackageDir(dir, path.join(templates, dir, 'package.json'));
|
|
260
|
+
if (entry)
|
|
261
|
+
byId.set(entry.id, { kind: 'npm', ...entry });
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
const inline = readInlineNpmEntry(item);
|
|
265
|
+
if (inline)
|
|
266
|
+
byId.set(inline.id, { kind: 'npm', ...inline });
|
|
267
|
+
}
|
|
268
|
+
return [...byId.values()];
|
|
269
|
+
}
|
|
270
|
+
/** Combined registry view used by CLI and server. */
|
|
271
|
+
function readThemeSources(projectRoot) {
|
|
272
|
+
return {
|
|
273
|
+
local: readLocalThemeSources(projectRoot),
|
|
274
|
+
npm: readNpmThemeSources(projectRoot),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function validateLocalThemes(projectRoot) {
|
|
278
|
+
const root = path.resolve(projectRoot);
|
|
279
|
+
const { local } = readThemesRegistryMeta(root);
|
|
280
|
+
const missing = [];
|
|
281
|
+
const templates = themesRoot(root);
|
|
282
|
+
for (const id of local) {
|
|
283
|
+
const themeJson = path.join(templates, id, 'theme.json');
|
|
284
|
+
if (!fs.existsSync(themeJson)) {
|
|
285
|
+
missing.push(id);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return { local, missing };
|
|
289
|
+
}
|
|
290
|
+
/** @deprecated Use validateLocalThemes */
|
|
291
|
+
function validateBundledThemes(projectRoot) {
|
|
292
|
+
const { local, missing } = validateLocalThemes(projectRoot);
|
|
293
|
+
return { bundled: local, missing };
|
|
294
|
+
}
|
|
295
|
+
function validateNpmThemes(projectRoot) {
|
|
296
|
+
const root = path.resolve(projectRoot);
|
|
297
|
+
const { npm } = readThemesRegistryMeta(root);
|
|
298
|
+
const missing = [];
|
|
299
|
+
const templates = themesRoot(root);
|
|
300
|
+
for (const item of npm) {
|
|
301
|
+
if (isNonEmptyString(item)) {
|
|
302
|
+
const dir = item.trim();
|
|
303
|
+
const pkgPath = path.join(templates, dir, 'package.json');
|
|
304
|
+
const themeJson = path.join(templates, dir, 'theme.json');
|
|
305
|
+
if (fs.existsSync(themeJson)) {
|
|
306
|
+
missing.push(`${dir}/ must not contain theme.json (npm anchor vs local theme)`);
|
|
307
|
+
}
|
|
308
|
+
const entry = readNpmEntryFromPackageDir(dir, pkgPath);
|
|
309
|
+
if (!entry)
|
|
310
|
+
missing.push(`${dir}/package.json (dependencies + reactpress.theme)`);
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (!readInlineNpmEntry(item)) {
|
|
314
|
+
missing.push(`inline npm entry (id + dependencies or npm required): ${JSON.stringify(item)}`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return { npm, missing };
|
|
318
|
+
}
|
|
319
|
+
/** @deprecated Use validateNpmThemes */
|
|
320
|
+
function validateCatalogThemes(projectRoot) {
|
|
321
|
+
const { npm, missing } = validateNpmThemes(projectRoot);
|
|
322
|
+
const catalog = npm
|
|
323
|
+
.map((item) => (isNonEmptyString(item) ? item.trim() : null))
|
|
324
|
+
.filter(Boolean);
|
|
325
|
+
return { catalog, missing };
|
|
326
|
+
}
|
|
327
|
+
module.exports = {
|
|
328
|
+
readThemesRegistryMeta,
|
|
329
|
+
readThemesPackageMeta,
|
|
330
|
+
readLocalThemeSources,
|
|
331
|
+
readNpmThemeSources,
|
|
332
|
+
readThemeSources,
|
|
333
|
+
readNpmEntryFromPackageDir,
|
|
334
|
+
readInlineNpmEntry,
|
|
335
|
+
formatNpmInstallSpec,
|
|
336
|
+
parseNpmSpecToDependency,
|
|
337
|
+
readPackageDependencies,
|
|
338
|
+
readThemeDependency,
|
|
339
|
+
resolveThemeNpmSpec,
|
|
340
|
+
normalizeNpmCatalogEntry,
|
|
341
|
+
isValidNpmCatalogEntry,
|
|
342
|
+
validateLocalThemes,
|
|
343
|
+
validateNpmThemes,
|
|
344
|
+
validateBundledThemes,
|
|
345
|
+
validateCatalogThemes,
|
|
346
|
+
};
|
|
347
|
+
//# sourceMappingURL=theme-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-sources.js","sourceRoot":"","sources":["../../src/lib/theme-sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-warmup.d.ts","sourceRoot":"","sources":["../../src/lib/theme-warmup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const http = require('http');
|
|
7
|
+
const { readActiveThemeManifest, resolveThemeDirectory } = require('./theme-runtime');
|
|
8
|
+
const { loadClientSiteUrl } = require('./http');
|
|
9
|
+
/** Placeholder for dynamic segments — only triggers page bundle compilation in dev. */
|
|
10
|
+
const WARMUP_PARAM = '__reactpress_dev_warmup__';
|
|
11
|
+
function pageFileToRoute(pageFile) {
|
|
12
|
+
let route = String(pageFile)
|
|
13
|
+
.replace(/^pages\//, '')
|
|
14
|
+
.replace(/\.(tsx|ts|jsx|js)$/, '');
|
|
15
|
+
if (route === 'index')
|
|
16
|
+
return '/';
|
|
17
|
+
route = route.replace(/\/index$/, '');
|
|
18
|
+
route = route.replace(/\[([^\]]+)\]/g, WARMUP_PARAM);
|
|
19
|
+
return `/${route}`;
|
|
20
|
+
}
|
|
21
|
+
/** Dynamic SSR routes need real API data — warmup only compiles static visitor pages. */
|
|
22
|
+
function isWarmupSafeRoute(route) {
|
|
23
|
+
if (!route || typeof route !== 'string')
|
|
24
|
+
return false;
|
|
25
|
+
if (route.includes(WARMUP_PARAM))
|
|
26
|
+
return false;
|
|
27
|
+
if (route.startsWith('/admin'))
|
|
28
|
+
return false;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
function collectWarmupRoutes(themeDir) {
|
|
32
|
+
const themeJsonPath = path.join(themeDir, 'theme.json');
|
|
33
|
+
const routes = new Set(['/']);
|
|
34
|
+
let fromThemeJson = false;
|
|
35
|
+
if (fs.existsSync(path.join(themeDir, 'app'))) {
|
|
36
|
+
routes.add('/');
|
|
37
|
+
}
|
|
38
|
+
if (fs.existsSync(themeJsonPath)) {
|
|
39
|
+
try {
|
|
40
|
+
const manifest = JSON.parse(fs.readFileSync(themeJsonPath, 'utf8'));
|
|
41
|
+
const templates = manifest?.reactpress?.templates;
|
|
42
|
+
if (templates && typeof templates === 'object') {
|
|
43
|
+
fromThemeJson = true;
|
|
44
|
+
for (const file of Object.values(templates)) {
|
|
45
|
+
if (typeof file !== 'string')
|
|
46
|
+
continue;
|
|
47
|
+
const route = pageFileToRoute(file);
|
|
48
|
+
if (isWarmupSafeRoute(route))
|
|
49
|
+
routes.add(route);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// fall through to pages scan
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!fromThemeJson) {
|
|
58
|
+
const pagesDir = path.join(themeDir, 'pages');
|
|
59
|
+
if (fs.existsSync(pagesDir)) {
|
|
60
|
+
walkPages(pagesDir, pagesDir).forEach((file) => {
|
|
61
|
+
const rel = path.relative(themeDir, file);
|
|
62
|
+
if (rel.startsWith(`pages${path.sep}admin${path.sep}`) || rel.includes(`${path.sep}admin${path.sep}`)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const route = pageFileToRoute(rel);
|
|
66
|
+
if (isWarmupSafeRoute(route))
|
|
67
|
+
routes.add(route);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
routes.add('/404');
|
|
72
|
+
return [...routes].filter(isWarmupSafeRoute);
|
|
73
|
+
}
|
|
74
|
+
function walkPages(pagesDir, currentDir, files = []) {
|
|
75
|
+
for (const entry of fs.readdirSync(currentDir, { withFileTypes: true })) {
|
|
76
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
77
|
+
if (entry.isDirectory()) {
|
|
78
|
+
if (entry.name.startsWith('_') || entry.name === 'api' || entry.name === 'admin')
|
|
79
|
+
continue;
|
|
80
|
+
walkPages(pagesDir, fullPath, files);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (/\.(tsx|ts|jsx|js)$/.test(entry.name)) {
|
|
84
|
+
if (entry.name.startsWith('_'))
|
|
85
|
+
continue;
|
|
86
|
+
files.push(fullPath);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return files;
|
|
90
|
+
}
|
|
91
|
+
function fetchRoute(baseUrl, routePath) {
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const normalizedBase = baseUrl.replace(/\/$/, '');
|
|
94
|
+
const url = `${normalizedBase}${routePath.startsWith('/') ? routePath : `/${routePath}`}`;
|
|
95
|
+
const req = http.get(url, { timeout: 120_000 }, (res) => {
|
|
96
|
+
res.resume();
|
|
97
|
+
resolve(res.statusCode >= 200 && res.statusCode < 500);
|
|
98
|
+
});
|
|
99
|
+
req.on('error', () => resolve(false));
|
|
100
|
+
req.on('timeout', () => {
|
|
101
|
+
req.destroy();
|
|
102
|
+
resolve(false);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async function mapWithConcurrency(items, concurrency, fn) {
|
|
107
|
+
if (!items.length)
|
|
108
|
+
return [];
|
|
109
|
+
const limit = Math.max(1, Math.min(concurrency, items.length));
|
|
110
|
+
const results = new Array(items.length);
|
|
111
|
+
let index = 0;
|
|
112
|
+
async function worker() {
|
|
113
|
+
while (index < items.length) {
|
|
114
|
+
const i = index;
|
|
115
|
+
index += 1;
|
|
116
|
+
results[i] = await fn(items[i], i);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
await Promise.all(Array.from({ length: limit }, () => worker()));
|
|
120
|
+
return results;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* SSR-hit theme routes on the internal dev port so Next.js compiles page chunks
|
|
124
|
+
* before the browser performs client-side navigation (avoids webpack module mismatch).
|
|
125
|
+
*/
|
|
126
|
+
async function warmupThemeDevRoutes(projectRoot) {
|
|
127
|
+
const { activeTheme } = readActiveThemeManifest(projectRoot);
|
|
128
|
+
const themeDir = resolveThemeDirectory(projectRoot, activeTheme);
|
|
129
|
+
if (!themeDir)
|
|
130
|
+
return { ok: false, routes: [] };
|
|
131
|
+
const baseUrl = loadClientSiteUrl(projectRoot);
|
|
132
|
+
const routes = collectWarmupRoutes(themeDir);
|
|
133
|
+
const concurrency = Math.max(1, parseInt(process.env.REACTPRESS_THEME_WARMUP_CONCURRENCY || '6', 10) || 6);
|
|
134
|
+
await mapWithConcurrency(routes, concurrency, (route) => fetchRoute(baseUrl, route));
|
|
135
|
+
return { ok: true, routes, themeId: activeTheme };
|
|
136
|
+
}
|
|
137
|
+
function shouldBlockOnThemeWarmup() {
|
|
138
|
+
return process.env.REACTPRESS_THEME_WARMUP === '1';
|
|
139
|
+
}
|
|
140
|
+
/** Fire-and-forget SSR compile — off by default (saves ~10–20s Next compile after banner). */
|
|
141
|
+
function warmupThemeDevRoutesInBackground(projectRoot) {
|
|
142
|
+
if (process.env.REACTPRESS_SKIP_THEME_WARMUP !== '0')
|
|
143
|
+
return;
|
|
144
|
+
if (process.env.REACTPRESS_THEME_WARMUP !== '1')
|
|
145
|
+
return;
|
|
146
|
+
warmupThemeDevRoutes(projectRoot).catch(() => {
|
|
147
|
+
// non-fatal — first browser navigation will compile anyway
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/** SSR-hit homepage so first visitor load after theme switch is fast. */
|
|
151
|
+
async function warmupThemeHomepage(projectRoot, baseUrl) {
|
|
152
|
+
const url = (baseUrl || loadClientSiteUrl(projectRoot)).replace(/\/$/, '');
|
|
153
|
+
await fetchRoute(url, '/');
|
|
154
|
+
return { ok: true };
|
|
155
|
+
}
|
|
156
|
+
module.exports = {
|
|
157
|
+
WARMUP_PARAM,
|
|
158
|
+
pageFileToRoute,
|
|
159
|
+
isWarmupSafeRoute,
|
|
160
|
+
collectWarmupRoutes,
|
|
161
|
+
mapWithConcurrency,
|
|
162
|
+
shouldBlockOnThemeWarmup,
|
|
163
|
+
warmupThemeDevRoutes,
|
|
164
|
+
warmupThemeDevRoutesInBackground,
|
|
165
|
+
warmupThemeHomepage,
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=theme-warmup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-warmup.js","sourceRoot":"","sources":["../../src/lib/theme-warmup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolkit-build.d.ts","sourceRoot":"","sources":["../../src/lib/toolkit-build.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const SOURCE_EXT = /\.(ts|tsx|js|json)$/;
|
|
7
|
+
function newestSourceMtime(dir, depth = 0) {
|
|
8
|
+
if (!fs.existsSync(dir))
|
|
9
|
+
return 0;
|
|
10
|
+
let max = 0;
|
|
11
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
12
|
+
if (entry.name === 'node_modules' || entry.name === 'dist')
|
|
13
|
+
continue;
|
|
14
|
+
const full = path.join(dir, entry.name);
|
|
15
|
+
if (entry.isDirectory()) {
|
|
16
|
+
if (depth < 12)
|
|
17
|
+
max = Math.max(max, newestSourceMtime(full, depth + 1));
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (!SOURCE_EXT.test(entry.name))
|
|
21
|
+
continue;
|
|
22
|
+
max = Math.max(max, fs.statSync(full).mtimeMs);
|
|
23
|
+
}
|
|
24
|
+
return max;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether `pnpm run build` in toolkit/ is needed before dev.
|
|
28
|
+
* Skips when dist is newer than all toolkit/src sources (unless forced).
|
|
29
|
+
*/
|
|
30
|
+
function shouldBuildToolkit(projectRoot) {
|
|
31
|
+
if (process.env.REACTPRESS_FORCE_TOOLKIT_BUILD === '1')
|
|
32
|
+
return true;
|
|
33
|
+
if (process.env.REACTPRESS_SKIP_TOOLKIT_BUILD === '1')
|
|
34
|
+
return false;
|
|
35
|
+
const toolkitDir = path.join(path.resolve(projectRoot), 'toolkit');
|
|
36
|
+
const distEntry = path.join(toolkitDir, 'dist', 'index.js');
|
|
37
|
+
if (!fs.existsSync(distEntry))
|
|
38
|
+
return true;
|
|
39
|
+
const srcDir = path.join(toolkitDir, 'src');
|
|
40
|
+
if (!fs.existsSync(srcDir))
|
|
41
|
+
return false;
|
|
42
|
+
const distMtime = fs.statSync(distEntry).mtimeMs;
|
|
43
|
+
const localesDir = path.join(toolkitDir, 'src', 'config', 'locales');
|
|
44
|
+
const localesDist = path.join(toolkitDir, 'dist', 'config', 'locales');
|
|
45
|
+
if (fs.existsSync(localesDir)) {
|
|
46
|
+
const localesMtime = newestSourceMtime(localesDir);
|
|
47
|
+
if (!fs.existsSync(localesDist) || localesMtime > fs.statSync(localesDist).mtimeMs) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return newestSourceMtime(srcDir) > distMtime;
|
|
52
|
+
}
|
|
53
|
+
module.exports = {
|
|
54
|
+
shouldBuildToolkit,
|
|
55
|
+
newestSourceMtime,
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=toolkit-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolkit-build.js","sourceRoot":"","sources":["../../src/lib/toolkit-build.ts"],"names":[],"mappings":"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"}
|