@dpuse/dpuse-shared 0.3.689 → 0.3.706

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.
Files changed (24) hide show
  1. package/README.md +207 -49
  2. package/dist/{componentConfig.schema-C75xefrQ.js → componentConfig.schema-B7kVKqVP.js} +7 -7
  3. package/dist/dpuse-shared-component.es.js +1 -1
  4. package/dist/dpuse-shared-componentModuleConnector.es.js +38 -38
  5. package/dist/dpuse-shared-componentModuleContext.es.js +6 -6
  6. package/dist/dpuse-shared-componentModulePresenter.es.js +5 -5
  7. package/dist/dpuse-shared-encoding.es.js +4 -6
  8. package/dist/dpuse-shared-errors.es.js +39 -44
  9. package/dist/dpuse-shared-locale.es.js +8 -11
  10. package/dist/dpuse-shared-utilities.es.js +54 -55
  11. package/dist/{moduleConfig.schema-DGEZc-oy.js → moduleConfig.schema-Cvc9QRvr.js} +1 -1
  12. package/dist/types/src/component/module/connector/connectorConfig.schema.d.ts +3 -3
  13. package/dist/types/src/component/module/connector/index.d.ts +12 -12
  14. package/dist/types/src/component/module/context/contextConfig.schema.d.ts +4 -4
  15. package/dist/types/src/component/module/context/index.d.ts +2 -2
  16. package/dist/types/src/component/module/cookbook/index.d.ts +2 -0
  17. package/dist/types/src/component/module/cookbook/recipe/index.d.ts +2 -0
  18. package/dist/types/src/component/module/presenter/index.d.ts +3 -8
  19. package/dist/types/src/component/module/presenter/presentation/index.d.ts +1 -1
  20. package/dist/types/src/component/module/presenter/presenterConfig.schema.d.ts +3 -3
  21. package/dist/types/src/locale/index.d.ts +1 -1
  22. package/dist/types/src/locale/locale.schema.d.ts +4 -4
  23. package/dist/types/src/utilities/index.d.ts +2 -1
  24. package/package.json +5 -5
package/README.md CHANGED
@@ -59,80 +59,185 @@ try {
59
59
  }
