betterstart-cli 0.0.99 → 0.0.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/adapters/next/integrations/_shared/actions/object-key.ts +1 -4
- package/dist/assets/adapters/next/integrations/_shared/actions/sanitize-filename.ts +3 -0
- package/dist/assets/adapters/next/integrations/r2/actions/get-client.ts +22 -0
- package/dist/assets/adapters/next/integrations/r2/actions/get-config.ts +9 -0
- package/dist/assets/adapters/next/integrations/r2/actions/{r2.ts → provider.ts} +3 -31
- package/dist/assets/adapters/next/integrations/r2/integration.ts +13 -1
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/get-client.ts +20 -0
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/get-config.ts +10 -0
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/{railway-bucket.ts → provider.ts} +4 -34
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/stable-read-url.ts +3 -0
- package/dist/assets/adapters/next/integrations/railway-bucket/integration.ts +17 -1
- package/dist/assets/adapters/next/integrations/resend/actions/escape-html.ts +8 -0
- package/dist/assets/adapters/next/integrations/resend/actions/get-env-value.ts +4 -0
- package/dist/assets/adapters/next/integrations/resend/actions/get-from-address.ts +5 -0
- package/dist/assets/adapters/next/integrations/resend/actions/get-resend-client.ts +19 -0
- package/dist/assets/adapters/next/integrations/resend/actions/html-to-text.ts +16 -0
- package/dist/assets/adapters/next/integrations/resend/actions/is-configured.ts +6 -0
- package/dist/assets/adapters/next/integrations/resend/actions/provider.ts +17 -0
- package/dist/assets/adapters/next/integrations/resend/actions/render-password-reset-email.ts +25 -0
- package/dist/assets/adapters/next/integrations/resend/actions/send-email.ts +43 -0
- package/dist/assets/adapters/next/integrations/resend/integration.ts +33 -1
- package/dist/assets/adapters/next/integrations/vercel-blob/actions/get-token.ts +3 -0
- package/dist/assets/adapters/next/integrations/vercel-blob/actions/{vercel-blob.ts → provider.ts} +1 -4
- package/dist/assets/adapters/next/integrations/vercel-blob/integration.ts +9 -1
- package/dist/assets/adapters/next/templates/init/api/storage-read-route.ts +2 -14
- package/dist/assets/adapters/next/templates/init/api/upload-route.ts +7 -5
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-settings-sidebar.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sign-out.tsx +27 -8
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +4 -3
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-button.tsx +5 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +11 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +6 -4
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +12 -8
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-empty-state.tsx +6 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +8 -5
- package/dist/assets/adapters/next/templates/init/components/shared/search-input.tsx +2 -0
- package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +12 -7
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-blockquote.ts +6 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-code-block.ts +6 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-color-highlight.ts +6 -10
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-media-insertion.ts +4 -6
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-slash-menu.ts +4 -6
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +22 -23
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-table-add-controls.ts +8 -9
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor.ts +16 -22
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading.ts +6 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-link-popover.ts +3 -1
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list-dropdown-menu.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list.ts +6 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-mark.ts +2 -1
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-table-button.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-undo-redo.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-entity-versions.ts +2 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-table-utils.ts +2 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-upload.ts +3 -3
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/clamp-page.ts +6 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/cleanup-audit-logs.ts +5 -9
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/first-header-value.ts +3 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-log-order-by.ts +25 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +2 -109
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/{request-metadata.ts → get-audit-request-metadata.ts} +3 -7
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-retention-days.ts +5 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/max-ip-length.ts +1 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/max-user-agent-length.ts +1 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/normalize-changed-fields.ts +3 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/normalize-page-size.ts +12 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/query-audit-logs.ts +71 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/record-audit-event.ts +3 -6
- package/dist/assets/adapters/next/templates/init/lib/actions/auth/middleware.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/email/form-email-delivery-input.ts +1 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/email/queued-form-email.ts +6 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/email/{form-delivery.ts → send-form-emails.ts} +7 -34
- package/dist/assets/adapters/next/templates/init/lib/actions/email/send-queued-email.ts +19 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/upsert-form-settings.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/clamp-media-page-size.ts +9 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/media/clamp-media-page.ts +9 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/media/create-media.ts +4 -3
- package/dist/assets/adapters/next/templates/init/lib/actions/media/delete-media-bulk.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/media/delete-media.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media-by-id.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media-by-ids.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +5 -21
- package/dist/assets/adapters/next/templates/init/lib/actions/media/update-media.ts +4 -3
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/change-own-password.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/update-email.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/storage/local.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/upload/upload-media-from-url.ts +6 -8
- package/dist/assets/adapters/next/templates/init/lib/actions/users/change-user-password.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/users/create-user.ts +4 -3
- package/dist/assets/adapters/next/templates/init/lib/actions/users/delete-user.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/users/get-cached-users.ts +40 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/users/get-users.ts +2 -40
- package/dist/assets/adapters/next/templates/init/lib/actions/users/update-user-role.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/create-webhook.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/delete-webhook.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/deliver-to-endpoint.ts +55 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/deliver-webhook-event.ts +19 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/emit-webhook-event.ts +22 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/entity-event-payload.ts +20 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-deliveries.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-secret.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-subscriptions.ts +2 -18
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhooks.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/prune-webhook-deliveries.ts +26 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/read-webhook-subscriptions.ts +18 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/record-webhook-delivery.ts +24 -0
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/regenerate-webhook-secret.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/{register.ts → register-webhook-hooks.ts} +2 -14
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/send-test-webhook.ts +4 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/update-webhook.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/register.ts +1 -1
- package/dist/assets/adapters/next/templates/init/pages/account-shell-rsc.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/pages/login-page-rsc.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/login-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/media/media-page-content.tsx +5 -4
- package/dist/assets/adapters/next/templates/init/pages/profile/profile-form.tsx +13 -10
- package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-table.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +10 -5
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/delete-webhook-dialog.tsx +19 -10
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +9 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +26 -20
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page-content.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-table.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-table.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +6 -5
- package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +6 -4
- package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +9 -5
- package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/utils/audit/get-changed-field-names.ts +18 -0
- package/dist/assets/adapters/next/templates/init/utils/audit/get-touched-field-names.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/audit/normalize-comparable-value.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/audit/should-track-field.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/auth/can-access-admin.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/auth/get-admin-post-login-path.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/auth/has-required-role.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/auth/is-user-role.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/date/build-date-range.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/date/date-range-end-time.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/date/date-range-input-format.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/date/date-range-start-time.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/date/format-date-range-input-date.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/date/format-date-range-param-date.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/date/format-date-range-trigger-date.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/date/get-date-range-trigger-label.ts +24 -0
- package/dist/assets/adapters/next/templates/init/utils/date/get-exclusive-date-upper-bound.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/date/get-ordered-date-range.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/date/normalize-date-range-time.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/date/parse-date-input-value.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/date/parse-editable-date-range-date.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/active-table-cell-class.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/active-table-cell.ts +36 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/active-table-wrapper-class.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/append-column-to-table.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/append-row-to-table.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/apply-cursor-change-if-available.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/apply-cursor-change.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/can-insert-content-editor-media-placeholder.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/checkbox-label-factory.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/clear-table-part-preview.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight-color-name-pattern.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight-color-option.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight-color-options.ts +68 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight-color.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight-colors.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-highlight.ts +33 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-inline-math-delimiter.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-inline-math.ts +105 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-keyboard.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-math-kind.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-math-value.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-media-placeholder-node.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-media-shortcut-key.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-mode.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-raw-content-block.ts +95 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-selected-math.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-selection-request.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-subscript.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-superscript.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-table-alignment.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-underline.ts +26 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-content-editor-table-node.ts +27 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-html-mark.ts +28 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-markdown-image-text.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-markdown-plain-text-offset-map.ts +126 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-markdown-table-text.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/create-markdown-text-from-url.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/default-content-editor-table-cols.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/default-content-editor-table-rows.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/doc-position-from-plain-text-offset.ts +27 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/escape-html.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-highlight-span-range.ts +25 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-inline-math-start.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-markdown-link-range.ts +40 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-node-at-position.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-node-position.ts +48 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-raw-content-start.ts +16 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-unescaped-character.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/find-unescaped-sequence.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/focus-next-node.ts +28 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/format-markdown-blockquote-line.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/format-markdown-heading-line.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/format-markdown-list-line.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/format-markdown.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/format-shortcut-key.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-active-table-column-alignment.ts +31 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-block-math-expression.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-closest-table-cell.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-content-editor-highlight-color-name.ts +42 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-content-editor-highlight-color-value.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-editor-element.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-editor-scroll-element.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-event-table-cell.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-inline-math-delimiter.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-markdown-heading-fallback.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-markdown-list-fallback.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-media-label.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-number-attr.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-plain-text-offset-before-doc-position.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-plain-text-offset-before-markdown-offset.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-raw-content-kind.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-raw-content-token.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selected-block-nodes.ts +23 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selected-content-editor-math.ts +43 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selected-nodes-of-type.ts +50 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selected-table-column-cell-positions.ts +21 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selection-table-cell.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selection-table-element.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-selection-table.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-slash-menu-state.ts +47 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-string-attr.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-element.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-from-event-target.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-from-wrapper.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-position-for-element.ts +24 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-rect-at-position.ts +20 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/get-table-wrapper-element.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/{task-item.ts → get-task-item-checkbox-label.ts} +1 -7
- package/dist/assets/adapters/next/templates/init/utils/editor/has-own-attribute.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/highlight-span-pattern.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/inline-math-delimiter.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/inline-math-node-view.ts +51 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-component-at-cursor.ts +28 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-content-editor-math.ts +35 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-content-editor-media-placeholder.ts +20 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-content-editor-table.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-markdown-text-at-position.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-result.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/insert-text-at-cursor.ts +37 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-allowed-uri.ts +42 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-content-editor-highlight-color.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-content-editor-media-placeholder-active.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-content-editor-table-alignment.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-element-visible-in-editor.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-escaped.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-extension-available.ts +22 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-mac.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-mark-in-schema.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-markdown-line-start.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-node-in-schema.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-node-type-selected.ts +30 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-same-slash-menu-state.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-selected-table-visible.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-task-item-checked.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-valid-dollar-inline-math.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-valid-position.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/is-word-character.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/mac-symbols.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-heading-level.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-heading-option.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-heading-options.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-image-upload-result.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-list-option.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-list-options.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-list-type.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown-offset-from-plain-text-offset.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-block-math.ts +54 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-code-fence-start.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-html-block.ts +31 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-html-mark-syntax.ts +16 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-inline-math.ts +49 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-markdown-block-prefix.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-markdown-mark-syntax.ts +27 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/match-raw-content-block.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/mounted-editor-view.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/normalize-editor-markdown.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/parse-content-editor-math-input.ts +98 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/parse-shortcut-keys.ts +17 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/prepare-markdown-for-rich-mode.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/protocol-config.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/raw-content-block-node-view.ts +120 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/raw-content-kind.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/raw-content-match.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/raw-html-block-tags.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/remove-highlight-span-at-cursor.ts +59 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/remove-markdown-link-at-cursor.ts +43 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/remove-selected-content-editor-math.ts +20 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/render-details-preview.ts +22 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/render-latex.ts +20 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/render-raw-content-preview.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/render-simple-markdown-body.ts +46 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/run-slash-command.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/runnable-slash-command.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/sanitize-html-preview.ts +41 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/sanitize-url.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/select-current-block-content.ts +38 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/selection-within-convertible-types.ts +29 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/self-closing-html-block-tags.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/serialize-raw-content-preview.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/set-active-table-column-alignment.ts +39 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/set-element-attribute.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/set-markdown-link-at-cursor.ts +50 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/show-table-part-preview.ts +59 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/slash-commands.ts +2 -1
- package/dist/assets/adapters/next/templates/init/utils/editor/slash-menu-state.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/sr-only.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/strip-html.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/strip-markdown-block-prefix.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/table-add-controls-state.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/table-part-preview-class.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/table-part.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/table-wrapper-class.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/transform-selected-markdown-lines.ts +38 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/update-nodes-attr.ts +36 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/update-selected-content-editor-math.ts +36 -0
- package/dist/assets/adapters/next/templates/init/utils/email/escape-html.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/email/form-email-delivery-input.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/email/format-email-value.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/email/is-valid-email.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/email/normalize-email-list.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/email/render-form-submission-rows.ts +16 -0
- package/dist/assets/adapters/next/templates/init/utils/email/render-notification-email.ts +32 -0
- package/dist/assets/adapters/next/templates/init/utils/email/render-thank-you-email.ts +18 -0
- package/dist/assets/adapters/next/templates/init/utils/error/read-string-property.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/error/recognize.ts +26 -0
- package/dist/assets/adapters/next/templates/init/utils/error/to-action-error.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/form/{list-field.ts → clone-default-value.ts} +0 -5
- package/dist/assets/adapters/next/templates/init/utils/form/create-list-item-key.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/media/admin-media-type.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/media/{fallback.ts → create-admin-media-from-url.ts} +1 -14
- package/dist/assets/adapters/next/templates/init/utils/media/create-preview-url.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/media/get-filename-from-url.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/media/get-media-type.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/media/get-media-url-help-text.ts +10 -0
- package/dist/assets/adapters/next/templates/init/utils/media/get-media-url-placeholder.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/media/image-extensions.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/media/image-mime-types.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/media/infer-media-content-type.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/media/is-document-only-accept.ts +19 -0
- package/dist/assets/adapters/next/templates/init/utils/media/{query.ts → map-media-row.ts} +0 -39
- package/dist/assets/adapters/next/templates/init/utils/media/media-mime-types.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/media/revoke-preview-url.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/media/select-media.ts +39 -0
- package/dist/assets/adapters/next/templates/init/utils/media/video-extensions.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/media/video-mime-types.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/seo/{seo.ts → create-metadata.ts} +0 -36
- package/dist/assets/adapters/next/templates/init/utils/seo/generate-article-schema.ts +31 -0
- package/dist/assets/adapters/next/templates/init/utils/seo/schema-to-json.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/storage/{local.ts → build-local-storage-key.ts} +1 -4
- package/dist/assets/adapters/next/templates/init/utils/storage/decode-storage-key.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/storage/sanitize-filename.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/storage/storage-error.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/table/{table.ts → default-get-id.ts} +0 -4
- package/dist/assets/adapters/next/templates/init/utils/table/is-string.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/default-remote-accept.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/dropzone-accept.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/get-fallback-extension.ts +12 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/get-remote-filename.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/is-accepted-remote-type.ts +25 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/is-wildcard-accept.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/parse-accept-types.ts +7 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/parse-dropzone-accept.ts +14 -0
- package/dist/assets/adapters/next/templates/init/utils/upload/remote-fetch-timeout-ms.ts +1 -0
- package/dist/assets/adapters/next/templates/init/utils/user/compare-user-sort-values.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/user/get-user-initials.ts +11 -0
- package/dist/assets/adapters/next/templates/init/utils/user/get-user-sort-value.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/user/{user.ts → get-users-page.ts} +3 -28
- package/dist/assets/adapters/next/templates/init/utils/user/normalize-user-filter-value.ts +3 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/file-validation-config.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/file-validation-error.ts +4 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/file-validation-result.ts +6 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/format-file-size.ts +18 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/is-file-type-allowed.ts +13 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/is-valid-url.ts +8 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/slugify.ts +9 -0
- package/dist/assets/adapters/next/templates/init/utils/validation/validate-files.ts +39 -0
- package/dist/assets/adapters/next/templates/init/utils/webhook/create-webhook-event-id.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/webhook/generate-webhook-secret.ts +5 -0
- package/dist/assets/adapters/next/templates/init/utils/webhook/sign-webhook-payload.ts +5 -0
- package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +3 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +6 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +11 -15
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-extension/node-background-extension.ts +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/media-gallery-placeholder-node/media-gallery-placeholder-node.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +5 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/task-item-node/task-item-node-extension.tsx +4 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +10 -12
- package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/schema.json +8 -0
- package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +3 -8
- package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +1 -1
- package/dist/{chunk-SO2CAJFC.js → chunk-TIJEHWRF.js} +563 -239
- package/dist/chunk-TIJEHWRF.js.map +1 -0
- package/dist/cli.js +27996 -24856
- package/dist/cli.js.map +1 -1
- package/dist/read-namespaced-template-UXU7OCY3.js +13 -0
- package/dist/read-namespaced-template-UXU7OCY3.js.map +1 -0
- package/package.json +1 -1
- package/dist/assets/adapters/next/integrations/resend/actions/resend.ts +0 -138
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/dispatch.ts +0 -134
- package/dist/assets/adapters/next/templates/init/utils/audit/audit.ts +0 -54
- package/dist/assets/adapters/next/templates/init/utils/auth/roles.ts +0 -17
- package/dist/assets/adapters/next/templates/init/utils/date/date.ts +0 -100
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-rich-extensions.ts +0 -824
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor.ts +0 -389
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown.ts +0 -545
- package/dist/assets/adapters/next/templates/init/utils/editor/node-attrs.ts +0 -25
- package/dist/assets/adapters/next/templates/init/utils/editor/source-media.ts +0 -11
- package/dist/assets/adapters/next/templates/init/utils/editor/table-add-controls.ts +0 -91
- package/dist/assets/adapters/next/templates/init/utils/editor/table-bubble.ts +0 -172
- package/dist/assets/adapters/next/templates/init/utils/editor/tiptap.ts +0 -847
- package/dist/assets/adapters/next/templates/init/utils/email/form-delivery.ts +0 -104
- package/dist/assets/adapters/next/templates/init/utils/media/media.ts +0 -91
- package/dist/assets/adapters/next/templates/init/utils/upload/remote.ts +0 -55
- package/dist/assets/adapters/next/templates/init/utils/upload/upload.ts +0 -26
- package/dist/assets/adapters/next/templates/init/utils/validation/validation.ts +0 -102
- package/dist/assets/adapters/next/templates/init/utils/webhook/signature.ts +0 -13
- package/dist/chunk-SO2CAJFC.js.map +0 -1
- package/dist/template-reader-XMWPFYIK.js +0 -13
- package/dist/template-reader-XMWPFYIK.js.map +0 -1
|
@@ -1,79 +1,468 @@
|
|
|
1
|
-
// adapters/next/template-reader.ts
|
|
1
|
+
// adapters/next/template-reader/read-template.ts
|
|
2
|
+
import fs3 from "fs";
|
|
3
|
+
import path3 from "path";
|
|
4
|
+
|
|
5
|
+
// utils/paths.ts
|
|
2
6
|
import fs2 from "fs";
|
|
3
7
|
import path2 from "path";
|
|
4
|
-
|
|
5
|
-
// core-engine/utils/cli-root.ts
|
|
6
|
-
import fs from "fs";
|
|
7
|
-
import path from "path";
|
|
8
8
|
import { fileURLToPath } from "url";
|
|
9
9
|
|
|
10
10
|
// constants/cli.ts
|
|
11
11
|
var CLI_PACKAGE_NAME = "betterstart-cli";
|
|
12
12
|
var REDACTED = "[redacted]";
|
|
13
13
|
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
// constants/paths.ts
|
|
15
|
+
var BETTERSTART_DIR = ".betterstart";
|
|
16
|
+
var CONFIG_FILE_NAME = "betterstart.config.ts";
|
|
17
|
+
var DEVELOPMENT_ENV_FILES = [
|
|
18
|
+
".env.development.local",
|
|
19
|
+
".env.local",
|
|
20
|
+
".env.development",
|
|
21
|
+
".env"
|
|
22
|
+
];
|
|
23
|
+
var LOCKFILE_MAP = {
|
|
24
|
+
"pnpm-lock.yaml": "pnpm",
|
|
25
|
+
"package-lock.json": "npm",
|
|
26
|
+
"yarn.lock": "yarn",
|
|
27
|
+
"bun.lockb": "bun",
|
|
28
|
+
"bun.lock": "bun"
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// utils/files.ts
|
|
32
|
+
import crypto from "crypto";
|
|
33
|
+
import fs from "fs";
|
|
34
|
+
import path from "path";
|
|
35
|
+
import { parseEnv } from "util";
|
|
36
|
+
|
|
37
|
+
// utils/text.ts
|
|
38
|
+
import { stripVTControlCharacters } from "util";
|
|
39
|
+
function stripAnsi(text, options = {}) {
|
|
40
|
+
const stripped = stripVTControlCharacters(text);
|
|
41
|
+
return options.stripCarriageReturns ? stripped.replaceAll("\r", "") : stripped;
|
|
42
|
+
}
|
|
43
|
+
function toPascalCase(str) {
|
|
44
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").split(/[-_\s]+/).map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join("");
|
|
45
|
+
}
|
|
46
|
+
function toCamelCase(str) {
|
|
47
|
+
const p = toPascalCase(str);
|
|
48
|
+
return p.charAt(0).toLowerCase() + p.slice(1);
|
|
49
|
+
}
|
|
50
|
+
function singularize(str) {
|
|
51
|
+
if (str.endsWith("ies")) return `${str.slice(0, -3)}y`;
|
|
52
|
+
if (str.endsWith("ves")) return `${str.slice(0, -3)}f`;
|
|
53
|
+
if (str.endsWith("sses") || str.endsWith("xes") || str.endsWith("ches") || str.endsWith("shes") || str.endsWith("zes"))
|
|
54
|
+
return str.slice(0, -2);
|
|
55
|
+
if (str.endsWith("s") && !str.endsWith("ss")) return str.slice(0, -1);
|
|
56
|
+
return str;
|
|
57
|
+
}
|
|
58
|
+
function pluralize(str) {
|
|
59
|
+
if (str.endsWith("s") && !str.endsWith("ss")) return str;
|
|
60
|
+
if (str.endsWith("y") && !["ay", "ey", "iy", "oy", "uy"].some((v) => str.endsWith(v)))
|
|
61
|
+
return `${str.slice(0, -1)}ies`;
|
|
62
|
+
if (str.endsWith("s") || str.endsWith("x") || str.endsWith("ch") || str.endsWith("sh"))
|
|
63
|
+
return `${str}es`;
|
|
64
|
+
return `${str}s`;
|
|
65
|
+
}
|
|
66
|
+
function toKebabCase(str) {
|
|
67
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
68
|
+
}
|
|
69
|
+
function toScreamingSnake(str) {
|
|
70
|
+
return str.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").toUpperCase();
|
|
71
|
+
}
|
|
72
|
+
function quotePropertyName(name) {
|
|
73
|
+
return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name) ? name : `'${name}'`;
|
|
74
|
+
}
|
|
75
|
+
function humanizeName(name) {
|
|
76
|
+
return name.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().split(/\s+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
77
|
+
}
|
|
78
|
+
function singularizeLabel(label) {
|
|
79
|
+
const words = label.split(" ");
|
|
80
|
+
const lastWord = words[words.length - 1];
|
|
81
|
+
words[words.length - 1] = singularize(lastWord.toLowerCase());
|
|
82
|
+
words[words.length - 1] = words[words.length - 1].charAt(0).toUpperCase() + words[words.length - 1].slice(1);
|
|
83
|
+
return words.join(" ");
|
|
84
|
+
}
|
|
85
|
+
function quoteLiteral(value, quote = "'") {
|
|
86
|
+
const escaped = value.replace(/\\/g, "\\\\").replace(new RegExp(escapeRegExp(quote), "g"), `\\${quote}`).replace(/\r/g, "\\r").replace(/\n/g, "\\n");
|
|
87
|
+
return `${quote}${escaped}${quote}`;
|
|
88
|
+
}
|
|
89
|
+
function escapeTemplateText(value) {
|
|
90
|
+
return value.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
|
|
91
|
+
}
|
|
92
|
+
function normalizeLineEndings(content) {
|
|
93
|
+
return content.replace(/\r\n/g, "\n");
|
|
94
|
+
}
|
|
95
|
+
function escapeRegExp(value) {
|
|
96
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
97
|
+
}
|
|
98
|
+
function hasConflictMarkers(content) {
|
|
99
|
+
return /^(<{7}|={7}|>{7})( |$)/m.test(content);
|
|
100
|
+
}
|
|
101
|
+
function splitLines(content) {
|
|
102
|
+
return normalizeLineEndings(content).split("\n");
|
|
103
|
+
}
|
|
104
|
+
function normalizeWhitespace(value) {
|
|
105
|
+
return value.trim().replace(/\s+/g, " ");
|
|
106
|
+
}
|
|
107
|
+
function escapeJsx(str) {
|
|
108
|
+
return str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
109
|
+
}
|
|
110
|
+
function escapeAttribute(str) {
|
|
111
|
+
return escapeJsx(str).replace(/"/g, """);
|
|
112
|
+
}
|
|
113
|
+
function findNextNonEmptyLine(lines, startIndex) {
|
|
114
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
115
|
+
const trimmed = lines[i].trim();
|
|
116
|
+
if (trimmed !== "") return trimmed;
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function levenshtein(a, b) {
|
|
121
|
+
const matrix = Array.from({ length: a.length + 1 }, () => new Array(b.length + 1).fill(0));
|
|
122
|
+
for (let i = 0; i <= a.length; i++) matrix[i][0] = i;
|
|
123
|
+
for (let j = 0; j <= b.length; j++) matrix[0][j] = j;
|
|
124
|
+
for (let i = 1; i <= a.length; i++) {
|
|
125
|
+
for (let j = 1; j <= b.length; j++) {
|
|
126
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
127
|
+
matrix[i][j] = Math.min(
|
|
128
|
+
matrix[i - 1][j] + 1,
|
|
129
|
+
matrix[i][j - 1] + 1,
|
|
130
|
+
matrix[i - 1][j - 1] + cost
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return matrix[a.length][b.length];
|
|
135
|
+
}
|
|
136
|
+
function toTitleCase(value) {
|
|
137
|
+
return normalizeWhitespace(value).split(" ").map((word) => word ? `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}` : word).join(" ");
|
|
138
|
+
}
|
|
139
|
+
function slugify(value) {
|
|
140
|
+
return value.trim().toLowerCase().replace(/['"]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-+/g, "-");
|
|
141
|
+
}
|
|
142
|
+
function usesIdentifier(source, identifier) {
|
|
143
|
+
return new RegExp(`\\b${escapeRegExp(identifier)}\\b`).test(source);
|
|
144
|
+
}
|
|
145
|
+
function detectIndent(raw) {
|
|
146
|
+
const indentMatch = raw.match(/^[ \t]+(?=")/m);
|
|
147
|
+
return indentMatch?.[0] ?? 2;
|
|
148
|
+
}
|
|
149
|
+
function jsString(value) {
|
|
150
|
+
return JSON.stringify(value);
|
|
151
|
+
}
|
|
152
|
+
function safeIdentifier(value, fallback) {
|
|
153
|
+
const pascal = toPascalCase(value).replace(/[^A-Za-z0-9_$]/g, "");
|
|
154
|
+
const base = pascal ? `${pascal.charAt(0).toLowerCase()}${pascal.slice(1)}` : fallback;
|
|
155
|
+
return /^[A-Za-z_$]/.test(base) ? base : fallback;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// utils/files.ts
|
|
159
|
+
import fse from "fs-extra";
|
|
160
|
+
function findUpwards(startDir, visit) {
|
|
161
|
+
let dir = path.resolve(startDir);
|
|
17
162
|
for (; ; ) {
|
|
18
|
-
const
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
163
|
+
const found = visit(dir);
|
|
164
|
+
if (found !== void 0) return found;
|
|
165
|
+
const parent = path.dirname(dir);
|
|
166
|
+
if (parent === dir) return void 0;
|
|
167
|
+
dir = parent;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function hashContent(content) {
|
|
171
|
+
return `sha256-${crypto.createHash("sha256").update(normalizeLineEndings(content)).digest("hex")}`;
|
|
172
|
+
}
|
|
173
|
+
function ensureDir(dirPath) {
|
|
174
|
+
fse.ensureDirSync(dirPath);
|
|
175
|
+
}
|
|
176
|
+
function safeWriteFile(filePath, content, force = false) {
|
|
177
|
+
if (!force && fs.existsSync(filePath)) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
ensureDir(path.dirname(filePath));
|
|
181
|
+
fs.writeFileSync(filePath, content, "utf-8");
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
function createGeneratedFile(filePath, content) {
|
|
185
|
+
return {
|
|
186
|
+
path: filePath.split(path.sep).join("/"),
|
|
187
|
+
content
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function stripJsonComments(input) {
|
|
191
|
+
let result = "";
|
|
192
|
+
let i = 0;
|
|
193
|
+
while (i < input.length) {
|
|
194
|
+
if (input[i] === '"') {
|
|
195
|
+
let j = i + 1;
|
|
196
|
+
while (j < input.length) {
|
|
197
|
+
if (input[j] === "\\") {
|
|
198
|
+
j += 2;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (input[j] === '"') {
|
|
202
|
+
j++;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
j++;
|
|
206
|
+
}
|
|
207
|
+
result += input.slice(i, j);
|
|
208
|
+
i = j;
|
|
209
|
+
} else if (input[i] === "/" && input[i + 1] === "/") {
|
|
210
|
+
const nl = input.indexOf("\n", i);
|
|
211
|
+
i = nl === -1 ? input.length : nl;
|
|
212
|
+
} else if (input[i] === "/" && input[i + 1] === "*") {
|
|
213
|
+
const end = input.indexOf("*/", i + 2);
|
|
214
|
+
i = end === -1 ? input.length : end + 2;
|
|
215
|
+
} else {
|
|
216
|
+
result += input[i];
|
|
217
|
+
i++;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
function toStrictJson(input) {
|
|
223
|
+
return stripJsonComments(input).replace(/,\s*([\]}])/g, "$1");
|
|
224
|
+
}
|
|
225
|
+
function parseDotenvFile(filePath) {
|
|
226
|
+
if (!fs.existsSync(filePath)) return /* @__PURE__ */ new Map();
|
|
227
|
+
try {
|
|
228
|
+
const parsed = Object.entries(parseEnv(fs.readFileSync(filePath, "utf-8")));
|
|
229
|
+
return new Map(
|
|
230
|
+
parsed.filter((entry) => typeof entry[1] === "string")
|
|
231
|
+
);
|
|
232
|
+
} catch {
|
|
233
|
+
return /* @__PURE__ */ new Map();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function readEnvVar(cwd, key) {
|
|
237
|
+
return parseDotenvFile(path.join(cwd, ".env.local")).get(key);
|
|
238
|
+
}
|
|
239
|
+
function resolveProjectEnvVar(cwd, key) {
|
|
240
|
+
for (const envFile of DEVELOPMENT_ENV_FILES) {
|
|
241
|
+
const value = parseDotenvFile(path.join(cwd, envFile)).get(key)?.trim();
|
|
242
|
+
if (value) return { source: envFile, value };
|
|
243
|
+
}
|
|
244
|
+
return void 0;
|
|
245
|
+
}
|
|
246
|
+
function readProjectEnvVar(cwd, key) {
|
|
247
|
+
return resolveProjectEnvVar(cwd, key)?.value;
|
|
248
|
+
}
|
|
249
|
+
function appendEnvVars(cwd, sections, overwrite) {
|
|
250
|
+
const envPath = path.join(cwd, ".env.local");
|
|
251
|
+
let existing = fs.existsSync(envPath) ? fs.readFileSync(envPath, "utf-8") : "";
|
|
252
|
+
const existingKeys = new Set(
|
|
253
|
+
existing.split("\n").filter((line) => line.trim() && !line.trim().startsWith("#")).map((line) => line.split("=")[0]?.trim()).filter(Boolean)
|
|
254
|
+
);
|
|
255
|
+
const added = [];
|
|
256
|
+
const skipped = [];
|
|
257
|
+
const updated = [];
|
|
258
|
+
const lines = [];
|
|
259
|
+
if (overwrite) {
|
|
260
|
+
for (const section of sections) {
|
|
261
|
+
for (const v of section.vars) {
|
|
262
|
+
if (overwrite.has(v.key) && existingKeys.has(v.key)) {
|
|
263
|
+
const pattern = new RegExp(`^${v.key}=.*$`, "m");
|
|
264
|
+
const replacement = v.comment ? `${v.key}="${v.value}" # ${v.comment}` : `${v.key}="${v.value}"`;
|
|
265
|
+
existing = existing.replace(pattern, replacement);
|
|
266
|
+
updated.push(v.key);
|
|
24
267
|
}
|
|
25
|
-
} catch {
|
|
26
268
|
}
|
|
27
269
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
270
|
+
}
|
|
271
|
+
if (existing.trim()) {
|
|
272
|
+
lines.push("");
|
|
273
|
+
}
|
|
274
|
+
for (const section of sections) {
|
|
275
|
+
const sectionVars = section.vars.filter((v) => {
|
|
276
|
+
if (existingKeys.has(v.key)) {
|
|
277
|
+
if (!updated.includes(v.key)) skipped.push(v.key);
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
added.push(v.key);
|
|
281
|
+
return true;
|
|
282
|
+
});
|
|
283
|
+
if (sectionVars.length === 0) continue;
|
|
284
|
+
lines.push(`# ${section.header}`);
|
|
285
|
+
for (const v of sectionVars) {
|
|
286
|
+
const line = v.comment ? `${v.key}="${v.value}" # ${v.comment}` : `${v.key}="${v.value}"`;
|
|
287
|
+
lines.push(line);
|
|
288
|
+
}
|
|
289
|
+
lines.push("");
|
|
290
|
+
}
|
|
291
|
+
if (added.length > 0 || updated.length > 0) {
|
|
292
|
+
const header = existing.trim() ? "" : "# ============================================\n# BetterStart Admin\n# ============================================\n";
|
|
293
|
+
const content = existing.trim() ? `${existing.trimEnd()}
|
|
294
|
+
${lines.join("\n")}` : header + lines.join("\n");
|
|
295
|
+
fs.writeFileSync(envPath, content);
|
|
296
|
+
}
|
|
297
|
+
return { added, skipped, updated };
|
|
298
|
+
}
|
|
299
|
+
function removeEnvVars(cwd, keys) {
|
|
300
|
+
const envPath = path.join(cwd, ".env.local");
|
|
301
|
+
if (!fs.existsSync(envPath) || keys.length === 0) {
|
|
302
|
+
return [];
|
|
303
|
+
}
|
|
304
|
+
const keySet = new Set(keys);
|
|
305
|
+
const removed = [];
|
|
306
|
+
const filteredLines = fs.readFileSync(envPath, "utf-8").split("\n").filter((line) => {
|
|
307
|
+
const trimmed = line.trim();
|
|
308
|
+
if (!trimmed || trimmed.startsWith("#") || !trimmed.includes("=")) {
|
|
309
|
+
return true;
|
|
310
|
+
}
|
|
311
|
+
const [key] = trimmed.split("=");
|
|
312
|
+
const normalizedKey = key?.trim();
|
|
313
|
+
if (normalizedKey && keySet.has(normalizedKey)) {
|
|
314
|
+
removed.push(normalizedKey);
|
|
315
|
+
return false;
|
|
31
316
|
}
|
|
32
|
-
|
|
317
|
+
return true;
|
|
318
|
+
});
|
|
319
|
+
fs.writeFileSync(envPath, `${filteredLines.join("\n").trimEnd()}
|
|
320
|
+
`, "utf-8");
|
|
321
|
+
return removed;
|
|
322
|
+
}
|
|
323
|
+
function captureFile(filePath) {
|
|
324
|
+
if (!fs.existsSync(filePath)) {
|
|
325
|
+
return { existed: false };
|
|
33
326
|
}
|
|
327
|
+
return { existed: true, content: fs.readFileSync(filePath, "utf-8") };
|
|
328
|
+
}
|
|
329
|
+
function restoreFile(filePath, snapshot) {
|
|
330
|
+
if (snapshot.existed) {
|
|
331
|
+
fs.writeFileSync(filePath, snapshot.content ?? "", "utf-8");
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
if (fs.existsSync(filePath)) {
|
|
335
|
+
fs.rmSync(filePath, { force: true });
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
function readNonEmptyEnvVar(cwd, key) {
|
|
339
|
+
const value = readProjectEnvVar(cwd, key)?.trim();
|
|
340
|
+
return value ? value : void 0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// utils/paths.ts
|
|
344
|
+
function betterstartDir(cwd, ...segments) {
|
|
345
|
+
return path2.join(cwd, BETTERSTART_DIR, ...segments);
|
|
346
|
+
}
|
|
347
|
+
function toPosixPath(value) {
|
|
348
|
+
return value.replace(/\\/g, "/");
|
|
349
|
+
}
|
|
350
|
+
function trimDotSlash(value) {
|
|
351
|
+
return value.replace(/^[.][/\\]/, "");
|
|
352
|
+
}
|
|
353
|
+
function normalizePosixDir(value) {
|
|
354
|
+
return trimDotSlash(toPosixPath(value)).replace(/\/+$/, "");
|
|
355
|
+
}
|
|
356
|
+
function toProjectAbsolutePath(cwd, filePath) {
|
|
357
|
+
return path2.isAbsolute(filePath) ? filePath : path2.join(cwd, ...filePath.split("/"));
|
|
358
|
+
}
|
|
359
|
+
function readLocalProjectFile(cwd, filePath) {
|
|
360
|
+
const fullPath = toProjectAbsolutePath(cwd, filePath);
|
|
361
|
+
return fs2.existsSync(fullPath) ? fs2.readFileSync(fullPath, "utf-8") : null;
|
|
362
|
+
}
|
|
363
|
+
function isInsideDir(child, parent) {
|
|
364
|
+
const relative = path2.relative(parent, child);
|
|
365
|
+
return relative === "" || !relative.startsWith("..") && !path2.isAbsolute(relative);
|
|
366
|
+
}
|
|
367
|
+
function removePath(cwd, filePath) {
|
|
368
|
+
const fullPath = toProjectAbsolutePath(cwd, filePath);
|
|
369
|
+
const existed = fs2.existsSync(fullPath);
|
|
370
|
+
fs2.rmSync(fullPath, { recursive: true, force: true });
|
|
371
|
+
return existed;
|
|
372
|
+
}
|
|
373
|
+
function cleanupEmptyDirs(cwd, deletedPaths, stopRoots) {
|
|
374
|
+
const projectRoot = path2.resolve(cwd);
|
|
375
|
+
const stops = /* @__PURE__ */ new Set([projectRoot, ...stopRoots]);
|
|
376
|
+
for (const deletedPath of deletedPaths) {
|
|
377
|
+
let currentDir = path2.dirname(toProjectAbsolutePath(cwd, deletedPath));
|
|
378
|
+
while (isInsideDir(currentDir, projectRoot) && !stops.has(currentDir)) {
|
|
379
|
+
if (!fs2.existsSync(currentDir)) {
|
|
380
|
+
currentDir = path2.dirname(currentDir);
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
if (fs2.readdirSync(currentDir).length > 0) {
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
fs2.rmdirSync(currentDir);
|
|
387
|
+
currentDir = path2.dirname(currentDir);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
function findCliPackage() {
|
|
392
|
+
const start = path2.dirname(fileURLToPath(import.meta.url));
|
|
393
|
+
return findUpwards(start, (dir) => {
|
|
394
|
+
const pkgPath = path2.join(dir, "package.json");
|
|
395
|
+
if (!fs2.existsSync(pkgPath)) return void 0;
|
|
396
|
+
try {
|
|
397
|
+
const pkg = JSON.parse(fs2.readFileSync(pkgPath, "utf-8"));
|
|
398
|
+
return pkg.name === CLI_PACKAGE_NAME ? { dir, pkg } : void 0;
|
|
399
|
+
} catch {
|
|
400
|
+
return void 0;
|
|
401
|
+
}
|
|
402
|
+
}) ?? null;
|
|
34
403
|
}
|
|
35
404
|
function findCliRoot() {
|
|
36
405
|
const found = findCliPackage();
|
|
37
406
|
if (found) {
|
|
38
407
|
return found.dir;
|
|
39
408
|
}
|
|
40
|
-
return
|
|
409
|
+
return path2.resolve(path2.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
41
410
|
}
|
|
42
411
|
function getCurrentCliVersion() {
|
|
43
412
|
return findCliPackage()?.pkg.version ?? "0.0.0";
|
|
44
413
|
}
|
|
45
414
|
function resolveCliAssetPath(...segments) {
|
|
46
415
|
const root = findCliRoot();
|
|
47
|
-
const builtPath =
|
|
48
|
-
if (
|
|
416
|
+
const builtPath = path2.join(root, "dist", "assets", ...segments);
|
|
417
|
+
if (fs2.existsSync(builtPath)) {
|
|
49
418
|
return builtPath;
|
|
50
419
|
}
|
|
51
|
-
return
|
|
420
|
+
return path2.join(root, ...segments);
|
|
421
|
+
}
|
|
422
|
+
function resolveCommandCwd(command) {
|
|
423
|
+
const options = command.opts();
|
|
424
|
+
return typeof options.cwd === "string" ? path2.resolve(options.cwd) : process.cwd();
|
|
52
425
|
}
|
|
53
426
|
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
]
|
|
75
|
-
|
|
76
|
-
|
|
427
|
+
// adapters/next/template-reader/read-template.ts
|
|
428
|
+
function readTemplate(relativePath) {
|
|
429
|
+
return fs3.readFileSync(
|
|
430
|
+
path3.join(resolveCliAssetPath("adapters", "next", "templates", "init"), relativePath),
|
|
431
|
+
"utf-8"
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// adapters/next/config/namespace/protect-admin-role-literals.ts
|
|
436
|
+
function protectAdminRoleLiterals(content) {
|
|
437
|
+
const protectedValues = [
|
|
438
|
+
"UserRole.ADMIN",
|
|
439
|
+
"'admin'",
|
|
440
|
+
'"admin"',
|
|
441
|
+
"`admin`",
|
|
442
|
+
">Admin</SelectItem>",
|
|
443
|
+
"Manage admin users and roles"
|
|
444
|
+
];
|
|
445
|
+
const replacements = [];
|
|
446
|
+
let protectedContent = content;
|
|
447
|
+
for (const [index, value] of protectedValues.entries()) {
|
|
448
|
+
if (!protectedContent.includes(value)) {
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
const token = `__BETTERSTART_NAMESPACE_PROTECTED_${index}__`;
|
|
452
|
+
protectedContent = protectedContent.replaceAll(value, token);
|
|
453
|
+
replacements.push([token, value]);
|
|
454
|
+
}
|
|
455
|
+
return {
|
|
456
|
+
content: protectedContent,
|
|
457
|
+
restore(value) {
|
|
458
|
+
let restored = value;
|
|
459
|
+
for (const [token, original] of replacements) {
|
|
460
|
+
restored = restored.replaceAll(token, original);
|
|
461
|
+
}
|
|
462
|
+
return restored;
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
}
|
|
77
466
|
|
|
78
467
|
// constants/scaffolding.ts
|
|
79
468
|
var DEFAULT_ADMIN_NAMESPACE = "admin";
|
|
@@ -157,122 +546,7 @@ var R2_ENV_KEYS = [
|
|
|
157
546
|
"BETTERSTART_R2_PUBLIC_URL"
|
|
158
547
|
];
|
|
159
548
|
|
|
160
|
-
//
|
|
161
|
-
function toPascalCase(str) {
|
|
162
|
-
return str.replace(/([a-z])([A-Z])/g, "$1-$2").split(/[-_\s]+/).map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join("");
|
|
163
|
-
}
|
|
164
|
-
function toCamelCase(str) {
|
|
165
|
-
const p = toPascalCase(str);
|
|
166
|
-
return p.charAt(0).toLowerCase() + p.slice(1);
|
|
167
|
-
}
|
|
168
|
-
function singularize(str) {
|
|
169
|
-
if (str.endsWith("ies")) return `${str.slice(0, -3)}y`;
|
|
170
|
-
if (str.endsWith("ves")) return `${str.slice(0, -3)}f`;
|
|
171
|
-
if (str.endsWith("sses") || str.endsWith("xes") || str.endsWith("ches") || str.endsWith("shes") || str.endsWith("zes"))
|
|
172
|
-
return str.slice(0, -2);
|
|
173
|
-
if (str.endsWith("s") && !str.endsWith("ss")) return str.slice(0, -1);
|
|
174
|
-
return str;
|
|
175
|
-
}
|
|
176
|
-
function pluralize(str) {
|
|
177
|
-
if (str.endsWith("s") && !str.endsWith("ss")) return str;
|
|
178
|
-
if (str.endsWith("y") && !["ay", "ey", "iy", "oy", "uy"].some((v) => str.endsWith(v)))
|
|
179
|
-
return `${str.slice(0, -1)}ies`;
|
|
180
|
-
if (str.endsWith("s") || str.endsWith("x") || str.endsWith("ch") || str.endsWith("sh"))
|
|
181
|
-
return `${str}es`;
|
|
182
|
-
return `${str}s`;
|
|
183
|
-
}
|
|
184
|
-
function toKebabCase(str) {
|
|
185
|
-
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
186
|
-
}
|
|
187
|
-
function toScreamingSnake(str) {
|
|
188
|
-
return str.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").toUpperCase();
|
|
189
|
-
}
|
|
190
|
-
function quotePropertyName(name) {
|
|
191
|
-
return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name) ? name : `'${name}'`;
|
|
192
|
-
}
|
|
193
|
-
function singularizeLabel(label) {
|
|
194
|
-
const words = label.split(" ");
|
|
195
|
-
const lastWord = words[words.length - 1];
|
|
196
|
-
words[words.length - 1] = singularize(lastWord.toLowerCase());
|
|
197
|
-
words[words.length - 1] = words[words.length - 1].charAt(0).toUpperCase() + words[words.length - 1].slice(1);
|
|
198
|
-
return words.join(" ");
|
|
199
|
-
}
|
|
200
|
-
function singleQuote(value) {
|
|
201
|
-
return `'${value.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
|
|
202
|
-
}
|
|
203
|
-
function escapeTemplateText(value) {
|
|
204
|
-
return value.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// adapters/next/config/namespace.ts
|
|
208
|
-
function validateAdminNamespace(value) {
|
|
209
|
-
const segment = value.trim();
|
|
210
|
-
if (!NAMESPACE_PATTERN.test(segment)) {
|
|
211
|
-
throw new Error(
|
|
212
|
-
'Namespace must be one lowercase kebab-case segment starting with a letter, for example "admin" or "admin-panel".'
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
return segment;
|
|
216
|
-
}
|
|
217
|
-
function validateAdminDashboardPath(value) {
|
|
218
|
-
const input = value.trim();
|
|
219
|
-
const segment = input.startsWith("/") ? input.slice(1) : input;
|
|
220
|
-
if (input.startsWith("/") && input !== `/${segment}`) {
|
|
221
|
-
throw new Error(
|
|
222
|
-
'Dashboard path must be one lowercase kebab-case segment starting with a letter, for example "/admin" or "/admin-panel".'
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
try {
|
|
226
|
-
return validateAdminNamespace(segment);
|
|
227
|
-
} catch {
|
|
228
|
-
throw new Error(
|
|
229
|
-
'Dashboard path must be one lowercase kebab-case segment starting with a letter, for example "/admin" or "/admin-panel".'
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
function resolveAdminNamespace(value = DEFAULT_ADMIN_NAMESPACE) {
|
|
234
|
-
const segment = validateAdminNamespace(value);
|
|
235
|
-
const pascal = toPascalCase(segment);
|
|
236
|
-
return {
|
|
237
|
-
segment,
|
|
238
|
-
alias: `@${segment}`,
|
|
239
|
-
camel: toCamelCase(segment),
|
|
240
|
-
pascal,
|
|
241
|
-
screaming: toScreamingSnake(segment),
|
|
242
|
-
routePath: `/${segment}`,
|
|
243
|
-
apiPath: `/api/${segment}`,
|
|
244
|
-
cssRootClass: `${segment}-root`,
|
|
245
|
-
globalsFile: `${segment}-globals.css`,
|
|
246
|
-
routeGroup: `(${segment})`
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
function deriveNamespacePaths(namespaceValue, srcDir) {
|
|
250
|
-
const namespace = resolveAdminNamespace(namespaceValue);
|
|
251
|
-
const appBase = srcDir ? "./src/app" : "./app";
|
|
252
|
-
return {
|
|
253
|
-
admin: `./${namespace.segment}`,
|
|
254
|
-
schemas: `./${namespace.segment}/schemas`,
|
|
255
|
-
pages: `${appBase}/${namespace.routeGroup}/${namespace.segment}/(authenticated)`,
|
|
256
|
-
login: `${appBase}/${namespace.routeGroup}/${namespace.segment}/(auth)/login`,
|
|
257
|
-
api: `${appBase}/${namespace.routeGroup}/api/${namespace.segment}`
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
function deriveMigrationsDir(namespaceValue) {
|
|
261
|
-
const namespace = resolveAdminNamespace(namespaceValue);
|
|
262
|
-
return `./${namespace.segment}/lib/db/migrations`;
|
|
263
|
-
}
|
|
264
|
-
function replaceAdminDashToken(value, namespace) {
|
|
265
|
-
return value.replaceAll("admin-", `${namespace.segment}-`);
|
|
266
|
-
}
|
|
267
|
-
function replaceAdminScreamingToken(value, namespace) {
|
|
268
|
-
return value.replaceAll("ADMIN_", `${namespace.screaming}_`);
|
|
269
|
-
}
|
|
270
|
-
function replaceAdminPascalToken(value, namespace) {
|
|
271
|
-
return value.replaceAll("Admin", namespace.pascal);
|
|
272
|
-
}
|
|
273
|
-
function replaceAdminCamelToken(value, namespace) {
|
|
274
|
-
return value.replace(/\badmin(?=[A-Z])/g, namespace.camel);
|
|
275
|
-
}
|
|
549
|
+
// adapters/next/config/namespace/protect-existing-namespace-literals.ts
|
|
276
550
|
function protectExistingNamespaceLiterals(value, namespace) {
|
|
277
551
|
if (namespace.segment === DEFAULT_ADMIN_NAMESPACE) {
|
|
278
552
|
return {
|
|
@@ -318,16 +592,31 @@ function protectExistingNamespaceLiterals(value, namespace) {
|
|
|
318
592
|
}
|
|
319
593
|
};
|
|
320
594
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
595
|
+
|
|
596
|
+
// constants/patterns.ts
|
|
597
|
+
var REMOVABLE_NAMESPACE_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
598
|
+
var SCHEMA_NAME_PATTERN = /^[a-z][a-zA-Z0-9-]*$/;
|
|
599
|
+
var NAMESPACE_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
600
|
+
var MODULE_SPECIFIER_PATTERN = /(\bfrom\s*|\bimport\s*|\brequire\s*\(\s*|\bimport\s*\(\s*)(['"])([^'"\n]+)\2/g;
|
|
601
|
+
var EXTERNAL_PACKAGE_PATTERN = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*(?:\/[^'"]*)?$/;
|
|
602
|
+
var DEV_PORT_FLAG_PATTERN = /(?:^|\s)(?:--port(?:=|\s+)|-p(?:=|\s+)?)(\d+)(?=\s|$)/;
|
|
603
|
+
var DEV_PORT_ENV_PATTERN = /(?:^|\s)PORT=(\d+)(?=\s|$)/;
|
|
604
|
+
var LOCAL_PROTOCOL_PATTERN = /^(workspace|link|file|portal):/;
|
|
605
|
+
var CONFIG_IMPORT_PATTERN = /^import\s+\{[^}]*\bdefineConfig\b[^}]*\}\s+from\s+['"]betterstart-cli['"];?[^\S\n]*$/m;
|
|
606
|
+
var CONFIG_OBJECT_PATTERNS = [
|
|
607
|
+
/\b(?:const|let|var)\s+\w+\s*:\s*NextConfig\s*=\s*\{/g,
|
|
608
|
+
/\b(?:const|let|var)\s+nextConfig\s*=\s*\{/g,
|
|
609
|
+
/\b(?:const|let|var)\s+\w+\s*:\s*NextConfig\s*=\s*(?:[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\(\s*)+\{/g,
|
|
610
|
+
/\b(?:const|let|var)\s+nextConfig\s*=\s*(?:[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\(\s*)+\{/g,
|
|
611
|
+
/export\s+default\s+\{/g,
|
|
612
|
+
/export\s+default\s+(?:[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\(\s*)+\{/g,
|
|
613
|
+
/module\.exports\s*=\s*\{/g,
|
|
614
|
+
/module\.exports\s*=\s*(?:[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\(\s*)+\{/g
|
|
615
|
+
];
|
|
616
|
+
var ACCEPT_TERMS_URL_PATTERN = /https:\/\/vercel\.com\/\S+\/integrations\/accept-terms\/\S+/i;
|
|
617
|
+
var TERMS_ACCEPTED_PATTERN = /terms accepted/i;
|
|
618
|
+
|
|
619
|
+
// adapters/next/config/namespace/is-external-module-specifier.ts
|
|
331
620
|
function isExternalModuleSpecifier(specifier) {
|
|
332
621
|
if (specifier.startsWith(".") || specifier.startsWith("/")) {
|
|
333
622
|
return false;
|
|
@@ -337,6 +626,8 @@ function isExternalModuleSpecifier(specifier) {
|
|
|
337
626
|
}
|
|
338
627
|
return EXTERNAL_PACKAGE_PATTERN.test(specifier);
|
|
339
628
|
}
|
|
629
|
+
|
|
630
|
+
// adapters/next/config/namespace/protect-external-module-specifiers.ts
|
|
340
631
|
function protectExternalModuleSpecifiers(content) {
|
|
341
632
|
const replacements = [];
|
|
342
633
|
const protectedContent = content.replace(
|
|
@@ -361,36 +652,57 @@ function protectExternalModuleSpecifiers(content) {
|
|
|
361
652
|
}
|
|
362
653
|
};
|
|
363
654
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
655
|
+
|
|
656
|
+
// adapters/next/config/namespace/replace-admin-camel-token.ts
|
|
657
|
+
function replaceAdminCamelToken(value, namespace) {
|
|
658
|
+
return value.replace(/\badmin(?=[A-Z])/g, namespace.camel);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// adapters/next/config/namespace/replace-admin-dash-token.ts
|
|
662
|
+
function replaceAdminDashToken(value, namespace) {
|
|
663
|
+
return value.replaceAll("admin-", `${namespace.segment}-`);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// adapters/next/config/namespace/replace-admin-pascal-token.ts
|
|
667
|
+
function replaceAdminPascalToken(value, namespace) {
|
|
668
|
+
return value.replaceAll("Admin", namespace.pascal);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// adapters/next/config/namespace/replace-admin-screaming-token.ts
|
|
672
|
+
function replaceAdminScreamingToken(value, namespace) {
|
|
673
|
+
return value.replaceAll("ADMIN_", `${namespace.screaming}_`);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// adapters/next/config/namespace/validate-admin-namespace.ts
|
|
677
|
+
function validateAdminNamespace(value) {
|
|
678
|
+
const segment = value.trim();
|
|
679
|
+
if (!NAMESPACE_PATTERN.test(segment)) {
|
|
680
|
+
throw new Error(
|
|
681
|
+
'Namespace must be one lowercase kebab-case segment starting with a letter, for example "admin" or "admin-panel".'
|
|
682
|
+
);
|
|
382
683
|
}
|
|
684
|
+
return segment;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// adapters/next/config/namespace/resolve-admin-namespace.ts
|
|
688
|
+
function resolveAdminNamespace(value = DEFAULT_ADMIN_NAMESPACE) {
|
|
689
|
+
const segment = validateAdminNamespace(value);
|
|
690
|
+
const pascal = toPascalCase(segment);
|
|
383
691
|
return {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
}
|
|
692
|
+
segment,
|
|
693
|
+
alias: `@${segment}`,
|
|
694
|
+
camel: toCamelCase(segment),
|
|
695
|
+
pascal,
|
|
696
|
+
screaming: toScreamingSnake(segment),
|
|
697
|
+
routePath: `/${segment}`,
|
|
698
|
+
apiPath: `/api/${segment}`,
|
|
699
|
+
cssRootClass: `${segment}-root`,
|
|
700
|
+
globalsFile: `${segment}-globals.css`,
|
|
701
|
+
routeGroup: `(${segment})`
|
|
392
702
|
};
|
|
393
703
|
}
|
|
704
|
+
|
|
705
|
+
// adapters/next/config/namespace/apply-admin-namespace-to-content.ts
|
|
394
706
|
function applyAdminNamespaceToContent(content, namespaceValue) {
|
|
395
707
|
const namespace = resolveAdminNamespace(namespaceValue);
|
|
396
708
|
const { content: externalSafeContent, restore: restoreExternalModules } = protectExternalModuleSpecifiers(content);
|
|
@@ -416,42 +728,64 @@ function applyAdminNamespaceToContent(content, namespaceValue) {
|
|
|
416
728
|
return restoreExternalModules(restore(protectedNamespace.restore(namespacedContent)));
|
|
417
729
|
}
|
|
418
730
|
|
|
419
|
-
// adapters/next/template-reader.ts
|
|
420
|
-
function readTemplate(relativePath) {
|
|
421
|
-
return fs2.readFileSync(
|
|
422
|
-
path2.join(resolveCliAssetPath("adapters", "next", "templates", "init"), relativePath),
|
|
423
|
-
"utf-8"
|
|
424
|
-
);
|
|
425
|
-
}
|
|
426
|
-
function applyNextCacheApiForVersion(content, nextMajorVersion) {
|
|
427
|
-
if (nextMajorVersion >= 16) {
|
|
428
|
-
return content;
|
|
429
|
-
}
|
|
430
|
-
return content.replace(
|
|
431
|
-
/import \{ cacheLife, cacheTag \} from 'next\/cache'\n/g,
|
|
432
|
-
"import { unstable_cacheTag as cacheTag } from 'next/cache'\n"
|
|
433
|
-
).replace(/\n {2}cacheLife\('max'\)/g, "").replace(
|
|
434
|
-
/import \{ updateTag \} from 'next\/cache'\n/g,
|
|
435
|
-
"import { revalidateTag } from 'next/cache'\n"
|
|
436
|
-
).replace(/revalidateTag\(([^,\n]+), \{ expire: 0 \}\)/g, "revalidateTag($1)").replace(/\bupdateTag\(/g, "revalidateTag(");
|
|
437
|
-
}
|
|
438
|
-
function readNamespacedTemplate(relativePath, namespace) {
|
|
439
|
-
return applyAdminNamespaceToContent(readTemplate(relativePath), namespace);
|
|
440
|
-
}
|
|
441
|
-
function namespacedTemplatePath(relativePath, namespace) {
|
|
442
|
-
return applyAdminNamespaceToPath(relativePath, namespace);
|
|
443
|
-
}
|
|
444
|
-
|
|
445
731
|
export {
|
|
732
|
+
BETTERSTART_DIR,
|
|
733
|
+
CONFIG_FILE_NAME,
|
|
734
|
+
LOCKFILE_MAP,
|
|
735
|
+
CLI_PACKAGE_NAME,
|
|
736
|
+
REDACTED,
|
|
737
|
+
stripAnsi,
|
|
446
738
|
toPascalCase,
|
|
447
739
|
toCamelCase,
|
|
448
740
|
singularize,
|
|
449
741
|
pluralize,
|
|
450
742
|
toKebabCase,
|
|
451
743
|
quotePropertyName,
|
|
744
|
+
humanizeName,
|
|
452
745
|
singularizeLabel,
|
|
453
|
-
|
|
746
|
+
quoteLiteral,
|
|
454
747
|
escapeTemplateText,
|
|
748
|
+
normalizeLineEndings,
|
|
749
|
+
escapeRegExp,
|
|
750
|
+
hasConflictMarkers,
|
|
751
|
+
splitLines,
|
|
752
|
+
normalizeWhitespace,
|
|
753
|
+
escapeJsx,
|
|
754
|
+
escapeAttribute,
|
|
755
|
+
findNextNonEmptyLine,
|
|
756
|
+
levenshtein,
|
|
757
|
+
toTitleCase,
|
|
758
|
+
slugify,
|
|
759
|
+
usesIdentifier,
|
|
760
|
+
detectIndent,
|
|
761
|
+
jsString,
|
|
762
|
+
safeIdentifier,
|
|
763
|
+
findUpwards,
|
|
764
|
+
hashContent,
|
|
765
|
+
ensureDir,
|
|
766
|
+
safeWriteFile,
|
|
767
|
+
createGeneratedFile,
|
|
768
|
+
toStrictJson,
|
|
769
|
+
parseDotenvFile,
|
|
770
|
+
readEnvVar,
|
|
771
|
+
resolveProjectEnvVar,
|
|
772
|
+
readProjectEnvVar,
|
|
773
|
+
appendEnvVars,
|
|
774
|
+
removeEnvVars,
|
|
775
|
+
captureFile,
|
|
776
|
+
restoreFile,
|
|
777
|
+
readNonEmptyEnvVar,
|
|
778
|
+
betterstartDir,
|
|
779
|
+
toPosixPath,
|
|
780
|
+
trimDotSlash,
|
|
781
|
+
normalizePosixDir,
|
|
782
|
+
toProjectAbsolutePath,
|
|
783
|
+
readLocalProjectFile,
|
|
784
|
+
removePath,
|
|
785
|
+
cleanupEmptyDirs,
|
|
786
|
+
getCurrentCliVersion,
|
|
787
|
+
resolveCliAssetPath,
|
|
788
|
+
resolveCommandCwd,
|
|
455
789
|
DEFAULT_ADMIN_NAMESPACE,
|
|
456
790
|
ADMIN_THEME_BLOCK,
|
|
457
791
|
ADMIN_SHADOW_INPUT_UTILITY,
|
|
@@ -465,7 +799,6 @@ export {
|
|
|
465
799
|
TIPTAP_CONTENT_EDITOR_DIRECTORIES,
|
|
466
800
|
RAILWAY_BUCKET_ENV_KEYS,
|
|
467
801
|
R2_ENV_KEYS,
|
|
468
|
-
ANSI_ESCAPE_PATTERN,
|
|
469
802
|
REMOVABLE_NAMESPACE_PATTERN,
|
|
470
803
|
SCHEMA_NAME_PATTERN,
|
|
471
804
|
DEV_PORT_FLAG_PATTERN,
|
|
@@ -476,19 +809,10 @@ export {
|
|
|
476
809
|
ACCEPT_TERMS_URL_PATTERN,
|
|
477
810
|
TERMS_ACCEPTED_PATTERN,
|
|
478
811
|
validateAdminNamespace,
|
|
479
|
-
validateAdminDashboardPath,
|
|
480
812
|
resolveAdminNamespace,
|
|
481
|
-
deriveNamespacePaths,
|
|
482
|
-
deriveMigrationsDir,
|
|
483
|
-
applyAdminNamespaceToPath,
|
|
484
|
-
applyAdminNamespaceToContent,
|
|
485
|
-
CLI_PACKAGE_NAME,
|
|
486
|
-
REDACTED,
|
|
487
|
-
getCurrentCliVersion,
|
|
488
|
-
resolveCliAssetPath,
|
|
489
813
|
readTemplate,
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
814
|
+
protectExistingNamespaceLiterals,
|
|
815
|
+
replaceAdminDashToken,
|
|
816
|
+
applyAdminNamespaceToContent
|
|
493
817
|
};
|
|
494
|
-
//# sourceMappingURL=chunk-
|
|
818
|
+
//# sourceMappingURL=chunk-TIJEHWRF.js.map
|