@speclynx/apidom-core 2.2.3 → 2.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speclynx/apidom-core",
3
- "version": "2.2.3",
3
+ "version": "2.4.0",
4
4
  "description": "Tools for manipulating ApiDOM structures.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -25,7 +25,7 @@
25
25
  "lint": "eslint ./",
26
26
  "lint:fix": "eslint ./ --fix",
27
27
  "clean": "rimraf --glob 'src/**/*.mjs' 'src/**/*.cjs' 'test/**/*.mjs' ./dist ./types",
28
- "typescript:check-types": "tsc --noEmit && tsc -p ./test/tsconfig.json --noEmit",
28
+ "typescript:check-types": "tsc --noEmit",
29
29
  "typescript:declaration": "tsc -p tsconfig.declaration.json && api-extractor run -l -c ./config/api-extractor/api-extractor.json",
30
30
  "test": "npm run build:es && cross-env BABEL_ENV=es babel test --out-dir test --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test mocha",
31
31
  "test:update-snapshots": "cross-env UPDATE_SNAPSHOT=1 NODE_ENV=test mocha",
@@ -40,9 +40,9 @@
40
40
  "license": "Apache-2.0",
41
41
  "dependencies": {
42
42
  "@babel/runtime-corejs3": "^7.28.4",
43
- "@speclynx/apidom-datamodel": "^2.2.3",
44
- "@speclynx/apidom-error": "^2.2.3",
45
- "@speclynx/apidom-traverse": "^2.2.3",
43
+ "@speclynx/apidom-datamodel": "^2.4.0",
44
+ "@speclynx/apidom-error": "^2.4.0",
45
+ "@speclynx/apidom-traverse": "^2.4.0",
46
46
  "ramda": "~0.32.0",
47
47
  "ramda-adjunct": "^6.0.0",
48
48
  "short-unique-id": "^5.3.2",
@@ -59,5 +59,5 @@
59
59
  "README.md",
60
60
  "CHANGELOG.md"
61
61
  ],
62
- "gitHead": "e08f97d01904015b1cf621e093145fe55de0d02d"
62
+ "gitHead": "f127ee0b98cc108b83a690bf317895e17a32b4d4"
63
63
  }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ exports.fixedFields = fixedFields;
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
7
+ /**
8
+ * Represents a fixed field definition.
9
+ * @public
10
+ */
11
+
12
+ /**
13
+ * Returns the fixed fields for an Element class or instance.
14
+ *
15
+ * @param elementOrClass - Element instance or class
16
+ * @param options - Options for return format
17
+ * @returns Array of fixed fields, or object indexed by name if options.indexed is true
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { fixedFields } from '@speclynx/apidom-core';
22
+ *
23
+ * // Get fixed fields as array
24
+ * const fields = fixedFields(ParameterElement);
25
+ *
26
+ * // Get fixed fields as indexed object for O(1) lookups
27
+ * const fieldsIndex = fixedFields(ParameterElement, { indexed: true });
28
+ * if (Object.hasOwn(fieldsIndex, 'description')) {
29
+ * // field exists
30
+ * }
31
+ * ```
32
+ *
33
+ * @public
34
+ */
35
+ function fixedFields(elementOrClass, options) {
36
+ const constructor = elementOrClass instanceof _apidomDatamodel.Element ? elementOrClass.constructor : elementOrClass;
37
+ const fields = constructor.fixedFields ?? [];
38
+ if (options?.indexed) {
39
+ return Object.fromEntries(fields.map(f => [f.name, f]));
40
+ }
41
+ return fields;
42
+ }
43
+ var _default = exports.default = fixedFields;
@@ -0,0 +1,39 @@
1
+ import { Element } from '@speclynx/apidom-datamodel';
2
+
3
+ /**
4
+ * Represents a fixed field definition.
5
+ * @public
6
+ */
7
+
8
+ /**
9
+ * Returns the fixed fields for an Element class or instance.
10
+ *
11
+ * @param elementOrClass - Element instance or class
12
+ * @param options - Options for return format
13
+ * @returns Array of fixed fields, or object indexed by name if options.indexed is true
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { fixedFields } from '@speclynx/apidom-core';
18
+ *
19
+ * // Get fixed fields as array
20
+ * const fields = fixedFields(ParameterElement);
21
+ *
22
+ * // Get fixed fields as indexed object for O(1) lookups
23
+ * const fieldsIndex = fixedFields(ParameterElement, { indexed: true });
24
+ * if (Object.hasOwn(fieldsIndex, 'description')) {
25
+ * // field exists
26
+ * }
27
+ * ```
28
+ *
29
+ * @public
30
+ */
31
+ export function fixedFields(elementOrClass, options) {
32
+ const constructor = elementOrClass instanceof Element ? elementOrClass.constructor : elementOrClass;
33
+ const fields = constructor.fixedFields ?? [];
34
+ if (options?.indexed) {
35
+ return Object.fromEntries(fields.map(f => [f.name, f]));
36
+ }
37
+ return fields;
38
+ }
39
+ export default fixedFields;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
+ exports.__esModule = true;
5
+ exports.fixedFields = exports.default = void 0;
6
+ var _fixedFields = _interopRequireWildcard(require("./fixed-fields.cjs"));
7
+ exports.fixedFields = _fixedFields.fixedFields;
8
+ exports.default = _fixedFields.default;
@@ -0,0 +1 @@
1
+ export { fixedFields, default } from "./fixed-fields.mjs";
package/src/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
4
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
5
  exports.__esModule = true;