60
60
  ```
61
61
 
62
+ Implements the common Data Positioning repository management command set. For more information see [@dpuse/dpuse-development](https://github.com/dpuse/dpuse-development).
63
+
62
64
  ## Architecture
63
65
 
64
- ### Domain Model
66
+ ### Component Hierarchy
65
67
 
66
- `Component` is the foundational base type for all DPUse domain objects. All component types extend `ComponentConfig` and are logically grouped in the following hierarchy. `Module` is a component type whose implementations are dynamically loaded by the host modules (App and API):
68
+ `Component` is the foundational base type for all DPUse components. All component types extend `ComponentConfig` and are logically grouped in the following hierarchy. `Module` is a component type whose implementations are dynamically loaded by the host modules (App and API):
67
69
 
68
- ```
69
- Component
70
- ├── Module
71
- │ ├── Connector
72
- │ │ └── Connection
73
- │ ├── Context
74
- │ │ └── Model
75
- │ │ ├── Dimension
76
- │ │ │ └── DimensionHierarchy
77
- │ │ ├── Entity
78
- │ │ │ ├── DataItem
79
- │ │ │ ├── Event
80
- │ │ │ └── PrimaryMeasure
81
- │ │ └── SecondaryMeasure
82
- │ ├── Engine
83
- │ ├── Presenter
84
- │ │ └── Presentation
85
- │ ├── Recipe
86
- │ └── Tool
87
- ├── DataView
88
- ├── Dimension
89
- └── EventQuery
90
- ```
70
+ ![Schematic](./schematic.svg)
91
71
 
92
72
  ### Cross-cutting Concerns
93
73
 
94
74
  The following are shared across all modules and are not part of the domain model:
95
75
 
96
- | Concern | Description |
97
- | --------- | -------------------------------------------------------------------------------------------------------------------------------- |
98
- | Errors | A typed error hierarchy with serialisation and deserialisation support for transporting errors across API and worker boundaries. |
99
- | Utilities | Common conversion, extraction, formatting and lookup functions. |
100
- | Encoding | Encoding configuration and format support. |
101
- | Locale | Locale identifiers and label types used for internationalisation. |
76
+ | Concern | Description |
77
+ | --------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
78
+ | Encoding | Character encoding types with detection and decodability flags, a static catalogue of all supported encodings loaded from JSON, and an action to retrieve them in sorted order. |
79
+ | Errors | A typed error hierarchy (`DPUseError`, `AppError`, `APIError`, `EngineError`, `ConnectorError`, `FetchError`) with serialisation and deserialisation for transporting errors across API and worker boundaries, plus utilities for normalising unknown throwables, constructing errors from HTTP responses, and suppressing best-effort cleanup errors. |
80
+ | Locale | Locale and flag identifiers, localised label, description and verb types, Valibot schemas for locale fields, supported language constants, and actions for resolving and applying locale-specific values to configuration objects. |
81
+ | Utilities | OData-to-internal type conversion, file path name and extension extraction, number formatting as decimal, whole number, compact size, storage size and duration, and MIME type lookup by file extension. |
102
82
 
103
83
  ## API Reference
104
84
 
105
- This package provides constants, errors, types/interfaces and utilities used by Data Positioning modules.
85
+ ### `@dpuse/dpuse-shared/component`
106
86
 
107
- ### Composables
87
+ | Category | Exports |
88
+ | -------- | ------- |
89
+ | Schema | `componentConfigSchema` |
90
+ | Types | `Component`, `ComponentConfig`, `ComponentReference`, `ComponentStatus`, `ComponentStatusColorId` |
91
+ | Functions | `getComponentStatus(id, localeId?)` |
108
92
 
109
- ### Constants
93
+ ### `@dpuse/dpuse-shared/component/connection`
110
94
 
111
- ### Errors
95
+ | Category | Exports |
96
+ | -------- | ------- |
97
+ | Types | `ConnectionConfig`, `ConnectionAuthorisationConfig`, `ConnectionDescriptionConfig`, `ConnectionNodeConfig`, `DPAFileSystemFileHandle`, `NodeTypeId`, `ObjectColumnConfig`, `StorageTypeId` |
112
98
 
113
- ### Utilities
99
+ ### `@dpuse/dpuse-shared/component/dataView`
114
100
 
115
- Implements the common Data Positioning repository management command set. For more information see [@dpuse/dpuse-development](https://github.com/dpuse/dpuse-development).
101
+ | Category | Exports |
102
+ | -------- | ------- |
103
+ | Constants | `ORDERED_VALUE_DELIMITER_IDS` |
104
+ | Types | `DataViewConfig`, `DataViewInterface`, `PreviewConfig`, `ContentAuditConfig`, `RelationshipsAuditConfig`, `DataFormatId`, `RecordDelimiterId`, `ValueDelimiterId`, `ParsingRecord`, `ParsingResult`, `DataTypeId`, `DataSubtypeId`, `NumericSubtypeId`, `NumericSignId`, `NumericUnitsId`, `StringSubtypeId`, `TemporalSubtypeId`, `InferenceSummary`, `InferenceRecord`, `InferenceResult`, `BooleanInferenceResult`, `NumericInferenceResult`, `BigIntInferenceResult`, `NumberInferenceResult`, `StringInferenceResult`, `TemporalInferenceResult`, `UnknownInferenceResult` |
116
105
 
117
- ## Contributing
106
+ ### `@dpuse/dpuse-shared/component/dimension`
107
+
108
+ | Category | Exports |
109
+ | -------- | ------- |
110
+ | Types | `DimensionConfig` |
111
+
112
+ ### `@dpuse/dpuse-shared/component/eventQuery`
113
+
114
+ | Category | Exports |
115
+ | -------- | ------- |
116
+ | Types | `EventQueryConfig` |
117
+
118
+ ### `@dpuse/dpuse-shared/component/module`
119
+
120
+ | Category | Exports |
121
+ | -------- | ------- |
122
+ | Types | `ModuleConfig`, `ModuleTypeId` |
123
+
124
+ ### `@dpuse/dpuse-shared/component/module/connector`
125
+
126
+ | Category | Exports |
127
+ | -------- | ------- |
128
+ | Schema | `connectorConfigSchema` |
129
+ | Constants | `CONNECTOR_ACTION_NAME_MAP` |
130
+ | Types | `ConnectorInterface`, `ConnectorActionName`, `ConnectorConstructor`, `ConnectorUtilities`, `ConnectorConfig`, `AuditObjectContentOptions`, `AuditObjectContentOptions1`, `AuditObjectContentResult`, `AuditObjectContentResult1`, `CreateObjectOptions`, `DescribeConnectionOptions`, `DropObjectOptions`, `FindObjectOptions`, `FindObjectResult`, `GetReadableStreamOptions`, `GetRecordOptions`, `GetRecordResult`, `ListNodesOptions`, `ListNodesResult`, `PreviewObjectOptions`, `RecordRetrievalTypeId`, `RemoveRecordsOptions`, `RetrieveChunksOptions`, `RetrieveRecordsOptions`, `RetrieveRecordsSummary`, `UpsertRecordsOptions` |
131
+ | Functions | `constructConnectorCategoryConfig(id, localeId?)`, `getConnectorActionsTable(supported)` |
132
+
133
+ ### `@dpuse/dpuse-shared/component/module/context`
134
+
135
+ | Category | Exports |
136
+ | -------- | ------- |
137
+ | Schema | `contextConfigSchema` |
138
+ | Types | `ContextInterface`, `ContextConfig`, `ContextActionName`, `ContextModelGroupConfig`, `ListContextOptions`, `ListContextResult` |
139
+
140
+ ### `@dpuse/dpuse-shared/component/module/context/model`
141
+
142
+ | Category | Exports |
143
+ | -------- | ------- |
144
+ | Types | `ContextModelConfig`, `ContextModelDimensionGroupConfig`, `ContextModelEntityGroupConfig`, `ContextModelSecondaryMeasureGroupConfig` |
145
+
146
+ ### `@dpuse/dpuse-shared/component/module/context/model/dimension`
147
+
148
+ | Category | Exports |
149
+ | -------- | ------- |
150
+ | Types | `ContextModelDimensionConfig`, `ContextModelDimensionHierarchyConfig` |
151
+
152
+ ### `@dpuse/dpuse-shared/component/module/context/model/entity`
153
+
154
+ | Category | Exports |
155
+ | -------- | ------- |
156
+ | Types | `ContextModelEntityConfig` |
157
+
158
+ ### `@dpuse/dpuse-shared/component/module/context/model/entity/dataItem`
159
+
160
+ | Category | Exports |
161
+ | -------- | ------- |
162
+ | Types | `ContextModelEntityDataItemConfig` |
163
+
164
+ ### `@dpuse/dpuse-shared/component/module/context/model/entity/event`
165
+
166
+ | Category | Exports |
167
+ | -------- | ------- |
168
+ | Types | `ContextModelEntityEventConfig` |
169
+
170
+ ### `@dpuse/dpuse-shared/component/module/context/model/entity/primaryMeasure`
171
+
172
+ | Category | Exports |
173
+ | -------- | ------- |
174
+ | Types | `ContextModelEntityPrimaryMeasureConfig` |
175
+
176
+ ### `@dpuse/dpuse-shared/component/module/context/model/secondaryMeasure`
177
+
178
+ | Category | Exports |
179
+ | -------- | ------- |
180
+ | Types | `ContextModelSecondaryMeasureConfig` |
181
+
182
+ ### `@dpuse/dpuse-shared/component/module/engine`
183
+
184
+ | Category | Exports |
185
+ | -------- | ------- |
186
+ | Types | `EngineConfig`, `EngineRuntime`, `EngineWorker`, `EngineInitialiseOptions`, `EngineAuthActionOptions`, `EngineConnectorActionOptions`, `EngineContextActionOptions`, `EngineCallbackData` |
187
+
188
+ ### `@dpuse/dpuse-shared/component/module/presenter`
189
+
190
+ | Category | Exports |
191
+ | -------- | ------- |
192
+ | Schema | `presenterConfigSchema` |
193
+ | Types | `PresenterInterface`, `PresenterActionName`, `PresenterConfig` |
118
194
 
119
- ## Changelog
195
+ ### `@dpuse/dpuse-shared/component/module/presenter/presentation`
120
196
 
121
- ## Project Health
197
+ | Category | Exports |
198
+ | -------- | ------- |
199
+ | Types | `PresentationConfig`, `PresentationVisualConfig`, `PresentationVisualContentConfig`, `PresentationVisualViewConfig`, `PresentationCategoryId`, `PresentationView`, `PresentationVisualCartesianChartViewConfig`, `PresentationCartesianTypeId`, `PresentationVisualChordDiagramViewConfig`, `PresentationVisualPeriodFlowBoundariesChartViewConfig`, `PresentationVisualPolarChartViewConfig`, `PresentationPolarTypeId`, `PresentationVisualRangeChartViewConfig`, `PresentationRangeTypeId`, `PresentationVisualSankeyDiagramViewConfig`, `PresentationVisualStreamGraphViewConfig`, `PresentationVisualValueTableViewConfig` |
122
200
 
123
- ### Bundle Analysis Reports
201
+ ### `@dpuse/dpuse-shared/component/module/tool`
124
202
 
125
- The Bundle Analysis Report provides a detailed breakdown of the bundle's composition and module sizes, helping to identify which modules contribute most to the final build. It is generated automatically on each release using the npm package `rollup-plugin-visualizer`.
203
+ | Category | Exports |
204
+ | -------- | ------- |
205
+ | Types | `ToolConfig` |
206
+ | Functions | `loadTool<T>(toolConfigs, toolId)` |
126
207
 
127
- [View the Bundle Analysis Report](https://dpuse.github.io/dpuse-shared/stats.html)
208
+ ### `@dpuse/dpuse-shared/encoding`
128
209
 
129
- ### Dependency Check Report
210
+ | Category | Exports |
211
+ | -------- | ------- |
212
+ | Constants | `encodingConfigMap` |
213
+ | Types | `EncodingConfig`, `EncodingTypeConfig` |
214
+ | Functions | `getEncodingTypeConfigs(localeId?)` |
130
215
 
131
- ### Dependency Licenses
216
+ ### `@dpuse/dpuse-shared/errors`
132
217
 
133
- The following table lists top-level production and peer dependencies. All these dependencies (including transitive ones) have been recursively verified to use Apache-2.0, BSD-2-Clause, CC0-1.0, or MIT—commercially friendly licenses with minimal restrictions. Developers cloning this repository should independently verify dev and optional dependencies; users of the uploaded library are covered by these checks. We do not include unlicensed dependencies. Used to support development activity and not released as part of the production release. Check if you clone. We use the `npm` packages [license-report](https://www.npmjs.com/package/license-report), [license-report-check](https://www.npmjs.com/package/license-report-check) and [license-report-recursive](https://www.npmjs.com/package/license-report-recursive) to identify dependency licenses.
218
+ | Category | Exports |
219
+ | -------- | ------- |
220
+ | Types | `SerialisedError` |
221
+ | Classes | `DPUseError`, `AppError`, `APIError`, `EngineError`, `ConnectorError`, `FetchError` |
222
+ | Functions | `serialiseError(error?)`, `unserialiseError(serialisedErrors)`, `buildFetchError(response, message, locator)`, `normalizeToError(value)`, `concatenateSerialisedErrorMessages(serialisedErrors)`, `ignoreErrors(action)` |
134
223
 
135
- The following table lists top-level production and peer dependencies. All these dependencies (including transitive ones) have been recursively verified to use Apache-2.0, BSD-2-Clause, CC0-1.0, or MIT—commercially friendly licenses with minimal restrictions. Developers cloning this repository should independently verify dev and optional dependencies; users of the published library are covered by these checks. We do not include unlicensed dependencies. Used to support development activity and not released as part of the production release. Check if you clone. We use the `npm` packages [license-report](https://www.npmjs.com/package/license-report), [license-report-check](https://www.npmjs.com/package/license-report-check) and [license-report-recursive](https://www.npmjs.com/package/license-report-recursive) to identify dependency licenses.
224
+ ### `@dpuse/dpuse-shared/locale`
225
+
226
+ | Category | Exports |
227
+ | -------- | ------- |
228
+ | Constants | `DEFAULT_LOCALE_ID`, `SUPPORTED_LANGUAGES` |
229
+ | Types | `FlagId`, `LocaleId`, `LocaleLabel`, `LocaleDescription`, `LocaleLabelMap`, `LocalisedConfig<T>` |
230
+ | Functions | `createLabelMap(labels)`, `localiseConfig(config, localeId)`, `localiseConfigs(configs, localeId, isResultSorted?)`, `resolveLabel(labels, localeId, fallbackLocaleId?)` |
231
+
232
+ ### `@dpuse/dpuse-shared/utilities`
233
+
234
+ | Category | Exports |
235
+ | -------- | ------- |
236
+ | Functions | `convertODataTypeIdToUsageTypeId(oDataTypeId)`, `extractNameFromPath(itemPath)`, `extractExtensionFromPath(itemPath)`, `formatNumberAsDecimalNumber(number?, decimalPlaces?, minimumFractionDigits?, locale?)`, `formatNumberAsSize(number?, decimalPlaces?)`, `formatNumberAsStorageSize(number?, decimalPlaces?)`, `formatNumberAsDuration(number?, stopAt?)`, `formatNumberAsWholeNumber(number?, locale?)`, `lookupMimeTypeForExtension(extension?)` |
237
+
238
+ ## Dependency Licenses
239
+
240
+ License data is collected automatically on each release using [license-checker](https://github.com/RSeidelsohn/license-checker-rseidelsohn). The following table lists all production dependencies. These dependencies (including transitive ones) have been checked and confirmed to use Apache-2.0, BSD-3-Clause, CC0-1.0, or MIT — all permissive, commercially-friendly licenses. Developers cloning this repository should independently verify development dependencies; users of the uploaded library are covered by these checks.
136
241
 
137
242
  <!-- DEPENDENCY_LICENSES_START -->
138
243
 
@@ -140,12 +245,65 @@ The following table lists top-level production and peer dependencies. All these
140
245
  | ---- | :-----: | ---------- | -------- |
141
246
 
142
247
  <!-- DEPENDENCY_LICENSES_END -->
248
+
249
+ ### Dependency Tree
250
+
251
+ The dependency tree below lists every package in this project — direct and transitive — along with its installed version, release date, and update status. Packages flagged ❗ have a newer version available; ⚠️ indicates a package that hasn't been updated in the last 6 months or longer. Neither flag necessarily indicates a problem: we let new releases stabilise before upgrading, and some packages are simply mature and stable, requiring no active development.
252
+
143
253
  <!-- DEPENDENCY_TREE_START -->
144
254
 
145
255
  <!-- DEPENDENCY_TREE_END -->
146
256
 
147
- **Installed dependencies are kept up-to-date with latest releases.**
257
+ ## Bundle Analysis
258
+
259
+ The Bundle Analysis Reports provide detailed breakdowns of the bundle's composition and module sizes, helping to identify which modules contribute most to the final build. Two complementary reports are generated automatically on each release:
260
+
261
+ - **[rollup-plugin-visualizer](https://github.com/btd/rollup-plugin-visualizer/tree/master)** — generates a static treemap/sunburst view based on pre-build module estimates, useful for a quick visual scan of overall bundle composition, including CSS assets.
262
+ - **[Sonda](https://sonda.dev/)** — analyses final source maps to capture the effects of tree-shaking and minification, rather than relying on pre-build estimates. This gives a more accurate picture of what's actually shipped, traces module-level dependencies, and shows the size of each module after tree-shaking and minification for more precise insight into what's driving bundle size. Note: Sonda's Vite reports currently exclude CSS files, since Vite does not generate source maps for CSS.
263
+
264
+ [View the rollup-plugin-visualizer Report](https://dpuse.github.io/dpuse-development/bundle-analysis-reports/rollup-visualiser/index.html).
265
+
266
+ [View the Sonda Report](https://dpuse.github.io/dpuse-development/bundle-analysis-reports/sonda/index.html).
267
+
268
+ ## Security & Quality
269
+
270
+ ### CodeQL
271
+
272
+ [CodeQL](https://github.com/dpuse/dpuse-shared/security/code-scanning) static analysis runs on every push to `main` and on a weekly schedule, scanning TypeScript, JavaScript, Rust, and GitHub Actions workflow files for security vulnerabilities and coding errors.
273
+
274
+ ### SonarCloud
275
+
276
+ [SonarCloud](https://sonarcloud.io/summary/new_code?id=dpuse_dpuse-shared) performs continuous code quality and security analysis on every push, detecting bugs, code smells, and security vulnerabilities in the TypeScript source.
277
+
278
+ ### Vulnerability Scanning
279
+
280
+ Two complementary tools continuously monitor dependencies for known vulnerabilities:
281
+
282
+ - **[GitHub Dependabot](https://docs.github.com/en/code-security/dependabot)** automatically raises pull requests to update vulnerable dependencies, drawing on the GitHub Advisory Database which combines NVD and npm-specific advisories.
283
+ - **npm audit** runs on every push to `main` via the CI workflow, failing the build if any high or critical severity vulnerabilities are detected.
284
+
285
+ ### Supply Chain Security
286
+
287
+ [Socket.dev](https://socket.dev) monitors all dependencies for supply chain risk — detecting malicious packages, dependency confusion, typosquatting, and suspicious behaviour that may not yet have a CVE.
288
+
289
+ ### Reporting Vulnerabilities
290
+
291
+ Please do not open public GitHub issues for security vulnerabilities. Use [GitHub private vulnerability reporting](https://github.com/dpuse/dpuse-shared/security/advisories/new) instead. See [SECURITY.md](./SECURITY.md) for the full disclosure policy, contact details, and expected response times.
292
+
293
+ ### OpenSSF 🚧
294
+
295
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/dpuse/dpuse-shared/badge)](https://scorecard.dev/viewer/?uri=github.com/dpuse/dpuse-shared)
296
+
297
+ This project is working towards the [OpenSSF Best Practices](https://www.bestpractices.dev) Passing badge, a self-certification covering security policy, vulnerability reporting, build processes, code quality, and more. The [OpenSSF Scorecard](https://scorecard.dev/viewer/?uri=github.com/dpuse/dpuse-shared) provides an independent automated assessment of the project's security practices and is an ongoing area of improvement.
298
+
299
+ ## Contributing
300
+
301
+ This repository is maintained solely by its owner and does not accept external contributions. It is part of a larger closed application suite and is published for informational and cloning purposes only.
302
+
303
+ If you find a security vulnerability, see [Reporting Vulnerabilities](#reporting-vulnerabilities). For bugs, inconsistencies, or other feedback, you are welcome to [open a GitHub issue](https://github.com/dpuse/dpuse-shared/issues) — feedback is read, but responses and fixes are at the maintainer's discretion.
148
304
 
149
305
  ## License
150
306
 
151
- [MIT](./LICENSE) © 2026 Data Positioning Pty Ltd
307
+ This project is licensed under the MIT License, permitting free use, modification, and distribution.
308
+
309
+ [MIT](./LICENSE) © 2026-present Jonathan Terrell
@@ -382,11 +382,11 @@ var O = (e) => /* @__PURE__ */ D(e.map((e) => /* @__PURE__ */ y(e))), k = /* @__
382
382
  en: /* @__PURE__ */ T(),
383
383
  es: /* @__PURE__ */ T()
384
384
  }), A = /* @__PURE__ */ S({
385
- en: /* @__PURE__ */ C(/* @__PURE__ */ T()),
386
- es: /* @__PURE__ */ C(/* @__PURE__ */ T())
387
- }), j = /* @__PURE__ */ S({
388
385
  en: /* @__PURE__ */ C(/* @__PURE__ */ _(/* @__PURE__ */ T())),
389
386
  es: /* @__PURE__ */ C(/* @__PURE__ */ _(/* @__PURE__ */ T()))
387
+ }), j = /* @__PURE__ */ S({
388
+ en: /* @__PURE__ */ C(/* @__PURE__ */ T()),
389
+ es: /* @__PURE__ */ C(/* @__PURE__ */ T())
390
390
  }), M = O([
391
391
  "app",
392
392
  "connector",
@@ -431,8 +431,8 @@ var O = (e) => /* @__PURE__ */ D(e.map((e) => /* @__PURE__ */ y(e))), k = /* @__
431
431
  label: /* @__PURE__ */ T()
432
432
  }), I = /* @__PURE__ */ S({
433
433
  id: /* @__PURE__ */ T(),
434
- label: A,
435
- description: j,
434
+ label: j,
435
+ description: A,
436
436
  icon: /* @__PURE__ */ b(/* @__PURE__ */ T()),
437
437
  iconDark: /* @__PURE__ */ b(/* @__PURE__ */ T()),
438
438
  iconNeutral: /* @__PURE__ */ b(/* @__PURE__ */ T()),
@@ -440,8 +440,8 @@ var O = (e) => /* @__PURE__ */ D(e.map((e) => /* @__PURE__ */ y(e))), k = /* @__
440
440
  path: /* @__PURE__ */ T()
441
441
  }), L = {
442
442
  id: /* @__PURE__ */ T(),
443
- label: A,
444
- description: j,
443
+ label: j,
444
+ description: A,
445
445
  firstCreatedAt: /* @__PURE__ */ b(/* @__PURE__ */ x()),
446
446
  icon: /* @__PURE__ */ b(/* @__PURE__ */ T()),
447
447
  iconDark: /* @__PURE__ */ b(/* @__PURE__ */ T()),
@@ -1,5 +1,5 @@
1
1
  import "./dpuse-shared-locale.es.js";
2
- import { n as e } from "./componentConfig.schema-C75xefrQ.js";
2
+ import { n as e } from "./componentConfig.schema-B7kVKqVP.js";
3
3
  //#region src/component/index.ts
4
4
  var t = [
5
5
  {
@@ -1,13 +1,28 @@
1
1
  import { createLabelMap as e, resolveLabel as t } from "./dpuse-shared-locale.es.js";
2
- import { a as n, c as r, d as i, f as a, i as o, l as s, m as c, o as l, p as u, s as d, u as f } from "./componentConfig.schema-C75xefrQ.js";
3
- import { t as p } from "./moduleConfig.schema-DGEZc-oy.js";
2
+ import { a as n, c as r, d as i, f as a, i as o, l as s, m as c, o as l, p as u, s as d, u as f } from "./componentConfig.schema-B7kVKqVP.js";
3
+ import { t as p } from "./moduleConfig.schema-Cvc9QRvr.js";
4
4
  //#region src/component/module/connector/connectorConfig.schema.ts
5
5
  var m = n([
6
+ "abortOperation",
7
+ "auditObjectContent",
8
+ "createObject",
9
+ "describeConnection",
10
+ "dropObject",
11
+ "findObject",
12
+ "getReadableStream",
13
+ "getRecord",
14
+ "listNodes",
15
+ "previewObject",
16
+ "removeRecords",
17
+ "retrieveChunks",
18
+ "retrieveRecords",
19
+ "upsertRecords"
20
+ ]), h = n([
6
21
  "application",
7
22
  "curatedDataset",
8
23
  "database",
9
24
  "fileStore"
10
- ]), h = i({ label: o }), g = i({
25
+ ]), g = i({ label: o }), _ = i({
11
26
  authMethodId: n([
12
27
  "apiKey",
13
28
  "disabled",
@@ -20,28 +35,13 @@ var m = n([
20
35
  label: a(o),
21
36
  maxConnectionCount: s(f()),
22
37
  params: a(l(u(c(), c())))
23
- }), _ = n([
24
- "abortOperation",
25
- "auditObjectContent",
26
- "createObject",
27
- "describeConnection",
28
- "dropObject",
29
- "findObject",
30
- "getReadableStream",
31
- "getRecord",
32
- "listNodes",
33
- "previewObject",
34
- "removeRecords",
35
- "retrieveChunks",
36
- "retrieveRecords",
37
- "upsertRecords"
38
- ]), v = i({
39
- ...p,
38
+ }), v = i({
40
39
  typeId: r("connector"),
41
- category: s(h),
42
- categoryId: m,
43
- implementations: u(c(), g),
44
- operations: l(_),
40
+ ...p,
41
+ actionNames: l(m),
42
+ category: s(g),
43
+ categoryId: h,
44
+ implementations: u(c(), _),
45
45
  vendorAccountURL: s(c()),
46
46
  vendorDocumentationURL: s(c()),
47
47
  vendorHomeURL: s(c())
@@ -74,16 +74,7 @@ var m = n([
74
74
  es: "Almacén de Archivos"
75
75
  }
76
76
  }
77
- ], b = (n, r = "en") => {
78
- let i = y.find((e) => e.id === n);
79
- return i ? {
80
- label: t(e(i.label), r) ?? i.id,
81
- description: []
82
- } : {
83
- label: n,
84
- description: []
85
- };
86
- }, x = {
77
+ ], b = {
87
78
  abortOperation: "Abort Operation",
88
79
  auditObjectContent: "Audit Object Content",
89
80
  createObject: "Create Object",
@@ -98,12 +89,21 @@ var m = n([
98
89
  retrieveChunks: "Retrieve Chunks",
99
90
  retrieveRecords: "Retrieve Records",
100
91
  upsertRecords: "Upsert Records"
92
+ }, x = (n, r = "en") => {
93
+ let i = y.find((e) => e.id === n);
94
+ return i ? {
95
+ label: t(e(i.label), r) ?? i.id,
96
+ description: []
97
+ } : {
98
+ label: n,
99
+ description: []
100
+ };
101
101
  };
102
102
  function S(e) {
103
- let t = new Set(e), n = "| Operation | Supported |\n";
104
- n += "| --------- | --------- |\n";
105
- for (let e of Object.keys(x)) n += `| ${x[e]} | ${t.has(e) ? "✓" : ""} |\n`;
103
+ let t = new Set(e), n = "| Name | Supported |\n";
104
+ n += "| ---- | :-------: |\n";
105
+ for (let e of Object.keys(b)) n += `| ${b[e]} | ${t.has(e) ? "✓" : ""} |\n`;
106
106
  return n;
107
107
  }
108
108
  //#endregion
109
- export { x as CONNECTOR_OPERATION_LABELS, v as connectorConfigSchema, b as constructConnectorCategoryConfig, S as generateConnectorOperationsTable };
109
+ export { b as CONNECTOR_ACTION_NAME_MAP, v as connectorConfigSchema, x as constructConnectorCategoryConfig, S as getConnectorActionsTable };
@@ -1,16 +1,16 @@
1
- import { a as e, c as t, d as n, o as r, r as i, t as a, u as o } from "./componentConfig.schema-C75xefrQ.js";
2
- import { t as s } from "./moduleConfig.schema-DGEZc-oy.js";
1
+ import { a as e, c as t, d as n, o as r, r as i, t as a, u as o } from "./componentConfig.schema-B7kVKqVP.js";
2
+ import { t as s } from "./moduleConfig.schema-Cvc9QRvr.js";
3
3
  //#region src/component/module/context/contextConfig.schema.ts
4
4
  var c = n({
5
- ...a,
6
5
  typeId: t("contextModelGroup"),
6
+ ...a,
7
7
  modelRefs: r(i),
8
8
  order: o()
9
9
  }), l = e(["listContextFocuses"]), u = n({
10
- ...s,
11
10
  typeId: t("context"),
12
- models: r(c),
13
- operations: r(l)
11
+ ...s,
12
+ actionNames: r(l),
13
+ models: r(c)
14
14
  });
15
15
  //#endregion
16
16
  export { u as contextConfigSchema };
@@ -1,15 +1,15 @@
1
- import { a as e, c as t, d as n, o as r, r as i } from "./componentConfig.schema-C75xefrQ.js";
2
- import { t as a } from "./moduleConfig.schema-DGEZc-oy.js";
1
+ import { a as e, c as t, d as n, o as r, r as i } from "./componentConfig.schema-B7kVKqVP.js";
2
+ import { t as a } from "./moduleConfig.schema-Cvc9QRvr.js";
3
3
  //#region src/component/module/presenter/presenterConfig.schema.ts
4
4
  var o = e([
5
5
  "list",
6
6
  "render",
7
7
  "setColorMode"
8
8
  ]), s = n({
9
- ...a,
10
9
  typeId: t("presenter"),
11
- presentations: r(i),
12
- operations: r(o)
10
+ ...a,
11
+ actionNames: r(o),
12
+ presentations: r(i)
13
13
  });
14
14
  //#endregion
15
15
  export { s as presenterConfigSchema };
@@ -346,12 +346,10 @@ var e = {
346
346
  }
347
347
  };
348
348
  function t(t = "en") {
349
- let n = [];
350
- for (let [, t] of Object.entries(e)) n.push({
351
- ...t,
352
- label: t.label || t.id
353
- });
354
- return n.toSorted((e, t) => e.groupLabel.localeCompare(t.groupLabel) || e.label.localeCompare(t.label));
349
+ return Array.from(Object.values(e), (e) => ({
350
+ ...e,
351
+ label: e.label || e.id
352
+ })).toSorted((e, t) => e.groupLabel.localeCompare(t.groupLabel) || e.label.localeCompare(t.label));
355
353
  }
356
354
  //#endregion
357
355
  export { e as encodingConfigMap, t as getEncodingTypeConfigs };
@@ -59,12 +59,48 @@ function d(e) {
59
59
  let t = /* @__PURE__ */ new Set(), n = [], r = u(e);
60
60
  for (; r != null && !t.has(r);) {
61
61
  t.add(r);
62
- let [e, i] = f(r);
62
+ let [e, i] = g(r);
63
63
  /(?:\.{3}|[.!?])$/.test(e.message) || (e.message += "."), n.push(e), r = i;
64
64
  }
65
65
  return n;
66
66
  }
67
67
  function f(e) {
68
+ if (e.length === 0) return;
69
+ let t;
70
+ for (let n of e.toReversed()) {
71
+ let e = m(n, t);
72
+ n.stack !== void 0 && (e.stack = n.stack), t = e;
73
+ }
74
+ return t;
75
+ }
76
+ function p(e) {
77
+ let t;
78
+ try {
79
+ t = JSON.stringify(e);
80
+ } catch {
81
+ t = typeof e == "symbol" ? e.description ?? "Unknown error" : typeof e == "bigint" ? e.toString() : "Unknown error";
82
+ }
83
+ return t === "" && (t = "Unknown error"), t;
84
+ }
85
+ function m(e, t) {
86
+ switch (e.name) {
87
+ case "APIError": return new r(e.message, e.locator, e.data, { cause: t });
88
+ case "AppError": return new n(e.message, e.locator, e.data, { cause: t });
89
+ case "ConnectorError": return new a(e.message, e.locator, e.data, { cause: t });
90
+ case "EngineError": return new i(e.message, e.locator, e.data, { cause: t });
91
+ case "FetchError": return new o(e.message, e.locator, e.data, { cause: t });
92
+ default: {
93
+ let n = e.name;
94
+ return new class extends Error {
95
+ name = n;
96
+ }(e.message, { cause: t });
97
+ }
98
+ }
99
+ }
100
+ function h(t) {
101
+ if (!(t == null || t === "")) return t.length > e ? `${t.slice(0, e)}... [truncated]` : t;
102
+ }
103
+ function g(e) {
68
104
  let n = e.cause == null ? null : u(e.cause);
69
105
  if (e instanceof t) return [{
70
106
  data: e.data,
@@ -83,51 +119,10 @@ function f(e) {
83
119
  }, n] : [{
84
120
  data: r,
85
121
  locator: "",
86
- message: m(e),
122
+ message: p(e),
87
123
  name: "Error",
88
124
  stack: void 0
89
125
  }, null];
90
126
  }
91
- function p(e) {
92
- if (e.length === 0) return;
93
- let t;
94
- for (let s of e.toReversed()) {
95
- let e;
96
- switch (s.name) {
97
- case "APIError":
98
- e = new r(s.message, s.locator, s.data, { cause: t });
99
- break;
100
- case "AppError":
101
- e = new n(s.message, s.locator, s.data, { cause: t });
102
- break;
103
- case "ConnectorError":
104
- e = new a(s.message, s.locator, s.data, { cause: t });
105
- break;
106
- case "EngineError":
107
- e = new i(s.message, s.locator, s.data, { cause: t });
108
- break;
109
- case "FetchError":
110
- e = new o(s.message, s.locator, s.data, { cause: t });
111
- break;
112
- default:
113
- e = Error(s.message, { cause: t }), e.name = s.name;
114
- break;
115
- }
116
- s.stack !== void 0 && (e.stack = s.stack), t = e;
117
- }
118
- return t;
119
- }
120
- function m(e) {
121
- let t;
122
- try {
123
- t = JSON.stringify(e);
124
- } catch {
125
- t = typeof e == "symbol" ? e.description ?? "Unknown error" : typeof e == "bigint" ? e.toString() : "Unknown error";
126
- }
127
- return t === "" && (t = "Unknown error"), t;
128
- }
129
- function h(t) {
130
- if (!(t == null || t === "")) return t.length > e ? `${t.slice(0, e)}... [truncated]` : t;
131
- }
132
127
  //#endregion
133
- export { r as APIError, n as AppError, a as ConnectorError, t as DPUseError, i as EngineError, o as FetchError, s as buildFetchError, c as concatenateSerialisedErrorMessages, l as ignoreErrors, u as normalizeToError, d as serialiseError, p as unserialiseError };
128
+ export { r as APIError, n as AppError, a as ConnectorError, t as DPUseError, i as EngineError, o as FetchError, s as buildFetchError, c as concatenateSerialisedErrorMessages, l as ignoreErrors, u as normalizeToError, d as serialiseError, f as unserialiseError };
@@ -11,30 +11,27 @@ var e = "en", t = [{
11
11
  function n(e) {
12
12
  return new Map(Object.entries(e));
13
13
  }
14
- function r(e) {
15
- return Array.isArray(e) ? e : e == null ? [] : [e];
16
- }
17
- function i(e, t) {
14
+ function r(e, t) {
18
15
  return {
19
16
  ...e,
20
17
  label: e.label[t] ?? e.id,
21
- description: r(e.description[t]),
18
+ description: e.description[t],
22
19
  verb: e.verb?.[t] ?? void 0
23
20
  };
24
21
  }
25
- function a(e, t, n = !1) {
26
- let i = e.map((e) => ({
22
+ function i(e, t, n = !1) {
23
+ let r = e.map((e) => ({
27
24
  ...e,
28
25
  label: e.label[t] ?? e.id,
29
- description: r(e.description[t]),
26
+ description: e.description[t],
30
27
  verb: e.verb?.[t] ?? void 0
31
28
  }));
32
- return n ? i.toSorted((e, t) => e.label.localeCompare(t.label) || e.id.localeCompare(t.id)) : i;
29
+ return n ? r.toSorted((e, t) => e.label.localeCompare(t.label) || e.id.localeCompare(t.id)) : r;
33
30
  }
34
- function o(e, t, n = "en") {
31
+ function a(e, t, n = "en") {
35
32
  let r = e.get(t);
36
33
  if (r !== void 0) return r;
37
34
  if (n !== t) return e.get(n);
38
35
  }
39
36
  //#endregion
40
- export { e as DEFAULT_LOCALE_ID, t as SUPPORTED_LANGUAGES, n as createLabelMap, i as localiseConfig, a as localiseConfigs, o as resolveLabel };
37
+ export { e as DEFAULT_LOCALE_ID, t as SUPPORTED_LANGUAGES, n as createLabelMap, r as localiseConfig, i as localiseConfigs, a as resolveLabel };
@@ -1,6 +1,32 @@
1
1
  //#region src/utilities/index.ts
2
- var e = "en-US", t = /* @__PURE__ */ new Map();
3
- function n(e) {
2
+ var e = [
3
+ [
4
+ "days",
5
+ 864e5,
6
+ (e) => e === 1 ? "1 day" : `${u(e)} days`
7
+ ],
8
+ [
9
+ "hrs",
10
+ 36e5,
11
+ (e) => e === 1 ? "1 hr" : `${u(e)} hrs`
12
+ ],
13
+ [
14
+ "mins",
15
+ 6e4,
16
+ (e) => e === 1 ? "1 min" : `${u(e)} mins`
17
+ ],
18
+ [
19
+ "secs",
20
+ 1e3,
21
+ (e) => e === 1 ? "1 sec" : `${u(e)} secs`
22
+ ],
23
+ [
24
+ "ms",
25
+ 0,
26
+ (e) => `${u(e)} ms`
27
+ ]
28
+ ], t = "en-GB", n = /* @__PURE__ */ new Map();
29
+ function r(e) {
4
30
  switch (e) {
5
31
  case "Edm.Binary": return "unknown";
6
32
  case "Edm.Boolean": return "boolean";
@@ -20,22 +46,22 @@ function n(e) {
20
46
  default: return "unknown";
21
47
  }
22
48
  }
23
- function r(e) {
49
+ function i(e) {
24
50
  if (e) {
25
51
  let t = e.lastIndexOf("/") + 1, n = e.lastIndexOf(".");
26
52
  return n <= t || n === -1 ? e : e.slice(0, Math.max(0, n));
27
53
  }
28
54
  }
29
- function i(e) {
55
+ function a(e) {
30
56
  if (e) {
31
57
  let t = e.lastIndexOf("/") + 1, n = e.lastIndexOf(".");
32
58
  if (n <= t) return;
33
59
  if (n !== -1) return e.slice(Math.max(0, n + 1));
34
60
  }
35
61
  }
36
- function a(n, r = 2, i = r, a = e) {
37
- if (n == null) return "";
38
- let o = `${a}decimal${String(r)}.${String(i)}`, s = t.get(o);
62
+ function o(e, r = 2, i = r, a = t) {
63
+ if (e == null) return "";
64
+ let o = `${a}decimal${String(r)}.${String(i)}`, s = n.get(o);
39
65
  return s || (s = new Intl.NumberFormat(a, {
40
66
  localeMatcher: "best fit",
41
67
  maximumFractionDigits: r,
@@ -43,57 +69,30 @@ function a(n, r = 2, i = r, a = e) {
43
69
  minimumIntegerDigits: 1,
44
70
  style: "decimal",
45
71
  useGrouping: !0
46
- }), t.set(o, s)), s.format(n);
47
- }
48
- function o(e, t = 1) {
49
- return e == null ? "" : e < 1e3 ? u(e) : e < 1e6 ? `${a(e / 1e3, t, 0)}K` : e < 1e9 ? `${a(e / 1e6, t, 0)}M` : e < 0xe8d4a51000 ? `${a(e / 1e9, t, 0)}B` : `${a(e / 0xe8d4a51000, t, 0)}T`;
72
+ }), n.set(o, s)), s.format(e);
50
73
  }
51
74
  function s(e, t = 1) {
52
- return e == null ? "" : e === 1 ? "1 byte" : e < 1024 ? `${u(e)} bytes` : e < 1048576 ? `${a(e / 1024, t, 0)} KB` : e < 1073741824 ? `${a(e / 1048576, t, 0)} MB` : e < 1099511627776 ? `${a(e / 1073741824, t, 0)} GB` : `${a(e / 1099511627776, t, 0)} TB`;
75
+ return e == null ? "" : e < 1e3 ? u(e) : e < 1e6 ? `${o(e / 1e3, t, 0)}K` : e < 1e9 ? `${o(e / 1e6, t, 0)}M` : e < 0xe8d4a51000 ? `${o(e / 1e9, t, 0)}B` : `${o(e / 0xe8d4a51000, t, 0)}T`;
53
76
  }
54
- var c = [
55
- [
56
- "days",
57
- 864e5,
58
- (e) => e === 1 ? "1 day" : `${u(e)} days`
59
- ],
60
- [
61
- "hrs",
62
- 36e5,
63
- (e) => e === 1 ? "1 hr" : `${u(e)} hrs`
64
- ],
65
- [
66
- "mins",
67
- 6e4,
68
- (e) => e === 1 ? "1 min" : `${u(e)} mins`
69
- ],
70
- [
71
- "secs",
72
- 1e3,
73
- (e) => e === 1 ? "1 sec" : `${u(e)} secs`
74
- ],
75
- [
76
- "ms",
77
- 0,
78
- (e) => `${u(e)} ms`
79
- ]
80
- ];
81
- function l(e, t = "ms") {
82
- if (e == null) return "";
83
- let n = c.findIndex(([e]) => e === t);
84
- if (e < (c[n]?.[1] ?? 0)) {
85
- let t = c.find(([, t]) => e >= t);
86
- if (t == null) return `${u(e)} ms`;
87
- let [, n, r] = t;
88
- return r(n > 0 ? Math.floor(e / n) : e);
77
+ function c(e, t = 1) {
78
+ return e == null ? "" : e === 1 ? "1 byte" : e < 1024 ? `${u(e)} bytes` : e < 1048576 ? `${o(e / 1024, t, 0)} KB` : e < 1073741824 ? `${o(e / 1048576, t, 0)} MB` : e < 1099511627776 ? `${o(e / 1073741824, t, 0)} GB` : `${o(e / 1099511627776, t, 0)} TB`;
79
+ }
80
+ function l(t, n = "ms") {
81
+ if (t == null) return "";
82
+ let r = e.findIndex(([e]) => e === n);
83
+ if (t < (e[r]?.[1] ?? 0)) {
84
+ let n = e.find(([, e]) => t >= e);
85
+ if (n == null) return `${u(t)} ms`;
86
+ let [, r, i] = n;
87
+ return i(r > 0 ? Math.floor(t / r) : t);
89
88
  }
90
- let r = [], i = e;
91
- for (let [, e, t] of c.slice(0, n + 1)) e === 0 ? (i > 0 || r.length === 0) && r.push(t(i)) : i >= e && (r.push(t(Math.floor(i / e))), i %= e);
92
- return r.join(" ");
89
+ let i = [], a = t, o = e.slice(0, r + 1);
90
+ for (let [, e, t] of o) e === 0 ? (a > 0 || i.length === 0) && i.push(t(a)) : a >= e && (i.push(t(Math.floor(a / e))), a %= e);
91
+ return i.join(" ");
93
92
  }
94
- function u(n, r = e) {
95
- if (n == null) return "";
96
- let i = `${r}decimal0.0`, a = t.get(i);
93
+ function u(e, r = t) {
94
+ if (e == null) return "";
95
+ let i = `${r}decimal0.0`, a = n.get(i);
97
96
  return a || (a = new Intl.NumberFormat(r, {
98
97
  localeMatcher: "best fit",
99
98
  maximumFractionDigits: 0,
@@ -101,7 +100,7 @@ function u(n, r = e) {
101
100
  minimumIntegerDigits: 1,
102
101
  style: "decimal",
103
102
  useGrouping: !0
104
- }), t.set(i, a)), a.format(n);
103
+ }), n.set(i, a)), a.format(e);
105
104
  }
106
105
  function d(e) {
107
106
  switch (e) {
@@ -114,4 +113,4 @@ function d(e) {
114
113
  }
115
114
  }
116
115
  //#endregion
117
- export { n as convertODataTypeIdToUsageTypeId, i as extractExtensionFromPath, r as extractNameFromPath, a as formatNumberAsDecimalNumber, l as formatNumberAsDuration, o as formatNumberAsSize, s as formatNumberAsStorageSize, u as formatNumberAsWholeNumber, d as lookupMimeTypeForExtension };
116
+ export { r as convertODataTypeIdToUsageTypeId, a as extractExtensionFromPath, i as extractNameFromPath, o as formatNumberAsDecimalNumber, l as formatNumberAsDuration, s as formatNumberAsSize, c as formatNumberAsStorageSize, u as formatNumberAsWholeNumber, d as lookupMimeTypeForExtension };
@@ -1,4 +1,4 @@
1
- import { a as e, d as t, m as n, t as r } from "./componentConfig.schema-C75xefrQ.js";
1
+ import { a as e, d as t, m as n, t as r } from "./componentConfig.schema-B7kVKqVP.js";
2
2
  //#region src/component/module/moduleConfig.schema.ts
3
3
  var i = e([
4
4
  "app",
@@ -2,15 +2,15 @@
2
2
  * Defines the configuration metadata for a connector. Used for validation
3
3
  * of connector manifests and capability discovery at runtime.
4
4
  */
5
+ export declare const connectorActionNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"abortOperation", undefined>, import('valibot').LiteralSchema<"auditObjectContent", undefined>, import('valibot').LiteralSchema<"createObject", undefined>, import('valibot').LiteralSchema<"describeConnection", undefined>, import('valibot').LiteralSchema<"dropObject", undefined>, import('valibot').LiteralSchema<"findObject", undefined>, import('valibot').LiteralSchema<"getReadableStream", undefined>, import('valibot').LiteralSchema<"getRecord", undefined>, import('valibot').LiteralSchema<"listNodes", undefined>, import('valibot').LiteralSchema<"previewObject", undefined>, import('valibot').LiteralSchema<"removeRecords", undefined>, import('valibot').LiteralSchema<"retrieveChunks", undefined>, import('valibot').LiteralSchema<"retrieveRecords", undefined>, import('valibot').LiteralSchema<"upsertRecords", undefined>], undefined>;
5
6
  export declare const connectorCategoryConfigSchema: import('valibot').ObjectSchema<{
6
7
  readonly label: import('valibot').ObjectSchema<{
7
8
  readonly en: import('valibot').StringSchema<undefined>;
8
9
  readonly es: import('valibot').StringSchema<undefined>;
9
10
  }, undefined>;
10
11
  }, undefined>;
11
- export declare const connectorOperationNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"abortOperation", undefined>, import('valibot').LiteralSchema<"auditObjectContent", undefined>, import('valibot').LiteralSchema<"createObject", undefined>, import('valibot').LiteralSchema<"describeConnection", undefined>, import('valibot').LiteralSchema<"dropObject", undefined>, import('valibot').LiteralSchema<"findObject", undefined>, import('valibot').LiteralSchema<"getReadableStream", undefined>, import('valibot').LiteralSchema<"getRecord", undefined>, import('valibot').LiteralSchema<"listNodes", undefined>, import('valibot').LiteralSchema<"previewObject", undefined>, import('valibot').LiteralSchema<"removeRecords", undefined>, import('valibot').LiteralSchema<"retrieveChunks", undefined>, import('valibot').LiteralSchema<"retrieveRecords", undefined>, import('valibot').LiteralSchema<"upsertRecords", undefined>], undefined>;
12
12
  export declare const connectorConfigSchema: import('valibot').ObjectSchema<{
13
- readonly typeId: import('valibot').LiteralSchema<"connector", undefined>;
13
+ readonly actionNames: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"abortOperation", undefined>, import('valibot').LiteralSchema<"auditObjectContent", undefined>, import('valibot').LiteralSchema<"createObject", undefined>, import('valibot').LiteralSchema<"describeConnection", undefined>, import('valibot').LiteralSchema<"dropObject", undefined>, import('valibot').LiteralSchema<"findObject", undefined>, import('valibot').LiteralSchema<"getReadableStream", undefined>, import('valibot').LiteralSchema<"getRecord", undefined>, import('valibot').LiteralSchema<"listNodes", undefined>, import('valibot').LiteralSchema<"previewObject", undefined>, import('valibot').LiteralSchema<"removeRecords", undefined>, import('valibot').LiteralSchema<"retrieveChunks", undefined>, import('valibot').LiteralSchema<"retrieveRecords", undefined>, import('valibot').LiteralSchema<"upsertRecords", undefined>], undefined>, undefined>;
14
14
  readonly category: import('valibot').NullableSchema<import('valibot').ObjectSchema<{
15
15
  readonly label: import('valibot').ObjectSchema<{
16
16
  readonly en: import('valibot').StringSchema<undefined>;
@@ -30,7 +30,6 @@ export declare const connectorConfigSchema: import('valibot').ObjectSchema<{
30
30
  readonly maxConnectionCount: import('valibot').NullableSchema<import('valibot').NumberSchema<undefined>, undefined>;
31
31
  readonly params: import('valibot').OptionalSchema<import('valibot').ArraySchema<import('valibot').RecordSchema<import('valibot').StringSchema<undefined>, import('valibot').StringSchema<undefined>, undefined>, undefined>, undefined>;
32
32
  }, undefined>, undefined>;
33
- readonly operations: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"abortOperation", undefined>, import('valibot').LiteralSchema<"auditObjectContent", undefined>, import('valibot').LiteralSchema<"createObject", undefined>, import('valibot').LiteralSchema<"describeConnection", undefined>, import('valibot').LiteralSchema<"dropObject", undefined>, import('valibot').LiteralSchema<"findObject", undefined>, import('valibot').LiteralSchema<"getReadableStream", undefined>, import('valibot').LiteralSchema<"getRecord", undefined>, import('valibot').LiteralSchema<"listNodes", undefined>, import('valibot').LiteralSchema<"previewObject", undefined>, import('valibot').LiteralSchema<"removeRecords", undefined>, import('valibot').LiteralSchema<"retrieveChunks", undefined>, import('valibot').LiteralSchema<"retrieveRecords", undefined>, import('valibot').LiteralSchema<"upsertRecords", undefined>], undefined>, undefined>;
34
33
  readonly vendorAccountURL: import('valibot').NullableSchema<import('valibot').StringSchema<undefined>, undefined>;
35
34
  readonly vendorDocumentationURL: import('valibot').NullableSchema<import('valibot').StringSchema<undefined>, undefined>;
36
35
  readonly vendorHomeURL: import('valibot').NullableSchema<import('valibot').StringSchema<undefined>, undefined>;
@@ -54,4 +53,5 @@ export declare const connectorConfigSchema: import('valibot').ObjectSchema<{
54
53
  readonly label: import('valibot').StringSchema<undefined>;
55
54
  }, undefined>, undefined>;
56
55
  readonly statusId: import('valibot').NullableSchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"alpha", undefined>, import('valibot').LiteralSchema<"beta", undefined>, import('valibot').LiteralSchema<"generalAvailability", undefined>, import('valibot').LiteralSchema<"notApplicable", undefined>, import('valibot').LiteralSchema<"preAlpha", undefined>, import('valibot').LiteralSchema<"proposed", undefined>, import('valibot').LiteralSchema<"releaseCandidate", undefined>, import('valibot').LiteralSchema<"unavailable", undefined>, import('valibot').LiteralSchema<"underReview", undefined>], undefined>, undefined>;
56
+ readonly typeId: import('valibot').LiteralSchema<"connector", undefined>;
57
57
  }, undefined>;
@@ -3,7 +3,7 @@ import { Component } from '../..';
3
3
  import { EngineConnectorActionOptions } from '../engine';
4
4
  import { ToolConfig } from '../tool';
5
5
  import { ConnectionDescriptionConfig, ConnectionNodeConfig, ObjectColumnConfig } from '../../connection';
6
- import { connectorCategoryConfigSchema, connectorConfigSchema, connectorOperationNameSchema } from './connectorConfig.schema';
6
+ import { connectorActionNameSchema, connectorCategoryConfigSchema, connectorConfigSchema } from './connectorConfig.schema';
7
7
  import { ContentAuditConfig, InferenceRecord, InferenceSummary, ParsingRecord, PreviewConfig, ValueDelimiterId } from '../../dataView';
8
8
  import { LocalisedConfig } from '../../../locale';
9
9
  export { connectorConfigSchema } from './connectorConfig.schema';
@@ -23,16 +23,18 @@ export interface ConnectorInterface extends Component {
23
23
  previewObject?(options: PreviewObjectOptions): Promise<PreviewConfig>;
24
24
  removeRecords?(options: RemoveRecordsOptions): Promise<void>;
25
25
  retrieveChunks?(options: RetrieveChunksOptions, chunk: (data: Uint8Array) => void, complete: () => void): Promise<void>;
26
- retrieveRecords?(options: RetrieveRecordsOptions, chunk: (typeId: RetrievalTypeId, records: Record<string, unknown>[] | ParsingRecord[]) => void, complete: (result: RetrieveRecordsSummary) => void): Promise<void>;
26
+ retrieveRecords?(options: RetrieveRecordsOptions, chunk: (typeId: RecordRetrievalTypeId, records: Record<string, unknown>[] | ParsingRecord[]) => void, complete: (result: RetrieveRecordsSummary) => void): Promise<void>;
27
27
  upsertRecords?(options: UpsertRecordsOptions): Promise<void>;
28
28
  }
29
+ export type ConnectorActionName = InferOutput<typeof connectorActionNameSchema>;
29
30
  export type ConnectorConstructor = new (connectorUtilities: ConnectorUtilities, toolConfigs: ToolConfig[]) => ConnectorInterface;
31
+ export interface ConnectorUtilities {
32
+ hasReadableStreamTransferSupport(): boolean;
33
+ inferValues: (parsedRecord: ParsingRecord, columnConfigs: ObjectColumnConfig[], hasLeadingRecord: boolean) => InferenceRecord;
34
+ inferDataTypes: (parsedRecords: ParsingRecord[]) => InferenceSummary;
35
+ }
30
36
  export type ConnectorConfig = InferOutput<typeof connectorConfigSchema>;
31
37
  type ConnectorCategoryConfig = InferOutput<typeof connectorCategoryConfigSchema>;
32
- export declare const constructConnectorCategoryConfig: (id: string, localeId?: import('../../../locale').LocaleId) => LocalisedConfig<ConnectorCategoryConfig>;
33
- export type ConnectorOperationName = InferOutput<typeof connectorOperationNameSchema>;
34
- export declare const CONNECTOR_OPERATION_LABELS: Record<ConnectorOperationName, string>;
35
- export declare function generateConnectorOperationsTable(supported: ConnectorOperationName[]): string;
36
38
  export interface AuditObjectContentOptions1 extends EngineConnectorActionOptions {
37
39
  chunkSize: number | undefined;
38
40
  encodingId: string;
@@ -124,13 +126,11 @@ export interface RetrieveRecordsSummary {
124
126
  nonUniformRecordCount: number;
125
127
  recordCount: number;
126
128
  }
129
+ export type RecordRetrievalTypeId = 'jsonRecordArray' | 'parsingRecordArray';
127
130
  export interface UpsertRecordsOptions extends EngineConnectorActionOptions {
128
131
  records: Record<string, unknown>[];
129
132
  path: string;
130
133
  }
131
- export type RetrievalTypeId = 'jsonRecordArray' | 'parsingRecordArray';
132
- export interface ConnectorUtilities {
133
- hasReadableStreamTransferSupport(): boolean;
134
- inferValues: (parsedRecord: ParsingRecord, columnConfigs: ObjectColumnConfig[], leadingRecord: boolean) => InferenceRecord;
135
- inferDataTypes: (parsedRecords: ParsingRecord[]) => InferenceSummary;
136
- }
134
+ export declare const CONNECTOR_ACTION_NAME_MAP: Record<ConnectorActionName, string>;
135
+ export declare const constructConnectorCategoryConfig: (id: string, localeId?: import('../../../locale').LocaleId) => LocalisedConfig<ConnectorCategoryConfig>;
136
+ export declare function getConnectorActionsTable(supported: ConnectorActionName[]): string;
@@ -1,8 +1,7 @@
1
- export declare const contextOperationNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"listContextFocuses", undefined>], undefined>;
1
+ export declare const contextActionNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"listContextFocuses", undefined>], undefined>;
2
2
  export declare const contextConfigSchema: import('valibot').ObjectSchema<{
3
- readonly typeId: import('valibot').LiteralSchema<"context", undefined>;
3
+ readonly actionNames: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"listContextFocuses", undefined>], undefined>, undefined>;
4
4
  readonly models: import('valibot').ArraySchema<import('valibot').ObjectSchema<{
5
- readonly typeId: import('valibot').LiteralSchema<"contextModelGroup", undefined>;
6
5
  readonly modelRefs: import('valibot').ArraySchema<import('valibot').ObjectSchema<{
7
6
  readonly id: import('valibot').StringSchema<undefined>;
8
7
  readonly label: import('valibot').ObjectSchema<{
@@ -39,8 +38,8 @@ export declare const contextConfigSchema: import('valibot').ObjectSchema<{
39
38
  readonly label: import('valibot').StringSchema<undefined>;
40
39
  }, undefined>, undefined>;
41
40
  readonly statusId: import('valibot').NullableSchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"alpha", undefined>, import('valibot').LiteralSchema<"beta", undefined>, import('valibot').LiteralSchema<"generalAvailability", undefined>, import('valibot').LiteralSchema<"notApplicable", undefined>, import('valibot').LiteralSchema<"preAlpha", undefined>, import('valibot').LiteralSchema<"proposed", undefined>, import('valibot').LiteralSchema<"releaseCandidate", undefined>, import('valibot').LiteralSchema<"unavailable", undefined>, import('valibot').LiteralSchema<"underReview", undefined>], undefined>, undefined>;
41
+ readonly typeId: import('valibot').LiteralSchema<"contextModelGroup", undefined>;
42
42
  }, undefined>, undefined>;
43
- readonly operations: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"listContextFocuses", undefined>], undefined>, undefined>;
44
43
  readonly version: import('valibot').StringSchema<undefined>;
45
44
  readonly id: import('valibot').StringSchema<undefined>;
46
45
  readonly label: import('valibot').ObjectSchema<{
@@ -61,4 +60,5 @@ export declare const contextConfigSchema: import('valibot').ObjectSchema<{
61
60
  readonly label: import('valibot').StringSchema<undefined>;
62
61
  }, undefined>, undefined>;
63
62
  readonly statusId: import('valibot').NullableSchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"alpha", undefined>, import('valibot').LiteralSchema<"beta", undefined>, import('valibot').LiteralSchema<"generalAvailability", undefined>, import('valibot').LiteralSchema<"notApplicable", undefined>, import('valibot').LiteralSchema<"preAlpha", undefined>, import('valibot').LiteralSchema<"proposed", undefined>, import('valibot').LiteralSchema<"releaseCandidate", undefined>, import('valibot').LiteralSchema<"unavailable", undefined>, import('valibot').LiteralSchema<"underReview", undefined>], undefined>, undefined>;
63
+ readonly typeId: import('valibot').LiteralSchema<"context", undefined>;
64
64
  }, undefined>;
@@ -1,14 +1,14 @@
1
1
  import { InferOutput } from 'valibot';
2
2
  import { EngineContextActionOptions } from '../engine';
3
3
  import { Component, ComponentConfig, ComponentReference } from '../..';
4
- import { contextConfigSchema, contextOperationNameSchema } from './contextConfig.schema';
4
+ import { contextActionNameSchema, contextConfigSchema } from './contextConfig.schema';
5
5
  export { contextConfigSchema } from './contextConfig.schema';
6
6
  export interface ContextInterface extends Component {
7
7
  readonly config: ContextConfig;
8
8
  listContextFocuses?(context: ContextInterface, options?: ListContextOptions): Promise<ListContextResult>;
9
9
  }
10
10
  export type ContextConfig = InferOutput<typeof contextConfigSchema>;
11
- export type ContextOperationName = InferOutput<typeof contextOperationNameSchema>;
11
+ export type ContextActionName = InferOutput<typeof contextActionNameSchema>;
12
12
  export interface ContextModelGroupConfig extends ComponentConfig {
13
13
  modelRefs: ComponentReference[];
14
14
  order: number;
@@ -0,0 +1,2 @@
1
+ declare const PLACEHOLDER = "";
2
+ export { PLACEHOLDER };
@@ -0,0 +1,2 @@
1
+ declare const PLACEHOLDER = "";
2
+ export { PLACEHOLDER };
@@ -1,7 +1,6 @@
1
1
  import { InferOutput } from 'valibot';
2
- import { ModuleConfig } from '..';
3
- import { presenterOperationNameSchema } from './presenterConfig.schema';
4
2
  import { Component, ComponentReference } from '../..';
3
+ import { presenterActionNameSchema, presenterConfigSchema } from './presenterConfig.schema';
5
4
  export { presenterConfigSchema } from './presenterConfig.schema';
6
5
  export interface PresenterInterface extends Component {
7
6
  readonly config: PresenterConfig;
@@ -9,9 +8,5 @@ export interface PresenterInterface extends Component {
9
8
  render(presentationPath: string, renderTo: HTMLElement, data?: unknown): Promise<void>;
10
9
  setColorMode(colorModeId: string): void;
11
10
  }
12
- export interface PresenterConfig extends ModuleConfig {
13
- presentations: ComponentReference[];
14
- operations: PresenterOperationName[];
15
- typeId: 'presenter';
16
- }
17
- export type PresenterOperationName = InferOutput<typeof presenterOperationNameSchema>;
11
+ export type PresenterActionName = InferOutput<typeof presenterActionNameSchema>;
12
+ export type PresenterConfig = InferOutput<typeof presenterConfigSchema>;
@@ -1,8 +1,8 @@
1
1
  import { ComponentConfig } from '../../..';
2
2
  export interface PresentationConfig extends ComponentConfig {
3
+ typeId: 'presenterPresentation';
3
4
  content: string;
4
5
  order: number;
5
- typeId: 'presenterPresentation';
6
6
  }
7
7
  export interface PresentationVisualConfig {
8
8
  content: PresentationVisualContentConfig;
@@ -1,6 +1,6 @@
1
- export declare const presenterOperationNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"list", undefined>, import('valibot').LiteralSchema<"render", undefined>, import('valibot').LiteralSchema<"setColorMode", undefined>], undefined>;
1
+ export declare const presenterActionNameSchema: import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"list", undefined>, import('valibot').LiteralSchema<"render", undefined>, import('valibot').LiteralSchema<"setColorMode", undefined>], undefined>;
2
2
  export declare const presenterConfigSchema: import('valibot').ObjectSchema<{
3
- readonly typeId: import('valibot').LiteralSchema<"presenter", undefined>;
3
+ readonly actionNames: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"list", undefined>, import('valibot').LiteralSchema<"render", undefined>, import('valibot').LiteralSchema<"setColorMode", undefined>], undefined>, undefined>;
4
4
  readonly presentations: import('valibot').ArraySchema<import('valibot').ObjectSchema<{
5
5
  readonly id: import('valibot').StringSchema<undefined>;
6
6
  readonly label: import('valibot').ObjectSchema<{
@@ -17,7 +17,6 @@ export declare const presenterConfigSchema: import('valibot').ObjectSchema<{
17
17
  readonly order: import('valibot').NumberSchema<undefined>;
18
18
  readonly path: import('valibot').StringSchema<undefined>;
19
19
  }, undefined>, undefined>;
20
- readonly operations: import('valibot').ArraySchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"list", undefined>, import('valibot').LiteralSchema<"render", undefined>, import('valibot').LiteralSchema<"setColorMode", undefined>], undefined>, undefined>;
21
20
  readonly version: import('valibot').StringSchema<undefined>;
22
21
  readonly id: import('valibot').StringSchema<undefined>;
23
22
  readonly label: import('valibot').ObjectSchema<{
@@ -38,4 +37,5 @@ export declare const presenterConfigSchema: import('valibot').ObjectSchema<{
38
37
  readonly label: import('valibot').StringSchema<undefined>;
39
38
  }, undefined>, undefined>;
40
39
  readonly statusId: import('valibot').NullableSchema<import('valibot').UnionSchema<readonly [import('valibot').LiteralSchema<"alpha", undefined>, import('valibot').LiteralSchema<"beta", undefined>, import('valibot').LiteralSchema<"generalAvailability", undefined>, import('valibot').LiteralSchema<"notApplicable", undefined>, import('valibot').LiteralSchema<"preAlpha", undefined>, import('valibot').LiteralSchema<"proposed", undefined>, import('valibot').LiteralSchema<"releaseCandidate", undefined>, import('valibot').LiteralSchema<"unavailable", undefined>, import('valibot').LiteralSchema<"underReview", undefined>], undefined>, undefined>;
40
+ readonly typeId: import('valibot').LiteralSchema<"presenter", undefined>;
41
41
  }, undefined>;
@@ -22,6 +22,6 @@ export declare const SUPPORTED_LANGUAGES: {
22
22
  }[];
23
23
  export declare function createLabelMap(labels: Record<string, string>): LocaleLabelMap;
24
24
  export declare function localiseConfig<T extends UnlocalisedConfig>(config: T, localeId: LocaleId): LocalisedConfig<T>;
25
- export declare function localiseConfigs<T extends UnlocalisedConfig>(configs: T[], localeId: LocaleId, sortResult?: boolean): LocalisedConfig<T>[];
25
+ export declare function localiseConfigs<T extends UnlocalisedConfig>(configs: T[], localeId: LocaleId, isResultSorted?: boolean): LocalisedConfig<T>[];
26
26
  export declare function resolveLabel(labels: LocaleLabelMap, localeId: string, fallbackLocaleId?: LocaleId): string | undefined;
27
27
  export {};
@@ -2,11 +2,11 @@ export declare const localeLabelSchema: import('valibot').ObjectSchema<{
2
2
  readonly en: import('valibot').StringSchema<undefined>;
3
3
  readonly es: import('valibot').StringSchema<undefined>;
4
4
  }, undefined>;
5
- export declare const partialLocaleLabelSchema: import('valibot').ObjectSchema<{
6
- readonly en: import('valibot').OptionalSchema<import('valibot').StringSchema<undefined>, undefined>;
7
- readonly es: import('valibot').OptionalSchema<import('valibot').StringSchema<undefined>, undefined>;
8
- }, undefined>;
9
5
  export declare const partialLocaleDescriptionSchema: import('valibot').ObjectSchema<{
10
6
  readonly en: import('valibot').OptionalSchema<import('valibot').ArraySchema<import('valibot').StringSchema<undefined>, undefined>, undefined>;
11
7
  readonly es: import('valibot').OptionalSchema<import('valibot').ArraySchema<import('valibot').StringSchema<undefined>, undefined>, undefined>;
12
8
  }, undefined>;
9
+ export declare const partialLocaleLabelSchema: import('valibot').ObjectSchema<{
10
+ readonly en: import('valibot').OptionalSchema<import('valibot').StringSchema<undefined>, undefined>;
11
+ readonly es: import('valibot').OptionalSchema<import('valibot').StringSchema<undefined>, undefined>;
12
+ }, undefined>;
@@ -1,10 +1,11 @@
1
+ type DurationLevel = 'days' | 'hrs' | 'mins' | 'secs' | 'ms';
1
2
  export declare function convertODataTypeIdToUsageTypeId(oDataTypeId: string): string;
2
3
  export declare function extractNameFromPath(itemPath: string): string | undefined;
3
4
  export declare function extractExtensionFromPath(itemPath: string): string | undefined;
4
5
  export declare function formatNumberAsDecimalNumber(number?: number, decimalPlaces?: number, minimumFractionDigits?: number, locale?: string): string;
5
6
  export declare function formatNumberAsSize(number?: number, decimalPlaces?: number): string;
6
7
  export declare function formatNumberAsStorageSize(number?: number, decimalPlaces?: number): string;
7
- export type DurationLevel = 'days' | 'hrs' | 'mins' | 'secs' | 'ms';
8
8
  export declare function formatNumberAsDuration(number?: number, stopAt?: DurationLevel): string;
9
9
  export declare function formatNumberAsWholeNumber(number?: number, locale?: string): string;
10
10
  export declare function lookupMimeTypeForExtension(extension?: string): string;
11
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dpuse/dpuse-shared",
3
- "version": "0.3.689",
3
+ "version": "0.3.706",
4
4
  "private": false,
5
5
  "description": "Common constants, types and utilities used across all DPUse projects.",
6
6
  "license": "MIT",
@@ -135,18 +135,18 @@
135
135
  "test": "node -e \"import('@dpuse/dpuse-development').then(m => m.testProject())\""
136
136
  },
137
137
  "devDependencies": {
138
- "@dpuse/dpuse-development": "^0.3.549",
138
+ "@dpuse/dpuse-development": "^0.3.564",
139
139
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
140
140
  "@types/eslint-plugin-security": "^3.0.1",
141
- "@types/node": "^26.0.0",
141
+ "@types/node": "^26.0.1",
142
142
  "eslint": "^10.5.0",
143
143
  "eslint-config-prettier": "^10.1.8",
144
144
  "eslint-import-resolver-typescript": "^4.4.5",
145
145
  "eslint-plugin-import-x": "^4.17.0",
146
- "eslint-plugin-regexp": "^3.1.0",
146
+ "eslint-plugin-regexp": "^3.1.1",
147
147
  "eslint-plugin-security": "^4.0.1",
148
148
  "eslint-plugin-sonarjs": "^4.1.0",
149
- "eslint-plugin-unicorn": "^68.0.0",
149
+ "eslint-plugin-unicorn": "^69.0.0",
150
150
  "file-type": "^22.0.1",
151
151
  "jiti": "^2.7.0",
152
152
  "license-checker-rseidelsohn": "^5.0.1",