@statezero/core 0.2.37 → 0.2.38
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/adaptors/vue/components/LayoutRenderer.js +166 -0
- package/dist/adaptors/vue/components/defaults/AlertElement.js +31 -0
- package/dist/adaptors/vue/components/defaults/DisplayElement.js +44 -0
- package/dist/adaptors/vue/components/defaults/DividerElement.js +10 -0
- package/dist/adaptors/vue/components/defaults/ErrorBlock.js +24 -0
- package/dist/adaptors/vue/components/defaults/GroupElement.js +41 -0
- package/dist/adaptors/vue/components/defaults/LabelElement.js +21 -0
- package/dist/adaptors/vue/components/defaults/TabsElement.js +38 -0
- package/package.json +6 -4
- package/dist/actions/backend1/django_app/calculate-hash.d.ts +0 -57
- package/dist/actions/backend1/django_app/calculate-hash.js +0 -80
- package/dist/actions/backend1/django_app/calculate-hash.schema.json +0 -148
- package/dist/actions/backend1/django_app/get-current-username.d.ts +0 -29
- package/dist/actions/backend1/django_app/get-current-username.js +0 -65
- package/dist/actions/backend1/django_app/get-current-username.schema.json +0 -47
- package/dist/actions/backend1/django_app/get-server-status.d.ts +0 -38
- package/dist/actions/backend1/django_app/get-server-status.js +0 -68
- package/dist/actions/backend1/django_app/get-server-status.schema.json +0 -93
- package/dist/actions/backend1/django_app/get-user-info.d.ts +0 -44
- package/dist/actions/backend1/django_app/get-user-info.js +0 -70
- package/dist/actions/backend1/django_app/get-user-info.schema.json +0 -127
- package/dist/actions/backend1/django_app/index.d.ts +0 -1
- package/dist/actions/backend1/django_app/index.js +0 -6
- package/dist/actions/backend1/django_app/process-data.d.ts +0 -51
- package/dist/actions/backend1/django_app/process-data.js +0 -78
- package/dist/actions/backend1/django_app/process-data.schema.json +0 -117
- package/dist/actions/backend1/django_app/send-notification.d.ts +0 -55
- package/dist/actions/backend1/django_app/send-notification.js +0 -81
- package/dist/actions/backend1/django_app/send-notification.schema.json +0 -175
- package/dist/actions/backend1/index.d.ts +0 -1
- package/dist/actions/backend1/index.js +0 -1
- package/dist/actions/default/django_app/calculate-hash.d.ts +0 -57
- package/dist/actions/default/django_app/calculate-hash.js +0 -80
- package/dist/actions/default/django_app/calculate-hash.schema.json +0 -148
- package/dist/actions/default/django_app/get-current-username.d.ts +0 -29
- package/dist/actions/default/django_app/get-current-username.js +0 -65
- package/dist/actions/default/django_app/get-current-username.schema.json +0 -47
- package/dist/actions/default/django_app/get-server-status.d.ts +0 -38
- package/dist/actions/default/django_app/get-server-status.js +0 -68
- package/dist/actions/default/django_app/get-server-status.schema.json +0 -93
- package/dist/actions/default/django_app/get-user-info.d.ts +0 -44
- package/dist/actions/default/django_app/get-user-info.js +0 -70
- package/dist/actions/default/django_app/get-user-info.schema.json +0 -127
- package/dist/actions/default/django_app/index.d.ts +0 -1
- package/dist/actions/default/django_app/index.js +0 -6
- package/dist/actions/default/django_app/process-data.d.ts +0 -51
- package/dist/actions/default/django_app/process-data.js +0 -78
- package/dist/actions/default/django_app/process-data.schema.json +0 -117
- package/dist/actions/default/django_app/send-notification.d.ts +0 -55
- package/dist/actions/default/django_app/send-notification.js +0 -81
- package/dist/actions/default/django_app/send-notification.schema.json +0 -175
- package/dist/actions/default/index.d.ts +0 -1
- package/dist/actions/default/index.js +0 -1
- package/dist/actions/index.d.ts +0 -1
- package/dist/actions/index.js +0 -5
- package/dist/adaptors/react/composables.d.ts +0 -1
- package/dist/adaptors/react/composables.js +0 -4
- package/dist/adaptors/react/index.d.ts +0 -1
- package/dist/adaptors/react/index.js +0 -1
- package/dist/adaptors/vue/components/LayoutRenderer.vue +0 -361
- package/dist/adaptors/vue/components/defaults/AlertElement.vue +0 -38
- package/dist/adaptors/vue/components/defaults/DisplayElement.vue +0 -57
- package/dist/adaptors/vue/components/defaults/DividerElement.vue +0 -13
- package/dist/adaptors/vue/components/defaults/ErrorBlock.vue +0 -28
- package/dist/adaptors/vue/components/defaults/GroupElement.vue +0 -53
- package/dist/adaptors/vue/components/defaults/LabelElement.vue +0 -25
- package/dist/adaptors/vue/components/defaults/TabsElement.vue +0 -54
- package/dist/adaptors/vue/components/defaults/index.d.ts +0 -7
- package/dist/adaptors/vue/components/defaults/index.js +0 -31
- package/dist/adaptors/vue/components/index.d.ts +0 -1
- package/dist/adaptors/vue/components/index.js +0 -7
- package/dist/adaptors/vue/composables.d.ts +0 -2
- package/dist/adaptors/vue/composables.js +0 -44
- package/dist/adaptors/vue/index.d.ts +0 -3
- package/dist/adaptors/vue/index.js +0 -4
- package/dist/adaptors/vue/reactivity.d.ts +0 -18
- package/dist/adaptors/vue/reactivity.js +0 -132
- package/dist/cli/commands/sync.d.ts +0 -6
- package/dist/cli/commands/sync.js +0 -30
- package/dist/cli/commands/syncActions.d.ts +0 -46
- package/dist/cli/commands/syncActions.js +0 -717
- package/dist/cli/commands/syncModels.d.ts +0 -132
- package/dist/cli/commands/syncModels.js +0 -1120
- package/dist/cli/configFileLoader.d.ts +0 -10
- package/dist/cli/configFileLoader.js +0 -85
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -22
- package/dist/config.d.ts +0 -57
- package/dist/config.js +0 -273
- package/dist/core/eventReceivers.d.ts +0 -185
- package/dist/core/eventReceivers.js +0 -266
- package/dist/core/utils.d.ts +0 -8
- package/dist/core/utils.js +0 -62
- package/dist/errorHandler.d.ts +0 -21
- package/dist/errorHandler.js +0 -27
- package/dist/filtering/localFiltering.d.ts +0 -110
- package/dist/filtering/localFiltering.js +0 -1080
- package/dist/flavours/django/dates.d.ts +0 -34
- package/dist/flavours/django/dates.js +0 -113
- package/dist/flavours/django/errors.d.ts +0 -138
- package/dist/flavours/django/errors.js +0 -195
- package/dist/flavours/django/f.d.ts +0 -6
- package/dist/flavours/django/f.js +0 -91
- package/dist/flavours/django/files.d.ts +0 -62
- package/dist/flavours/django/files.js +0 -355
- package/dist/flavours/django/makeApiCall.d.ts +0 -36
- package/dist/flavours/django/makeApiCall.js +0 -169
- package/dist/flavours/django/manager.d.ts +0 -204
- package/dist/flavours/django/manager.js +0 -222
- package/dist/flavours/django/model.d.ts +0 -137
- package/dist/flavours/django/model.js +0 -366
- package/dist/flavours/django/operationFactory.d.ts +0 -73
- package/dist/flavours/django/operationFactory.js +0 -248
- package/dist/flavours/django/q.d.ts +0 -70
- package/dist/flavours/django/q.js +0 -43
- package/dist/flavours/django/queryExecutor.d.ts +0 -149
- package/dist/flavours/django/queryExecutor.js +0 -590
- package/dist/flavours/django/querySet.d.ts +0 -301
- package/dist/flavours/django/querySet.js +0 -736
- package/dist/flavours/django/serializers.d.ts +0 -39
- package/dist/flavours/django/serializers.js +0 -296
- package/dist/flavours/django/tempPk.d.ts +0 -31
- package/dist/flavours/django/tempPk.js +0 -92
- package/dist/flavours/django/utils.d.ts +0 -19
- package/dist/flavours/django/utils.js +0 -29
- package/dist/index.d.ts +0 -46
- package/dist/index.js +0 -48
- package/dist/models/backend1/django_app/comprehensivemodel.d.ts +0 -894
- package/dist/models/backend1/django_app/comprehensivemodel.js +0 -71
- package/dist/models/backend1/django_app/comprehensivemodel.schema.json +0 -870
- package/dist/models/backend1/django_app/custompkmodel.d.ts +0 -92
- package/dist/models/backend1/django_app/custompkmodel.js +0 -69
- package/dist/models/backend1/django_app/custompkmodel.schema.json +0 -71
- package/dist/models/backend1/django_app/dailyrate.d.ts +0 -230
- package/dist/models/backend1/django_app/dailyrate.js +0 -71
- package/dist/models/backend1/django_app/dailyrate.schema.json +0 -212
- package/dist/models/backend1/django_app/deepmodellevel1.d.ts +0 -140
- package/dist/models/backend1/django_app/deepmodellevel1.js +0 -72
- package/dist/models/backend1/django_app/deepmodellevel1.schema.json +0 -114
- package/dist/models/backend1/django_app/deepmodellevel2.d.ts +0 -118
- package/dist/models/backend1/django_app/deepmodellevel2.js +0 -71
- package/dist/models/backend1/django_app/deepmodellevel2.schema.json +0 -92
- package/dist/models/backend1/django_app/deepmodellevel3.d.ts +0 -92
- package/dist/models/backend1/django_app/deepmodellevel3.js +0 -69
- package/dist/models/backend1/django_app/deepmodellevel3.schema.json +0 -69
- package/dist/models/backend1/django_app/dummymodel.d.ts +0 -134
- package/dist/models/backend1/django_app/dummymodel.js +0 -71
- package/dist/models/backend1/django_app/dummymodel.schema.json +0 -109
- package/dist/models/backend1/django_app/dummyrelatedmodel.d.ts +0 -92
- package/dist/models/backend1/django_app/dummyrelatedmodel.js +0 -69
- package/dist/models/backend1/django_app/dummyrelatedmodel.schema.json +0 -69
- package/dist/models/backend1/django_app/filetest.d.ts +0 -140
- package/dist/models/backend1/django_app/filetest.js +0 -69
- package/dist/models/backend1/django_app/filetest.schema.json +0 -111
- package/dist/models/backend1/django_app/index.d.ts +0 -1
- package/dist/models/backend1/django_app/index.js +0 -21
- package/dist/models/backend1/django_app/m2mdepthtestlevel1.d.ts +0 -118
- package/dist/models/backend1/django_app/m2mdepthtestlevel1.js +0 -71
- package/dist/models/backend1/django_app/m2mdepthtestlevel1.schema.json +0 -94
- package/dist/models/backend1/django_app/m2mdepthtestlevel2.d.ts +0 -118
- package/dist/models/backend1/django_app/m2mdepthtestlevel2.js +0 -71
- package/dist/models/backend1/django_app/m2mdepthtestlevel2.schema.json +0 -94
- package/dist/models/backend1/django_app/m2mdepthtestlevel3.d.ts +0 -134
- package/dist/models/backend1/django_app/m2mdepthtestlevel3.js +0 -71
- package/dist/models/backend1/django_app/m2mdepthtestlevel3.schema.json +0 -112
- package/dist/models/backend1/django_app/modelwithcustompkrelation.d.ts +0 -118
- package/dist/models/backend1/django_app/modelwithcustompkrelation.js +0 -71
- package/dist/models/backend1/django_app/modelwithcustompkrelation.schema.json +0 -93
- package/dist/models/backend1/django_app/modelwithrestrictedfields.d.ts +0 -134
- package/dist/models/backend1/django_app/modelwithrestrictedfields.js +0 -71
- package/dist/models/backend1/django_app/modelwithrestrictedfields.schema.json +0 -111
- package/dist/models/backend1/django_app/namefiltercustompkmodel.d.ts +0 -92
- package/dist/models/backend1/django_app/namefiltercustompkmodel.js +0 -69
- package/dist/models/backend1/django_app/namefiltercustompkmodel.schema.json +0 -71
- package/dist/models/backend1/django_app/order.d.ts +0 -220
- package/dist/models/backend1/django_app/order.js +0 -71
- package/dist/models/backend1/django_app/order.schema.json +0 -203
- package/dist/models/backend1/django_app/orderitem.d.ts +0 -172
- package/dist/models/backend1/django_app/orderitem.js +0 -72
- package/dist/models/backend1/django_app/orderitem.schema.json +0 -149
- package/dist/models/backend1/django_app/product.d.ts +0 -254
- package/dist/models/backend1/django_app/product.js +0 -71
- package/dist/models/backend1/django_app/product.schema.json +0 -277
- package/dist/models/backend1/django_app/productcategory.d.ts +0 -92
- package/dist/models/backend1/django_app/productcategory.js +0 -69
- package/dist/models/backend1/django_app/productcategory.schema.json +0 -70
- package/dist/models/backend1/django_app/rateplan.d.ts +0 -92
- package/dist/models/backend1/django_app/rateplan.js +0 -69
- package/dist/models/backend1/django_app/rateplan.schema.json +0 -70
- package/dist/models/backend1/django_app/restrictedfieldrelatedmodel.d.ts +0 -108
- package/dist/models/backend1/django_app/restrictedfieldrelatedmodel.js +0 -69
- package/dist/models/backend1/django_app/restrictedfieldrelatedmodel.schema.json +0 -87
- package/dist/models/backend1/fileobject.d.ts +0 -4
- package/dist/models/backend1/fileobject.js +0 -9
- package/dist/models/backend1/index.d.ts +0 -2
- package/dist/models/backend1/index.js +0 -2
- package/dist/models/default/django_app/comprehensivemodel.d.ts +0 -894
- package/dist/models/default/django_app/comprehensivemodel.js +0 -71
- package/dist/models/default/django_app/comprehensivemodel.schema.json +0 -870
- package/dist/models/default/django_app/custompkmodel.d.ts +0 -92
- package/dist/models/default/django_app/custompkmodel.js +0 -69
- package/dist/models/default/django_app/custompkmodel.schema.json +0 -71
- package/dist/models/default/django_app/dailyrate.d.ts +0 -230
- package/dist/models/default/django_app/dailyrate.js +0 -71
- package/dist/models/default/django_app/dailyrate.schema.json +0 -212
- package/dist/models/default/django_app/deepmodellevel1.d.ts +0 -128
- package/dist/models/default/django_app/deepmodellevel1.js +0 -72
- package/dist/models/default/django_app/deepmodellevel1.schema.json +0 -102
- package/dist/models/default/django_app/deepmodellevel2.d.ts +0 -106
- package/dist/models/default/django_app/deepmodellevel2.js +0 -71
- package/dist/models/default/django_app/deepmodellevel2.schema.json +0 -80
- package/dist/models/default/django_app/deepmodellevel3.d.ts +0 -80
- package/dist/models/default/django_app/deepmodellevel3.js +0 -69
- package/dist/models/default/django_app/deepmodellevel3.schema.json +0 -57
- package/dist/models/default/django_app/dummymodel.d.ts +0 -122
- package/dist/models/default/django_app/dummymodel.js +0 -71
- package/dist/models/default/django_app/dummymodel.schema.json +0 -97
- package/dist/models/default/django_app/dummyrelatedmodel.d.ts +0 -80
- package/dist/models/default/django_app/dummyrelatedmodel.js +0 -69
- package/dist/models/default/django_app/dummyrelatedmodel.schema.json +0 -57
- package/dist/models/default/django_app/filetest.d.ts +0 -128
- package/dist/models/default/django_app/filetest.js +0 -69
- package/dist/models/default/django_app/filetest.schema.json +0 -99
- package/dist/models/default/django_app/index.d.ts +0 -1
- package/dist/models/default/django_app/index.js +0 -21
- package/dist/models/default/django_app/m2mdepthtestlevel1.d.ts +0 -118
- package/dist/models/default/django_app/m2mdepthtestlevel1.js +0 -71
- package/dist/models/default/django_app/m2mdepthtestlevel1.schema.json +0 -94
- package/dist/models/default/django_app/m2mdepthtestlevel2.d.ts +0 -118
- package/dist/models/default/django_app/m2mdepthtestlevel2.js +0 -71
- package/dist/models/default/django_app/m2mdepthtestlevel2.schema.json +0 -94
- package/dist/models/default/django_app/m2mdepthtestlevel3.d.ts +0 -134
- package/dist/models/default/django_app/m2mdepthtestlevel3.js +0 -71
- package/dist/models/default/django_app/m2mdepthtestlevel3.schema.json +0 -112
- package/dist/models/default/django_app/modelwithcustompkrelation.d.ts +0 -118
- package/dist/models/default/django_app/modelwithcustompkrelation.js +0 -71
- package/dist/models/default/django_app/modelwithcustompkrelation.schema.json +0 -93
- package/dist/models/default/django_app/modelwithrestrictedfields.d.ts +0 -134
- package/dist/models/default/django_app/modelwithrestrictedfields.js +0 -71
- package/dist/models/default/django_app/modelwithrestrictedfields.schema.json +0 -111
- package/dist/models/default/django_app/namefiltercustompkmodel.d.ts +0 -92
- package/dist/models/default/django_app/namefiltercustompkmodel.js +0 -69
- package/dist/models/default/django_app/namefiltercustompkmodel.schema.json +0 -71
- package/dist/models/default/django_app/order.d.ts +0 -220
- package/dist/models/default/django_app/order.js +0 -71
- package/dist/models/default/django_app/order.schema.json +0 -203
- package/dist/models/default/django_app/orderitem.d.ts +0 -172
- package/dist/models/default/django_app/orderitem.js +0 -72
- package/dist/models/default/django_app/orderitem.schema.json +0 -149
- package/dist/models/default/django_app/product.d.ts +0 -254
- package/dist/models/default/django_app/product.js +0 -71
- package/dist/models/default/django_app/product.schema.json +0 -277
- package/dist/models/default/django_app/productcategory.d.ts +0 -92
- package/dist/models/default/django_app/productcategory.js +0 -69
- package/dist/models/default/django_app/productcategory.schema.json +0 -70
- package/dist/models/default/django_app/rateplan.d.ts +0 -92
- package/dist/models/default/django_app/rateplan.js +0 -69
- package/dist/models/default/django_app/rateplan.schema.json +0 -70
- package/dist/models/default/django_app/restrictedfieldrelatedmodel.d.ts +0 -108
- package/dist/models/default/django_app/restrictedfieldrelatedmodel.js +0 -69
- package/dist/models/default/django_app/restrictedfieldrelatedmodel.schema.json +0 -87
- package/dist/models/default/fileobject.d.ts +0 -4
- package/dist/models/default/fileobject.js +0 -9
- package/dist/models/default/index.d.ts +0 -2
- package/dist/models/default/index.js +0 -2
- package/dist/models/index.d.ts +0 -1
- package/dist/models/index.js +0 -5
- package/dist/react-entry.d.ts +0 -2
- package/dist/react-entry.js +0 -2
- package/dist/reactiveAdaptor.d.ts +0 -24
- package/dist/reactiveAdaptor.js +0 -38
- package/dist/reset.d.ts +0 -15
- package/dist/reset.js +0 -97
- package/dist/setup.d.ts +0 -15
- package/dist/setup.js +0 -33
- package/dist/syncEngine/cache/cache.d.ts +0 -75
- package/dist/syncEngine/cache/cache.js +0 -355
- package/dist/syncEngine/metrics/metricOptCalcs.d.ts +0 -79
- package/dist/syncEngine/metrics/metricOptCalcs.js +0 -284
- package/dist/syncEngine/registries/metricRegistry.d.ts +0 -58
- package/dist/syncEngine/registries/metricRegistry.js +0 -171
- package/dist/syncEngine/registries/modelStoreRegistry.d.ts +0 -11
- package/dist/syncEngine/registries/modelStoreRegistry.js +0 -63
- package/dist/syncEngine/registries/querysetStoreGraph.d.ts +0 -41
- package/dist/syncEngine/registries/querysetStoreGraph.js +0 -174
- package/dist/syncEngine/registries/querysetStoreRegistry.d.ts +0 -72
- package/dist/syncEngine/registries/querysetStoreRegistry.js +0 -335
- package/dist/syncEngine/stores/metricStore.d.ts +0 -55
- package/dist/syncEngine/stores/metricStore.js +0 -222
- package/dist/syncEngine/stores/modelStore.d.ts +0 -53
- package/dist/syncEngine/stores/modelStore.js +0 -565
- package/dist/syncEngine/stores/operation.d.ts +0 -139
- package/dist/syncEngine/stores/operation.js +0 -291
- package/dist/syncEngine/stores/operationEventHandlers.d.ts +0 -8
- package/dist/syncEngine/stores/operationEventHandlers.js +0 -322
- package/dist/syncEngine/stores/querysetStore.d.ts +0 -60
- package/dist/syncEngine/stores/querysetStore.js +0 -294
- package/dist/syncEngine/stores/reactivity.d.ts +0 -3
- package/dist/syncEngine/stores/reactivity.js +0 -4
- package/dist/syncEngine/stores/utils.d.ts +0 -14
- package/dist/syncEngine/stores/utils.js +0 -32
- package/dist/syncEngine/sync.d.ts +0 -46
- package/dist/syncEngine/sync.js +0 -389
- package/dist/testing.d.ts +0 -63
- package/dist/testing.js +0 -175
- package/dist/vue-entry.d.ts +0 -15
- package/dist/vue-entry.js +0 -7
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Loads configuration from file using cosmiconfig and sets it into the global config singleton.
|
|
3
|
-
*
|
|
4
|
-
* The function searches for a configuration file (e.g. statezero.config.js, .modelsynrc, etc.)
|
|
5
|
-
* and checks if an environment variable (STATEZERO_CONFIG_PATH) overrides the default search path.
|
|
6
|
-
* If a configuration file is found, it is validated and set via configInstance.setConfig().
|
|
7
|
-
*
|
|
8
|
-
* @returns {void}
|
|
9
|
-
*/
|
|
10
|
-
export function loadConfigFromFile(): void;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { cosmiconfigSync } from 'cosmiconfig';
|
|
2
|
-
import { configInstance } from '../config.js';
|
|
3
|
-
/**
|
|
4
|
-
* Loads configuration from file using cosmiconfig and sets it into the global config singleton.
|
|
5
|
-
*
|
|
6
|
-
* The function searches for a configuration file (e.g. statezero.config.js, .modelsynrc, etc.)
|
|
7
|
-
* and checks if an environment variable (STATEZERO_CONFIG_PATH) overrides the default search path.
|
|
8
|
-
* If a configuration file is found, it is validated and set via configInstance.setConfig().
|
|
9
|
-
*
|
|
10
|
-
* @returns {void}
|
|
11
|
-
*/
|
|
12
|
-
export function loadConfigFromFile() {
|
|
13
|
-
const explorerSync = cosmiconfigSync('statezero', {
|
|
14
|
-
searchPlaces: [
|
|
15
|
-
'statezero.config.js',
|
|
16
|
-
'src/statezero.config.js',
|
|
17
|
-
],
|
|
18
|
-
transform: (result) => {
|
|
19
|
-
if (!result) {
|
|
20
|
-
console.log('No configuration file found.');
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
console.log(`Successfully loaded config from: ${result.filepath}`);
|
|
24
|
-
// Handle ESM modules with default export
|
|
25
|
-
if (result.config && result.config.__esModule && result.config.default) {
|
|
26
|
-
result.config = result.config.default;
|
|
27
|
-
}
|
|
28
|
-
// Parse any stringified values back to their original format
|
|
29
|
-
const parseNestedValues = (obj) => {
|
|
30
|
-
if (!obj || typeof obj !== 'object')
|
|
31
|
-
return obj;
|
|
32
|
-
Object.keys(obj).forEach(key => {
|
|
33
|
-
const value = obj[key];
|
|
34
|
-
// Don't try to parse functions
|
|
35
|
-
if (typeof value === 'string' && !value.includes('Function')) {
|
|
36
|
-
try {
|
|
37
|
-
// Check if it's a stringified value
|
|
38
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
39
|
-
(value === 'true' || value === 'false')) {
|
|
40
|
-
obj[key] = JSON.parse(value);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
// If parsing fails, keep the original value
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
// Recursively parse nested objects
|
|
48
|
-
if (value && typeof value === 'object') {
|
|
49
|
-
parseNestedValues(value);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
return obj;
|
|
53
|
-
};
|
|
54
|
-
// Parse any stringified values in the config
|
|
55
|
-
if (result.config && typeof result.config === 'object') {
|
|
56
|
-
parseNestedValues(result.config);
|
|
57
|
-
}
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const envConfigPath = process.env.STATEZERO_CONFIG_PATH;
|
|
62
|
-
let result = null;
|
|
63
|
-
if (envConfigPath) {
|
|
64
|
-
console.log(`Attempting to load config from environment path: ${envConfigPath}`);
|
|
65
|
-
try {
|
|
66
|
-
result = explorerSync.load(envConfigPath);
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
console.log(`Failed to load from environment path: ${error.message}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (!result) {
|
|
73
|
-
console.log('Searching for statezero configuration files...');
|
|
74
|
-
result = explorerSync.search();
|
|
75
|
-
}
|
|
76
|
-
if (result && result.config) {
|
|
77
|
-
// Apply the configuration
|
|
78
|
-
configInstance.setConfig(result.config);
|
|
79
|
-
console.log(`Configuration set from ${result.filepath}`);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.log('Could not find configuration, using default empty config');
|
|
83
|
-
configInstance.setConfig({ backendConfigs: {} });
|
|
84
|
-
}
|
|
85
|
-
}
|
package/dist/cli/index.d.ts
DELETED
package/dist/cli/index.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import dotenv from "dotenv";
|
|
3
|
-
dotenv.config();
|
|
4
|
-
import yargs from "yargs";
|
|
5
|
-
import { hideBin } from "yargs/helpers";
|
|
6
|
-
import { generateSchema } from "./commands/syncModels.js";
|
|
7
|
-
import { generateActions } from "./commands/syncActions.js";
|
|
8
|
-
import { sync } from "./commands/sync.js"; // Import the new combined sync function
|
|
9
|
-
yargs(hideBin(process.argv))
|
|
10
|
-
// The new 'sync' command
|
|
11
|
-
.command("sync", "Synchronize both models and actions from the backend", {}, // Builder for command-specific options (if any)
|
|
12
|
-
async (argv) => {
|
|
13
|
-
await sync(argv);
|
|
14
|
-
})
|
|
15
|
-
.command("sync-models", "Generate model classes from the backend schema", {}, async (argv) => {
|
|
16
|
-
await generateSchema(argv);
|
|
17
|
-
})
|
|
18
|
-
.command("sync-actions", "Generate action functions from the backend schema", {}, async (argv) => {
|
|
19
|
-
await generateActions(); // This function does not take arguments
|
|
20
|
-
})
|
|
21
|
-
.demandCommand(1, "You must provide a command to run. Use --help to see available commands.")
|
|
22
|
-
.help().argv;
|
package/dist/config.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sets the entire configuration, validating it before storing.
|
|
3
|
-
* If the configuration is invalid, it throws a ConfigError.
|
|
4
|
-
*/
|
|
5
|
-
export function setConfig(newConfig: any): void;
|
|
6
|
-
/**
|
|
7
|
-
* Retrieves the validated configuration.
|
|
8
|
-
* If no configuration has been set, it throws a ConfigError.
|
|
9
|
-
*/
|
|
10
|
-
export function getConfig(): any;
|
|
11
|
-
/**
|
|
12
|
-
* Merges a partial override into an existing backend config.
|
|
13
|
-
*/
|
|
14
|
-
export function setBackendConfig(backendKey: any, newConfig: any): void;
|
|
15
|
-
/**
|
|
16
|
-
* Initializes the event receiver based on the configuration.
|
|
17
|
-
*/
|
|
18
|
-
export function initializeEventReceiver(backendKey?: string): PusherEventReceiver | null;
|
|
19
|
-
/**
|
|
20
|
-
* Initializes event receivers for all configured backends.
|
|
21
|
-
*
|
|
22
|
-
* @returns {Object} Map of backend keys to their initialized event receivers
|
|
23
|
-
* @throws {ConfigError} If configuration is not set or if initialization fails
|
|
24
|
-
*/
|
|
25
|
-
export function initializeAllEventReceivers(): Object;
|
|
26
|
-
/**
|
|
27
|
-
* Registers the function used to retrieve model classes.
|
|
28
|
-
* This should be called once during application setup after setConfig.
|
|
29
|
-
* @param {Function} getterFn - The getModelClass function imported from model-registry.js
|
|
30
|
-
*/
|
|
31
|
-
export function registerModelGetter(getterFn: Function): void;
|
|
32
|
-
/**
|
|
33
|
-
* Helper function to build file URLs
|
|
34
|
-
*/
|
|
35
|
-
export function buildFileUrl(fileUrl: any, backendKey?: string): any;
|
|
36
|
-
/**
|
|
37
|
-
* Get a model class by name using the registered getter.
|
|
38
|
-
*
|
|
39
|
-
* @param {string} modelName - The model name (e.g., 'app.MyModel')
|
|
40
|
-
* @param {string} configKey - The config key (backend name)
|
|
41
|
-
* @returns {Function|null} - The model class or null if not found
|
|
42
|
-
*/
|
|
43
|
-
export function getModelClass(modelName: string, configKey: string): Function | null;
|
|
44
|
-
export namespace liveConfig {
|
|
45
|
-
let backendConfigs: {};
|
|
46
|
-
}
|
|
47
|
-
export namespace configInstance {
|
|
48
|
-
export { setConfig };
|
|
49
|
-
export { getConfig };
|
|
50
|
-
export { setBackendConfig };
|
|
51
|
-
export { initializeEventReceiver };
|
|
52
|
-
export { registerModelGetter };
|
|
53
|
-
export { getModelClass };
|
|
54
|
-
export { buildFileUrl };
|
|
55
|
-
}
|
|
56
|
-
export default configInstance;
|
|
57
|
-
import { PusherEventReceiver } from './core/eventReceivers.js';
|
package/dist/config.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ConfigError } from './flavours/django/errors.js';
|
|
3
|
-
import { PusherEventReceiver, setEventReceiver } from './core/eventReceivers.js';
|
|
4
|
-
// The live configuration object. By default it is empty.
|
|
5
|
-
export let liveConfig = {
|
|
6
|
-
backendConfigs: {}
|
|
7
|
-
};
|
|
8
|
-
// --- Zod Schemas ---
|
|
9
|
-
const pusherSchema = z.object({
|
|
10
|
-
clientOptions: z.object({
|
|
11
|
-
appKey: z.string({ required_error: 'Pusher appKey is required' }),
|
|
12
|
-
cluster: z.string({ required_error: 'Pusher cluster is required' }),
|
|
13
|
-
forceTLS: z.boolean().optional(),
|
|
14
|
-
authEndpoint: z.string()
|
|
15
|
-
.url('Pusher authentication endpoint URL is required'),
|
|
16
|
-
getAuthHeaders: z.function().optional()
|
|
17
|
-
.refine((fn) => fn === undefined || typeof fn === 'function', 'getAuthHeaders must be a function if provided')
|
|
18
|
-
})
|
|
19
|
-
});
|
|
20
|
-
const eventConfigSchema = z.object({
|
|
21
|
-
type: z.enum(['websocket', 'pusher', 'none']),
|
|
22
|
-
websocketUrl: z.string().url().optional(),
|
|
23
|
-
pusher: pusherSchema.optional(),
|
|
24
|
-
hotpaths: z.array(z.string()).default(['default'])
|
|
25
|
-
}).superRefine((data, ctx) => {
|
|
26
|
-
// Conditional validation based on type
|
|
27
|
-
if (data.type === 'websocket') {
|
|
28
|
-
if (!data.websocketUrl) {
|
|
29
|
-
ctx.addIssue({
|
|
30
|
-
code: z.ZodIssueCode.custom,
|
|
31
|
-
path: ['websocketUrl'],
|
|
32
|
-
message: 'WebSocket URL is required for WebSocket event receiver'
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (data.type === 'pusher') {
|
|
37
|
-
if (!data.pusher) {
|
|
38
|
-
ctx.addIssue({
|
|
39
|
-
code: z.ZodIssueCode.custom,
|
|
40
|
-
path: ['pusher'],
|
|
41
|
-
message: 'Pusher configuration is required for Pusher event receiver'
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
const backendSchema = z.object({
|
|
47
|
-
API_URL: z.string().url("API_URL must be a valid URL"),
|
|
48
|
-
GENERATED_TYPES_DIR: z.string({
|
|
49
|
-
required_error: "GENERATED_TYPES_DIR is required",
|
|
50
|
-
}),
|
|
51
|
-
GENERATED_ACTIONS_DIR: z.string().optional(),
|
|
52
|
-
BACKEND_TZ: z.string().optional(),
|
|
53
|
-
SYNC_TOKEN: z.string().optional(),
|
|
54
|
-
fileRootURL: z.string().url("fileRootURL must be a valid URL").optional(),
|
|
55
|
-
fileUploadMode: z.enum(["server", "s3"]).default("server"),
|
|
56
|
-
getAuthHeaders: z
|
|
57
|
-
.function()
|
|
58
|
-
.optional()
|
|
59
|
-
.refine((fn) => fn === undefined || typeof fn === "function", "getAuthHeaders must be a function if provided"),
|
|
60
|
-
eventInterceptor: z
|
|
61
|
-
.function()
|
|
62
|
-
.optional()
|
|
63
|
-
.refine((fn) => fn === undefined || typeof fn === "function", "eventInterceptor must be a function if provided"),
|
|
64
|
-
events: z.lazy(() => eventConfigSchema.optional()),
|
|
65
|
-
});
|
|
66
|
-
const configSchema = z.object({
|
|
67
|
-
backendConfigs: z.record(z.string(), backendSchema)
|
|
68
|
-
.refine((configs) => {
|
|
69
|
-
// Validate each backend config
|
|
70
|
-
for (const [key, backend] of Object.entries(configs)) {
|
|
71
|
-
const result = backendSchema.safeParse(backend);
|
|
72
|
-
if (!result.success) {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return true;
|
|
77
|
-
}, (configs) => {
|
|
78
|
-
// Generate detailed error message
|
|
79
|
-
const errors = [];
|
|
80
|
-
for (const [key, backend] of Object.entries(configs)) {
|
|
81
|
-
const result = backendSchema.safeParse(backend);
|
|
82
|
-
if (!result.success) {
|
|
83
|
-
const errorMessages = result.error.errors.map(err => err.message);
|
|
84
|
-
errors.push(`Backend "${key}" is invalid: ${errorMessages.join(', ')}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return { message: errors.join('; ') };
|
|
88
|
-
}),
|
|
89
|
-
periodicSyncIntervalSeconds: z.number().min(5).nullable().optional().default(null),
|
|
90
|
-
});
|
|
91
|
-
// Internal variable to hold the validated configuration.
|
|
92
|
-
let config = null;
|
|
93
|
-
/**
|
|
94
|
-
* Sets the entire configuration, validating it before storing.
|
|
95
|
-
* If the configuration is invalid, it throws a ConfigError.
|
|
96
|
-
*/
|
|
97
|
-
export function setConfig(newConfig) {
|
|
98
|
-
liveConfig = newConfig;
|
|
99
|
-
const result = configSchema.safeParse(liveConfig);
|
|
100
|
-
if (!result.success) {
|
|
101
|
-
const errorMessages = result.error.errors.map(err => err.message);
|
|
102
|
-
throw new ConfigError(`Error setting configuration: ${errorMessages.join(', ')}`);
|
|
103
|
-
}
|
|
104
|
-
config = result.data;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Retrieves the validated configuration.
|
|
108
|
-
* If no configuration has been set, it throws a ConfigError.
|
|
109
|
-
*/
|
|
110
|
-
export function getConfig() {
|
|
111
|
-
if (!config) {
|
|
112
|
-
throw new ConfigError('Configuration not set. Please call setConfig() with a valid configuration.');
|
|
113
|
-
}
|
|
114
|
-
return config;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Merges a partial override into an existing backend config.
|
|
118
|
-
*/
|
|
119
|
-
export function setBackendConfig(backendKey, newConfig) {
|
|
120
|
-
try {
|
|
121
|
-
const cfg = getConfig();
|
|
122
|
-
if (!cfg.backendConfigs[backendKey]) {
|
|
123
|
-
throw new ConfigError(`Backend "${backendKey}" not found in configuration.`);
|
|
124
|
-
}
|
|
125
|
-
const merged = { ...cfg.backendConfigs[backendKey], ...newConfig };
|
|
126
|
-
const result = backendSchema.safeParse(merged);
|
|
127
|
-
if (!result.success) {
|
|
128
|
-
const errorMessages = result.error.errors.map(err => err.message);
|
|
129
|
-
throw new ConfigError(`Invalid backend configuration: ${errorMessages.join(', ')}`);
|
|
130
|
-
}
|
|
131
|
-
cfg.backendConfigs[backendKey] = result.data;
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
if (error instanceof ConfigError) {
|
|
135
|
-
throw error;
|
|
136
|
-
}
|
|
137
|
-
throw new ConfigError(error.message || 'Invalid backend configuration');
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Initializes the event receiver based on the configuration.
|
|
142
|
-
*/
|
|
143
|
-
export function initializeEventReceiver(backendKey = 'default') {
|
|
144
|
-
try {
|
|
145
|
-
const cfg = getConfig();
|
|
146
|
-
if (!cfg.backendConfigs[backendKey]) {
|
|
147
|
-
throw new ConfigError(`Backend "${backendKey}" not found in configuration.`);
|
|
148
|
-
}
|
|
149
|
-
const backendConfig = cfg.backendConfigs[backendKey];
|
|
150
|
-
if (!backendConfig.events) {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
let receiver = null;
|
|
154
|
-
switch (backendConfig.events.type) {
|
|
155
|
-
case 'pusher':
|
|
156
|
-
if (!backendConfig.events.pusher || !backendConfig.events.pusher.clientOptions) {
|
|
157
|
-
throw new ConfigError('Pusher client options are required for Pusher event receiver.');
|
|
158
|
-
}
|
|
159
|
-
if (!backendConfig.events.pusher.clientOptions.authEndpoint) {
|
|
160
|
-
throw new ConfigError('Pusher auth endpoint is required for Pusher event receiver.');
|
|
161
|
-
}
|
|
162
|
-
const clientOptions = {
|
|
163
|
-
...backendConfig.events.pusher.clientOptions,
|
|
164
|
-
getAuthHeaders: backendConfig.events.pusher.clientOptions.getAuthHeaders || backendConfig.getAuthHeaders
|
|
165
|
-
};
|
|
166
|
-
// Pass the backendKey to the constructor
|
|
167
|
-
receiver = new PusherEventReceiver({ clientOptions }, backendKey);
|
|
168
|
-
break;
|
|
169
|
-
case 'none':
|
|
170
|
-
return null;
|
|
171
|
-
default:
|
|
172
|
-
throw new ConfigError(`Unknown event receiver type: ${backendConfig.events.type}`);
|
|
173
|
-
}
|
|
174
|
-
if (receiver) {
|
|
175
|
-
// Pass the backendKey to associate the receiver with this backend
|
|
176
|
-
setEventReceiver(backendKey, receiver);
|
|
177
|
-
}
|
|
178
|
-
return receiver;
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
if (error instanceof ConfigError) {
|
|
182
|
-
throw error;
|
|
183
|
-
}
|
|
184
|
-
throw new ConfigError(`Failed to initialize event receiver: ${error.message}`);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Initializes event receivers for all configured backends.
|
|
189
|
-
*
|
|
190
|
-
* @returns {Object} Map of backend keys to their initialized event receivers
|
|
191
|
-
* @throws {ConfigError} If configuration is not set or if initialization fails
|
|
192
|
-
*/
|
|
193
|
-
export function initializeAllEventReceivers() {
|
|
194
|
-
try {
|
|
195
|
-
const cfg = getConfig();
|
|
196
|
-
const receivers = {};
|
|
197
|
-
// Initialize event receivers for each backend configuration
|
|
198
|
-
Object.keys(cfg.backendConfigs).forEach(backendKey => {
|
|
199
|
-
try {
|
|
200
|
-
receivers[backendKey] = initializeEventReceiver(backendKey);
|
|
201
|
-
}
|
|
202
|
-
catch (error) {
|
|
203
|
-
console.warn(`Failed to initialize event receiver for backend "${backendKey}": ${error.message}`);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
return receivers;
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
throw new ConfigError(`Failed to initialize event receivers: ${error.message}`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
// --- Declare the variable to hold the registered model getter ---
|
|
213
|
-
let modelGetter = null;
|
|
214
|
-
/**
|
|
215
|
-
* Registers the function used to retrieve model classes.
|
|
216
|
-
* This should be called once during application setup after setConfig.
|
|
217
|
-
* @param {Function} getterFn - The getModelClass function imported from model-registry.js
|
|
218
|
-
*/
|
|
219
|
-
export function registerModelGetter(getterFn) {
|
|
220
|
-
if (typeof getterFn !== 'function') {
|
|
221
|
-
throw new ConfigError('Provided model getter must be a function.');
|
|
222
|
-
}
|
|
223
|
-
modelGetter = getterFn;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Helper function to build file URLs
|
|
227
|
-
*/
|
|
228
|
-
export function buildFileUrl(fileUrl, backendKey = 'default') {
|
|
229
|
-
// If URL is already absolute (cloud storage), use it as-is
|
|
230
|
-
if (fileUrl && fileUrl.startsWith('http')) {
|
|
231
|
-
return fileUrl;
|
|
232
|
-
}
|
|
233
|
-
const cfg = getConfig();
|
|
234
|
-
const backend = cfg.backendConfigs[backendKey];
|
|
235
|
-
if (!backend) {
|
|
236
|
-
throw new ConfigError(`Backend "${backendKey}" not found in configuration.`);
|
|
237
|
-
}
|
|
238
|
-
// If no fileRootURL provided, return relative URL as-is
|
|
239
|
-
if (!backend.fileRootURL) {
|
|
240
|
-
return fileUrl;
|
|
241
|
-
}
|
|
242
|
-
// Construct full URL
|
|
243
|
-
return backend.fileRootURL.replace(/\/$/, '') + fileUrl;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Get a model class by name using the registered getter.
|
|
247
|
-
*
|
|
248
|
-
* @param {string} modelName - The model name (e.g., 'app.MyModel')
|
|
249
|
-
* @param {string} configKey - The config key (backend name)
|
|
250
|
-
* @returns {Function|null} - The model class or null if not found
|
|
251
|
-
*/
|
|
252
|
-
export function getModelClass(modelName, configKey) {
|
|
253
|
-
if (!modelGetter) {
|
|
254
|
-
// Optionally check if config is set first
|
|
255
|
-
// getConfig(); // This will throw if config isn't set
|
|
256
|
-
throw new ConfigError('Model registry not registered. Please call registerModelGetter() with the function from model-registry.js during app initialization.');
|
|
257
|
-
}
|
|
258
|
-
// Delegate to the function provided by the user from model-registry.js
|
|
259
|
-
return modelGetter(modelName, configKey);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Exposes a singleton object for configuration functionality.
|
|
263
|
-
*/
|
|
264
|
-
export const configInstance = {
|
|
265
|
-
setConfig,
|
|
266
|
-
getConfig,
|
|
267
|
-
setBackendConfig,
|
|
268
|
-
initializeEventReceiver,
|
|
269
|
-
registerModelGetter,
|
|
270
|
-
getModelClass,
|
|
271
|
-
buildFileUrl
|
|
272
|
-
};
|
|
273
|
-
export default configInstance;
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Set an event receiver for a specific backend.
|
|
3
|
-
* @param {string} configKey - The backend configuration key
|
|
4
|
-
* @param {EventReceiver} receiver - The event receiver instance
|
|
5
|
-
*/
|
|
6
|
-
export function setEventReceiver(configKey: string, receiver: EventReceiver): void;
|
|
7
|
-
/**
|
|
8
|
-
* Get the event receiver for a specific backend.
|
|
9
|
-
* @param {string} configKey - The backend configuration key
|
|
10
|
-
* @returns {EventReceiver|null}
|
|
11
|
-
*/
|
|
12
|
-
export function getEventReceiver(configKey?: string): EventReceiver | null;
|
|
13
|
-
/**
|
|
14
|
-
* Get all registered event receivers.
|
|
15
|
-
* @returns {Map<string, EventReceiver>}
|
|
16
|
-
*/
|
|
17
|
-
export function getAllEventReceivers(): Map<string, EventReceiver>;
|
|
18
|
-
/**
|
|
19
|
-
* Set a custom namespace resolver function for a specific backend.
|
|
20
|
-
* @param {string} configKey - The backend configuration key
|
|
21
|
-
* @param {NamespaceResolver} resolver
|
|
22
|
-
*/
|
|
23
|
-
export function setNamespaceResolver(configKey: string, resolver: NamespaceResolver): void;
|
|
24
|
-
/**
|
|
25
|
-
* Event types that can be received from the server.
|
|
26
|
-
*/
|
|
27
|
-
export type EventType = string;
|
|
28
|
-
export namespace EventType {
|
|
29
|
-
let CREATE: string;
|
|
30
|
-
let UPDATE: string;
|
|
31
|
-
let DELETE: string;
|
|
32
|
-
let BULK_CREATE: string;
|
|
33
|
-
let BULK_UPDATE: string;
|
|
34
|
-
let BULK_DELETE: string;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Callback for handling model events.
|
|
38
|
-
* @callback EventHandler
|
|
39
|
-
* @param {ModelEvent} event - The event object.
|
|
40
|
-
*/
|
|
41
|
-
/**
|
|
42
|
-
* A namespace resolver function.
|
|
43
|
-
* @callback NamespaceResolver
|
|
44
|
-
* @param {string} modelName - The model name.
|
|
45
|
-
* @returns {string} The namespace.
|
|
46
|
-
*/
|
|
47
|
-
/**
|
|
48
|
-
* Options for instantiating a Pusher client.
|
|
49
|
-
* @typedef {Object} PusherClientOptions
|
|
50
|
-
* @property {string} appKey
|
|
51
|
-
* @property {string} cluster
|
|
52
|
-
* @property {boolean} [forceTLS]
|
|
53
|
-
* @property {string} authEndpoint
|
|
54
|
-
* @property {function(): Object<string, string>} [getAuthHeaders]
|
|
55
|
-
*/
|
|
56
|
-
/**
|
|
57
|
-
* Configuration options for Pusher event receivers.
|
|
58
|
-
* @typedef {Object} PusherReceiverOptions
|
|
59
|
-
* @property {PusherClientOptions} clientOptions
|
|
60
|
-
* @property {function(string): string} [formatChannelName] - Optional channel name formatter. Default: (namespace) => `private-${namespace}`
|
|
61
|
-
* @property {NamespaceResolver} [namespaceResolver] - Optional namespace resolver. Default: (modelName) => modelName.
|
|
62
|
-
*/
|
|
63
|
-
/**
|
|
64
|
-
* Implementation of EventReceiver that uses Pusher.
|
|
65
|
-
*/
|
|
66
|
-
export class PusherEventReceiver {
|
|
67
|
-
/**
|
|
68
|
-
* @param {PusherReceiverOptions} options
|
|
69
|
-
* @param {string} configKey - The backend configuration key
|
|
70
|
-
*/
|
|
71
|
-
constructor(options: PusherReceiverOptions, configKey: string);
|
|
72
|
-
configKey: string;
|
|
73
|
-
connectionTimeoutId: NodeJS.Timeout;
|
|
74
|
-
pusherClient: any;
|
|
75
|
-
formatChannelName: (arg0: string) => string;
|
|
76
|
-
namespaceResolver: NamespaceResolver;
|
|
77
|
-
channels: Map<any, any>;
|
|
78
|
-
eventHandlers: Set<any>;
|
|
79
|
-
/**
|
|
80
|
-
* @private
|
|
81
|
-
* @param {string} reason
|
|
82
|
-
*/
|
|
83
|
-
private _logConnectionError;
|
|
84
|
-
/**
|
|
85
|
-
* Set the namespace resolver function.
|
|
86
|
-
* @param {NamespaceResolver} resolver
|
|
87
|
-
*/
|
|
88
|
-
setNamespaceResolver(resolver: NamespaceResolver): void;
|
|
89
|
-
/**
|
|
90
|
-
* Connect to Pusher (no-op since Pusher handles connection automatically).
|
|
91
|
-
*/
|
|
92
|
-
connect(): void;
|
|
93
|
-
/**
|
|
94
|
-
* Subscribe to events for a specific namespace.
|
|
95
|
-
* @param {string} namespace
|
|
96
|
-
*/
|
|
97
|
-
subscribe(namespace: string): void;
|
|
98
|
-
unsubscribe(namespace: any): void;
|
|
99
|
-
/**
|
|
100
|
-
* Disconnect from Pusher.
|
|
101
|
-
*/
|
|
102
|
-
disconnect(): void;
|
|
103
|
-
/**
|
|
104
|
-
* Add handler for model events
|
|
105
|
-
* @param {EventHandler} handler
|
|
106
|
-
*/
|
|
107
|
-
addModelEventHandler(handler: EventHandler): void;
|
|
108
|
-
/**
|
|
109
|
-
* Legacy method - adds event handler for backwards compatibility
|
|
110
|
-
* @param {EventHandler} handler
|
|
111
|
-
*/
|
|
112
|
-
addEventHandler(handler: EventHandler): void;
|
|
113
|
-
/**
|
|
114
|
-
* Remove an event handler callback.
|
|
115
|
-
* @param {EventHandler} handler
|
|
116
|
-
*/
|
|
117
|
-
removeEventHandler(handler: EventHandler): void;
|
|
118
|
-
/**
|
|
119
|
-
* Get namespace from model name using the resolver.
|
|
120
|
-
* @param {string} modelName
|
|
121
|
-
* @returns {string}
|
|
122
|
-
*/
|
|
123
|
-
getNamespace(modelName: string): string;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Structure of events received from the server.
|
|
127
|
-
*/
|
|
128
|
-
export type ModelEvent = {
|
|
129
|
-
/**
|
|
130
|
-
* - Support both frontend (type) and backend (event) naming conventions.
|
|
131
|
-
*/
|
|
132
|
-
type?: string | undefined;
|
|
133
|
-
event?: string | undefined;
|
|
134
|
-
model: string;
|
|
135
|
-
data?: any;
|
|
136
|
-
operationId?: string | undefined;
|
|
137
|
-
namespace?: string | undefined;
|
|
138
|
-
/**
|
|
139
|
-
* - For bulk events.
|
|
140
|
-
*/
|
|
141
|
-
instances?: (string | number)[] | undefined;
|
|
142
|
-
pk_field_name?: string | undefined;
|
|
143
|
-
/**
|
|
144
|
-
* - The backend configuration key this event is associated with.
|
|
145
|
-
*/
|
|
146
|
-
configKey?: string | undefined;
|
|
147
|
-
/**
|
|
148
|
-
* - Additional open-ended keys.
|
|
149
|
-
*/
|
|
150
|
-
key?: any;
|
|
151
|
-
};
|
|
152
|
-
/**
|
|
153
|
-
* Callback for handling model events.
|
|
154
|
-
*/
|
|
155
|
-
export type EventHandler = (event: ModelEvent) => any;
|
|
156
|
-
/**
|
|
157
|
-
* A namespace resolver function.
|
|
158
|
-
*/
|
|
159
|
-
export type NamespaceResolver = (modelName: string) => string;
|
|
160
|
-
/**
|
|
161
|
-
* Options for instantiating a Pusher client.
|
|
162
|
-
*/
|
|
163
|
-
export type PusherClientOptions = {
|
|
164
|
-
appKey: string;
|
|
165
|
-
cluster: string;
|
|
166
|
-
forceTLS?: boolean | undefined;
|
|
167
|
-
authEndpoint: string;
|
|
168
|
-
getAuthHeaders?: (() => {
|
|
169
|
-
[x: string]: string;
|
|
170
|
-
}) | undefined;
|
|
171
|
-
};
|
|
172
|
-
/**
|
|
173
|
-
* Configuration options for Pusher event receivers.
|
|
174
|
-
*/
|
|
175
|
-
export type PusherReceiverOptions = {
|
|
176
|
-
clientOptions: PusherClientOptions;
|
|
177
|
-
/**
|
|
178
|
-
* - Optional channel name formatter. Default: (namespace) => `private-${namespace}`
|
|
179
|
-
*/
|
|
180
|
-
formatChannelName?: ((arg0: string) => string) | undefined;
|
|
181
|
-
/**
|
|
182
|
-
* - Optional namespace resolver. Default: (modelName) => modelName.
|
|
183
|
-
*/
|
|
184
|
-
namespaceResolver?: NamespaceResolver | undefined;
|
|
185
|
-
};
|