@omega.js/manager 0.1.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/.claude-plugin/marketplace.json +14 -0
- package/LICENSE +98 -0
- package/README.md +165 -0
- package/bin/omega +2 -0
- package/bin/omg +2 -0
- package/claude-plugin/.claude-plugin/plugin.json +11 -0
- package/claude-plugin/.mcp.json +9 -0
- package/claude-plugin/README.md +139 -0
- package/claude-plugin/hooks/gate/mark.sh +58 -0
- package/claude-plugin/hooks/gate/run.sh +97 -0
- package/claude-plugin/hooks/guard/run.sh +249 -0
- package/claude-plugin/hooks/hooks.json +63 -0
- package/claude-plugin/hooks/inject/run.sh +127 -0
- package/claude-plugin/hooks/lib/omega-gate.sh +20 -0
- package/claude-plugin/hooks/lib/omega-scope.sh +41 -0
- package/claude-plugin/hooks/lib/omega-skills.sh +209 -0
- package/claude-plugin/hooks/quality/run.sh +132 -0
- package/claude-plugin/hooks/shape/run.sh +45 -0
- package/claude-plugin/mcp-router-launch.js +29 -0
- package/claude-plugin/skills/README.md +48 -0
- package/claude-plugin/skills/accessibility/SKILL.md +31 -0
- package/claude-plugin/skills/analytics/SKILL.md +30 -0
- package/claude-plugin/skills/backend/SKILL.md +25 -0
- package/claude-plugin/skills/brandcheck/SKILL.md +29 -0
- package/claude-plugin/skills/browser/SKILL.md +64 -0
- package/claude-plugin/skills/client/SKILL.md +24 -0
- package/claude-plugin/skills/desktop/SKILL.md +25 -0
- package/claude-plugin/skills/extension/SKILL.md +25 -0
- package/claude-plugin/skills/main/SKILL.md +54 -0
- package/claude-plugin/skills/manager/SKILL.md +25 -0
- package/claude-plugin/skills/seo/SKILL.md +36 -0
- package/claude-plugin/skills/theme/SKILL.md +33 -0
- package/claude-plugin/skills/web/SKILL.md +29 -0
- package/dist/cli-run.js +34 -0
- package/dist/cli.js +29 -0
- package/dist/commands/build.js +17 -0
- package/dist/commands/clean.js +16 -0
- package/dist/commands/company.js +46 -0
- package/dist/commands/deploy.js +143 -0
- package/dist/commands/dev.js +437 -0
- package/dist/commands/devlog.js +25 -0
- package/dist/commands/help.js +48 -0
- package/dist/commands/manage.js +53 -0
- package/dist/commands/migrate.js +76 -0
- package/dist/commands/onboard.js +31 -0
- package/dist/commands/pipeline.js +319 -0
- package/dist/commands/test.js +380 -0
- package/dist/commands/update.js +128 -0
- package/dist/commands/version.js +8 -0
- package/dist/company-init.js +167 -0
- package/dist/company.js +283 -0
- package/dist/config.js +1359 -0
- package/dist/devlog/index.js +226 -0
- package/dist/devlog/lib/collect-commits.js +136 -0
- package/dist/devlog/lib/generate-post.js +201 -0
- package/dist/devlog/lib/ghostii.js +122 -0
- package/dist/devlog/lib/project-map.js +98 -0
- package/dist/devlog/lib/publish-website.js +88 -0
- package/dist/index.js +45 -0
- package/dist/lib/agents-md.js +201 -0
- package/dist/lib/analytics-secret.js +22 -0
- package/dist/lib/argv.js +21 -0
- package/dist/lib/auth-admin.js +120 -0
- package/dist/lib/automation-client.js +210 -0
- package/dist/lib/backend-marketing.js +49 -0
- package/dist/lib/brand.js +240 -0
- package/dist/lib/bundle-id.js +53 -0
- package/dist/lib/claude-settings.js +125 -0
- package/dist/lib/company-scaffold.js +213 -0
- package/dist/lib/company.js +227 -0
- package/dist/lib/config-flow.js +350 -0
- package/dist/lib/config-write.js +41 -0
- package/dist/lib/custom-target.js +75 -0
- package/dist/lib/domain-utils.js +19 -0
- package/dist/lib/duration.js +39 -0
- package/dist/lib/env-order.js +236 -0
- package/dist/lib/env-secret.js +78 -0
- package/dist/lib/firestore-rest.js +326 -0
- package/dist/lib/framework-bin.js +156 -0
- package/dist/lib/gitignore.js +63 -0
- package/dist/lib/google-auth.js +495 -0
- package/dist/lib/google-token.js +66 -0
- package/dist/lib/jwt.js +31 -0
- package/dist/lib/legacy-oauth.js +59 -0
- package/dist/lib/node-version.js +127 -0
- package/dist/lib/owner-plan.js +78 -0
- package/dist/lib/package-scripts.js +152 -0
- package/dist/lib/preflight.js +470 -0
- package/dist/lib/product-create.js +144 -0
- package/dist/lib/run-command.js +74 -0
- package/dist/lib/run-gates.js +70 -0
- package/dist/lib/run-output.js +42 -0
- package/dist/lib/run-summary.js +384 -0
- package/dist/lib/scaffold.js +427 -0
- package/dist/lib/service-input.js +207 -0
- package/dist/lib/service-runner.js +466 -0
- package/dist/lib/stale.js +24 -0
- package/dist/lib/target-selection.js +155 -0
- package/dist/lib/verb-fanout.js +128 -0
- package/dist/lib/verify-live.js +188 -0
- package/dist/manage.js +311 -0
- package/dist/omega-bin.js +7 -0
- package/dist/onboard.js +532 -0
- package/dist/services/account/ensure/users.js +259 -0
- package/dist/services/account/index.js +97 -0
- package/dist/services/account/lib/backend-client.js +107 -0
- package/dist/services/account/lib/password.js +36 -0
- package/dist/services/account/lib/resolve-password.js +100 -0
- package/dist/services/advertising/ensure/sites.js +101 -0
- package/dist/services/advertising/index.js +101 -0
- package/dist/services/advertising/lib/adsense-api.js +41 -0
- package/dist/services/ai/ensure/keys.js +21 -0
- package/dist/services/ai/index.js +36 -0
- package/dist/services/analytics/ensure/google-firebase-link.js +230 -0
- package/dist/services/analytics/ensure/google-streams.js +256 -0
- package/dist/services/analytics/ensure/meta-pixel.js +22 -0
- package/dist/services/analytics/ensure/tiktok-pixel.js +22 -0
- package/dist/services/analytics/index.js +134 -0
- package/dist/services/analytics/lib/analytics-api.js +156 -0
- package/dist/services/analytics/lib/meta-api.js +83 -0
- package/dist/services/analytics/lib/pixel-account.js +78 -0
- package/dist/services/analytics/lib/pixel-provision.js +152 -0
- package/dist/services/analytics/lib/pixel-specs.js +57 -0
- package/dist/services/analytics/lib/pixel-token.js +88 -0
- package/dist/services/analytics/lib/property-flow.js +77 -0
- package/dist/services/analytics/lib/tiktok-api.js +157 -0
- package/dist/services/analytics/lib/tiktok-auth.js +153 -0
- package/dist/services/assets/ensure/logo-gen.js +68 -0
- package/dist/services/assets/index.js +109 -0
- package/dist/services/assets/lib/assets-config.js +168 -0
- package/dist/services/assets/lib/brandmark-api.js +160 -0
- package/dist/services/assets/lib/derived.js +113 -0
- package/dist/services/assets/lib/font-loader.js +67 -0
- package/dist/services/assets/lib/reconcile.js +122 -0
- package/dist/services/assets/lib/reset.js +118 -0
- package/dist/services/assets/lib/svg-logo-generator.js +154 -0
- package/dist/services/assets/lib/svg-to-black.js +32 -0
- package/dist/services/assets/write/favicons.js +82 -0
- package/dist/services/assets/write/icons.js +64 -0
- package/dist/services/assets/write/process.js +96 -0
- package/dist/services/assets/write/reconcile.js +30 -0
- package/dist/services/assets/write/social-icons.js +108 -0
- package/dist/services/assets/write/templates.js +345 -0
- package/dist/services/bookmark/ensure/sync.js +255 -0
- package/dist/services/bookmark/index.js +17 -0
- package/dist/services/campaigns/ensure/contact-person.js +40 -0
- package/dist/services/campaigns/ensure/custom-fields.js +84 -0
- package/dist/services/campaigns/ensure/domain-auth.js +92 -0
- package/dist/services/campaigns/ensure/event-webhook.js +89 -0
- package/dist/services/campaigns/ensure/link-branding.js +187 -0
- package/dist/services/campaigns/ensure/list.js +50 -0
- package/dist/services/campaigns/ensure/segments.js +109 -0
- package/dist/services/campaigns/ensure/sender-identity.js +153 -0
- package/dist/services/campaigns/ensure/unsubscribe-groups.js +116 -0
- package/dist/services/campaigns/index.js +79 -0
- package/dist/services/campaigns/lib/dns-sync.js +81 -0
- package/dist/services/campaigns/lib/segment-query.js +138 -0
- package/dist/services/campaigns/lib/sendgrid-api.js +287 -0
- package/dist/services/captcha/ensure/site-key.js +83 -0
- package/dist/services/captcha/index.js +78 -0
- package/dist/services/captcha/lib/console-url.js +45 -0
- package/dist/services/captcha/lib/recaptcha-api.js +36 -0
- package/dist/services/certificates/ensure/api-key.js +22 -0
- package/dist/services/certificates/ensure/bundle-ids.js +115 -0
- package/dist/services/certificates/ensure/certificates.js +187 -0
- package/dist/services/certificates/ensure/profiles.js +143 -0
- package/dist/services/certificates/index.js +225 -0
- package/dist/services/certificates/lib/apple-api.js +183 -0
- package/dist/services/certificates/lib/certificate-manager.js +252 -0
- package/dist/services/certificates/lib/identifier-manager.js +107 -0
- package/dist/services/certificates/lib/keychain.js +135 -0
- package/dist/services/certificates/lib/manual-walkthrough.js +165 -0
- package/dist/services/certificates/lib/profile-manager.js +115 -0
- package/dist/services/chat/data/baseline-knowledge.md +96 -0
- package/dist/services/chat/ensure/chat.js +106 -0
- package/dist/services/chat/ensure/user.js +45 -0
- package/dist/services/chat/index.js +139 -0
- package/dist/services/chat/lib/baseline-knowledge.js +137 -0
- package/dist/services/cloud/ensure/authentication.js +267 -0
- package/dist/services/cloud/ensure/billing.js +120 -0
- package/dist/services/cloud/ensure/cloud-messaging.js +105 -0
- package/dist/services/cloud/ensure/database.js +60 -0
- package/dist/services/cloud/ensure/firestore.js +79 -0
- package/dist/services/cloud/ensure/functions.js +49 -0
- package/dist/services/cloud/ensure/hosting.js +398 -0
- package/dist/services/cloud/ensure/oauth-consent.js +248 -0
- package/dist/services/cloud/ensure/project-settings.js +72 -0
- package/dist/services/cloud/ensure/sdk-config.js +95 -0
- package/dist/services/cloud/ensure/service-account.js +152 -0
- package/dist/services/cloud/ensure/services.js +103 -0
- package/dist/services/cloud/ensure/storage.js +47 -0
- package/dist/services/cloud/index.js +130 -0
- package/dist/services/cloud/lib/access-heal.js +130 -0
- package/dist/services/cloud/lib/firebase-api.js +662 -0
- package/dist/services/cloud/lib/project-flow.js +102 -0
- package/dist/services/directory/ensure/entry.js +48 -0
- package/dist/services/directory/index.js +64 -0
- package/dist/services/directory/lib/blocks.js +104 -0
- package/dist/services/disperse/index.js +45 -0
- package/dist/services/disperse/write/certs.js +117 -0
- package/dist/services/domain/ensure/nameservers.js +179 -0
- package/dist/services/domain/index.js +69 -0
- package/dist/services/domain/lib/namecheap-api.js +167 -0
- package/dist/services/domain/lib/registrars.js +46 -0
- package/dist/services/domain/lib/whitelist-walkthrough.js +76 -0
- package/dist/services/edge/ensure/cache-rules.js +105 -0
- package/dist/services/edge/ensure/dns-records.js +304 -0
- package/dist/services/edge/ensure/email-routing.js +292 -0
- package/dist/services/edge/ensure/rules-configuration.js +98 -0
- package/dist/services/edge/ensure/rules-managed-transforms.js +101 -0
- package/dist/services/edge/ensure/rules-redirect.js +107 -0
- package/dist/services/edge/ensure/rules-response-headers.js +90 -0
- package/dist/services/edge/ensure/rules-security.js +142 -0
- package/dist/services/edge/ensure/speed-scheduled-tests.js +98 -0
- package/dist/services/edge/ensure/workers.js +219 -0
- package/dist/services/edge/ensure/zone-settings.js +108 -0
- package/dist/services/edge/ensure/zone.js +183 -0
- package/dist/services/edge/index.js +73 -0
- package/dist/services/edge/lib/cloudflare-api.js +84 -0
- package/dist/services/edge/lib/dns-records-helpers.js +518 -0
- package/dist/services/edge/lib/read-cache.js +16 -0
- package/dist/services/edge/lib/ruleset-helper.js +108 -0
- package/dist/services/edge/workers/omega-api-proxy.js +43 -0
- package/dist/services/email/data/baseline-filter.md +4 -0
- package/dist/services/email/data/baseline-knowledge.md +86 -0
- package/dist/services/email/ensure/agent.js +107 -0
- package/dist/services/email/ensure/user.js +45 -0
- package/dist/services/email/index.js +138 -0
- package/dist/services/email/lib/baseline.js +82 -0
- package/dist/services/email/lib/knowledge-file.js +53 -0
- package/dist/services/forms/ensure/form.js +46 -0
- package/dist/services/forms/ensure/user.js +45 -0
- package/dist/services/forms/index.js +138 -0
- package/dist/services/migrations/ensure/notifications.js +189 -0
- package/dist/services/migrations/ensure/orders.js +34 -0
- package/dist/services/migrations/ensure/payment-provider.js +132 -0
- package/dist/services/migrations/ensure/payments-intents.js +34 -0
- package/dist/services/migrations/ensure/state-retirement.js +266 -0
- package/dist/services/migrations/ensure/targets-rename.js +124 -0
- package/dist/services/migrations/ensure/users.js +1176 -0
- package/dist/services/migrations/index.js +101 -0
- package/dist/services/migrations/lib/attribution-touch.js +64 -0
- package/dist/services/migrations/lib/ensure-metadata.js +144 -0
- package/dist/services/migrations/lib/migration-runner.js +473 -0
- package/dist/services/migrations/lib/sanitize-strings.js +112 -0
- package/dist/services/migrations/lib/schema-validator.js +154 -0
- package/dist/services/monitoring/ensure/dsn.js +54 -0
- package/dist/services/monitoring/ensure/projects.js +135 -0
- package/dist/services/monitoring/index.js +54 -0
- package/dist/services/monitoring/lib/sentry-api.js +94 -0
- package/dist/services/newsletter/ensure/custom-fields.js +90 -0
- package/dist/services/newsletter/ensure/publication.js +94 -0
- package/dist/services/newsletter/ensure/segments.js +140 -0
- package/dist/services/newsletter/ensure/webhook.js +108 -0
- package/dist/services/newsletter/index.js +64 -0
- package/dist/services/newsletter/lib/beehiiv-api.js +124 -0
- package/dist/services/newsletter/lib/segment-automation.js +577 -0
- package/dist/services/payment/ensure/chargebee-account.js +30 -0
- package/dist/services/payment/ensure/chargebee-products.js +359 -0
- package/dist/services/payment/ensure/chargebee-webhook.js +113 -0
- package/dist/services/payment/ensure/paypal-account.js +36 -0
- package/dist/services/payment/ensure/paypal-products.js +374 -0
- package/dist/services/payment/ensure/paypal-webhook.js +128 -0
- package/dist/services/payment/ensure/stripe-account.js +93 -0
- package/dist/services/payment/ensure/stripe-disputes.js +56 -0
- package/dist/services/payment/ensure/stripe-products.js +245 -0
- package/dist/services/payment/ensure/stripe-radar.js +74 -0
- package/dist/services/payment/ensure/stripe-webhook.js +130 -0
- package/dist/services/payment/index.js +163 -0
- package/dist/services/payment/lib/chargebee-api.js +338 -0
- package/dist/services/payment/lib/payment-utils.js +116 -0
- package/dist/services/payment/lib/paypal-api.js +354 -0
- package/dist/services/payment/lib/provider-setup.js +134 -0
- package/dist/services/payment/lib/stripe-api.js +152 -0
- package/dist/services/repo/ensure/org.js +70 -0
- package/dist/services/repo/ensure/pages.js +72 -0
- package/dist/services/repo/ensure/repo.js +90 -0
- package/dist/services/repo/index.js +52 -0
- package/dist/services/repo/lib/github-api.js +196 -0
- package/dist/services/search/ensure/ga-link.js +57 -0
- package/dist/services/search/ensure/property.js +137 -0
- package/dist/services/search/ensure/sitemaps.js +70 -0
- package/dist/services/search/index.js +61 -0
- package/dist/services/search/lib/search-console-api.js +92 -0
- package/dist/services/seo/ensure/github-repos.js +271 -0
- package/dist/services/seo/index.js +55 -0
- package/dist/services/seo/lib/gh-api.js +161 -0
- package/dist/services/seo/templates/developer-tool/.github/workflows/maintenance.yml +25 -0
- package/dist/services/seo/templates/developer-tool/.nvmrc +1 -0
- package/dist/services/seo/templates/developer-tool/_README.md.js +121 -0
- package/dist/services/seo/templates/developer-tool/_package.json.js +33 -0
- package/dist/services/seo/templates/developer-tool/src/index.js +120 -0
- package/dist/services/seo/templates/index.js +57 -0
- package/dist/services/server/ensure/brands.js +63 -0
- package/dist/services/server/index.js +42 -0
- package/dist/services/testing/ensure/target-checks.js +97 -0
- package/dist/services/testing/index.js +11 -0
- package/dist/services/testing/lib/checks.js +467 -0
- package/dist/services/update/index.js +20 -0
- package/dist/services/update/lib/cache.js +59 -0
- package/dist/services/update/lib/fingerprint.js +157 -0
- package/dist/services/update/write/targets.js +206 -0
- package/dist/services/workspace/ensure/agents.js +42 -0
- package/dist/services/workspace/ensure/claude-settings.js +34 -0
- package/dist/services/workspace/ensure/config.js +54 -0
- package/dist/services/workspace/ensure/defaults.js +60 -0
- package/dist/services/workspace/ensure/env-keys.js +55 -0
- package/dist/services/workspace/ensure/env-order.js +66 -0
- package/dist/services/workspace/ensure/env-rules.js +97 -0
- package/dist/services/workspace/ensure/gitignore.js +18 -0
- package/dist/services/workspace/ensure/scripts.js +126 -0
- package/dist/services/workspace/ensure/structure.js +97 -0
- package/dist/services/workspace/ensure/translation-sdk.js +148 -0
- package/dist/services/workspace/ensure/workflows.js +54 -0
- package/dist/services/workspace/index.js +8 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/certs.js +199 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/command-path.js +46 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/flows.js +317 -0
- package/dist/vendor/devkit/local-https.js +360 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/prompt.js +187 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/stop-signals.js +28 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/translate/cache.js +84 -0
- package/dist/vendor/devkit/translate/engine.js +243 -0
- package/dist/vendor/devkit/translate/index.js +49 -0
- package/dist/vendor/devkit/translate/languages.js +134 -0
- package/dist/vendor/devkit/translate/providers.js +188 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/docs/AGENTS.md +200 -0
- package/docs/account.md +45 -0
- package/docs/advertising.md +46 -0
- package/docs/ai.md +34 -0
- package/docs/analytics.md +69 -0
- package/docs/assets.md +57 -0
- package/docs/bookmark.md +26 -0
- package/docs/brand.md +151 -0
- package/docs/campaigns.md +96 -0
- package/docs/captcha.md +46 -0
- package/docs/certificates.md +68 -0
- package/docs/chat.md +47 -0
- package/docs/cloud.md +110 -0
- package/docs/company.md +64 -0
- package/docs/directory.md +140 -0
- package/docs/disperse.md +46 -0
- package/docs/domain.md +56 -0
- package/docs/edge.md +234 -0
- package/docs/email.md +42 -0
- package/docs/forms.md +48 -0
- package/docs/index.md +109 -0
- package/docs/migration.md +203 -0
- package/docs/migrations.md +56 -0
- package/docs/monitoring.md +41 -0
- package/docs/newsletter.md +48 -0
- package/docs/payment.md +83 -0
- package/docs/repo.md +48 -0
- package/docs/search.md +44 -0
- package/docs/seo.md +34 -0
- package/docs/server.md +37 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/testing.md +34 -0
- package/docs/update.md +36 -0
- package/docs/workspace.md +64 -0
- package/package.json +88 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-derived defaults — the ONE home of every config default
|
|
3
|
+
* ([#478](https://github.com/Omega-JS-Stack/omega/issues/478)).
|
|
4
|
+
*
|
|
5
|
+
* Defaults used to be scattered: a per-framework `options.defaults` blob, the
|
|
6
|
+
* manager's DEFAULTS layer, read-site fallbacks, and prose in the schema
|
|
7
|
+
* descriptions. Now a schema entry declares its own `default:` and everything
|
|
8
|
+
* derives from that:
|
|
9
|
+
*
|
|
10
|
+
* - `schemaDefaults(target)` builds the merge chain's LOWEST layer
|
|
11
|
+
* (load.js). A framework still passes `options.defaults` on top, but only
|
|
12
|
+
* where that framework genuinely differs from the schema answer.
|
|
13
|
+
* - `missingDefaults(config)` names the blocks a brand's omega.json5 has yet
|
|
14
|
+
* to materialize — the manage walk writes exactly those, with each block's
|
|
15
|
+
* schema description as its guiding comment, and never touches a key the
|
|
16
|
+
* brand already authored (a new subsystem simply appears on the next run).
|
|
17
|
+
*
|
|
18
|
+
* A key with no sane framework answer carries no `default:` and is never
|
|
19
|
+
* materialized: owner decisions, tri-states that mean "ask", ids the services
|
|
20
|
+
* provision, anything secret-shaped (secrets live in .env regardless).
|
|
21
|
+
*
|
|
22
|
+
* A rule may also carry `materialize: false`
|
|
23
|
+
* ([#793](https://github.com/Omega-JS-Stack/omega/issues/793)): its `default:`
|
|
24
|
+
* still RESOLVES (schemaDefaults, so every reader sees the value) but is never
|
|
25
|
+
* WRITTEN into a brand's file. That is for framework facts a brand may override
|
|
26
|
+
* and rarely does — presentation the framework owns — where a copy in every
|
|
27
|
+
* brand config is a copy that drifts from the thing it came from.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
const { SHARED_SCHEMA, TARGET_SCHEMAS } = require('./schema.js');
|
|
31
|
+
const { isPlainObject } = require('./merge.js');
|
|
32
|
+
|
|
33
|
+
function hasDefault(rule) {
|
|
34
|
+
return Object.prototype.hasOwnProperty.call(rule, 'default');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Whether a rule's default is WRITTEN into a brand's file, not merely resolved
|
|
39
|
+
* ([#793](https://github.com/Omega-JS-Stack/omega/issues/793)). `materialize:
|
|
40
|
+
* false` means resolution-only: the fact stays at the layer that owns it.
|
|
41
|
+
* @param {object} rule
|
|
42
|
+
* @returns {boolean}
|
|
43
|
+
*/
|
|
44
|
+
function isMaterialized(rule) {
|
|
45
|
+
return rule.materialize !== false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The rules that carry a default: SHARED_SCHEMA always, plus that target's
|
|
50
|
+
* refinements (they overlay the same top-level namespace loadConfig resolves).
|
|
51
|
+
* @param {string} [target] - Canonical target name ('web', 'backend', ...).
|
|
52
|
+
* @returns {object[]}
|
|
53
|
+
*/
|
|
54
|
+
function defaultRules(target) {
|
|
55
|
+
const rules = target && TARGET_SCHEMAS[target]
|
|
56
|
+
? [...SHARED_SCHEMA, ...TARGET_SCHEMAS[target]]
|
|
57
|
+
: SHARED_SCHEMA;
|
|
58
|
+
|
|
59
|
+
return rules.filter(hasDefault);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function setAtPath(target, dotted, value) {
|
|
63
|
+
const names = dotted.split('.');
|
|
64
|
+
const leaf = names.pop();
|
|
65
|
+
let node = target;
|
|
66
|
+
|
|
67
|
+
for (const name of names) {
|
|
68
|
+
if (!isPlainObject(node[name])) node[name] = {};
|
|
69
|
+
node = node[name];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
node[leaf] = value;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The default config a brand that authors nothing gets — every schema
|
|
77
|
+
* `default:` at its own dot-path. A fresh deep copy per call: a caller that
|
|
78
|
+
* mutates the result can never reach back into the schema.
|
|
79
|
+
* @param {string} [target] - Canonical target name; adds that target's refinements.
|
|
80
|
+
* @returns {object}
|
|
81
|
+
*/
|
|
82
|
+
function schemaDefaults(target) {
|
|
83
|
+
return defaultsFrom(defaultRules(target));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The default config a given rule set describes — every `default:` at its own
|
|
88
|
+
* dot-path, deep-copied per call.
|
|
89
|
+
* @param {object[]} rules - Rules that carry a default.
|
|
90
|
+
* @returns {object}
|
|
91
|
+
*/
|
|
92
|
+
function defaultsFrom(rules) {
|
|
93
|
+
const defaults = {};
|
|
94
|
+
|
|
95
|
+
for (const rule of rules) {
|
|
96
|
+
setAtPath(defaults, rule.path, structuredClone(rule.default));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return defaults;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The guiding comments a materialized block travels with: dot-path →
|
|
104
|
+
* description, for every defaulted key and for the container entries above
|
|
105
|
+
* them (a `marketing` block insert is documented, and so is each key it
|
|
106
|
+
* carries). The editor writes a comment only where it INSERTS that path, so
|
|
107
|
+
* the map covers the whole default set and the file gets what it lacks.
|
|
108
|
+
*
|
|
109
|
+
* @param {string} [target] - Canonical target name; adds that target's refinements.
|
|
110
|
+
* @returns {Object<string, string>}
|
|
111
|
+
*/
|
|
112
|
+
function defaultComments(target) {
|
|
113
|
+
const rules = target && TARGET_SCHEMAS[target]
|
|
114
|
+
? [...SHARED_SCHEMA, ...TARGET_SCHEMAS[target]]
|
|
115
|
+
: SHARED_SCHEMA;
|
|
116
|
+
|
|
117
|
+
const defaulted = rules.filter(hasDefault).filter(isMaterialized).map((rule) => rule.path);
|
|
118
|
+
const comments = {};
|
|
119
|
+
|
|
120
|
+
for (const rule of rules) {
|
|
121
|
+
const documents = defaulted.some((dotted) => dotted === rule.path || dotted.startsWith(`${rule.path}.`));
|
|
122
|
+
if (documents && rule.description) {
|
|
123
|
+
comments[rule.path] = rule.description;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return comments;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function collectMissing(defaults, present, prefix, target, found) {
|
|
131
|
+
for (const [key, value] of Object.entries(defaults)) {
|
|
132
|
+
const dotted = prefix ? `${prefix}.${key}` : key;
|
|
133
|
+
const authored = isPlainObject(present) && Object.prototype.hasOwnProperty.call(present, key);
|
|
134
|
+
|
|
135
|
+
if (!authored) {
|
|
136
|
+
found.push({ path: dotted, value });
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Present and still a container on both sides → look for holes inside it.
|
|
141
|
+
// A brand that authored anything else at this path (a scalar, false, null)
|
|
142
|
+
// made a decision: never dive in, never overwrite.
|
|
143
|
+
if (isPlainObject(value) && isPlainObject(present[key])) {
|
|
144
|
+
collectMissing(value, present[key], dotted, target, found);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return found;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The schema-defaulted blocks a config does not carry yet, each at the HIGHEST
|
|
153
|
+
* path that is missing (a brand with no `marketing` at all gets one
|
|
154
|
+
* `marketing` block, not one edit per key inside it).
|
|
155
|
+
*
|
|
156
|
+
* Run against the RAW file contents the heal is about to edit, never a
|
|
157
|
+
* resolved config — resolution already merged the defaults in, so every block
|
|
158
|
+
* would read as present.
|
|
159
|
+
*
|
|
160
|
+
* @param {object} config - Parsed omega.json5 contents.
|
|
161
|
+
* @param {string} [target] - Canonical target name; adds that target's refinements.
|
|
162
|
+
* @returns {Array<{ path: string, value: * }>}
|
|
163
|
+
*/
|
|
164
|
+
function missingDefaults(config, target) {
|
|
165
|
+
// Resolution-only defaults are skipped whole: a `materialize: false` rule's
|
|
166
|
+
// value belongs to the framework, and writing it here would hand a brand a
|
|
167
|
+
// copy to drift ([#793](https://github.com/Omega-JS-Stack/omega/issues/793))
|
|
168
|
+
const writable = defaultsFrom(defaultRules(target).filter(isMaterialized));
|
|
169
|
+
|
|
170
|
+
return collectMissing(writable, config || {}, '', target, []);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
module.exports = { schemaDefaults, missingDefaults, defaultComments, defaultRules };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @omega.js/config demo — the shared demo-project test. Firebase's own
|
|
3
|
+
* convention: `demo-*` project ids are emulator-only (no real GCP project
|
|
4
|
+
* exists or ever will). Cloud-touching services and commands short-circuit
|
|
5
|
+
* on it instead of aiming real Google APIs at a project that 403s.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Whether a Firebase project id is a demo-* (emulator-only) project.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} projectId - e.g. 'demo-omega'
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
function isDemoProject(projectId) {
|
|
15
|
+
return String(projectId || '').startsWith('demo-');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = { isDemoProject };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @omega.js/config desktop-artifacts — the SINGLE naming rule for a desktop
|
|
3
|
+
* target's release assets ([#620](https://github.com/Omega-JS-Stack/omega/issues/620)).
|
|
4
|
+
*
|
|
5
|
+
* Two readers, one rule: @omega.js/desktop's `gulp/build-config` writes these
|
|
6
|
+
* names into `dist/electron-builder.yml`'s artifactName templates, and
|
|
7
|
+
* [site-global.js](site-global.js) derives the website's direct-download URLs
|
|
8
|
+
* from them (`<releasesUrl>/download/<name>`). A second spelling anywhere is a
|
|
9
|
+
* dead download button on a live site, so the derivation lives here and both
|
|
10
|
+
* sides call it.
|
|
11
|
+
*
|
|
12
|
+
* Names carry NO version. That is the whole point: GitHub's
|
|
13
|
+
* `/releases/latest/download/<asset>` only resolves when the asset name is the
|
|
14
|
+
* same in every release, so releasing a desktop version never touches the
|
|
15
|
+
* website and the published URLs never change. electron-updater is unaffected —
|
|
16
|
+
* it reads the feed files (`latest-mac.yml`, `latest.yml`), which name whatever
|
|
17
|
+
* artifact the build produced.
|
|
18
|
+
*
|
|
19
|
+
* Nothing puts an arch back into a name that omits one: electron-builder's
|
|
20
|
+
* macro expander only REPLACES a `${arch}` token where it appears. So these
|
|
21
|
+
* names support exactly the default build — a UNIVERSAL mac, a SINGLE linux
|
|
22
|
+
* arch, and windows' multi-arch NSIS installer (which merges every arch into
|
|
23
|
+
* one file anyway). @omega.js/desktop's build-config refuses any other arch set
|
|
24
|
+
* rather than let two builds collide on one name; per-arch names are a future
|
|
25
|
+
* additive change.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
// Every artifact a release publishes as a user-facing download, per platform,
|
|
29
|
+
// in the order the platform offers them — the FIRST is the platform's default
|
|
30
|
+
// (`/download/<platform>` leads with it, legacy UJM parity). The artifact keys
|
|
31
|
+
// ARE the website's URL vocabulary (`/download/<platform>/<artifact>`).
|
|
32
|
+
//
|
|
33
|
+
// Deliberately absent: the mac auto-update ZIP (electron-updater fetches it
|
|
34
|
+
// from the feed; nobody links it) and the snap (the Snap Store publishes it,
|
|
35
|
+
// so it is never a release asset).
|
|
36
|
+
const DESKTOP_ARTIFACTS = {
|
|
37
|
+
mac: { universal: { ext: 'dmg' } },
|
|
38
|
+
windows: { universal: { ext: 'exe' } },
|
|
39
|
+
linux: { debian: { ext: 'deb' }, appimage: { ext: 'AppImage' } },
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The product name a desktop target packages under — the same derivation
|
|
44
|
+
* @omega.js/desktop's `Manager.getConfig()` applies (`app.productName` ←
|
|
45
|
+
* `brand.name`), so the website reads the name the packager actually used.
|
|
46
|
+
*
|
|
47
|
+
* @param {object} config - Desktop-shaped config (`{ app, brand }`).
|
|
48
|
+
* @returns {string} Product name ('' when neither key resolves).
|
|
49
|
+
*/
|
|
50
|
+
function desktopProductName(config) {
|
|
51
|
+
return config?.app?.productName || config?.brand?.name || '';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* A product name reduced to filename-safe characters. electron-builder's
|
|
56
|
+
* `${productName}` keeps spaces, which become dots in NSIS output and behave
|
|
57
|
+
* inconsistently across targets; hyphens are consistent everywhere.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} productName - Raw product name ("Deployment Playground").
|
|
60
|
+
* @returns {string} Sanitized name ("Deployment-Playground"), '' when empty.
|
|
61
|
+
*/
|
|
62
|
+
function sanitizeProductName(productName) {
|
|
63
|
+
return String(productName || '')
|
|
64
|
+
.replace(/[^A-Za-z0-9._-]+/g, '-')
|
|
65
|
+
.replace(/-+/g, '-')
|
|
66
|
+
.replace(/^-|-$/g, '');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* One artifact's versionless filename: `<Product>-<platform>-<artifact>.<ext>`.
|
|
71
|
+
*
|
|
72
|
+
* @param {string} productName - Raw product name (sanitized here).
|
|
73
|
+
* @param {string} platform - Platform key (mac, windows, linux).
|
|
74
|
+
* @param {string} artifact - Artifact key (universal, debian, appimage, …).
|
|
75
|
+
* @param {string} [ext] - Extension override — pass electron-builder's literal
|
|
76
|
+
* `${ext}` to get a TEMPLATE that covers every target sharing the platform's
|
|
77
|
+
* fallback (mac's dmg + auto-update zip).
|
|
78
|
+
* @returns {string} The filename ('' with no product name to build it from).
|
|
79
|
+
*/
|
|
80
|
+
function desktopArtifactName(productName, platform, artifact, ext) {
|
|
81
|
+
const product = sanitizeProductName(productName);
|
|
82
|
+
const extension = ext || DESKTOP_ARTIFACTS[platform]?.[artifact]?.ext;
|
|
83
|
+
if (!product || !extension) return '';
|
|
84
|
+
|
|
85
|
+
return `${product}-${platform}-${artifact}.${extension}`;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Every published artifact's filename, keyed platform → artifact, in offer
|
|
90
|
+
* order.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} productName - Raw product name.
|
|
93
|
+
* @returns {object} `{ mac: { universal: 'App-mac-universal.dmg' }, … }`, or
|
|
94
|
+
* `{}` when there is no product name to derive from.
|
|
95
|
+
*/
|
|
96
|
+
function desktopArtifactNames(productName) {
|
|
97
|
+
if (!sanitizeProductName(productName)) return {};
|
|
98
|
+
|
|
99
|
+
const names = {};
|
|
100
|
+
for (const [platform, artifacts] of Object.entries(DESKTOP_ARTIFACTS)) {
|
|
101
|
+
names[platform] = {};
|
|
102
|
+
for (const artifact of Object.keys(artifacts)) {
|
|
103
|
+
names[platform][artifact] = desktopArtifactName(productName, platform, artifact);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return names;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
module.exports = { DESKTOP_ARTIFACTS, desktopProductName, sanitizeProductName, desktopArtifactName, desktopArtifactNames };
|