@skmtc/core 0.0.788 → 0.0.790

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 (49) hide show
  1. package/esm/context/ParseContext.d.ts +178 -0
  2. package/esm/context/ParseContext.d.ts.map +1 -1
  3. package/esm/context/ParseContext.js +108 -0
  4. package/esm/context/RenderContext.d.ts +190 -0
  5. package/esm/context/RenderContext.d.ts.map +1 -1
  6. package/esm/context/RenderContext.js +179 -0
  7. package/esm/dsl/Inserted.d.ts +240 -0
  8. package/esm/dsl/Inserted.d.ts.map +1 -1
  9. package/esm/dsl/Inserted.js +231 -0
  10. package/esm/helpers/refFns.d.ts +160 -0
  11. package/esm/helpers/refFns.d.ts.map +1 -1
  12. package/esm/helpers/refFns.js +156 -0
  13. package/esm/oas/boolean/Boolean.d.ts +142 -1
  14. package/esm/oas/boolean/Boolean.d.ts.map +1 -1
  15. package/esm/oas/boolean/Boolean.js +130 -1
  16. package/esm/oas/components/Components.d.ts +252 -2
  17. package/esm/oas/components/Components.d.ts.map +1 -1
  18. package/esm/oas/components/Components.js +241 -2
  19. package/esm/oas/parameter/Parameter.d.ts +160 -0
  20. package/esm/oas/parameter/Parameter.d.ts.map +1 -1
  21. package/esm/oas/parameter/Parameter.js +144 -0
  22. package/esm/oas/union/Union.d.ts +119 -5
  23. package/esm/oas/union/Union.d.ts.map +1 -1
  24. package/esm/oas/union/Union.js +108 -5
  25. package/package.json +1 -1
  26. package/script/context/ParseContext.d.ts +178 -0
  27. package/script/context/ParseContext.d.ts.map +1 -1
  28. package/script/context/ParseContext.js +108 -0
  29. package/script/context/RenderContext.d.ts +190 -0
  30. package/script/context/RenderContext.d.ts.map +1 -1
  31. package/script/context/RenderContext.js +179 -0
  32. package/script/dsl/Inserted.d.ts +240 -0
  33. package/script/dsl/Inserted.d.ts.map +1 -1
  34. package/script/dsl/Inserted.js +231 -0
  35. package/script/helpers/refFns.d.ts +160 -0
  36. package/script/helpers/refFns.d.ts.map +1 -1
  37. package/script/helpers/refFns.js +156 -0
  38. package/script/oas/boolean/Boolean.d.ts +142 -1
  39. package/script/oas/boolean/Boolean.d.ts.map +1 -1
  40. package/script/oas/boolean/Boolean.js +130 -1
  41. package/script/oas/components/Components.d.ts +252 -2
  42. package/script/oas/components/Components.d.ts.map +1 -1
  43. package/script/oas/components/Components.js +241 -2
  44. package/script/oas/parameter/Parameter.d.ts +160 -0
  45. package/script/oas/parameter/Parameter.d.ts.map +1 -1
  46. package/script/oas/parameter/Parameter.js +144 -0
  47. package/script/oas/union/Union.d.ts +119 -5
  48. package/script/oas/union/Union.d.ts.map +1 -1
  49. package/script/oas/union/Union.js +108 -5
@@ -2,17 +2,158 @@ import "../../_dnt.polyfills.js";
2
2
  import type { OpenAPIV3 } from 'openapi-types';
3
3
  import type { OasRef } from '../ref/Ref.js';
4
4
  import type { ToJsonSchemaOptions } from '../schema/Schema.js';
