@lapidist/dtif-parser 0.2.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.
Files changed (199) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +50 -0
  3. package/dist/ast/nodes.d.ts +73 -0
  4. package/dist/ast/nodes.d.ts.map +1 -0
  5. package/dist/ast/nodes.js +2 -0
  6. package/dist/ast/nodes.js.map +1 -0
  7. package/dist/ast/normaliser/context.d.ts +22 -0
  8. package/dist/ast/normaliser/context.d.ts.map +1 -0
  9. package/dist/ast/normaliser/context.js +26 -0
  10. package/dist/ast/normaliser/context.js.map +1 -0
  11. package/dist/ast/normaliser/document.d.ts +4 -0
  12. package/dist/ast/normaliser/document.d.ts.map +1 -0
  13. package/dist/ast/normaliser/document.js +49 -0
  14. package/dist/ast/normaliser/document.js.map +1 -0
  15. package/dist/ast/normaliser/fields.d.ts +7 -0
  16. package/dist/ast/normaliser/fields.d.ts.map +1 -0
  17. package/dist/ast/normaliser/fields.js +71 -0
  18. package/dist/ast/normaliser/fields.js.map +1 -0
  19. package/dist/ast/normaliser/metadata.d.ts +5 -0
  20. package/dist/ast/normaliser/metadata.d.ts.map +1 -0
  21. package/dist/ast/normaliser/metadata.js +201 -0
  22. package/dist/ast/normaliser/metadata.js.map +1 -0
  23. package/dist/ast/normaliser/nodes.d.ts +5 -0
  24. package/dist/ast/normaliser/nodes.d.ts.map +1 -0
  25. package/dist/ast/normaliser/nodes.js +108 -0
  26. package/dist/ast/normaliser/nodes.js.map +1 -0
  27. package/dist/ast/normaliser/overrides.d.ts +7 -0
  28. package/dist/ast/normaliser/overrides.d.ts.map +1 -0
  29. package/dist/ast/normaliser/overrides.js +156 -0
  30. package/dist/ast/normaliser/overrides.js.map +1 -0
  31. package/dist/ast/normaliser/utils.d.ts +12 -0
  32. package/dist/ast/normaliser/utils.d.ts.map +1 -0
  33. package/dist/ast/normaliser/utils.js +45 -0
  34. package/dist/ast/normaliser/utils.js.map +1 -0
  35. package/dist/ast/normaliser.d.ts +5 -0
  36. package/dist/ast/normaliser.d.ts.map +1 -0
  37. package/dist/ast/normaliser.js +25 -0
  38. package/dist/ast/normaliser.js.map +1 -0
  39. package/dist/cli/args.d.ts +3 -0
  40. package/dist/cli/args.d.ts.map +1 -0
  41. package/dist/cli/args.js +202 -0
  42. package/dist/cli/args.js.map +1 -0
  43. package/dist/cli/io.d.ts +3 -0
  44. package/dist/cli/io.d.ts.map +1 -0
  45. package/dist/cli/io.js +65 -0
  46. package/dist/cli/io.js.map +1 -0
  47. package/dist/cli/output.d.ts +5 -0
  48. package/dist/cli/output.d.ts.map +1 -0
  49. package/dist/cli/output.js +113 -0
  50. package/dist/cli/output.js.map +1 -0
  51. package/dist/cli/parse.d.ts +4 -0
  52. package/dist/cli/parse.d.ts.map +1 -0
  53. package/dist/cli/parse.js +134 -0
  54. package/dist/cli/parse.js.map +1 -0
  55. package/dist/cli/serialize.d.ts +12 -0
  56. package/dist/cli/serialize.d.ts.map +1 -0
  57. package/dist/cli/serialize.js +92 -0
  58. package/dist/cli/serialize.js.map +1 -0
  59. package/dist/cli/types.d.ts +118 -0
  60. package/dist/cli/types.d.ts.map +1 -0
  61. package/dist/cli/types.js +2 -0
  62. package/dist/cli/types.js.map +1 -0
  63. package/dist/diagnostics/bag.d.ts +26 -0
  64. package/dist/diagnostics/bag.d.ts.map +1 -0
  65. package/dist/diagnostics/bag.js +101 -0
  66. package/dist/diagnostics/bag.js.map +1 -0
  67. package/dist/diagnostics/codes.d.ts +72 -0
  68. package/dist/diagnostics/codes.d.ts.map +1 -0
  69. package/dist/diagnostics/codes.js +94 -0
  70. package/dist/diagnostics/codes.js.map +1 -0
  71. package/dist/diagnostics/severity.d.ts +8 -0
  72. package/dist/diagnostics/severity.d.ts.map +1 -0
  73. package/dist/diagnostics/severity.js +35 -0
  74. package/dist/diagnostics/severity.js.map +1 -0
  75. package/dist/graph/builder/context.d.ts +23 -0
  76. package/dist/graph/builder/context.d.ts.map +1 -0
  77. package/dist/graph/builder/context.js +29 -0
  78. package/dist/graph/builder/context.js.map +1 -0
  79. package/dist/graph/builder/nodes.d.ts +6 -0
  80. package/dist/graph/builder/nodes.d.ts.map +1 -0
  81. package/dist/graph/builder/nodes.js +85 -0
  82. package/dist/graph/builder/nodes.js.map +1 -0
  83. package/dist/graph/builder/overrides.d.ts +5 -0
  84. package/dist/graph/builder/overrides.d.ts.map +1 -0
  85. package/dist/graph/builder/overrides.js +62 -0
  86. package/dist/graph/builder/overrides.js.map +1 -0
  87. package/dist/graph/builder/references.d.ts +7 -0
  88. package/dist/graph/builder/references.d.ts.map +1 -0
  89. package/dist/graph/builder/references.js +93 -0
  90. package/dist/graph/builder/references.js.map +1 -0
  91. package/dist/graph/builder.d.ts +5 -0
  92. package/dist/graph/builder.d.ts.map +1 -0
  93. package/dist/graph/builder.js +30 -0
  94. package/dist/graph/builder.js.map +1 -0
  95. package/dist/graph/nodes.d.ts +60 -0
  96. package/dist/graph/nodes.d.ts.map +1 -0
  97. package/dist/graph/nodes.js +2 -0
  98. package/dist/graph/nodes.js.map +1 -0
  99. package/dist/index.d.ts +26 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +14 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/io/decoder/encoding.d.ts +4 -0
  104. package/dist/io/decoder/encoding.d.ts.map +1 -0
  105. package/dist/io/decoder/encoding.js +36 -0
  106. package/dist/io/decoder/encoding.js.map +1 -0
  107. package/dist/io/decoder/errors.d.ts +4 -0
  108. package/dist/io/decoder/errors.d.ts.map +1 -0
  109. package/dist/io/decoder/errors.js +7 -0
  110. package/dist/io/decoder/errors.js.map +1 -0
  111. package/dist/io/decoder/source-map.d.ts +4 -0
  112. package/dist/io/decoder/source-map.d.ts.map +1 -0
  113. package/dist/io/decoder/source-map.js +106 -0
  114. package/dist/io/decoder/source-map.js.map +1 -0
  115. package/dist/io/decoder/yaml.d.ts +8 -0
  116. package/dist/io/decoder/yaml.d.ts.map +1 -0
  117. package/dist/io/decoder/yaml.js +28 -0
  118. package/dist/io/decoder/yaml.js.map +1 -0
  119. package/dist/io/decoder.d.ts +4 -0
  120. package/dist/io/decoder.d.ts.map +1 -0
  121. package/dist/io/decoder.js +19 -0
  122. package/dist/io/decoder.js.map +1 -0
  123. package/dist/io/document-cache.d.ts +15 -0
  124. package/dist/io/document-cache.d.ts.map +1 -0
  125. package/dist/io/document-cache.js +101 -0
  126. package/dist/io/document-cache.js.map +1 -0
  127. package/dist/io/document-loader.d.ts +37 -0
  128. package/dist/io/document-loader.d.ts.map +1 -0
  129. package/dist/io/document-loader.js +255 -0
  130. package/dist/io/document-loader.js.map +1 -0
  131. package/dist/plugins/index.d.ts +7 -0
  132. package/dist/plugins/index.d.ts.map +1 -0
  133. package/dist/plugins/index.js +6 -0
  134. package/dist/plugins/index.js.map +1 -0
  135. package/dist/plugins/registry.d.ts +20 -0
  136. package/dist/plugins/registry.d.ts.map +1 -0
  137. package/dist/plugins/registry.js +136 -0
  138. package/dist/plugins/registry.js.map +1 -0
  139. package/dist/plugins/types.d.ts +48 -0
  140. package/dist/plugins/types.d.ts.map +1 -0
  141. package/dist/plugins/types.js +2 -0
  142. package/dist/plugins/types.js.map +1 -0
  143. package/dist/resolver/document-resolver.d.ts +29 -0
  144. package/dist/resolver/document-resolver.d.ts.map +1 -0
  145. package/dist/resolver/document-resolver.js +551 -0
  146. package/dist/resolver/document-resolver.js.map +1 -0
  147. package/dist/resolver/index.d.ts +3 -0
  148. package/dist/resolver/index.d.ts.map +1 -0
  149. package/dist/resolver/index.js +2 -0
  150. package/dist/resolver/index.js.map +1 -0
  151. package/dist/resolver/internal/constants.d.ts +12 -0
  152. package/dist/resolver/internal/constants.d.ts.map +1 -0
  153. package/dist/resolver/internal/constants.js +8 -0
  154. package/dist/resolver/internal/constants.js.map +1 -0
  155. package/dist/resolver/internal/context.d.ts +8 -0
  156. package/dist/resolver/internal/context.d.ts.map +1 -0
  157. package/dist/resolver/internal/context.js +43 -0
  158. package/dist/resolver/internal/context.js.map +1 -0
  159. package/dist/resolver/internal/helpers.d.ts +16 -0
  160. package/dist/resolver/internal/helpers.d.ts.map +1 -0
  161. package/dist/resolver/internal/helpers.js +53 -0
  162. package/dist/resolver/internal/helpers.js.map +1 -0
  163. package/dist/resolver/internal/resolved-token.d.ts +24 -0
  164. package/dist/resolver/internal/resolved-token.d.ts.map +1 -0
  165. package/dist/resolver/internal/resolved-token.js +26 -0
  166. package/dist/resolver/internal/resolved-token.js.map +1 -0
  167. package/dist/resolver/types.d.ts +51 -0
  168. package/dist/resolver/types.d.ts.map +1 -0
  169. package/dist/resolver/types.js +2 -0
  170. package/dist/resolver/types.js.map +1 -0
  171. package/dist/session/internal/options.d.ts +16 -0
  172. package/dist/session/internal/options.d.ts.map +1 -0
  173. package/dist/session/internal/options.js +30 -0
  174. package/dist/session/internal/options.js.map +1 -0
  175. package/dist/session/types.d.ts +16 -0
  176. package/dist/session/types.d.ts.map +1 -0
  177. package/dist/session/types.js +2 -0
  178. package/dist/session/types.js.map +1 -0
  179. package/dist/session.d.ts +19 -0
  180. package/dist/session.d.ts.map +1 -0
  181. package/dist/session.js +210 -0
  182. package/dist/session.js.map +1 -0
  183. package/dist/types.d.ts +75 -0
  184. package/dist/types.d.ts.map +1 -0
  185. package/dist/types.js +2 -0
  186. package/dist/types.js.map +1 -0
  187. package/dist/utils/json-pointer.d.ts +13 -0
  188. package/dist/utils/json-pointer.d.ts.map +1 -0
  189. package/dist/utils/json-pointer.js +89 -0
  190. package/dist/utils/json-pointer.js.map +1 -0
  191. package/dist/utils/source.d.ts +21 -0
  192. package/dist/utils/source.d.ts.map +1 -0
  193. package/dist/utils/source.js +125 -0
  194. package/dist/utils/source.js.map +1 -0
  195. package/dist/validation/schema-guard.d.ts +20 -0
  196. package/dist/validation/schema-guard.d.ts.map +1 -0
  197. package/dist/validation/schema-guard.js +205 -0
  198. package/dist/validation/schema-guard.js.map +1 -0
  199. package/package.json +49 -0
