@ms-cloudpack/data-bus 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -25
- package/lib/addProvider.d.ts.map +1 -1
- package/lib/addProvider.js.map +1 -1
- package/lib/createDataBus.js.map +1 -1
- package/lib/createDataPath.d.ts +4 -4
- package/lib/createDataPath.d.ts.map +1 -1
- package/lib/createDataPath.js.map +1 -1
- package/lib/getNode.js.map +1 -1
- package/lib/publish.js.map +1 -1
- package/lib/subscribe.js.map +1 -1
- package/lib/types/DataBus.d.ts +4 -4
- package/lib/types/DataBus.d.ts.map +1 -1
- package/lib/types/DataBus.js.map +1 -1
- package/lib/types/DataBusPath.d.ts +2 -2
- package/lib/types/DataBusPath.d.ts.map +1 -1
- package/lib/types/DataBusPath.js.map +1 -1
- package/package.json +4 -4
- package/lib/tsdoc-metadata.json +0 -11
package/README.md
CHANGED
|
@@ -4,14 +4,8 @@ Provides a general api for subscribing/unsubscribing from data and defining prov
|
|
|
4
4
|
|
|
5
5
|
Examples of usage:
|
|
6
6
|
|
|
7
|
-
- Create a registry of NPM package metadata - a provider monitors needs and fetches data on demand. Many
|
|
8
|
-
|
|
9
|
-
centralize the cache expiration strategy, polling vs push notifications, etc. Consumers have a simple approach
|
|
10
|
-
for subscribing to data and get push notifications when the data changes.
|
|
11
|
-
|
|
12
|
-
- Create a unified logging system - Publishers can publish data from many distributed sources. Logging is published
|
|
13
|
-
in a hierarchy: `/logging/${app}/${severity}/${area}` Consumers can subscribe to any part of this tree. For example,
|
|
14
|
-
if a consumer subscribes to `/logging/my-app/error`, they will receive change events for all errors in `my-app`.
|
|
7
|
+
- Create a registry of NPM package metadata - a provider monitors needs and fetches data on demand. Many consumers can consume the metadata for any package; providers will automatically debounce many requests, centralize the cache expiration strategy, polling vs push notifications, etc. Consumers have a simple approach for subscribing to data and get push notifications when the data changes.
|
|
8
|
+
- Create a unified logging system - Publishers can publish data from many distributed sources. Logging is published in a hierarchy: `/logging/${app}/${severity}/${area}` Consumers can subscribe to any part of this tree. For example, if a consumer subscribes to `/logging/my-app/error`, they will receive change events for all errors in `my-app`.
|
|
15
9
|
|
|
16
10
|
## Usage
|
|
17
11
|
|
|
@@ -34,7 +28,7 @@ The purpose of the `path` parameter is to define the path in the tree where the
|
|
|
34
28
|
Example of defining a data path:
|
|
35
29
|
|
|
36
30
|
```js
|
|
37
|
-
import z from 'zod';
|
|
31
|
+
import { z } from 'zod/v4-mini';
|
|
38
32
|
|
|
39
33
|
const itemCountPath = createDataPath({
|
|
40
34
|
path: ['items', 'itemCount'],
|
|
@@ -44,9 +38,7 @@ const itemCountPath = createDataPath({
|
|
|
44
38
|
|
|
45
39
|
### Subscribing to data
|
|
46
40
|
|
|
47
|
-
The data bus provides a method `subscribe` for consumers to subscribe to different types of data. As that data changes, consumers will be notified of changes. Any number of consumers can subscribe for the same data. Data is
|
|
48
|
-
hierarchical, so you can subscribe to a full branch, or to a leaf node within the tree. Paths are represented by
|
|
49
|
-
string arrays.
|
|
41
|
+
The data bus provides a method `subscribe` for consumers to subscribe to different types of data. As that data changes, consumers will be notified of changes. Any number of consumers can subscribe for the same data. Data is hierarchical, so you can subscribe to a full branch, or to a leaf node within the tree. Paths are represented by string arrays.
|
|
50
42
|
|
|
51
43
|
```js
|
|
52
44
|
import { itemCountPath } from './dataPaths';
|
|
@@ -73,8 +65,7 @@ bus.publish(itemCountPath, 42);
|
|
|
73
65
|
|
|
74
66
|
### Using providers to produce data on demand
|
|
75
67
|
|
|
76
|
-
Providers can also be registered with the bus to provide data on demand, so that data does not need
|
|
77
|
-
to be gathered unless it is being observed:
|
|
68
|
+
Providers can also be registered with the bus to provide data on demand, so that data does not need to be gathered unless it is being observed:
|
|
78
69
|
|
|
79
70
|
```js
|
|
80
71
|
import { itemCountPath } from './dataPaths';
|
|
@@ -101,10 +92,7 @@ bus.addProvider({
|
|
|
101
92
|
});
|
|
102
93
|
```
|
|
103
94
|
|
|
104
|
-
In this case, the counter will start counting only when subscribers care about a particular type, and will cease to count when
|
|
105
|
-
subscribers unsubscribe. Providers are activated when at least 1 subscriber becomes active for a path, and deactivate when all
|
|
106
|
-
subscribers have unsubscribed to that path. This ensures that providers don't do extra work to provide the same data
|
|
107
|
-
redundantly.
|
|
95
|
+
In this case, the counter will start counting only when subscribers care about a particular type, and will cease to count when subscribers unsubscribe. Providers are activated when at least 1 subscriber becomes active for a path, and deactivate when all subscribers have unsubscribed to that path. This ensures that providers don't do extra work to provide the same data redundantly.
|
|
108
96
|
|
|
109
97
|
### Reading data
|
|
110
98
|
|
|
@@ -134,12 +122,8 @@ This led to the idea of a data-bus; a general mediator for managing subscription
|
|
|
134
122
|
|
|
135
123
|
## Future considerations
|
|
136
124
|
|
|
137
|
-
|
|
125
|
+
**Is there existing tech to accomplish the goals?** What about Fluid? What about lage as a service?
|
|
138
126
|
|
|
139
|
-
|
|
127
|
+
**Should data be represented hierarchically, or is it tag based, or a mix?** Hierarchies are better than flat, but not as robust as tags. Scenario: the logging scenario; I want logging, this specific app, and these various levels, but for a specific area. Maybe this means subscribers/producers should have matchers. Values should just have tags. Maybe tags could have hierarchies (app areas, logging levels). This would be more expensive to resolve notifications - we'd have to linearly filter subscribers based on matchers. Same with producers for pre-publishing transforms. But it would enable more fine-tuned resolution.
|
|
140
128
|
|
|
141
|
-
|
|
142
|
-
data is available as it becomes available. For example, I might care about a list of sessions. One approach is to
|
|
143
|
-
maintain the list separately as an individual item - then get the items one at a time. A better approach would be for
|
|
144
|
-
the data-bus to allow subscribers to subscribe to all children in a node. This would return as a flat array of items.
|
|
145
|
-
We'd want to consider large lists and how they become paginated to avoid perf problems downstream.
|
|
129
|
+
**How do subscribers subscribe to collections rather than individual items?** In some cases, UX needs to list what data is available as it becomes available. For example, I might care about a list of sessions. One approach is to maintain the list separately as an individual item - then get the items one at a time. A better approach would be for the data-bus to allow subscribers to subscribe to all children in a node. This would return as a flat array of items. We'd want to consider large lists and how they become paginated to avoid perf problems downstream.
|
package/lib/addProvider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addProvider.d.ts","sourceRoot":"","sources":["../src/addProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"addProvider.d.ts","sourceRoot":"","sources":["../src/addProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAKhF"}
|
package/lib/addProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addProvider.js","sourceRoot":"","sources":["../src/addProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAmB,EAAE,QAAyB;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { getNode } from './getNode.js';\nimport type { DataBusProvider } from './types/DataBusProvider.js';\nimport type { DataBusState } from './types/DataBusState.js';\n\n/**\n * Adds a provider.\n */\nexport function addProvider(state: DataBusState, provider: DataBusProvider) {\n const { node } = getNode(state, provider.path, true);\n\n node.providers ??= [];\n node.providers.push(provider);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"addProvider.js","sourceRoot":"","sources":["../src/addProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAmB,EAAE,QAAyB;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { getNode } from './getNode.js';\nimport type { DataBusProvider } from './types/DataBusProvider.js';\nimport type { DataBusState } from './types/DataBusState.js';\n\n/**\n * Adds a provider.\n */\nexport function addProvider(state: DataBusState, provider: DataBusProvider): void {\n const { node } = getNode(state, provider.path, true);\n\n node.providers ??= [];\n node.providers.push(provider);\n}\n"]}
|
package/lib/createDataBus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDataBus.js","sourceRoot":"","sources":["../src/createDataBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAiB;QAC1B,IAAI,EAAE,UAAU,EAAE;KACnB,CAAC;IAEF,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,MAAM,GAAG,GAAY;QACnB,OAAO,CAAQ,IAA4B,EAAE,KAAY;YACvD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3D,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAQ,IAA4B;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3D,OAAO,OAAO,CAAQ,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,SAAS,CAAC,IAA4B,EAAE,MAA6B;YACnE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3D,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAE3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"createDataBus.js","sourceRoot":"","sources":["../src/createDataBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAiB;QAC1B,IAAI,EAAE,UAAU,EAAE;KACnB,CAAC;IAEF,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,MAAM,GAAG,GAAY;QACnB,OAAO,CAAQ,IAA4B,EAAE,KAAY;YACvD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3D,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,CAAQ,IAA4B;YACzC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAE3D,OAAO,OAAO,CAAQ,KAAK,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,SAAS,CAAC,IAA4B,EAAE,MAA6B;YACnE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3D,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAE3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAED,eAAe,EAAE,CAAC;YACpB,CAAC,CAAC;YAEF,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,WAAW,CAAC,QAAyB;YACnC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { addProvider } from './addProvider.js';\nimport { createNode } from './createNode.js';\nimport { getData } from './getData.js';\nimport { publish } from './publish.js';\nimport { subscribe } from './subscribe.js';\nimport type { DataBusChangeFunction } from './types/DataBusChangeFunction.js';\nimport type { DataBusProvider } from './types/DataBusProvider.js';\nimport type { DataBusState } from './types/DataBusState.js';\nimport type { DataBus } from './types/DataBus.js';\nimport type { DisposeFunction } from './types/DisposeFunction.js';\nimport type { DataBusPath } from './index.js';\n\n/**\n * Creates a new data bus instance.\n */\nexport function createDataBus(): DataBus {\n const state: DataBusState = {\n root: createNode(),\n };\n\n const disposables: DisposeFunction[] = [];\n\n const bus: DataBus = {\n publish<TData>(path: string[] | DataBusPath, value: TData) {\n const publishPath = Array.isArray(path) ? path : path.path;\n\n return publish(state, bus, publishPath, value);\n },\n\n getData<TData>(path: string[] | DataBusPath) {\n const publishPath = Array.isArray(path) ? path : path.path;\n\n return getData<TData>(state, publishPath);\n },\n\n subscribe(path: string[] | DataBusPath, change: DataBusChangeFunction) {\n const publishPath = Array.isArray(path) ? path : path.path;\n const internalDispose = subscribe(state, bus, publishPath, change);\n\n const dispose = () => {\n const index = disposables.indexOf(dispose);\n\n if (index !== -1) {\n disposables.splice(index, 1);\n }\n\n internalDispose();\n };\n\n disposables.push(dispose);\n\n return dispose;\n },\n\n addProvider(provider: DataBusProvider) {\n addProvider(state, provider);\n },\n\n dispose() {\n for (const dispose of disposables) {\n dispose();\n }\n },\n };\n\n return bus;\n}\n"]}
|
package/lib/createDataPath.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type z from 'zod';
|
|
1
|
+
import type { z } from 'zod/v4-mini';
|
|
2
2
|
import type { DataBusPath } from './types/DataBusPath.js';
|
|
3
3
|
/**
|
|
4
4
|
* Helper to make source typing and paths joined in a structure.
|
|
5
5
|
*/
|
|
6
|
-
export declare function createDataPath<
|
|
6
|
+
export declare function createDataPath<TZodMiniType extends z.ZodMiniType>(options: {
|
|
7
7
|
path: string[];
|
|
8
|
-
type:
|
|
9
|
-
}): DataBusPath<
|
|
8
|
+
type: TZodMiniType;
|
|
9
|
+
}): DataBusPath<TZodMiniType>;
|
|
10
10
|
//# sourceMappingURL=createDataPath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDataPath.d.ts","sourceRoot":"","sources":["../src/createDataPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"createDataPath.d.ts","sourceRoot":"","sources":["../src/createDataPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE;IAC1E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACpB,GAAG,WAAW,CAAC,YAAY,CAAC,CAE5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDataPath.js","sourceRoot":"","sources":["../src/createDataPath.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,cAAc,
|
|
1
|
+
{"version":3,"file":"createDataPath.js","sourceRoot":"","sources":["../src/createDataPath.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAqC,OAGlE;IACC,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import type { z } from 'zod/v4-mini';\nimport type { DataBusPath } from './types/DataBusPath.js';\n\n/**\n * Helper to make source typing and paths joined in a structure.\n */\nexport function createDataPath<TZodMiniType extends z.ZodMiniType>(options: {\n path: string[];\n type: TZodMiniType;\n}): DataBusPath<TZodMiniType> {\n return options;\n}\n"]}
|
package/lib/getNode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getNode.js","sourceRoot":"","sources":["../src/getNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAqB7C,MAAM,UAAU,OAAO,CACrB,KAAmB,EACnB,IAAc,EACd,UAAoB;IAKpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAA4B,KAAK,CAAC,IAAI,CAAC;IAC/C,MAAM,QAAQ,GAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"getNode.js","sourceRoot":"","sources":["../src/getNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAqB7C,MAAM,UAAU,OAAO,CACrB,KAAmB,EACnB,IAAc,EACd,UAAoB;IAKpB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAA4B,KAAK,CAAC,IAAI,CAAC;IAC/C,MAAM,QAAQ,GAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,IAAI;QACJ,QAAQ;KACT,CAAC;AACJ,CAAC","sourcesContent":["import { createNode } from './createNode.js';\nimport type { DataBusNode } from './types/DataBusNode.js';\nimport type { DataBusState } from './types/DataBusState.js';\n\nexport function getNode(\n state: DataBusState,\n path: string[],\n): {\n node: DataBusNode;\n nodePath: DataBusNode[];\n};\n\nexport function getNode(\n state: DataBusState,\n path: string[],\n createPath: true,\n): {\n node: DataBusNode;\n nodePath: DataBusNode[];\n};\n\nexport function getNode(\n state: DataBusState,\n path: string[],\n createPath?: boolean,\n): {\n node: DataBusNode | undefined;\n nodePath: DataBusNode[];\n} {\n let index = 0;\n let node: DataBusNode | undefined = state.root;\n const nodePath: DataBusNode[] = [state.root];\n\n while (node && index < path.length) {\n const pathName = path[index++];\n\n if (!node.children?.[pathName] && createPath) {\n node.children ??= {};\n node.children[pathName] = createNode(pathName);\n }\n\n node = node.children?.[pathName];\n node && nodePath.push(node);\n }\n\n return {\n node,\n nodePath,\n };\n}\n"]}
|
package/lib/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,OAAO,CAAQ,KAAmB,EAAE,GAAY,EAAE,IAAc,EAAE,KAAY;IAC5F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAc,CAAC;IAErC,qGAAqG;IACrG,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,OAAO,CAAQ,KAAmB,EAAE,GAAY,EAAE,IAAc,EAAE,KAAY;IAC5F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAc,CAAC;IAErC,qGAAqG;IACrG,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAsB,CAAC;YAE3F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,KAAK,GAAG,QAAQ,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAEnB,qBAAqB;IACrB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC","sourcesContent":["import type { DataBusState } from './types/DataBusState.js';\nimport type { DataBus } from './types/DataBus.js';\nimport { getNode } from './getNode.js';\n\n/**\n * Publishes data to a given dataPath/Id.\n */\nexport function publish<TData>(state: DataBusState, bus: DataBus, path: string[], value: TData): void {\n const { node, nodePath } = getNode(state, path, true);\n const oldValue = node.value as TData;\n\n // Notify pre-publishing providers and allow them to apply transforms or publish additional metadata.\n for (let i = nodePath.length - 1; i >= 0; i--) {\n nodePath[i].providers?.forEach((provider) => {\n const newValue = provider.onPublish?.({ bus, value, oldValue, path }) as TData | undefined;\n\n if (newValue !== undefined) {\n value = newValue;\n }\n });\n }\n\n node.value = value;\n\n // Notify subscribers\n for (let i = nodePath.length - 1; i >= 0; i--) {\n nodePath[i].subscribers?.forEach((subscriber) => subscriber(value, oldValue, path));\n }\n}\n"]}
|
package/lib/subscribe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,MAAM,UAAU,SAAS,CACvB,KAAmB,EACnB,GAAY,EACZ,IAAc,EACd,MAA6B;IAE7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,mEAAmE;IACnE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,WAAW,KAAK,IAAI,GAAG,EAAyB,CAAC;IACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE7B,0CAA0C;IAC1C,IAAI,KAAK,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,MAAM,UAAU,SAAS,CACvB,KAAmB,EACnB,GAAY,EACZ,IAAc,EACd,MAA6B;IAE7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtD,mEAAmE;IACnE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,WAAW,KAAK,IAAI,GAAG,EAAyB,CAAC;IACtD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE7B,0CAA0C;IAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,8DAA8D;IAC9D,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,CAAC,WAAW,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;YAE7D,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACzC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAEvD,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvC,CAAC;gBAED,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjC,wBAAwB;QACxB,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC;gBAE/D,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,KAAK,EAAE,CAAC;oBAErB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;wBACrD,OAAO,WAAW,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { getNode } from './getNode.js';\nimport type { DataBusChangeFunction } from './types/DataBusChangeFunction.js';\nimport type { DisposeFunction } from './types/DisposeFunction.js';\nimport type { DataBusState } from './types/DataBusState.js';\nimport type { DataBus } from './types/DataBus.js';\n\nexport function subscribe(\n state: DataBusState,\n bus: DataBus,\n path: string[],\n change: DataBusChangeFunction,\n): DisposeFunction {\n const { node, nodePath } = getNode(state, path, true);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { value } = node;\n const pathString = path.join('/');\n\n node.subscribers ??= new Set<DataBusChangeFunction>();\n node.subscribers.add(change);\n\n // Fire the initial change with the value.\n if (value !== undefined) {\n change(value, value, path);\n }\n\n // Activate any deactivated providers available for this path.\n for (let index = nodePath.length - 1; index >= 0; index--) {\n const currentNode = nodePath[index];\n\n if (currentNode.providers?.length) {\n const activeProviders = (currentNode.activeProviders ??= {});\n\n currentNode.providers.forEach((provider) => {\n activeProviders[pathString] ??= { provider, count: 0 };\n\n if (activeProviders[pathString].count === 0) {\n provider.onActivate?.({ path, bus });\n }\n\n activeProviders[pathString].count++;\n });\n }\n }\n\n return () => {\n node.subscribers?.delete(change);\n\n // Deactivate providers.\n for (let index = nodePath.length - 1; index >= 0; index--) {\n const currentNode = nodePath[index];\n\n if (currentNode.providers?.length) {\n const activeRecord = currentNode.activeProviders?.[pathString];\n\n if (activeRecord) {\n activeRecord.count--;\n\n if (!activeRecord.count) {\n activeRecord?.provider.onDeactivate?.({ path, bus });\n delete currentNode.activeProviders?.[pathString];\n }\n }\n }\n }\n };\n}\n"]}
|
package/lib/types/DataBus.d.ts
CHANGED
|
@@ -2,14 +2,14 @@ import type { DataBusChangeFunction } from './DataBusChangeFunction.js';
|
|
|
2
2
|
import type { DisposeFunction } from './DisposeFunction.js';
|
|
3
3
|
import type { DataBusProvider } from './DataBusProvider.js';
|
|
4
4
|
import type { DataBusPath } from './DataBusPath.js';
|
|
5
|
-
import type z from 'zod';
|
|
5
|
+
import type { z } from 'zod/v4-mini';
|
|
6
6
|
export interface DataBus {
|
|
7
7
|
publish<TData = any>(path: string[], value: TData): void;
|
|
8
|
-
publish<TZodData extends z.
|
|
8
|
+
publish<TZodData extends z.ZodMiniType>(path: DataBusPath<TZodData>, value: z.infer<TZodData>): void;
|
|
9
9
|
subscribe<TData = any>(path: string[], callback: DataBusChangeFunction<TData>): DisposeFunction;
|
|
10
|
-
subscribe<TZodData extends z.
|
|
10
|
+
subscribe<TZodData extends z.ZodMiniType>(path: DataBusPath<TZodData>, callback: DataBusChangeFunction<z.infer<TZodData>>): DisposeFunction;
|
|
11
11
|
getData<TData = any>(path: string[]): TData | undefined;
|
|
12
|
-
getData<TZodData extends z.
|
|
12
|
+
getData<TZodData extends z.ZodMiniType>(path: DataBusPath<TZodData>): z.infer<TZodData> | undefined;
|
|
13
13
|
addProvider: (provider: DataBusProvider) => void;
|
|
14
14
|
dispose: () => void;
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBus.d.ts","sourceRoot":"","sources":["../../src/types/DataBus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"DataBus.d.ts","sourceRoot":"","sources":["../../src/types/DataBus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AACrC,MAAM,WAAW,OAAO;IAEtB,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,QAAQ,SAAS,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAGrG,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;IAChG,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC,WAAW,EACtC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC3B,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GACjD,eAAe,CAAC;IAGnB,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;IACxD,OAAO,CAAC,QAAQ,SAAS,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAEpG,WAAW,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAEjD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB"}
|
package/lib/types/DataBus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBus.js","sourceRoot":"","sources":["../../src/types/DataBus.ts"],"names":[],"mappings":"","sourcesContent":["import type { DataBusChangeFunction } from './DataBusChangeFunction.js';\nimport type { DisposeFunction } from './DisposeFunction.js';\nimport type { DataBusProvider } from './DataBusProvider.js';\nimport type { DataBusPath } from './DataBusPath.js';\nimport type z from 'zod';\nexport interface DataBus {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n publish<TData = any>(path: string[], value: TData): void;\n publish<TZodData extends z.
|
|
1
|
+
{"version":3,"file":"DataBus.js","sourceRoot":"","sources":["../../src/types/DataBus.ts"],"names":[],"mappings":"","sourcesContent":["import type { DataBusChangeFunction } from './DataBusChangeFunction.js';\nimport type { DisposeFunction } from './DisposeFunction.js';\nimport type { DataBusProvider } from './DataBusProvider.js';\nimport type { DataBusPath } from './DataBusPath.js';\nimport type { z } from 'zod/v4-mini';\nexport interface DataBus {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n publish<TData = any>(path: string[], value: TData): void;\n publish<TZodData extends z.ZodMiniType>(path: DataBusPath<TZodData>, value: z.infer<TZodData>): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subscribe<TData = any>(path: string[], callback: DataBusChangeFunction<TData>): DisposeFunction;\n subscribe<TZodData extends z.ZodMiniType>(\n path: DataBusPath<TZodData>,\n callback: DataBusChangeFunction<z.infer<TZodData>>,\n ): DisposeFunction;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getData<TData = any>(path: string[]): TData | undefined;\n getData<TZodData extends z.ZodMiniType>(path: DataBusPath<TZodData>): z.infer<TZodData> | undefined;\n\n addProvider: (provider: DataBusProvider) => void;\n\n dispose: () => void;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type z from 'zod';
|
|
2
|
-
export type DataBusPath<TZodData extends z.
|
|
1
|
+
import type { z } from 'zod/v4-mini';
|
|
2
|
+
export type DataBusPath<TZodData extends z.ZodMiniType = z.ZodMiniUnknown> = {
|
|
3
3
|
/**
|
|
4
4
|
* Path to the data within the databus tree.
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBusPath.d.ts","sourceRoot":"","sources":["../../src/types/DataBusPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"DataBusPath.d.ts","sourceRoot":"","sources":["../../src/types/DataBusPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,cAAc,IAAI;IAC3E;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBusPath.js","sourceRoot":"","sources":["../../src/types/DataBusPath.ts"],"names":[],"mappings":"","sourcesContent":["import type z from 'zod';\n\nexport type DataBusPath<TZodData extends z.
|
|
1
|
+
{"version":3,"file":"DataBusPath.js","sourceRoot":"","sources":["../../src/types/DataBusPath.ts"],"names":[],"mappings":"","sourcesContent":["import type { z } from 'zod/v4-mini';\n\nexport type DataBusPath<TZodData extends z.ZodMiniType = z.ZodMiniUnknown> = {\n /**\n * Path to the data within the databus tree.\n */\n path: string[];\n\n /**\n * The type of the data, represented by a zod schema.\n */\n type: TZodData;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/data-bus",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A data bus implementation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
"test": "cloudpack-scripts test"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"zod": "^3.
|
|
27
|
+
"zod": "^3.25.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@ms-cloudpack/eslint-plugin-internal": "
|
|
31
|
-
"@ms-cloudpack/scripts": "
|
|
30
|
+
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|
|
31
|
+
"@ms-cloudpack/scripts": "^0.0.1"
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"lib/**/!(*.test.*)"
|
package/lib/tsdoc-metadata.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// This file is read by tools that parse documentation comments conforming to the TSDoc standard.
|
|
2
|
-
// It should be published with your NPM package. It should not be tracked by Git.
|
|
3
|
-
{
|
|
4
|
-
"tsdocVersion": "0.12",
|
|
5
|
-
"toolPackages": [
|
|
6
|
-
{
|
|
7
|
-
"packageName": "@microsoft/api-extractor",
|
|
8
|
-
"packageVersion": "7.38.1"
|
|
9
|
-
}
|
|
10
|
-
]
|
|
11
|
-
}
|