5
+ /**
6
+ * Constructor fields for {@link OasBoolean}.
7
+ *
8
+ * @template Nullable - Whether the boolean can be null (affects type unions)
9
+ */
5
10
  export type BooleanFields<Nullable extends boolean | undefined> = {
11
+ /** A short summary of the boolean schema */
6
12
  title?: string;
13
+ /** A description of the boolean schema */
7
14
  description?: string;
15
+ /** Whether the boolean value can be null */
8
16
  nullable?: Nullable;
17
+ /** Custom extension fields (x-* properties) */
9
18
  extensionFields?: Record<string, unknown>;
19
+ /** Example value for the boolean (null allowed if Nullable is true) */
10
20
  example?: Nullable extends true ? boolean | null | undefined : boolean | undefined;
21
+ /** Array of valid enum values for the boolean (null allowed if Nullable is true) */
11
22
  enums?: Nullable extends true ? (boolean | null)[] | undefined : boolean[] | undefined;
23
+ /** Default value for the boolean (null allowed if Nullable is true) */
12
24
  default?: Nullable extends true ? boolean | null | undefined : boolean | undefined;
13
25
  };
14
26
  /**
15
- * Object representing a boolean in the OpenAPI Specification.
27
+ * Represents a boolean schema in the OpenAPI Specification.
28
+ *
29
+ * The `OasBoolean` class handles boolean data types in OpenAPI schemas, supporting
30
+ * both simple true/false values and more complex boolean schemas with constraints,
31
+ * enumerations, and nullable types. This class provides type-safe boolean handling
32
+ * with optional null value support through generic typing.
33
+ *
34
+ * ## Key Features
35
+ *
36
+ * - **Type Safety**: Generic nullable type support with proper TypeScript inference
37
+ * - **Enum Support**: Constrain boolean values to specific true/false combinations
38
+ * - **Null Handling**: Optional null value support for nullable boolean types
39
+ * - **Validation**: Default values and example validation
40
+ * - **JSON Schema**: Converts to standard JSON Schema format for validation
41
+ * - **Documentation**: Rich metadata support for API documentation
42
+ *
43
+ * @template Nullable - Whether the boolean value itself can be null
44
+ *
45
+ * @example Basic boolean schema
46
+ * ```typescript
47
+ * import { OasBoolean } from '@skmtc/core';
48
+ *
49
+ * const isActiveSchema = new OasBoolean({
50
+ * title: 'Active Status',
51
+ * description: 'Whether the user account is active',
52
+ * default: true,
53
+ * example: true
54
+ * });
55
+ *
56
+ * // This represents: boolean with default true
57
+ * ```
58
+ *
59
+ * @example Nullable boolean schema
60
+ * ```typescript
61
+ * const nullableFlag = new OasBoolean<true>({
62
+ * title: 'Optional Flag',
63
+ * description: 'An optional boolean flag that can be null',
64
+ * nullable: true,
65
+ * default: null,
66
+ * example: true
67
+ * });
68
+ *
69
+ * // This represents: boolean | null
70
+ * ```
71
+ *
72
+ * @example Boolean with enum constraints
73
+ * ```typescript
74
+ * const strictBoolean = new OasBoolean({
75
+ * title: 'Confirmation',
76
+ * description: 'Must explicitly be true to confirm action',
77
+ * enums: [true], // Only true is allowed
78
+ * example: true
79
+ * });
80
+ *
81
+ * // This only accepts true, effectively making it required
82
+ * ```
83
+ *
84
+ * @example Boolean with null in enum
85
+ * ```typescript
86
+ * const triStateBoolean = new OasBoolean<true>({
87
+ * title: 'Approval Status',
88
+ * description: 'Approval can be true (approved), false (denied), or null (pending)',
89
+ * nullable: true,
90
+ * enums: [true, false, null],
91
+ * default: null,
92
+ * example: null
93
+ * });
94
+ *
95
+ * // This represents: true | false | null (tri-state logic)
96
+ * ```
97
+ *
98
+ * @example Feature flag schema
99
+ * ```typescript
100
+ * const featureFlag = new OasBoolean({
101
+ * title: 'Feature Enabled',
102
+ * description: 'Whether the new feature is enabled for this user',
103
+ * default: false,
104
+ * example: false
105
+ * });
106
+ *
107
+ * // Used in configuration objects
108
+ * const userConfig = new OasObject({
109
+ * properties: {
110
+ * darkMode: featureFlag,
111
+ * notifications: featureFlag,
112
+ * betaFeatures: featureFlag
113
+ * }
114
+ * });
115
+ * ```
116
+ *
117
+ * @example Consent and agreement booleans
118
+ * ```typescript
119
+ * const consentSchema = new OasBoolean({
120
+ * title: 'Terms Accepted',
121
+ * description: 'User has accepted the terms and conditions',
122
+ * enums: [true], // Must be true to be valid
123
+ * example: true
124
+ * });
125
+ *
126
+ * const privacyConsent = new OasBoolean({
127
+ * title: 'Privacy Policy Accepted',
128
+ * description: 'User has accepted the privacy policy',
129
+ * default: false,
130
+ * example: true
131
+ * });
132
+ *
133
+ * // Used in registration forms where consent is required
134
+ * ```
135
+ *
136
+ * @example Optional settings with nullable booleans
137
+ * ```typescript
138
+ * const userPreferences = new OasObject({
139
+ * properties: {
140
+ * emailNotifications: new OasBoolean<true>({
141
+ * title: 'Email Notifications',
142
+ * description: 'Enable email notifications (null means use default)',
143
+ * nullable: true,
144
+ * default: null
145
+ * }),
146
+ * smsNotifications: new OasBoolean<true>({
147
+ * title: 'SMS Notifications',
148
+ * description: 'Enable SMS notifications (null means not set)',
149
+ * nullable: true,
150
+ * default: null
151
+ * })
152
+ * }
153
+ * });
154
+ *
155
+ * // Allows: { emailNotifications: true, smsNotifications: null }
156
+ * ```
16
157
  */