@@ -0,0 +1,205 @@
1
+ import Ajv2020 from 'ajv/dist/2020.js';
2
+ import addFormats from 'ajv-formats';
3
+ import { createRequire } from 'node:module';
4
+ import { DiagnosticCodes } from '../diagnostics/codes.js';
5
+ import { JSON_POINTER_ROOT, normalizeJsonPointer } from '../utils/json-pointer.js';
6
+ const require = createRequire(import.meta.url);
7
+ const CORE_SCHEMA = require('@lapidist/dtif-schema/core.json');
8
+ const DEFAULT_SCHEMA_ID = CORE_SCHEMA.$id ?? 'https://dtif.lapidist.net/schema/core.json';
9
+ const DEFAULT_VALIDATOR_OPTIONS = {
10
+ allErrors: true,
11
+ allowUnionTypes: true,
12
+ strict: false,
13
+ $data: true
14
+ };
15
+ const AjvConstructor = Ajv2020;
16
+ export class SchemaGuardError extends Error {
17
+ constructor(message, options) {
18
+ super(message, options);
19
+ this.name = 'SchemaGuardError';
20
+ }
21
+ }
22
+ function createSchemaValidator(options = {}) {
23
+ const { ajv: existingAjv, ajvOptions = {}, formats = addFormats, schemaId = DEFAULT_SCHEMA_ID } = options;
24
+ const ajv = existingAjv ??
25
+ new AjvConstructor({
26
+ ...DEFAULT_VALIDATOR_OPTIONS,
27
+ ...ajvOptions
28
+ });
29
+ if (formats) {
30
+ const register = (typeof formats === 'function' ? formats : addFormats);
31
+ register(ajv);
32
+ }
33
+ let validate = ajv.getSchema(schemaId);
34
+ if (!validate) {
35
+ ajv.addSchema(CORE_SCHEMA, schemaId);
36
+ validate = ajv.getSchema(schemaId);
37
+ }
38
+ const compiled = validate ?? ajv.compile(CORE_SCHEMA);
39
+ return {
40
+ ajv,
41
+ schema: CORE_SCHEMA,
42
+ schemaId,
43
+ validate: compiled
44
+ };
45
+ }
46
+ export class SchemaGuard {
47
+ validator;
48
+ constructor(options = {}) {
49
+ const { validator, ...validatorOptions } = options;
50
+ this.validator = validator ?? createSchemaValidator(validatorOptions);
51
+ }
52
+ validate(document) {
53
+ let valid;
54
+ try {
55
+ valid = this.validator.validate(document.data);
56
+ }
57
+ catch (error) {
58
+ throw new SchemaGuardError('Failed to validate DTIF document against the core schema.', {
59
+ cause: error
60
+ });
61
+ }
62
+ const errors = valid ? [] : (this.validator.validate.errors ?? []);
63
+ const diagnostics = errors.map((error) => this.createDiagnostic(error, document));
64
+ const frozenDiagnostics = diagnostics.map((diagnostic) => Object.freeze(diagnostic));
65
+ return Object.freeze({
66
+ valid,
67
+ diagnostics: Object.freeze(frozenDiagnostics)
68
+ });
69
+ }
70
+ createDiagnostic(error, document) {
71
+ const pointer = normalizeJsonPointer(`#${error.instancePath ?? ''}`);
72
+ const span = this.resolveSpan(pointer, document) ?? this.resolveSpan(JSON_POINTER_ROOT, document);
73
+ const related = buildRelatedInformation(error);
74
+ return {
75
+ code: DiagnosticCodes.schemaGuard.INVALID_DOCUMENT,
76
+ message: formatErrorMessage(error),
77
+ severity: 'error',
78
+ pointer,
79
+ span,
80
+ related: related.length > 0 ? related : undefined
81
+ };
82
+ }
83
+ resolveSpan(pointer, document) {
84
+ const normalized = normalizeJsonPointer(pointer);
85
+ return document.sourceMap.pointers.get(normalized);
86
+ }
87
+ }
88
+ function formatErrorMessage(error) {
89
+ const base = error.message?.trim();
90
+ const keyword = error.keyword ? error.keyword.trim() : '';
91
+ if (base && base.length > 0) {
92
+ return `Schema violation: ${ensureSentence(base)}`;
93
+ }
94
+ if (keyword) {
95
+ return `Schema violation: Constraint "${keyword}" failed.`;
96
+ }
97
+ return 'Schema violation: Document does not conform to the DTIF schema.';
98
+ }
99
+ function ensureSentence(value) {
100
+ const capitalised = value.charAt(0).toUpperCase() + value.slice(1);
101
+ return /[.!?]$/u.test(capitalised) ? capitalised : `${capitalised}.`;
102
+ }
103
+ function buildRelatedInformation(error) {
104
+ const related = [];
105
+ if (error.schemaPath) {
106
+ related.push({ message: `Schema path: ${error.schemaPath}` });
107
+ }
108
+ const detail = formatErrorDetail(error.keyword, error.params);
109
+ if (detail) {
110
+ related.push({ message: detail });
111
+ }
112
+ return related;
113
+ }
114
+ function formatErrorDetail(keyword, params) {
115
+ if (!params || typeof params !== 'object') {
116
+ return undefined;
117
+ }
118
+ const record = params;
119
+ switch (keyword) {
120
+ case 'required': {
121
+ const name = record.missingProperty;
122
+ return typeof name === 'string' ? `Missing property: ${name}` : undefined;
123
+ }
124
+ case 'additionalProperties': {
125
+ const name = record.additionalProperty;
126
+ return typeof name === 'string' ? `Unexpected property: ${name}` : undefined;
127
+ }
128
+ case 'type': {
129
+ const expected = record.type;
130
+ return typeof expected === 'string' ? `Expected type: ${expected}` : undefined;
131
+ }
132
+ case 'enum': {
133
+ const values = record.allowedValues;
134
+ return Array.isArray(values) ? `Allowed values: ${formatAllowedValues(values)}` : undefined;
135
+ }
136
+ case 'const': {
137
+ const value = record.allowedValue;
138
+ return value !== undefined ? `Expected value: ${formatAllowedValue(value)}` : undefined;
139
+ }
140
+ case 'pattern': {
141
+ const pattern = record.pattern;
142
+ return typeof pattern === 'string' ? `Required pattern: ${pattern}` : undefined;
143
+ }
144
+ case 'format': {
145
+ const format = record.format;
146
+ return typeof format === 'string' ? `Expected format: ${format}` : undefined;
147
+ }
148
+ case 'minItems':
149
+ case 'minLength': {
150
+ const limit = record.limit;
151
+ if (typeof limit === 'number') {
152
+ const noun = keyword === 'minItems' ? 'item' : 'character';
153
+ return `Expected at least ${limit} ${pluralise(noun, limit)}.`;
154
+ }
155
+ return undefined;
156
+ }
157
+ case 'maxItems':
158
+ case 'maxLength': {
159
+ const limit = record.limit;
160
+ if (typeof limit === 'number') {
161
+ const noun = keyword === 'maxItems' ? 'item' : 'character';
162
+ return `Expected no more than ${limit} ${pluralise(noun, limit)}.`;
163
+ }
164
+ return undefined;
165
+ }
166
+ case 'minimum':
167
+ case 'exclusiveMinimum': {
168
+ const limit = record.limit;
169
+ if (typeof limit === 'number') {
170
+ const comparator = keyword === 'exclusiveMinimum' ? 'greater than' : 'at least';
171
+ return `Value must be ${comparator} ${limit}.`;
172
+ }
173
+ return undefined;
174
+ }
175
+ case 'maximum':
176
+ case 'exclusiveMaximum': {
177
+ const limit = record.limit;
178
+ if (typeof limit === 'number') {
179
+ const comparator = keyword === 'exclusiveMaximum' ? 'less than' : 'at most';
180
+ return `Value must be ${comparator} ${limit}.`;
181
+ }
182
+ return undefined;
183
+ }
184
+ default:
185
+ return undefined;
186
+ }
187
+ }
188
+ function formatAllowedValues(values) {
189
+ return values.map((value) => formatAllowedValue(value)).join(', ');
190
+ }
191
+ function formatAllowedValue(value) {
192
+ if (typeof value === 'string') {
193
+ return value;
194
+ }
195
+ try {
196
+ return JSON.stringify(value);
197
+ }
198
+ catch {
199
+ return String(value);
200
+ }
201
+ }
202
+ function pluralise(noun, quantity) {
203
+ return quantity === 1 ? noun : `${noun}s`;
204
+ }
205
+ //# sourceMappingURL=schema-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-guard.js","sourceRoot":"","sources":["../../src/validation/schema-guard.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@lapidist/dtif-parser",
3
+ "version": "0.2.0",
4
+ "description": "Canonical parser and runtime for Design Token Interchange Format (DTIF) documents.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "sideEffects": false,
8
+ "main": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "bin": {
11
+ "dtif-parse": "./dist/cli/parse.js"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ },
18
+ "./package.json": "./package.json"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md",
23
+ "CHANGELOG.md"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "clean": "rimraf dist",
28
+ "test": "node --import tsx --test ./tests/**/*.test.ts",
29
+ "prepack": "npm run build"
30
+ },
31
+ "dependencies": {
32
+ "@lapidist/dtif-schema": "^0.1.7",
33
+ "@lapidist/dtif-validator": "^0.1.7",
34
+ "yaml": "^2.8.1"
35
+ },
36
+ "devDependencies": {
37
+ "rimraf": "^6.0.1",
38
+ "tsx": "^4.20.5",
39
+ "typescript": "^5.6.3"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/bylapidist/dtif.git",
44
+ "directory": "parser"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ }
49
+ }