@tinya-code/gas-admin-ui 0.2.0-alpha.13 → 0.2.0-alpha.15
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/ng-package.json +7 -0
- package/package.json +3 -15
- package/src/lib/actions/action-registry.spec.ts +52 -0
- package/src/lib/actions/action-registry.ts +126 -0
- package/src/lib/actions/action-service.spec.ts +215 -0
- package/src/lib/actions/action-service.ts +87 -0
- package/src/lib/actions/descriptors.spec.ts +155 -0
- package/src/lib/actions/descriptors.ts +154 -0
- package/src/lib/columns/column-cell.ts +33 -0
- package/src/lib/columns/column-defaults.spec.ts +99 -0
- package/src/lib/columns/column-defaults.ts +84 -0
- package/src/lib/columns/column-format.spec.ts +274 -0
- package/src/lib/columns/descriptors.ts +113 -0
- package/src/lib/columns/format-badge.ts +51 -0
- package/src/lib/columns/format-boolean.ts +58 -0
- package/src/lib/columns/format-currency.ts +30 -0
- package/src/lib/columns/format-date.ts +35 -0
- package/src/lib/columns/format-number.ts +32 -0
- package/src/lib/columns/format-text.ts +23 -0
- package/src/lib/columns/format-thumbnail.ts +63 -0
- package/src/lib/core/adapters/firebase-auth.adapter.ts +6 -0
- package/src/lib/core/guards/auth.guard.spec.ts +88 -0
- package/src/lib/core/guards/auth.guard.ts +48 -0
- package/src/lib/core/guards/unsaved-changes.guard.ts +16 -0
- package/src/lib/core/interceptors/api-error.interceptor.spec.ts +182 -0
- package/src/lib/core/interceptors/api-error.interceptor.ts +87 -0
- package/src/lib/core/models/api.model.ts +104 -0
- package/src/lib/core/models/schema-descriptions.ts +118 -0
- package/src/lib/core/models/schema.model.ts +1097 -0
- package/src/lib/core/registry/composition-validator.spec.ts +358 -0
- package/src/lib/core/registry/composition-validator.ts +270 -0
- package/src/lib/core/registry/field-validators.spec.ts +199 -0
- package/src/lib/core/registry/field-validators.ts +440 -0
- package/src/lib/core/registry/render-host.spec.ts +208 -0
- package/src/lib/core/registry/render-host.ts +646 -0
- package/src/lib/core/registry/render-registry.spec.ts +96 -0
- package/src/lib/core/registry/render-registry.ts +312 -0
- package/src/lib/core/registry/schema-catalog.ts +156 -0
- package/src/lib/core/services/api.service.spec.ts +1142 -0
- package/src/lib/core/services/api.service.ts +371 -0
- package/src/lib/core/services/auth.service.spec.ts +653 -0
- package/src/lib/core/services/auth.service.ts +503 -0
- package/src/lib/core/services/config.service.spec.ts +121 -0
- package/src/lib/core/services/config.service.ts +119 -0
- package/src/lib/core/services/data-source.service.spec.ts +179 -0
- package/src/lib/core/services/data-source.service.ts +142 -0
- package/src/lib/core/services/error-mapper.service.spec.ts +50 -0
- package/src/lib/core/services/error-mapper.service.ts +49 -0
- package/src/lib/core/services/notification.service.ts +73 -0
- package/src/lib/core/services/relation-drawer.service.ts +41 -0
- package/src/lib/core/services/theme.service.spec.ts +106 -0
- package/src/lib/core/services/theme.service.ts +86 -0
- package/src/lib/core/services/transport.spec.ts +198 -0
- package/src/lib/core/services/transport.ts +164 -0
- package/src/lib/core/services/upload.service.ts +81 -0
- package/src/lib/core/testing/categories.schema.ts +125 -0
- package/src/lib/core/testing/orders.schema.ts +372 -0
- package/src/lib/core/testing/products.schema.ts +258 -0
- package/src/lib/core/testing/site.schema.ts +195 -0
- package/src/lib/core/testing/test-catalog.ts +21 -0
- package/src/lib/core/tokens.ts +112 -0
- package/src/lib/core/utils/clipboard.spec.ts +55 -0
- package/src/lib/core/utils/clipboard.ts +90 -0
- package/src/lib/core/utils/context-resolver.spec.ts +95 -0
- package/src/lib/core/utils/context-resolver.ts +101 -0
- package/src/lib/core/utils/response-unwrapper.spec.ts +70 -0
- package/src/lib/core/utils/response-unwrapper.ts +103 -0
- package/src/lib/core/utils/source-options.spec.ts +96 -0
- package/src/lib/core/utils/source-options.ts +54 -0
- package/src/lib/core/utils/template-interpolator.spec.ts +59 -0
- package/src/lib/core/utils/template-interpolator.ts +56 -0
- package/src/lib/core/view-navigation/view-navigation.service.spec.ts +207 -0
- package/src/lib/core/view-navigation/view-navigation.service.ts +132 -0
- package/src/lib/fields/boolean/boolean.descriptor.ts +11 -0
- package/src/lib/fields/boolean/boolean.ts +40 -0
- package/src/lib/fields/color/color.descriptor.ts +12 -0
- package/src/lib/fields/color/color.ts +34 -0
- package/src/lib/fields/currency/currency.descriptor.ts +12 -0
- package/src/lib/fields/currency/currency.ts +67 -0
- package/src/lib/fields/date/date.descriptor.ts +12 -0
- package/src/lib/fields/date/date.ts +36 -0
- package/src/lib/fields/descriptors.ts +122 -0
- package/src/lib/fields/display/display-badge.ts +65 -0
- package/src/lib/fields/display/display-date.ts +39 -0
- package/src/lib/fields/display/display-defaults.ts +84 -0
- package/src/lib/fields/display/display-file.ts +41 -0
- package/src/lib/fields/display/display-image.ts +54 -0
- package/src/lib/fields/display/display-list.ts +107 -0
- package/src/lib/fields/display/display-number.ts +41 -0
- package/src/lib/fields/display/display-text.ts +42 -0
- package/src/lib/fields/display/display.spec.ts +242 -0
- package/src/lib/fields/dropdown/dropdown.descriptor.ts +12 -0
- package/src/lib/fields/dropdown/dropdown.ts +45 -0
- package/src/lib/fields/email/email.descriptor.ts +12 -0
- package/src/lib/fields/email/email.ts +28 -0
- package/src/lib/fields/field-aria.ts +60 -0
- package/src/lib/fields/field-host/field-host.spec.ts +118 -0
- package/src/lib/fields/field-host/field-host.ts +47 -0
- package/src/lib/fields/field-node.ts +88 -0
- package/src/lib/fields/file/file.descriptor.ts +14 -0
- package/src/lib/fields/file/file.spec.ts +134 -0
- package/src/lib/fields/file/file.ts +281 -0
- package/src/lib/fields/group/group.descriptor.ts +21 -0
- package/src/lib/fields/group/group.ts +110 -0
- package/src/lib/fields/image/image.descriptor.ts +12 -0
- package/src/lib/fields/image/image.spec.ts +117 -0
- package/src/lib/fields/image/image.ts +281 -0
- package/src/lib/fields/key-value/key-value.descriptor.ts +11 -0
- package/src/lib/fields/key-value/key-value.ts +283 -0
- package/src/lib/fields/list/list.descriptor.ts +21 -0
- package/src/lib/fields/list/list.ts +376 -0
- package/src/lib/fields/multiselect/multiselect.descriptor.ts +11 -0
- package/src/lib/fields/multiselect/multiselect.spec.ts +142 -0
- package/src/lib/fields/multiselect/multiselect.ts +152 -0
- package/src/lib/fields/number/number.descriptor.ts +12 -0
- package/src/lib/fields/number/number.ts +40 -0
- package/src/lib/fields/phone/phone.descriptor.ts +12 -0
- package/src/lib/fields/phone/phone.ts +46 -0
- package/src/lib/fields/readonly-text/readonly-text.descriptor.ts +12 -0
- package/src/lib/fields/readonly-text/readonly-text.ts +58 -0
- package/src/lib/fields/relation/relation.descriptor.ts +12 -0
- package/src/lib/fields/relation/relation.spec.ts +193 -0
- package/src/lib/fields/relation/relation.ts +224 -0
- package/src/lib/fields/rich-select/rich-select.descriptor.ts +12 -0
- package/src/lib/fields/rich-select/rich-select.ts +175 -0
- package/src/lib/fields/select/radio-mode.ts +25 -0
- package/src/lib/fields/select/select.descriptor.ts +12 -0
- package/src/lib/fields/select/select.spec.ts +162 -0
- package/src/lib/fields/select/select.ts +210 -0
- package/src/lib/fields/slug/slug.descriptor.ts +19 -0
- package/src/lib/fields/slug/slug.ts +67 -0
- package/src/lib/fields/string-list/string-list.descriptor.ts +11 -0
- package/src/lib/fields/string-list/string-list.ts +222 -0
- package/src/lib/fields/text/text.descriptor.ts +12 -0
- package/src/lib/fields/text/text.ts +35 -0
- package/src/lib/fields/textarea/textarea.descriptor.ts +12 -0
- package/src/lib/fields/textarea/textarea.spec.ts +117 -0
- package/src/lib/fields/textarea/textarea.ts +126 -0
- package/src/lib/fields/time/time.descriptor.ts +12 -0
- package/src/lib/fields/time/time.ts +28 -0
- package/src/lib/fields/unknown-render/unknown-render.ts +49 -0
- package/src/lib/fields/url/url.descriptor.ts +12 -0
- package/src/lib/fields/url/url.ts +53 -0
- package/src/lib/gas-admin-ui.spec.ts +21 -0
- package/src/lib/gas-admin-ui.ts +9 -0
- package/src/lib/layouts/descriptors.ts +9 -0
- package/src/lib/pages/dashboard/dashboard.ts +167 -0
- package/src/lib/pages/detail-view/detail-view.spec.ts +333 -0
- package/src/lib/pages/detail-view/detail-view.ts +570 -0
- package/src/lib/pages/drawer-form/drawer-form.ts +228 -0
- package/src/lib/pages/form-view/form-model.ts +88 -0
- package/src/lib/pages/form-view/form-schema.ts +255 -0
- package/src/lib/pages/form-view/form-view.ts +1622 -0
- package/src/lib/pages/list-view/list-view.formats.spec.ts +214 -0
- package/src/lib/pages/list-view/list-view.ts +882 -0
- package/src/lib/pages/login/login.spec.ts +109 -0
- package/src/lib/pages/login/login.ts +227 -0
- package/src/lib/pages/resource-page/resource-page.ts +234 -0
- package/src/lib/shared/components/badge/badge.ts +35 -0
- package/src/lib/shared/components/button/button.ts +65 -0
- package/src/lib/shared/components/confirm-dialog/confirm-dialog.ts +48 -0
- package/src/lib/shared/components/copy-button/copy-button.ts +56 -0
- package/src/lib/shared/components/copy-share/copy-share.spec.ts +122 -0
- package/src/lib/shared/components/copy-share/copy-share.ts +107 -0
- package/src/lib/shared/components/drawer/drawer.spec.ts +127 -0
- package/src/lib/shared/components/drawer/drawer.ts +172 -0
- package/src/lib/shared/components/empty-state/empty-state.ts +30 -0
- package/src/lib/shared/components/modal/modal.spec.ts +149 -0
- package/src/lib/shared/components/modal/modal.ts +145 -0
- package/src/lib/shared/components/post-create-modal/post-create-modal.spec.ts +165 -0
- package/src/lib/shared/components/post-create-modal/post-create-modal.ts +159 -0
- package/src/lib/shared/components/skeleton/skeleton.ts +31 -0
- package/src/lib/shared/components/toast/toast.ts +58 -0
- package/src/lib/shared/utils/col-span.ts +25 -0
- package/src/lib/shared/utils/condition-evaluator.ts +53 -0
- package/src/lib/shared/utils/depends-on.ts +48 -0
- package/src/lib/shared/utils/dialog-focus.ts +28 -0
- package/src/lib/shared/utils/field-path.ts +49 -0
- package/src/lib/shared/utils/gap-sorting.ts +144 -0
- package/src/lib/shared/utils/seed.spec.ts +64 -0
- package/src/lib/shared/utils/seed.ts +149 -0
- package/src/lib/shared/utils/slugify.ts +13 -0
- package/src/lib/shared/utils/validators.ts +41 -0
- package/src/lib/shell/layout/layout.ts +63 -0
- package/src/lib/shell/shell.routes.spec.ts +59 -0
- package/src/lib/shell/shell.routes.ts +122 -0
- package/src/lib/shell/sidebar/sidebar.ts +139 -0
- package/src/lib/shell/theme-toggle/theme-toggle.ts +74 -0
- package/src/lib/views/calendar-view/calendar-model.ts +426 -0
- package/src/lib/views/calendar-view/calendar-view.spec.ts +557 -0
- package/src/lib/views/calendar-view/calendar-view.ts +568 -0
- package/src/lib/views/composer/composer-host.spec.ts +301 -0
- package/src/lib/views/composer/composer-host.ts +248 -0
- package/src/lib/views/composer/composer-imports.spec.ts +54 -0
- package/src/lib/views/composer/view-context.spec.ts +117 -0
- package/src/lib/views/composer/view-context.ts +109 -0
- package/src/lib/views/composer/view-slot.spec.ts +130 -0
- package/src/lib/views/composer/view-slot.ts +178 -0
- package/src/lib/views/descriptors.ts +46 -0
- package/src/lib/views/kanban-view/kanban-model.ts +173 -0
- package/src/lib/views/kanban-view/kanban-view.spec.ts +540 -0
- package/src/lib/views/kanban-view/kanban-view.ts +327 -0
- package/src/lib/widgets/bar-chart/bar-chart.descriptor.ts +17 -0
- package/src/lib/widgets/bar-chart/bar-chart.spec.ts +66 -0
- package/src/lib/widgets/bar-chart/bar-chart.ts +76 -0
- package/src/lib/widgets/chart-line/chart-line.descriptor.ts +17 -0
- package/src/lib/widgets/chart-line/chart-line.spec.ts +113 -0
- package/src/lib/widgets/chart-line/chart-line.ts +219 -0
- package/src/lib/widgets/descriptors.ts +29 -0
- package/src/lib/widgets/metric-card/metric-card.descriptor.ts +41 -0
- package/src/lib/widgets/metric-card/metric-card.spec.ts +52 -0
- package/src/lib/widgets/metric-card/metric-card.ts +48 -0
- package/src/lib/widgets/quick-actions/quick-actions.descriptor.ts +13 -0
- package/src/lib/widgets/quick-actions/quick-actions.spec.ts +61 -0
- package/src/lib/widgets/quick-actions/quick-actions.ts +100 -0
- package/src/lib/widgets/record-list/record-list.descriptor.ts +16 -0
- package/src/lib/widgets/record-list/record-list.spec.ts +79 -0
- package/src/lib/widgets/record-list/record-list.ts +115 -0
- package/src/lib/widgets/series.spec.ts +42 -0
- package/src/lib/widgets/series.ts +56 -0
- package/src/lib/widgets/status-progress/status-progress.descriptor.ts +19 -0
- package/src/lib/widgets/status-progress/status-progress.spec.ts +63 -0
- package/src/lib/widgets/status-progress/status-progress.ts +104 -0
- package/src/lib/widgets/widget-host/widget-host.spec.ts +179 -0
- package/src/lib/widgets/widget-host/widget-host.ts +99 -0
- package/src/public-api.ts +104 -0
- package/tinya-code-gas-admin-ui-0.2.0-alpha.15.tgz +0 -0
- package/tsconfig.lib.json +13 -0
- package/tsconfig.lib.prod.json +11 -0
- package/tsconfig.spec.json +10 -0
- package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs +0 -84
- package/fesm2022/tinya-code-gas-admin-ui-badge-EeCA_l-o.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs +0 -140
- package/fesm2022/tinya-code-gas-admin-ui-bar-chart-G7sEMSBY.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs +0 -113
- package/fesm2022/tinya-code-gas-admin-ui-boolean-B2ASKL0E.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs +0 -163
- package/fesm2022/tinya-code-gas-admin-ui-button-BQjNW8KB.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs +0 -1027
- package/fesm2022/tinya-code-gas-admin-ui-calendar-view-DCY8bj2V.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs +0 -278
- package/fesm2022/tinya-code-gas-admin-ui-chart-line-BjdlKHoH.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs +0 -107
- package/fesm2022/tinya-code-gas-admin-ui-color-Dljh_By3.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs +0 -101
- package/fesm2022/tinya-code-gas-admin-ui-condition-evaluator-DY2k1M3C.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs +0 -141
- package/fesm2022/tinya-code-gas-admin-ui-currency-BvuF3Z63.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs +0 -88
- package/fesm2022/tinya-code-gas-admin-ui-data-source.service-96FSbN72.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs +0 -107
- package/fesm2022/tinya-code-gas-admin-ui-date-1SJGXZrd.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs +0 -140
- package/fesm2022/tinya-code-gas-admin-ui-display-badge-fwk6sDU7.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs +0 -119
- package/fesm2022/tinya-code-gas-admin-ui-display-date-D7zLiDiG.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs +0 -125
- package/fesm2022/tinya-code-gas-admin-ui-display-file-BiIhqvQC.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs +0 -152
- package/fesm2022/tinya-code-gas-admin-ui-display-image-C1dhnZi1.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs +0 -211
- package/fesm2022/tinya-code-gas-admin-ui-display-list-DOEuUbGe.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs +0 -116
- package/fesm2022/tinya-code-gas-admin-ui-display-number-DDMzr4Hn.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs +0 -111
- package/fesm2022/tinya-code-gas-admin-ui-display-text-B8CdVNpv.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs +0 -122
- package/fesm2022/tinya-code-gas-admin-ui-dropdown-C3blvmE1.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs +0 -107
- package/fesm2022/tinya-code-gas-admin-ui-email-CT_O5ihA.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs +0 -109
- package/fesm2022/tinya-code-gas-admin-ui-empty-state-BMc0QtoT.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs +0 -45
- package/fesm2022/tinya-code-gas-admin-ui-error-mapper.service-DY5y1FjE.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs +0 -50
- package/fesm2022/tinya-code-gas-admin-ui-field-aria-BD1Wiggc.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs +0 -24
- package/fesm2022/tinya-code-gas-admin-ui-field-node-CIK6KNN_.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs +0 -27
- package/fesm2022/tinya-code-gas-admin-ui-field-path-B4-FTBGZ.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs +0 -408
- package/fesm2022/tinya-code-gas-admin-ui-file-Dmxioog7.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs +0 -4516
- package/fesm2022/tinya-code-gas-admin-ui-form-view-C709rc57.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs +0 -82
- package/fesm2022/tinya-code-gas-admin-ui-format-badge-CK8ct5Wk.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs +0 -105
- package/fesm2022/tinya-code-gas-admin-ui-format-boolean-ClzezZz-.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs +0 -65
- package/fesm2022/tinya-code-gas-admin-ui-format-currency-CVmniKml.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs +0 -65
- package/fesm2022/tinya-code-gas-admin-ui-format-date-Dr1YsDd_.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs +0 -65
- package/fesm2022/tinya-code-gas-admin-ui-format-number-CWCjpI4n.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs +0 -59
- package/fesm2022/tinya-code-gas-admin-ui-format-text-DBOgJkH0.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs +0 -94
- package/fesm2022/tinya-code-gas-admin-ui-format-thumbnail-PCRvxWKt.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs +0 -72
- package/fesm2022/tinya-code-gas-admin-ui-gap-sorting-iTdy_DYG.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs +0 -238
- package/fesm2022/tinya-code-gas-admin-ui-group-h7-O8tt4.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs +0 -416
- package/fesm2022/tinya-code-gas-admin-ui-image-7UhJ7nqI.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs +0 -439
- package/fesm2022/tinya-code-gas-admin-ui-kanban-view-Dl0Ol5Kb.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs +0 -513
- package/fesm2022/tinya-code-gas-admin-ui-key-value-nVdgg5at.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs +0 -637
- package/fesm2022/tinya-code-gas-admin-ui-list-C8ijJHAx.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs +0 -127
- package/fesm2022/tinya-code-gas-admin-ui-metric-card-DnGMQL8l.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs +0 -251
- package/fesm2022/tinya-code-gas-admin-ui-multiselect-PB28e-jl.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs +0 -66
- package/fesm2022/tinya-code-gas-admin-ui-notification.service-LjSULER6.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs +0 -114
- package/fesm2022/tinya-code-gas-admin-ui-number-JNr7glc8.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs +0 -116
- package/fesm2022/tinya-code-gas-admin-ui-phone-jR417hPf.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs +0 -235
- package/fesm2022/tinya-code-gas-admin-ui-quick-actions-DCQ6emmF.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs +0 -8
- package/fesm2022/tinya-code-gas-admin-ui-radio-mode-DxvN07DY.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs +0 -124
- package/fesm2022/tinya-code-gas-admin-ui-readonly-text-BL7-4qie.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs +0 -249
- package/fesm2022/tinya-code-gas-admin-ui-record-list-BiZfnd_7.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs +0 -39
- package/fesm2022/tinya-code-gas-admin-ui-relation-drawer.service-B0kT8EiW.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs +0 -309
- package/fesm2022/tinya-code-gas-admin-ui-relation-ykpJ3PYl.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs +0 -576
- package/fesm2022/tinya-code-gas-admin-ui-render-registry-CULkxrSt.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs +0 -161
- package/fesm2022/tinya-code-gas-admin-ui-rich-select-CIHaOrbU.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-rolldown-runtime-DpJrqANO.mjs +0 -11
- package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs +0 -685
- package/fesm2022/tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs +0 -80
- package/fesm2022/tinya-code-gas-admin-ui-seed-CcCA3FdQ.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs +0 -296
- package/fesm2022/tinya-code-gas-admin-ui-select-CDwX9yNO.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs +0 -119
- package/fesm2022/tinya-code-gas-admin-ui-skeleton-DnWK0tcZ.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs +0 -158
- package/fesm2022/tinya-code-gas-admin-ui-slug-DU58cbiY.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs +0 -26
- package/fesm2022/tinya-code-gas-admin-ui-source-options-B9R4mw8-.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs +0 -205
- package/fesm2022/tinya-code-gas-admin-ui-status-progress-DmeG8htE.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs +0 -432
- package/fesm2022/tinya-code-gas-admin-ui-string-list-gleasqzD.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs +0 -36
- package/fesm2022/tinya-code-gas-admin-ui-template-interpolator-ewv7CkNX.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs +0 -107
- package/fesm2022/tinya-code-gas-admin-ui-text-CUPmL7W_.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs +0 -223
- package/fesm2022/tinya-code-gas-admin-ui-textarea-CGLSIW13.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs +0 -107
- package/fesm2022/tinya-code-gas-admin-ui-time-BcHzsTWf.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs +0 -60
- package/fesm2022/tinya-code-gas-admin-ui-upload.service-CZPEPCeN.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs +0 -141
- package/fesm2022/tinya-code-gas-admin-ui-url-GO4LZi__.mjs.map +0 -1
- package/fesm2022/tinya-code-gas-admin-ui.mjs +0 -4599
- package/fesm2022/tinya-code-gas-admin-ui.mjs.map +0 -1
- package/types/tinya-code-gas-admin-ui.d.ts +0 -3632
|
@@ -1,685 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import { InjectionToken, Injector, Service, computed, inject, provideAppInitializer, signal } from "@angular/core";
|
|
3
|
-
import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpResponse, provideHttpClient, withInterceptors } from "@angular/common/http";
|
|
4
|
-
import { catchError, firstValueFrom, forkJoin, from, map, of, switchMap, tap, throwError } from "rxjs";
|
|
5
|
-
import { Router } from "@angular/router";
|
|
6
|
-
var ApiError = class extends Error {
|
|
7
|
-
status;
|
|
8
|
-
fieldPath;
|
|
9
|
-
code;
|
|
10
|
-
issues;
|
|
11
|
-
constructor(status, message, fieldPath, code, issues = []) {
|
|
12
|
-
super(message);
|
|
13
|
-
this.name = "ApiError";
|
|
14
|
-
this.status = status;
|
|
15
|
-
this.fieldPath = fieldPath;
|
|
16
|
-
this.code = code;
|
|
17
|
-
this.issues = issues;
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
function renewedTokenOf(body) {
|
|
21
|
-
if (body === null || typeof body !== "object") return null;
|
|
22
|
-
const meta = body.meta;
|
|
23
|
-
if (meta === null || typeof meta !== "object") return null;
|
|
24
|
-
const token = meta.renewedToken;
|
|
25
|
-
return typeof token === "string" && token !== "" ? token : null;
|
|
26
|
-
}
|
|
27
|
-
const API_URL = new InjectionToken("API_URL");
|
|
28
|
-
const FIREBASE_AUTH_ADAPTER = new InjectionToken("gas.admin.firebaseAuthAdapter");
|
|
29
|
-
const API_DRIVER = new InjectionToken("gas.admin.driver");
|
|
30
|
-
const VALUE_SOURCES = new InjectionToken("gas.admin.valueSources");
|
|
31
|
-
const DEFAULT_RESPONSE_UNWRAP = new InjectionToken("gas.admin.defaultResponseUnwrap");
|
|
32
|
-
const LOGIN_PATH = "/login";
|
|
33
|
-
const SESSION_TOKEN_KEY = "admin.session.token";
|
|
34
|
-
const SESSION_USER_KEY = "admin.session.user";
|
|
35
|
-
var AuthService = class AuthService {
|
|
36
|
-
http = inject(HttpClient);
|
|
37
|
-
apiUrl = inject(API_URL);
|
|
38
|
-
router = inject(Router);
|
|
39
|
-
firebaseAdapter = inject(FIREBASE_AUTH_ADAPTER, { optional: true });
|
|
40
|
-
driver = inject(API_DRIVER, { optional: true }) ?? "gas";
|
|
41
|
-
storage = sessionStorage;
|
|
42
|
-
_user = signal(null, ...ngDevMode ? [{ debugName: "_user" }] : /* istanbul ignore next */ []);
|
|
43
|
-
_token = signal(null, ...ngDevMode ? [{ debugName: "_token" }] : /* istanbul ignore next */ []);
|
|
44
|
-
_returnUrl = signal(null, ...ngDevMode ? [{ debugName: "_returnUrl" }] : /* istanbul ignore next */ []);
|
|
45
|
-
user = this._user.asReadonly();
|
|
46
|
-
token = this._token.asReadonly();
|
|
47
|
-
returnUrl = this._returnUrl.asReadonly();
|
|
48
|
-
isAuthenticated = computed(() => this._token() !== null && this._user() !== null, ...ngDevMode ? [{ debugName: "isAuthenticated" }] : /* istanbul ignore next */ []);
|
|
49
|
-
role = computed(() => this._user()?.role ?? "", ...ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []);
|
|
50
|
-
constructor() {
|
|
51
|
-
const token = this.storage.getItem(SESSION_TOKEN_KEY);
|
|
52
|
-
if (token !== null && token !== "") this._token.set(token);
|
|
53
|
-
const raw = this.storage.getItem(SESSION_USER_KEY);
|
|
54
|
-
if (raw !== null && raw !== "") try {
|
|
55
|
-
this._user.set(JSON.parse(raw));
|
|
56
|
-
} catch {
|
|
57
|
-
this.storage.removeItem(SESSION_USER_KEY);
|
|
58
|
-
this.storage.removeItem(SESSION_TOKEN_KEY);
|
|
59
|
-
this._token.set(null);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
login(email, password) {
|
|
63
|
-
return this.post("/auth/login", {
|
|
64
|
-
email,
|
|
65
|
-
password
|
|
66
|
-
}).pipe(map((res) => {
|
|
67
|
-
this.open(res.token, res.user);
|
|
68
|
-
const renewed = renewedTokenOf(res);
|
|
69
|
-
if (renewed !== null) this.applyRenewedToken(renewed);
|
|
70
|
-
return res.user;
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
loginWithGoogle() {
|
|
74
|
-
if (!this.firebaseAdapter) return throwError(() => /* @__PURE__ */ new Error("[gas-admin-ui] FIREBASE_AUTH_ADAPTER is not provided."));
|
|
75
|
-
return from(this.firebaseAdapter.signInWithGoogle()).pipe(switchMap((idToken) => this.exchangeFirebaseToken(idToken)));
|
|
76
|
-
}
|
|
77
|
-
loginWithFirebasePassword(email, password) {
|
|
78
|
-
if (!this.firebaseAdapter) return throwError(() => /* @__PURE__ */ new Error("[gas-admin-ui] FIREBASE_AUTH_ADAPTER is not provided."));
|
|
79
|
-
return from(this.firebaseAdapter.signInWithEmailAndPassword(email, password)).pipe(switchMap((idToken) => this.exchangeFirebaseToken(idToken)));
|
|
80
|
-
}
|
|
81
|
-
exchangeFirebaseToken(idToken) {
|
|
82
|
-
const endpoint = getAuth()?.firebase?.exchangeEndpoint ?? "/auth/firebase";
|
|
83
|
-
return this.post(endpoint, { idToken }).pipe(map((res) => {
|
|
84
|
-
this.open(res.token, res.user);
|
|
85
|
-
const renewed = renewedTokenOf(res);
|
|
86
|
-
if (renewed !== null) this.applyRenewedToken(renewed);
|
|
87
|
-
return res.user;
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
logout() {
|
|
91
|
-
return this.post("/auth/logout").pipe(tap({
|
|
92
|
-
next: () => {
|
|
93
|
-
this.clear();
|
|
94
|
-
this.firebaseAdapter?.signOut();
|
|
95
|
-
this.goLogin();
|
|
96
|
-
},
|
|
97
|
-
error: () => {
|
|
98
|
-
this.clear();
|
|
99
|
-
this.firebaseAdapter?.signOut();
|
|
100
|
-
this.goLogin();
|
|
101
|
-
}
|
|
102
|
-
}), map(() => void 0));
|
|
103
|
-
}
|
|
104
|
-
restore() {
|
|
105
|
-
if (this._token() === null) return of(void 0);
|
|
106
|
-
return this.post("/auth/me").pipe(tap((res) => {
|
|
107
|
-
this.open(this._token(), res.user);
|
|
108
|
-
}), catchError(() => of(void 0)), map(() => void 0));
|
|
109
|
-
}
|
|
110
|
-
applyRenewedToken(token) {
|
|
111
|
-
if (token === "" || this._token() === null) return;
|
|
112
|
-
this._token.set(token);
|
|
113
|
-
this.storage.setItem(SESSION_TOKEN_KEY, token);
|
|
114
|
-
}
|
|
115
|
-
applyAuthCode(code) {
|
|
116
|
-
switch (code) {
|
|
117
|
-
case "AUTH_EXPIRED":
|
|
118
|
-
this._returnUrl.set(this.currentUrl());
|
|
119
|
-
this.clear();
|
|
120
|
-
this.goLogin();
|
|
121
|
-
break;
|
|
122
|
-
case "AUTH_REQUIRED":
|
|
123
|
-
case "AUTH_INVALID":
|
|
124
|
-
this.clear();
|
|
125
|
-
this.goLogin();
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
hasRole(required) {
|
|
129
|
-
if (required === "" || required === "session") return this.isAuthenticated();
|
|
130
|
-
const role = this.role();
|
|
131
|
-
if (role === "admin") return true;
|
|
132
|
-
return role !== "" && role === required;
|
|
133
|
-
}
|
|
134
|
-
canAccess(access) {
|
|
135
|
-
const requires = access?.requires ?? "session";
|
|
136
|
-
if (requires === "public") return true;
|
|
137
|
-
if (!this.isAuthenticated()) return false;
|
|
138
|
-
const role = requires.startsWith("role:") ? requires.slice(5) : "";
|
|
139
|
-
const required = role === "" ? access?.roles ?? [] : [role];
|
|
140
|
-
if (required.length === 0) return true;
|
|
141
|
-
return required.some((one) => this.hasRole(one));
|
|
142
|
-
}
|
|
143
|
-
canDoOperation(schema, operation) {
|
|
144
|
-
if (operation === "create" || operation === "update" || operation === "remove") {
|
|
145
|
-
const ep = schema.endpoint;
|
|
146
|
-
if (!!ep && Object.keys(ep).length > 0 && !ep[operation]) return false;
|
|
147
|
-
}
|
|
148
|
-
const ops = schema.policies?.access?.operations;
|
|
149
|
-
if (ops && ops[operation]) return this.meetsLevel(ops[operation]);
|
|
150
|
-
if (schema.policies?.access) {
|
|
151
|
-
const groupLevel = operation === "create" || operation === "update" || operation === "remove" ? schema.policies.access.write : schema.policies.access.read;
|
|
152
|
-
return this.meetsLevel(groupLevel ?? "admin");
|
|
153
|
-
}
|
|
154
|
-
const perms = schema.permissions;
|
|
155
|
-
if (perms) return {
|
|
156
|
-
list: true,
|
|
157
|
-
get: true,
|
|
158
|
-
create: perms.create,
|
|
159
|
-
update: perms.update,
|
|
160
|
-
remove: perms.remove
|
|
161
|
-
}[operation] !== false;
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
canReadField(field) {
|
|
165
|
-
if (!field.access || !field.access.read) return true;
|
|
166
|
-
return this.meetsLevel(field.access.read);
|
|
167
|
-
}
|
|
168
|
-
canWriteField(field) {
|
|
169
|
-
if (!field.access || !field.access.write) return true;
|
|
170
|
-
return this.meetsLevel(field.access.write);
|
|
171
|
-
}
|
|
172
|
-
meetsLevel(level) {
|
|
173
|
-
if (level === "public") return true;
|
|
174
|
-
if (level === "session") return this.isAuthenticated();
|
|
175
|
-
if (level.startsWith("role:")) {
|
|
176
|
-
const requiredRole = level.slice(5);
|
|
177
|
-
return this.hasRole(requiredRole);
|
|
178
|
-
}
|
|
179
|
-
return this.hasRole("admin");
|
|
180
|
-
}
|
|
181
|
-
open(token, user) {
|
|
182
|
-
if (token !== null && token !== "") this._token.set(token);
|
|
183
|
-
this._user.set(user);
|
|
184
|
-
if (token !== null && token !== "") this.storage.setItem(SESSION_TOKEN_KEY, token);
|
|
185
|
-
if (user !== null) this.storage.setItem(SESSION_USER_KEY, JSON.stringify(user));
|
|
186
|
-
}
|
|
187
|
-
consumeReturnUrl() {
|
|
188
|
-
const url = this._returnUrl();
|
|
189
|
-
this._returnUrl.set(null);
|
|
190
|
-
return url;
|
|
191
|
-
}
|
|
192
|
-
clear() {
|
|
193
|
-
this._token.set(null);
|
|
194
|
-
this._user.set(null);
|
|
195
|
-
this.storage.removeItem(SESSION_TOKEN_KEY);
|
|
196
|
-
this.storage.removeItem(SESSION_USER_KEY);
|
|
197
|
-
}
|
|
198
|
-
goLogin() {
|
|
199
|
-
if (this.currentUrl().startsWith("/login")) return;
|
|
200
|
-
this.router.navigate([LOGIN_PATH]).catch(() => void 0);
|
|
201
|
-
}
|
|
202
|
-
currentUrl() {
|
|
203
|
-
return this.router.url;
|
|
204
|
-
}
|
|
205
|
-
buildUrl(path) {
|
|
206
|
-
return `${this.apiUrl ? this.apiUrl.replace(/\/+$/, "") : ""}${path.startsWith("/") ? path : `/${path}`}`;
|
|
207
|
-
}
|
|
208
|
-
envelope(path, payload = {}) {
|
|
209
|
-
return {
|
|
210
|
-
token: this._token(),
|
|
211
|
-
method: "POST",
|
|
212
|
-
path,
|
|
213
|
-
payload
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
buildAuthRequest(path, payload = {}) {
|
|
217
|
-
if (this.driver === "rest") {
|
|
218
|
-
const url = this.buildUrl(path);
|
|
219
|
-
let headers = new HttpHeaders();
|
|
220
|
-
const token = this._token();
|
|
221
|
-
if (token) headers = headers.set("Authorization", `Bearer ${token}`);
|
|
222
|
-
if (path === "/auth/me") return this.http.get(url, { headers });
|
|
223
|
-
headers = headers.set("Content-Type", "application/json");
|
|
224
|
-
return this.http.post(url, payload, { headers });
|
|
225
|
-
}
|
|
226
|
-
return this.http.post(this.apiUrl, this.envelope(path, payload), { headers: { "Content-Type": "text/plain" } });
|
|
227
|
-
}
|
|
228
|
-
post(path, payload = {}) {
|
|
229
|
-
return this.buildAuthRequest(path, payload).pipe(map((res) => res && typeof res === "object" && !Array.isArray(res) && "data" in res ? res["data"] : res));
|
|
230
|
-
}
|
|
231
|
-
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
232
|
-
minVersion: "12.0.0",
|
|
233
|
-
version: "22.2.3",
|
|
234
|
-
ngImport: i0,
|
|
235
|
-
type: AuthService,
|
|
236
|
-
deps: [],
|
|
237
|
-
target: i0.ɵɵFactoryTarget.Service
|
|
238
|
-
});
|
|
239
|
-
static ɵprov = i0.ɵɵngDeclareService({
|
|
240
|
-
minVersion: "22.0.0",
|
|
241
|
-
version: "22.2.3",
|
|
242
|
-
ngImport: i0,
|
|
243
|
-
type: AuthService
|
|
244
|
-
});
|
|
245
|
-
};
|
|
246
|
-
i0.ɵɵngDeclareClassMetadata({
|
|
247
|
-
minVersion: "12.0.0",
|
|
248
|
-
version: "22.2.3",
|
|
249
|
-
ngImport: i0,
|
|
250
|
-
type: AuthService,
|
|
251
|
-
decorators: [{ type: Service }],
|
|
252
|
-
ctorParameters: () => []
|
|
253
|
-
});
|
|
254
|
-
function httpMessage(status) {
|
|
255
|
-
switch (status) {
|
|
256
|
-
case 0: return "No se pudo conectar con el servidor. Revisa tu conexión.";
|
|
257
|
-
case 401: return "Tu sesión ha expirado. Vuelve a iniciar sesión.";
|
|
258
|
-
case 403: return "No tienes permisos para realizar esta acción.";
|
|
259
|
-
case 404: return "No se encontró el recurso solicitado.";
|
|
260
|
-
case 409: return "El registro cambió o ya existe. Recarga la página y vuelve a intentarlo.";
|
|
261
|
-
case 413: return "El archivo es demasiado grande.";
|
|
262
|
-
case 422: return "Los datos enviados no son válidos.";
|
|
263
|
-
default:
|
|
264
|
-
if (status >= 500) return "El servidor tuvo un problema. Vuelve a intentarlo en unos segundos.";
|
|
265
|
-
return status >= 400 ? "No se pudo completar la operación." : "Error inesperado.";
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
function isErrorBody(body) {
|
|
269
|
-
if (typeof body !== "object" || body === null) return false;
|
|
270
|
-
const error = body.error;
|
|
271
|
-
return typeof error === "object" && error !== null && typeof error.message === "string";
|
|
272
|
-
}
|
|
273
|
-
const apiErrorInterceptor = (req, next) => {
|
|
274
|
-
const auth = inject(AuthService);
|
|
275
|
-
return next(req).pipe(map((event) => {
|
|
276
|
-
if (event instanceof HttpResponse && isErrorBody(event.body)) {
|
|
277
|
-
const { status, message, path, code, errors } = event.body.error;
|
|
278
|
-
auth.applyAuthCode(code);
|
|
279
|
-
throw new ApiError(status, message, path, code, errors ?? []);
|
|
280
|
-
}
|
|
281
|
-
return event;
|
|
282
|
-
}), catchError((err) => {
|
|
283
|
-
if (err instanceof ApiError) return throwError(() => err);
|
|
284
|
-
if (err instanceof HttpErrorResponse) return throwError(() => new ApiError(err.status, httpMessage(err.status)));
|
|
285
|
-
return throwError(() => err);
|
|
286
|
-
}));
|
|
287
|
-
};
|
|
288
|
-
function appliesTo(unwrap, operation) {
|
|
289
|
-
const apply = unwrap.apply ?? "all";
|
|
290
|
-
return apply === "all" || apply === operation;
|
|
291
|
-
}
|
|
292
|
-
function unwrapResponse(raw, unwrap, operation) {
|
|
293
|
-
if (!unwrap || !appliesTo(unwrap, operation)) return raw;
|
|
294
|
-
if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
|
|
295
|
-
const record = raw;
|
|
296
|
-
if (Object.prototype.hasOwnProperty.call(record, unwrap.dataKey)) return record[unwrap.dataKey];
|
|
297
|
-
}
|
|
298
|
-
throw new Error(`Response unwrap declared dataKey '${unwrap.dataKey}' but it is missing in the response for operation '${operation}'`);
|
|
299
|
-
}
|
|
300
|
-
const NO_PAGINATION = {
|
|
301
|
-
nextCursor: null,
|
|
302
|
-
total: 0,
|
|
303
|
-
hasMore: false
|
|
304
|
-
};
|
|
305
|
-
function extractPagination(raw, unwrap) {
|
|
306
|
-
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return { ...NO_PAGINATION };
|
|
307
|
-
const body = raw;
|
|
308
|
-
let source = body;
|
|
309
|
-
const metaKey = unwrap?.metaKey;
|
|
310
|
-
if (metaKey) {
|
|
311
|
-
const meta = body[metaKey];
|
|
312
|
-
if (meta !== null && typeof meta === "object" && !Array.isArray(meta)) source = meta;
|
|
313
|
-
}
|
|
314
|
-
const cursorKey = unwrap?.pagination?.cursorKey ?? "nextCursor";
|
|
315
|
-
const totalKey = unwrap?.pagination?.totalKey ?? "total";
|
|
316
|
-
const hasMoreKey = unwrap?.pagination?.hasMoreKey ?? "hasMore";
|
|
317
|
-
const cursorValue = source[cursorKey] ?? body[cursorKey];
|
|
318
|
-
const nextCursor = typeof cursorValue === "string" && cursorValue !== "" ? cursorValue : null;
|
|
319
|
-
const totalValue = source[totalKey] ?? body[totalKey];
|
|
320
|
-
const total = typeof totalValue === "number" ? totalValue : 0;
|
|
321
|
-
const hasMoreValue = source[hasMoreKey] ?? body[hasMoreKey];
|
|
322
|
-
return {
|
|
323
|
-
nextCursor,
|
|
324
|
-
total,
|
|
325
|
-
hasMore: typeof hasMoreValue === "boolean" ? hasMoreValue : nextCursor !== null
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
const MARKER = /\{([a-zA-Z0-9_.]+)\}/g;
|
|
329
|
-
function resolveEndpointPath(path, sources) {
|
|
330
|
-
if (!path.includes("{")) return path;
|
|
331
|
-
return path.replace(MARKER, (marker, nombre) => sustituir(path, marker, nombre, sources));
|
|
332
|
-
}
|
|
333
|
-
function sustituir(path, marker, nombre, sources) {
|
|
334
|
-
if (nombre === "key") throw new Error(`[gas-admin-ui] path '${path}': ${marker} llegó sin resolver — la clave sólo la sustituyen get/update/remove antes de resolver el contexto.`);
|
|
335
|
-
const punto = nombre.indexOf(".");
|
|
336
|
-
const fuente = punto === -1 ? nombre : nombre.slice(0, punto);
|
|
337
|
-
const getter = sources[fuente];
|
|
338
|
-
if (typeof getter !== "function") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — la fuente '${fuente}' no está registrada.`);
|
|
339
|
-
const valor = punto === -1 ? getter() : leerRuta(getter(), nombre.slice(punto + 1));
|
|
340
|
-
if (valor === void 0 || valor === null) throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — sin valor para '${nombre}'.`);
|
|
341
|
-
if (typeof valor === "object") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — el valor de '${fuente}' no es un segmento de URL (no es escalar).`);
|
|
342
|
-
const texto = String(valor);
|
|
343
|
-
if (texto === "") throw new Error(`[gas-admin-ui] path '${path}': no se pudo resolver ${marker} — valor vacío en '${fuente}'.`);
|
|
344
|
-
return encodeURIComponent(texto);
|
|
345
|
-
}
|
|
346
|
-
function leerRuta(valor, ruta) {
|
|
347
|
-
let actual = valor;
|
|
348
|
-
for (const paso of ruta.split(".")) {
|
|
349
|
-
if (actual === null || typeof actual !== "object") return void 0;
|
|
350
|
-
actual = actual[paso];
|
|
351
|
-
}
|
|
352
|
-
return actual;
|
|
353
|
-
}
|
|
354
|
-
function sendGas(deps, path, method, payload, multipart = false) {
|
|
355
|
-
if (multipart) throw new Error("Multipart payload mode is only supported with the REST driver");
|
|
356
|
-
const body = {
|
|
357
|
-
token: deps.sessionToken(),
|
|
358
|
-
method,
|
|
359
|
-
path,
|
|
360
|
-
payload: payload ?? {}
|
|
361
|
-
};
|
|
362
|
-
return deps.http.post(deps.apiUrl, body, { headers: { "Content-Type": "text/plain" } });
|
|
363
|
-
}
|
|
364
|
-
function sendRest(deps, path, method, payload, multipart = false) {
|
|
365
|
-
const url = buildUrl(deps.apiUrl, path);
|
|
366
|
-
const headers = new HttpHeaders();
|
|
367
|
-
if (deps.getIdToken) return from(deps.getIdToken()).pipe(switchMap((freshToken) => doRestRequest(deps, url, method, payload, headers.set("Authorization", `Bearer ${freshToken}`), multipart)));
|
|
368
|
-
const token = deps.sessionToken();
|
|
369
|
-
return doRestRequest(deps, url, method, payload, token ? headers.set("Authorization", `Bearer ${token}`) : headers, multipart);
|
|
370
|
-
}
|
|
371
|
-
function doRestRequest(deps, url, method, payload, headers = new HttpHeaders(), multipart = false) {
|
|
372
|
-
if (method === "GET" || method === "DELETE") {
|
|
373
|
-
const params = toHttpParams(payload instanceof FormData ? void 0 : payload);
|
|
374
|
-
return deps.http.request(method, url, {
|
|
375
|
-
headers,
|
|
376
|
-
params
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
if (multipart || payload instanceof FormData) return deps.http.request(method, url, {
|
|
380
|
-
headers,
|
|
381
|
-
body: payload ?? {}
|
|
382
|
-
});
|
|
383
|
-
return deps.http.request(method, url, {
|
|
384
|
-
headers: headers.set("Content-Type", "application/json"),
|
|
385
|
-
body: payload ?? {}
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
function buildUrl(apiUrl, path) {
|
|
389
|
-
return `${apiUrl ? apiUrl.replace(/\/+$/, "") : ""}${path.startsWith("/") ? path : `/${path}`}`;
|
|
390
|
-
}
|
|
391
|
-
function toHttpParams(payload) {
|
|
392
|
-
let params = new HttpParams();
|
|
393
|
-
if (!payload) return params;
|
|
394
|
-
for (const [key, value] of Object.entries(payload)) {
|
|
395
|
-
if (value === void 0 || value === null) continue;
|
|
396
|
-
if (typeof value === "object" && !Array.isArray(value)) {
|
|
397
|
-
for (const [nestedKey, nestedValue] of Object.entries(value)) if (nestedValue !== void 0 && nestedValue !== null) params = params.set(nestedKey, String(nestedValue));
|
|
398
|
-
} else if (Array.isArray(value)) {
|
|
399
|
-
for (const item of value) if (item !== void 0 && item !== null) params = params.append(key, String(item));
|
|
400
|
-
} else params = params.set(key, String(value));
|
|
401
|
-
}
|
|
402
|
-
return params;
|
|
403
|
-
}
|
|
404
|
-
var ApiService = class ApiService {
|
|
405
|
-
http = inject(HttpClient);
|
|
406
|
-
apiUrl = inject(API_URL);
|
|
407
|
-
auth = inject(AuthService);
|
|
408
|
-
driver = inject(API_DRIVER, { optional: true }) ?? "gas";
|
|
409
|
-
valueSources = inject(VALUE_SOURCES, { optional: true }) ?? {};
|
|
410
|
-
firebaseAuthAdapter = inject(FIREBASE_AUTH_ADAPTER, { optional: true });
|
|
411
|
-
injector = inject(Injector);
|
|
412
|
-
defaultUnwrap = inject(DEFAULT_RESPONSE_UNWRAP, { optional: true }) ?? void 0;
|
|
413
|
-
effectiveUnwrap(endpoint) {
|
|
414
|
-
const global = this.defaultUnwrap;
|
|
415
|
-
const local = endpoint.responseUnwrap;
|
|
416
|
-
if (!global) return local;
|
|
417
|
-
if (!local) return global;
|
|
418
|
-
return {
|
|
419
|
-
...global,
|
|
420
|
-
...local
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
list(endpoint, payload) {
|
|
424
|
-
const unwrap = this.effectiveUnwrap(endpoint);
|
|
425
|
-
return this.send(endpoint.list, "GET", payload).pipe(map((raw) => {
|
|
426
|
-
if (unwrap && (unwrap.apply === "list" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "list");
|
|
427
|
-
return unwrapList(raw);
|
|
428
|
-
}));
|
|
429
|
-
}
|
|
430
|
-
listPage(endpoint, payload) {
|
|
431
|
-
const unwrap = this.effectiveUnwrap(endpoint);
|
|
432
|
-
const applies = !unwrap || unwrap.apply === "list" || unwrap.apply === "all" || !unwrap.apply;
|
|
433
|
-
return this.send(endpoint.list, "GET", payload).pipe(map((raw) => {
|
|
434
|
-
return {
|
|
435
|
-
items: unwrap && applies ? unwrapResponse(raw, unwrap, "list") : unwrapList(raw),
|
|
436
|
-
...extractPagination(raw, unwrap)
|
|
437
|
-
};
|
|
438
|
-
}));
|
|
439
|
-
}
|
|
440
|
-
get(endpoint, key) {
|
|
441
|
-
const unwrap = this.effectiveUnwrap(endpoint);
|
|
442
|
-
return this.send(this.withKey(endpoint.get, key), "GET").pipe(map((raw) => {
|
|
443
|
-
if (unwrap && (unwrap.apply === "get" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "get");
|
|
444
|
-
return raw;
|
|
445
|
-
}));
|
|
446
|
-
}
|
|
447
|
-
create(endpoint, payload) {
|
|
448
|
-
const unwrap = this.effectiveUnwrap(endpoint);
|
|
449
|
-
return this.send(endpoint.create, "POST", payload).pipe(map((raw) => {
|
|
450
|
-
if (unwrap && (unwrap.apply === "create" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "create");
|
|
451
|
-
return raw;
|
|
452
|
-
}));
|
|
453
|
-
}
|
|
454
|
-
update(endpoint, key, payload) {
|
|
455
|
-
const unwrap = this.effectiveUnwrap(endpoint);
|
|
456
|
-
return this.send(this.withKey(endpoint.update, key), "PUT", payload).pipe(map((raw) => {
|
|
457
|
-
if (unwrap && (unwrap.apply === "update" || unwrap.apply === "all" || !unwrap.apply)) return unwrapResponse(raw, unwrap, "update");
|
|
458
|
-
return raw;
|
|
459
|
-
}));
|
|
460
|
-
}
|
|
461
|
-
remove(endpoint, key) {
|
|
462
|
-
endpoint.responseUnwrap;
|
|
463
|
-
return this.send(this.withKey(endpoint.remove, key), "DELETE").pipe(map(() => void 0));
|
|
464
|
-
}
|
|
465
|
-
request(method, path, payload) {
|
|
466
|
-
const dataKey = this.defaultUnwrap?.dataKey ?? "data";
|
|
467
|
-
return this.send(path, method, payload).pipe(map((raw) => {
|
|
468
|
-
if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
|
|
469
|
-
const rec = raw;
|
|
470
|
-
if (Object.prototype.hasOwnProperty.call(rec, dataKey)) return rec[dataKey];
|
|
471
|
-
}
|
|
472
|
-
return raw;
|
|
473
|
-
}));
|
|
474
|
-
}
|
|
475
|
-
invokeCustomEndpoint(definitionOrSchema, nameOrPayload, payload, key) {
|
|
476
|
-
let definition;
|
|
477
|
-
let actualPayload;
|
|
478
|
-
let actualKey = key;
|
|
479
|
-
if (isResourceSchema(definitionOrSchema)) {
|
|
480
|
-
const name = typeof nameOrPayload === "string" ? nameOrPayload : void 0;
|
|
481
|
-
if (!name) throw new Error("invokeCustomEndpoint requires an endpoint name when given a schema");
|
|
482
|
-
definition = definitionOrSchema.customEndpoints?.[name];
|
|
483
|
-
if (!definition) throw new Error(`Custom endpoint '${name}' is not declared for resource '${definitionOrSchema.id}'`);
|
|
484
|
-
actualPayload = (typeof nameOrPayload === "string" ? payload : nameOrPayload) ?? payload;
|
|
485
|
-
} else {
|
|
486
|
-
definition = definitionOrSchema;
|
|
487
|
-
actualPayload = nameOrPayload ?? payload;
|
|
488
|
-
}
|
|
489
|
-
if (!definition) return throwError(() => /* @__PURE__ */ new Error("Custom endpoint definition is required"));
|
|
490
|
-
const multipart = definition.payloadMode === "multipart" || actualPayload instanceof FormData;
|
|
491
|
-
const path = this.withKey(definition.path, actualKey);
|
|
492
|
-
const method = definition.method;
|
|
493
|
-
const unwrap = definition.responseUnwrap;
|
|
494
|
-
return this.send(path, method, actualPayload, multipart).pipe(map((raw) => {
|
|
495
|
-
if (unwrap) return unwrapResponse(raw, unwrap, "get");
|
|
496
|
-
return raw;
|
|
497
|
-
}));
|
|
498
|
-
}
|
|
499
|
-
invokeCustom(schemaOrDefinition, nameOrPayload, payload, key) {
|
|
500
|
-
return this.invokeCustomEndpoint(schemaOrDefinition, nameOrPayload, payload, key);
|
|
501
|
-
}
|
|
502
|
-
custom(schemaOrDefinition, nameOrPayload, payload, key) {
|
|
503
|
-
return this.invokeCustomEndpoint(schemaOrDefinition, nameOrPayload, payload, key);
|
|
504
|
-
}
|
|
505
|
-
send(path, method, payload, multipart = false) {
|
|
506
|
-
if (!path) return throwError(() => /* @__PURE__ */ new Error("Operación no disponible para este recurso"));
|
|
507
|
-
let resolvedPath;
|
|
508
|
-
try {
|
|
509
|
-
resolvedPath = resolveEndpointPath(path, this.buildSources());
|
|
510
|
-
} catch (error) {
|
|
511
|
-
return throwError(() => error);
|
|
512
|
-
}
|
|
513
|
-
const deps = this.transportDeps();
|
|
514
|
-
return (this.driver === "rest" ? sendRest(deps, resolvedPath, method, payload, multipart) : sendGas(deps, resolvedPath, method, payload, multipart)).pipe(tap((res) => {
|
|
515
|
-
const renewed = renewedTokenOf(res);
|
|
516
|
-
if (renewed !== null) this.auth.applyRenewedToken(renewed);
|
|
517
|
-
}));
|
|
518
|
-
}
|
|
519
|
-
transportDeps() {
|
|
520
|
-
const adapter = this.firebaseAuthAdapter;
|
|
521
|
-
return {
|
|
522
|
-
http: this.http,
|
|
523
|
-
apiUrl: this.apiUrl,
|
|
524
|
-
sessionToken: () => this.auth.token(),
|
|
525
|
-
getIdToken: adapter?.getIdToken ? () => adapter.getIdToken() : void 0
|
|
526
|
-
};
|
|
527
|
-
}
|
|
528
|
-
buildSources() {
|
|
529
|
-
return {
|
|
530
|
-
...this.valueSources,
|
|
531
|
-
auth: () => ({
|
|
532
|
-
user: this.auth.user(),
|
|
533
|
-
token: this.auth.token()
|
|
534
|
-
}),
|
|
535
|
-
config: () => this.injector.get(ConfigService, null)?.globalConfig() ?? null
|
|
536
|
-
};
|
|
537
|
-
}
|
|
538
|
-
withKey(path, key) {
|
|
539
|
-
if (!path) return;
|
|
540
|
-
return path.includes("{key}") ? path.replace("{key}", encodeURIComponent(key ?? "")) : path;
|
|
541
|
-
}
|
|
542
|
-
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
543
|
-
minVersion: "12.0.0",
|
|
544
|
-
version: "22.2.3",
|
|
545
|
-
ngImport: i0,
|
|
546
|
-
type: ApiService,
|
|
547
|
-
deps: [],
|
|
548
|
-
target: i0.ɵɵFactoryTarget.Service
|
|
549
|
-
});
|
|
550
|
-
static ɵprov = i0.ɵɵngDeclareService({
|
|
551
|
-
minVersion: "22.0.0",
|
|
552
|
-
version: "22.2.3",
|
|
553
|
-
ngImport: i0,
|
|
554
|
-
type: ApiService
|
|
555
|
-
});
|
|
556
|
-
};
|
|
557
|
-
i0.ɵɵngDeclareClassMetadata({
|
|
558
|
-
minVersion: "12.0.0",
|
|
559
|
-
version: "22.2.3",
|
|
560
|
-
ngImport: i0,
|
|
561
|
-
type: ApiService,
|
|
562
|
-
decorators: [{ type: Service }]
|
|
563
|
-
});
|
|
564
|
-
function isResourceSchema(value) {
|
|
565
|
-
return typeof value === "object" && value !== null && "endpoint" in value && "fields" in value;
|
|
566
|
-
}
|
|
567
|
-
function unwrapList(raw) {
|
|
568
|
-
if (Array.isArray(raw)) return raw;
|
|
569
|
-
if (raw !== null && typeof raw === "object") {
|
|
570
|
-
const items = raw.items;
|
|
571
|
-
if (Array.isArray(items)) return items;
|
|
572
|
-
return [];
|
|
573
|
-
}
|
|
574
|
-
throw new Error(`List response must be an array or an object with an 'items' array; received ${raw === null ? "null" : typeof raw}`);
|
|
575
|
-
}
|
|
576
|
-
var ConfigService = class ConfigService {
|
|
577
|
-
api = inject(ApiService, { optional: true });
|
|
578
|
-
globalConfig = signal({ public_base_url: typeof window !== "undefined" ? window.location.origin : "" }, ...ngDevMode ? [{ debugName: "globalConfig" }] : /* istanbul ignore next */ []);
|
|
579
|
-
endpoints = [];
|
|
580
|
-
loaded = false;
|
|
581
|
-
inFlight = null;
|
|
582
|
-
load(endpoints) {
|
|
583
|
-
this.endpoints = endpoints;
|
|
584
|
-
this.ensure();
|
|
585
|
-
}
|
|
586
|
-
ensureLoaded() {
|
|
587
|
-
return this.ensure();
|
|
588
|
-
}
|
|
589
|
-
ensure() {
|
|
590
|
-
if (this.loaded) return Promise.resolve();
|
|
591
|
-
if (this.inFlight) return this.inFlight;
|
|
592
|
-
if (!this.api || typeof this.api.get !== "function" || this.endpoints.length === 0) return Promise.resolve();
|
|
593
|
-
this.inFlight = firstValueFrom(forkJoin(this.endpoints.map((endpoint) => this.api.get(endpoint).pipe(catchError(() => of(null)))))).then((blocks) => {
|
|
594
|
-
this.inFlight = null;
|
|
595
|
-
blocks.forEach((data) => {
|
|
596
|
-
if (data && typeof data === "object" && Object.keys(data).length > 0) this.globalConfig.update((current) => ({
|
|
597
|
-
...current,
|
|
598
|
-
...data
|
|
599
|
-
}));
|
|
600
|
-
});
|
|
601
|
-
this.loaded = blocks.every((data) => data !== null);
|
|
602
|
-
});
|
|
603
|
-
return this.inFlight;
|
|
604
|
-
}
|
|
605
|
-
buildInterpolationContext(record) {
|
|
606
|
-
const config = this.globalConfig();
|
|
607
|
-
const baseUrl = String(config["public_base_url"] || window.location.origin).replace(/\/+$/, "");
|
|
608
|
-
return {
|
|
609
|
-
...config,
|
|
610
|
-
...record,
|
|
611
|
-
public_base_url: baseUrl
|
|
612
|
-
};
|
|
613
|
-
}
|
|
614
|
-
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
615
|
-
minVersion: "12.0.0",
|
|
616
|
-
version: "22.2.3",
|
|
617
|
-
ngImport: i0,
|
|
618
|
-
type: ConfigService,
|
|
619
|
-
deps: [],
|
|
620
|
-
target: i0.ɵɵFactoryTarget.Service
|
|
621
|
-
});
|
|
622
|
-
static ɵprov = i0.ɵɵngDeclareService({
|
|
623
|
-
minVersion: "22.0.0",
|
|
624
|
-
version: "22.2.3",
|
|
625
|
-
ngImport: i0,
|
|
626
|
-
type: ConfigService
|
|
627
|
-
});
|
|
628
|
-
};
|
|
629
|
-
i0.ɵɵngDeclareClassMetadata({
|
|
630
|
-
minVersion: "12.0.0",
|
|
631
|
-
version: "22.2.3",
|
|
632
|
-
ngImport: i0,
|
|
633
|
-
type: ConfigService,
|
|
634
|
-
decorators: [{ type: Service }]
|
|
635
|
-
});
|
|
636
|
-
let catalog = [];
|
|
637
|
-
let authCatalog;
|
|
638
|
-
function setSchemaCatalog(schemas, auth) {
|
|
639
|
-
catalog = schemas;
|
|
640
|
-
authCatalog = auth;
|
|
641
|
-
}
|
|
642
|
-
function getSchema(id) {
|
|
643
|
-
return catalog.find((schema) => schema.id === id);
|
|
644
|
-
}
|
|
645
|
-
function allSchemas() {
|
|
646
|
-
return catalog;
|
|
647
|
-
}
|
|
648
|
-
function getAuth() {
|
|
649
|
-
return authCatalog;
|
|
650
|
-
}
|
|
651
|
-
const GAS_SCHEMAS = new InjectionToken("gas.admin.schemas");
|
|
652
|
-
function provideGasAdmin(config) {
|
|
653
|
-
setSchemaCatalog(config.schemas, config.auth);
|
|
654
|
-
const configEndpoints = () => config.schemas.flatMap((schema) => schema.kind === "singleton" && schema.endpoint?.get ? [{ get: schema.endpoint.get }] : []);
|
|
655
|
-
return [
|
|
656
|
-
{
|
|
657
|
-
provide: GAS_SCHEMAS,
|
|
658
|
-
useValue: config.schemas
|
|
659
|
-
},
|
|
660
|
-
{
|
|
661
|
-
provide: API_DRIVER,
|
|
662
|
-
useValue: config.driver ?? "gas"
|
|
663
|
-
},
|
|
664
|
-
{
|
|
665
|
-
provide: VALUE_SOURCES,
|
|
666
|
-
useValue: config.valueSources ?? {}
|
|
667
|
-
},
|
|
668
|
-
{
|
|
669
|
-
provide: DEFAULT_RESPONSE_UNWRAP,
|
|
670
|
-
useValue: config.defaultResponseUnwrap
|
|
671
|
-
},
|
|
672
|
-
provideHttpClient(withInterceptors([apiErrorInterceptor])),
|
|
673
|
-
provideAppInitializer(() => inject(ConfigService).load(configEndpoints())),
|
|
674
|
-
provideAppInitializer(() => inject(AuthService).restore())
|
|
675
|
-
];
|
|
676
|
-
}
|
|
677
|
-
function provideFirebaseAdapter(adapter) {
|
|
678
|
-
return {
|
|
679
|
-
provide: FIREBASE_AUTH_ADAPTER,
|
|
680
|
-
useValue: adapter
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
export { DEFAULT_RESPONSE_UNWRAP as _, provideFirebaseAdapter as a, ApiError as b, ConfigService as c, AuthService as d, LOGIN_PATH as f, API_URL as g, API_DRIVER as h, getSchema as i, ApiService as l, SESSION_USER_KEY as m, allSchemas as n, provideGasAdmin as o, SESSION_TOKEN_KEY as p, getAuth as r, setSchemaCatalog as s, GAS_SCHEMAS as t, apiErrorInterceptor as u, FIREBASE_AUTH_ADAPTER as v, renewedTokenOf as x, VALUE_SOURCES as y };
|
|
684
|
-
|
|
685
|
-
//# sourceMappingURL=tinya-code-gas-admin-ui-schema-catalog-D0Pk0wAN.mjs.map
|