17
158
  export declare class OasBoolean<Nullable extends boolean | undefined = boolean | undefined> {
18
159
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Boolean.d.ts","sourceRoot":"","sources":["../../../src/oas/boolean/Boolean.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,OAAO,GAAG,SAAS,IAAI;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,OAAO,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAClF,KAAK,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;IACtF,OAAO,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;CACnF,CAAA;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS;IAChF;;;OAGG;IACH,OAAO,EAAG,QAAQ,CAAS;IAC3B;;OAEG;IACH,IAAI,EAAG,SAAS,CAAS;IACzB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;IAE9B,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACpD;;OAEG;IACH,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAEjF;;OAEG;IACH,KAAK,EAAE,QAAQ,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;IACrF;;OAEG;IACH,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;gBAErE,MAAM,GAAE,aAAa,CAAC,QAAQ,CAAM;IAUhD,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC;IAIjC,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC;IAI/B,WAAW,IAAI,UAAU,CAAC,QAAQ,CAAC;IAKnC,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC,oBAAoB;CAW5E"}
1
+ {"version":3,"file":"Boolean.d.ts","sourceRoot":"","sources":["../../../src/oas/boolean/Boolean.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE9D;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,QAAQ,SAAS,OAAO,GAAG,SAAS,IAAI;IAChE,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,uEAAuE;IACvE,OAAO,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAClF,oFAAoF;IACpF,KAAK,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;IACtF,uEAAuE;IACvE,OAAO,CAAC,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;CACnF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmIG;AACH,qBAAa,UAAU,CAAC,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS;IAChF;;;OAGG;IACH,OAAO,EAAG,QAAQ,CAAS;IAC3B;;OAEG;IACH,IAAI,EAAG,SAAS,CAAS;IACzB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;IAE9B,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACpD;;OAEG;IACH,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;IAEjF;;OAEG;IACH,KAAK,EAAE,QAAQ,SAAS,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,CAAA;IACrF;;OAEG;IACH,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;gBAErE,MAAM,GAAE,aAAa,CAAC,QAAQ,CAAM;IAUhD,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC;IAIjC,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC;IAI/B,WAAW,IAAI,UAAU,CAAC,QAAQ,CAAC;IAKnC,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC,oBAAoB;CAW5E"}
@@ -1,6 +1,135 @@
1
1
  import "../../_dnt.polyfills.js";
2
2
  /**
3
- * Object representing a boolean in the OpenAPI Specification.
3
+ * Represents a boolean schema in the OpenAPI Specification.
4
+ *
5
+ * The `OasBoolean` class handles boolean data types in OpenAPI schemas, supporting
6
+ * both simple true/false values and more complex boolean schemas with constraints,
7
+ * enumerations, and nullable types. This class provides type-safe boolean handling
8
+ * with optional null value support through generic typing.
9
+ *
10
+ * ## Key Features
11
+ *
12
+ * - **Type Safety**: Generic nullable type support with proper TypeScript inference
13
+ * - **Enum Support**: Constrain boolean values to specific true/false combinations
14
+ * - **Null Handling**: Optional null value support for nullable boolean types
15
+ * - **Validation**: Default values and example validation
16
+ * - **JSON Schema**: Converts to standard JSON Schema format for validation
17
+ * - **Documentation**: Rich metadata support for API documentation
18
+ *
19
+ * @template Nullable - Whether the boolean value itself can be null
20
+ *
21
+ * @example Basic boolean schema
22
+ * ```typescript
23
+ * import { OasBoolean } from '@skmtc/core';
24
+ *
25
+ * const isActiveSchema = new OasBoolean({
26
+ * title: 'Active Status',
27
+ * description: 'Whether the user account is active',
28
+ * default: true,
29
+ * example: true
30
+ * });
31
+ *
32
+ * // This represents: boolean with default true
33
+ * ```
34
+ *
35
+ * @example Nullable boolean schema
36
+ * ```typescript
37
+ * const nullableFlag = new OasBoolean<true>({
38
+ * title: 'Optional Flag',
39
+ * description: 'An optional boolean flag that can be null',
40
+ * nullable: true,
41
+ * default: null,
42
+ * example: true
43
+ * });
44
+ *
45
+ * // This represents: boolean | null
46
+ * ```
47
+ *
48
+ * @example Boolean with enum constraints
49
+ * ```typescript
50
+ * const strictBoolean = new OasBoolean({
51
+ * title: 'Confirmation',
52
+ * description: 'Must explicitly be true to confirm action',
53
+ * enums: [true], // Only true is allowed
54
+ * example: true
55
+ * });
56
+ *
57
+ * // This only accepts true, effectively making it required
58
+ * ```
59
+ *
60
+ * @example Boolean with null in enum
61
+ * ```typescript
62
+ * const triStateBoolean = new OasBoolean<true>({
63
+ * title: 'Approval Status',
64
+ * description: 'Approval can be true (approved), false (denied), or null (pending)',
65
+ * nullable: true,
66
+ * enums: [true, false, null],
67
+ * default: null,
68
+ * example: null
69
+ * });
70
+ *
71
+ * // This represents: true | false | null (tri-state logic)
72
+ * ```
73
+ *
74
+ * @example Feature flag schema
75
+ * ```typescript
76
+ * const featureFlag = new OasBoolean({
77
+ * title: 'Feature Enabled',
78
+ * description: 'Whether the new feature is enabled for this user',
79
+ * default: false,
80
+ * example: false
81
+ * });
82
+ *
83
+ * // Used in configuration objects
84
+ * const userConfig = new OasObject({
85
+ * properties: {
86
+ * darkMode: featureFlag,
87
+ * notifications: featureFlag,
88
+ * betaFeatures: featureFlag
89
+ * }
90
+ * });
91
+ * ```
92
+ *
93
+ * @example Consent and agreement booleans
94
+ * ```typescript
95
+ * const consentSchema = new OasBoolean({
96
+ * title: 'Terms Accepted',
97
+ * description: 'User has accepted the terms and conditions',
98
+ * enums: [true], // Must be true to be valid
99
+ * example: true
100
+ * });
101
+ *
102
+ * const privacyConsent = new OasBoolean({
103
+ * title: 'Privacy Policy Accepted',
104
+ * description: 'User has accepted the privacy policy',
105
+ * default: false,
106
+ * example: true
107
+ * });
108
+ *
109
+ * // Used in registration forms where consent is required
110
+ * ```
111
+ *
112
+ * @example Optional settings with nullable booleans
113
+ * ```typescript
114
+ * const userPreferences = new OasObject({
115
+ * properties: {
116
+ * emailNotifications: new OasBoolean<true>({
117
+ * title: 'Email Notifications',
118
+ * description: 'Enable email notifications (null means use default)',
119
+ * nullable: true,
120
+ * default: null
121
+ * }),
122
+ * smsNotifications: new OasBoolean<true>({
123
+ * title: 'SMS Notifications',
124
+ * description: 'Enable SMS notifications (null means not set)',
125
+ * nullable: true,
126
+ * default: null
127
+ * })
128
+ * }
129
+ * });
130
+ *
131
+ * // Allows: { emailNotifications: true, smsNotifications: null }
132
+ * ```
4
133
  */
5
134
  export class OasBoolean {
6
135
  constructor(fields = {}) {
@@ -9,29 +9,279 @@ import type { OasRef } from '../ref/Ref.js';
9
9
  import type { OasSchema } from '../schema/Schema.js';
10
10
  import type { RefName } from '../../types/RefName.js';
11
11
  import type { OasSecurityScheme } from '../securitySchemes/SecurityScheme.js';
12
+ /**
13
+ * Available component types in an OpenAPI document.
14
+ */
12
15
  export declare const componentsKeys: string[];
16
+ /**
17
+ * Constructor fields for {@link OasComponents}.
18
+ */
13
19
  export type ComponentsFields = {
20
+ /** Reusable schema components */
14
21
  schemas?: Record<RefName, OasSchema | OasRef<'schema'>>;
22
+ /** Reusable response components */
15
23
  responses?: Record<RefName, OasResponse | OasRef<'response'>>;
24
+ /** Reusable parameter components */
16
25
  parameters?: Record<RefName, OasParameter | OasRef<'parameter'>>;
26
+ /** Reusable example components */
17
27
  examples?: Record<RefName, OasExample | OasRef<'example'>>;
28
+ /** Reusable request body components */
18
29
  requestBodies?: Record<RefName, OasRequestBody | OasRef<'requestBody'>>;
30
+ /** Reusable header components */
19
31
  headers?: Record<RefName, OasHeader | OasRef<'header'>>;
32
+ /** Reusable security scheme components */
20
33
  securitySchemes?: Record<string, OasSecurityScheme | OasRef<'securityScheme'>>;
34
+ /** Custom extension fields (x-* properties) */
21
35
  extensionFields?: Record<string, unknown>;
22
36
  };
23
- /** Container object for re-usable schema items within the API
37
+ /**
38
+ * Represents the OpenAPI Components Object in the SKMTC OAS processing system.
39
+ *
40
+ * The `OasComponents` class manages the reusable components section of an OpenAPI
41
+ * document, providing centralized access to shared schemas, responses, parameters,
42
+ * and other reusable elements that can be referenced throughout the API specification.
43
+ *
44
+ * This class serves as the central registry for all reusable components, enabling
45
+ * efficient reference resolution and reducing duplication in OpenAPI documents.
46
+ *
47
+ * ## Key Features
48
+ *
49
+ * - **Schema Management**: Central repository for reusable data schemas
50
+ * - **Response Reuse**: Common response definitions for consistent API responses
51
+ * - **Parameter Standardization**: Shared parameter definitions across operations
52
+ * - **Reference Resolution**: Support for internal references ($ref) to components
53
+ * - **Type Safety**: Strongly typed access to different component categories
54
+ * - **Extension Support**: Custom OpenAPI extension field handling
55
+ *
56
+ * @example Basic component access
57
+ * ```typescript
58
+ * import { OasComponents } from '@skmtc/core';
59
+ *
60
+ * // Typically created during document parsing
61
+ * const components = new OasComponents({
62
+ * schemas: {
63
+ * User: new OasObject({
64
+ * properties: {
65
+ * id: new OasString(),
66
+ * name: new OasString()
67
+ * }
68
+ * }),
69
+ * Product: new OasObject({
70
+ * properties: {
71
+ * id: new OasString(),
72
+ * price: new OasNumber()
73
+ * }
74
+ * })
75
+ * },
76
+ * responses: {
77
+ * NotFound: new OasResponse({
78
+ * description: '404 - Resource not found'
79
+ * })
80
+ * }
81
+ * });
82
+ *
83
+ * // Access schemas
84
+ * const userSchema = components.schemas?.['User'];
85
+ * const productSchema = components.schemas?.['Product'];
86
+ *
87
+ * // Access responses
88
+ * const notFoundResponse = components.responses?.['NotFound'];
89
+ * ```
90
+ *
91
+ * @example Schema management
92
+ * ```typescript
93
+ * // Get all schema reference names
94
+ * const schemaNames = components.toSchemasRefNames();
95
+ * console.log(schemaNames); // ['User', 'Product', 'Order']
96
+ *
97
+ * // Remove a schema (useful for processing)
98
+ * const removedSchema = components.removeSchema('ObsoleteSchema');
99
+ * console.log('Removed:', removedSchema);
100
+ *
101
+ * // Check remaining schemas
102
+ * const remainingSchemas = components.toSchemasRefNames();
103
+ * console.log('Remaining:', remainingSchemas);
104
+ * ```
105
+ *
106
+ * @example Parameter reuse
107
+ * ```typescript
108
+ * const components = new OasComponents({
109
+ * parameters: {
110
+ * PageSize: new OasParameter({
111
+ * name: 'pageSize',
112
+ * in: 'query',
113
+ * schema: new OasInteger({ minimum: 1, maximum: 100, default: 20 })
114
+ * }),
115
+ * PageNumber: new OasParameter({
116
+ * name: 'page',
117
+ * in: 'query',
118
+ * schema: new OasInteger({ minimum: 1, default: 1 })
119
+ * })
120
+ * }
121
+ * });
122
+ *
123
+ * // These parameters can be referenced in operations:
124
+ * // $ref: '#/components/parameters/PageSize'
125
+ * // $ref: '#/components/parameters/PageNumber'
126
+ * ```
127
+ *
128
+ * @example Response standardization
129
+ * ```typescript
130
+ * const components = new OasComponents({
131
+ * responses: {
132
+ * Success: new OasResponse({
133
+ * description: 'Successful operation',
134
+ * content: {
135
+ * 'application/json': {
136
+ * schema: new OasObject({
137
+ * properties: {
138
+ * success: new OasBoolean({ default: true }),
139
+ * data: new OasObject({ additionalProperties: true })
140
+ * }
141
+ * })
142
+ * }
143
+ * }
144
+ * }),
145
+ * ValidationError: new OasResponse({
146
+ * description: 'Validation failed',
147
+ * content: {
148
+ * 'application/json': {
149
+ * schema: new OasObject({
150
+ * properties: {
151
+ * error: new OasString(),
152
+ * details: new OasArray({
153
+ * items: new OasString()
154
+ * })
155
+ * }
156
+ * })
157
+ * }
158
+ * }
159
+ * })
160
+ * }
161
+ * });
162
+ *
163
+ * // Standardized responses across all operations
164
+ * ```
165
+ *
166
+ * @example Processing components in generators
167
+ * ```typescript
168
+ * class ComponentProcessor {
169
+ * processDocument(document: OasDocument) {
170
+ * const components = document.components;
171
+ * if (!components) return;
172
+ *
173
+ * // Process all schemas
174
+ * if (components.schemas) {
175
+ * Object.entries(components.schemas).forEach(([name, schema]) => {
176
+ * if (schema.isRef()) {
177
+ * console.log(`Schema ${name} is a reference to ${schema.$ref}`);
178
+ * } else {
179
+ * console.log(`Schema ${name} is a direct definition`);
180
+ * }
181
+ * });
182
+ * }
24
183
  *
25
- * Fields not yet implemented: **securitySchemes**, **links**, **callbacks**
184
+ * // Process parameters
185
+ * if (components.parameters) {
186
+ * Object.keys(components.parameters).forEach(paramName => {
187
+ * console.log(`Reusable parameter: ${paramName}`);
188
+ * });
189
+ * }
190
+ * }
191
+ * }
192
+ * ```
26
193
  */
27
194
  export declare class OasComponents {
28
195
  #private;
29
196
  /** Static identifier property for OasComponents */
30
197
  oasType: "components";
198
+ /**
199
+ * Creates a new OasComponents instance.
200
+ *
201
+ * @param fields - Component definitions (defaults to empty object)
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const components = new OasComponents({
206
+ * schemas: {
207
+ * User: userSchema,
208
+ * Product: productSchema
209
+ * },
210
+ * responses: {
211
+ * NotFound: notFoundResponse
212
+ * }
213
+ * });
214
+ * ```
215
+ */
31
216
  constructor(fields?: ComponentsFields);
217
+ /**
218
+ * Gets all schema reference names.
219
+ *
220
+ * This method extracts the keys from the schemas object and returns them
221
+ * as an array of RefName types. Useful for iterating over all available
222
+ * schemas or checking schema availability.
223
+ *
224
+ * @returns Array of reference names for all schemas
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * const components = new OasComponents({
229
+ * schemas: {
230
+ * User: userSchema,
231
+ * Product: productSchema,
232
+ * Order: orderSchema
233
+ * }
234
+ * });
235
+ *
236
+ * const schemaNames = components.toSchemasRefNames();
237
+ * console.log(schemaNames); // ['User', 'Product', 'Order']
238
+ *
239
+ * // Use for processing
240
+ * schemaNames.forEach(name => {
241
+ * const schema = components.schemas?.[name];
242
+ * console.log(`Processing schema: ${name}`);
243
+ * });
244
+ * ```
245
+ */
32
246
  toSchemasRefNames(): RefName[];
33
247
  /** Record holding re-usable {@link OasSchema} objects or Refs */
34
248
  get schemas(): Record<RefName, OasSchema | OasRef<'schema'>> | undefined;
249
+ /**
250
+ * Removes a schema from the components and returns it.
251
+ *
252
+ * This method permanently removes a schema from the components object
253
+ * and returns the removed schema. This is useful during processing when
254
+ * you need to extract and handle specific schemas separately.
255
+ *
256
+ * @param refName - The reference name of the schema to remove
257
+ * @returns The removed schema object or reference
258
+ *
259
+ * @throws {Error} When the schema doesn't exist or schemas object is undefined
260
+ *
261
+ * @example
262
+ * ```typescript
263
+ * const components = new OasComponents({
264
+ * schemas: {
265
+ * User: userSchema,
266
+ * Product: productSchema,
267
+ * Internal: internalSchema
268
+ * }
269
+ * });
270
+ *
271
+ * // Remove internal schema that shouldn't be exposed
272
+ * const internalSchema = components.removeSchema('Internal');
273
+ * console.log('Removed internal schema');
274
+ *
275
+ * // Check remaining schemas
276
+ * const remainingSchemas = components.toSchemasRefNames();
277
+ * console.log(remainingSchemas); // ['User', 'Product']
278
+ *
279
+ * // Process removed schema separately
280
+ * if (!internalSchema.isRef()) {
281
+ * console.log('Processing internal schema privately');
282
+ * }
283
+ * ```
284
+ */
35
285
  removeSchema(refName: RefName): OasSchema | OasRef<'schema'>;
36
286
  /** Record holding re-usable {@link OasResponse} objects or Refs */
37
287
  get responses(): Record<RefName, OasResponse | OasRef<'response'>> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../../../src/oas/components/Components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../../../src/oas/components/Components.ts"],"names":[],"mappings":"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"}