6
- exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.sexprs = exports.resolveSpecification = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.mergeRight = exports.mergeLeft = exports.from = exports.dispatchRefractorPlugins = exports.dehydrate = exports.defaultIdentityManager = exports.deepmerge = exports.createToolbox = exports.Transcluder = exports.MediaTypes = exports.IdentityManager = exports.ElementIdentityError = void 0;
6
+ exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.sexprs = exports.resolveSpecification = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.mergeRight = exports.mergeLeft = exports.from = exports.fixedFields = exports.dispatchRefractorPlugins = exports.dehydrate = exports.defaultIdentityManager = exports.deepmerge = exports.createToolbox = exports.Transcluder = exports.MediaTypes = exports.IdentityManager = exports.ElementIdentityError = void 0;
7
7
  var _index = require("./refractor/plugins/dispatcher/index.cjs");
8
8
  exports.dispatchRefractorPlugins = _index.dispatchPluginsSync;
9
9
  var _toolbox = _interopRequireDefault(require("./refractor/toolbox.cjs"));
@@ -43,4 +43,6 @@ exports.deepmerge = _deepmerge.default;
43
43
  var _mergeRight = _interopRequireDefault(require("./merge/merge-right.cjs"));
44
44
  exports.mergeRight = _mergeRight.default;
45
45
  var _mergeLeft = _interopRequireDefault(require("./merge/merge-left.cjs"));
46
- exports.mergeLeft = _mergeLeft.default;
46
+ exports.mergeLeft = _mergeLeft.default;
47
+ var _index4 = require("./fields/index.cjs");
48
+ exports.fixedFields = _index4.fixedFields;
package/src/index.mjs CHANGED
@@ -37,4 +37,5 @@ export { default as toString } from "./transformers/to-string.mjs";
37
37
  export { default as sexprs } from "./transformers/sexprs.mjs";
38
38
  export { default as deepmerge } from "./merge/deepmerge.mjs";
39
39
  export { default as mergeRight } from "./merge/merge-right.mjs";
40
- export { default as mergeLeft } from "./merge/merge-left.mjs";
40
+ export { default as mergeLeft } from "./merge/merge-left.mjs";
41
+ export { fixedFields } from "./fields/index.mjs";
@@ -146,6 +146,10 @@ export declare interface DispatchPluginsSync {
146
146
  */
147
147
  export declare const dispatchRefractorPlugins: DispatchPluginsSync;
148
148
 
149
+ declare type ElementClass = typeof Element_2 & {
150
+ fixedFields?: FixedField[];
151
+ };
152
+
149
153
  /**
150
154
  * @public
151
155
  */
@@ -161,6 +165,42 @@ export declare interface ElementIdentityErrorOptions extends ApiDOMErrorOptions
161
165
  readonly value: unknown;
162
166
  }
163
167
 
168
+ /**
169
+ * Represents a fixed field definition.
170
+ * @public
171
+ */
172
+ export declare interface FixedField {
173
+ name: string;
174
+ [key: string]: unknown;
175
+ }
176
+
177
+ /**
178
+ * Returns the fixed fields for an Element class or instance.
179
+ *
180
+ * @param elementOrClass - Element instance or class
181
+ * @param options - Options for return format
182
+ * @returns Array of fixed fields, or object indexed by name if options.indexed is true
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * import { fixedFields } from '@speclynx/apidom-core';
187
+ *
188
+ * // Get fixed fields as array
189
+ * const fields = fixedFields(ParameterElement);
190
+ *
191
+ * // Get fixed fields as indexed object for O(1) lookups
192
+ * const fieldsIndex = fixedFields(ParameterElement, { indexed: true });
193
+ * if (Object.hasOwn(fieldsIndex, 'description')) {
194
+ * // field exists
195
+ * }
196
+ * ```
197
+ *
198
+ * @public
199
+ */
200
+ export declare function fixedFields<T extends boolean = false>(elementOrClass: Element_2 | ElementClass, options?: {
201
+ indexed?: T;
202
+ }): T extends true ? Record<string, FixedField> : FixedField[];
203
+
164
204
  /**
165
205
  * Transforms data to an Element from a particular namespace.
166
206
  *