@openuji/vocab-build 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turtle.js","sourceRoot":"","sources":["../../src/generate/turtle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGzC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;AAO3C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,OAAsB;IACtE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACtB,QAAQ,EAAE;YACN,GAAG,EAAE,6CAA6C;YAClD,IAAI,EAAE,uCAAuC;YAC7C,GAAG,EAAE,gCAAgC;YACrC,GAAG,EAAE,mCAAmC;YACxC,EAAE,EAAE,MAAM,CAAC,SAAS;SACvB;KACJ,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IACnC,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,iDAAiD,CAAC,EAC5D,SAAS,CAAC,wCAAwC,CAAC,CACtD,CAAC;IAEF,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,4CAA4C,CAAC,EACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CACxB,CAAC;IAEF,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,8CAA8C,CAAC,EACzD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAC9B,CAAC;IAEF,8BAA8B;IAC9B,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,2CAA2C,CAAC,EACtD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAC3B,CAAC;QAEF,MAAM,UAAU,GAAG,GAAG,WAAW,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,YAAY,CAAC;QACrF,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,0CAA0C,CAAC,EACrD,SAAS,CAAC,UAAU,CAAC,CACxB,CAAC;IACN,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,WAAW,CAAC,EACtB,SAAS,CAAC,uCAAuC,CAAC,EAClD,SAAS,CAAC,kCAAkC,CAAC,CAChD,CAAC;IACN,CAAC;IAED,YAAY;IACZ,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,QAAQ,GACV,IAAI,CAAC,IAAI,KAAK,OAAO;YACjB,CAAC,CAAC,4CAA4C;YAC9C,CAAC,CAAC,qDAAqD,CAAC;QAEhE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,iDAAiD,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,4CAA4C,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,8CAA8C,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAErH,kCAAkC;QAClC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,6CAA6C,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzH,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,4CAA4C,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvH,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CACV,SAAS,CAAC,OAAO,CAAC,EAClB,SAAS,CAAC,0CAA0C,CAAC,EACrD,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,0CAA0C,CAAC,CAAC,CACzE,CAAC;QACN,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,8CAA8C,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClH,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAmB,EAAE,MAAc,EAAE,EAAE;QAC/C,IAAI,KAAK;YAAE,MAAM,KAAK,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { BuildConfig } from './model.js';
2
+ export interface BuildResult {
3
+ success: boolean;
4
+ files: string[];
5
+ errors?: string[];
6
+ }
7
+ /**
8
+ * Build vocabulary assets from source file
9
+ */
10
+ export declare function buildVocab(config: BuildConfig): Promise<BuildResult>;
11
+ /**
12
+ * Validate a vocabulary source file
13
+ */
14
+ export declare function validateVocab(inputPath: string): Promise<BuildResult>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAM3D,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAoG1E;AAiCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsB3E"}
package/dist/index.js ADDED
@@ -0,0 +1,143 @@
1
+ import { readFile, writeFile, mkdir, access } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { VocabSourceSchema, validateVocabSource, validateBuildConfig } from './model.js';
4
+ import { generateContext, formatContext } from './generate/context.js';
5
+ import { generateTurtle } from './generate/turtle.js';
6
+ import { generateHTML } from './generate/html.js';
7
+ import { generateRedirects } from './generate/redirects.js';
8
+ /**
9
+ * Build vocabulary assets from source file
10
+ */
11
+ export async function buildVocab(config) {
12
+ try {
13
+ // Validate configuration
14
+ validateBuildConfig(config);
15
+ // Load and parse source file
16
+ const sourceContent = await readFile(config.input, 'utf-8');
17
+ const sourceData = JSON.parse(sourceContent);
18
+ const source = VocabSourceSchema.parse(sourceData);
19
+ // Validate source
20
+ validateVocabSource(source);
21
+ // Determine version
22
+ const version = config.mode === 'TR' ? (config.version || source.version) : undefined;
23
+ // Check TR immutability
24
+ if (config.mode === 'TR' && version && !config.force) {
25
+ await checkTRImmutability(config.output, source.module, version);
26
+ }
27
+ // Generate assets
28
+ const contextObj = generateContext(source);
29
+ const contextJson = await formatContext(contextObj);
30
+ const turtle = generateTurtle(source, { mode: config.mode, version });
31
+ const html = generateHTML(source, { mode: config.mode, version, baseUrl: config.baseUrl });
32
+ // Determine output paths
33
+ const files = [];
34
+ const pathPrefix = source.module === 'core' ? 'ns' : 'ui';
35
+ const turtleFilename = `${pathPrefix}.ttl`;
36
+ // Write latest versions
37
+ const latestDir = join(config.output, pathPrefix);
38
+ await ensureDir(latestDir);
39
+ await writeFile(join(latestDir, 'index.html'), html);
40
+ files.push(join(latestDir, 'index.html'));
41
+ await writeFile(join(latestDir, turtleFilename), turtle);
42
+ files.push(join(latestDir, turtleFilename));
43
+ const contextsDir = join(config.output, 'contexts');
44
+ await ensureDir(contextsDir);
45
+ await writeFile(join(contextsDir, `${source.module}.jsonld`), contextJson);
46
+ files.push(join(contextsDir, `${source.module}.jsonld`));
47
+ // Write ED or TR versions
48
+ if (config.mode === 'ED') {
49
+ const edDir = join(config.output, 'ED', source.module);
50
+ await ensureDir(edDir);
51
+ await writeFile(join(edDir, 'index.html'), html);
52
+ files.push(join(edDir, 'index.html'));
53
+ }
54
+ else if (config.mode === 'TR' && version) {
55
+ const trDir = join(config.output, 'TR', source.module, version);
56
+ await ensureDir(trDir);
57
+ await writeFile(join(trDir, 'index.html'), html);
58
+ files.push(join(trDir, 'index.html'));
59
+ await writeFile(join(trDir, 'context.jsonld'), contextJson);
60
+ files.push(join(trDir, 'context.jsonld'));
61
+ await writeFile(join(trDir, turtleFilename), turtle);
62
+ files.push(join(trDir, turtleFilename));
63
+ }
64
+ // Generate redirects if configured
65
+ if (config.redirects && config.redirects !== 'none') {
66
+ const redirectContent = generateRedirects({
67
+ type: config.redirects,
68
+ module: source.module,
69
+ latestVersion: version,
70
+ baseUrl: config.baseUrl,
71
+ });
72
+ if (redirectContent) {
73
+ const redirectFile = config.redirects === 'netlify'
74
+ ? '_redirects'
75
+ : config.redirects === 'cloudflare'
76
+ ? '_redirects.json'
77
+ : 'redirects.json';
78
+ await writeFile(join(config.output, redirectFile), redirectContent);
79
+ files.push(join(config.output, redirectFile));
80
+ }
81
+ }
82
+ return {
83
+ success: true,
84
+ files,
85
+ };
86
+ }
87
+ catch (error) {
88
+ return {
89
+ success: false,
90
+ files: [],
91
+ errors: [error instanceof Error ? error.message : String(error)],
92
+ };
93
+ }
94
+ }
95
+ /**
96
+ * Check if TR snapshot exists and differs from new content
97
+ */
98
+ async function checkTRImmutability(outputDir, module, version) {
99
+ const trDir = join(outputDir, 'TR', module, version);
100
+ try {
101
+ await access(trDir);
102
+ throw new Error(`TR snapshot ${module} v${version} already exists. Use --force to overwrite.`);
103
+ }
104
+ catch (error) {
105
+ // Directory doesn't exist, which is good
106
+ if (error.code === 'ENOENT') {
107
+ return;
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ /**
113
+ * Ensure directory exists
114
+ */
115
+ async function ensureDir(dir) {
116
+ await mkdir(dir, { recursive: true });
117
+ }
118
+ /**
119
+ * Validate a vocabulary source file
120
+ */
121
+ export async function validateVocab(inputPath) {
122
+ try {
123
+ const content = await readFile(inputPath, 'utf-8');
124
+ const data = JSON.parse(content);
125
+ const source = VocabSourceSchema.parse(data);
126
+ validateVocabSource(source);
127
+ // Also validate that generated Turtle parses
128
+ const turtle = generateTurtle(source, { mode: source.status, version: source.version });
129
+ // If generateTurtle doesn't throw, we're good
130
+ return {
131
+ success: true,
132
+ files: [],
133
+ };
134
+ }
135
+ catch (error) {
136
+ return {
137
+ success: false,
138
+ files: [],
139
+ errors: [error instanceof Error ? error.message : String(error)],
140
+ };
141
+ }
142
+ }
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for term examples (JSON-LD and/or Turtle)
4
+ */
5
+ export declare const ExampleSchema: z.ZodObject<{
6
+ jsonld: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ turtle: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ jsonld?: Record<string, unknown> | undefined;
10
+ turtle?: string | undefined;
11
+ }, {
12
+ jsonld?: Record<string, unknown> | undefined;
13
+ turtle?: string | undefined;
14
+ }>;
15
+ /**
16
+ * Schema for individual term definitions
17
+ */
18
+ export declare const TermDefinitionSchema: z.ZodObject<{
19
+ id: z.ZodString;
20
+ kind: z.ZodEnum<["Class", "Property"]>;
21
+ label: z.ZodString;
22
+ comment: z.ZodString;
23
+ domain: z.ZodOptional<z.ZodString>;
24
+ range: z.ZodOptional<z.ZodString>;
25
+ deprecated: z.ZodOptional<z.ZodBoolean>;
26
+ seeAlso: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
28
+ jsonld: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
29
+ turtle: z.ZodOptional<z.ZodString>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ jsonld?: Record<string, unknown> | undefined;
32
+ turtle?: string | undefined;
33
+ }, {
34
+ jsonld?: Record<string, unknown> | undefined;
35
+ turtle?: string | undefined;
36
+ }>, "many">>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ id: string;
39
+ kind: "Class" | "Property";
40
+ label: string;
41
+ comment: string;
42
+ domain?: string | undefined;
43
+ range?: string | undefined;
44
+ deprecated?: boolean | undefined;
45
+ seeAlso?: string[] | undefined;
46
+ examples?: {
47
+ jsonld?: Record<string, unknown> | undefined;
48
+ turtle?: string | undefined;
49
+ }[] | undefined;
50
+ }, {
51
+ id: string;
52
+ kind: "Class" | "Property";
53
+ label: string;
54
+ comment: string;
55
+ domain?: string | undefined;
56
+ range?: string | undefined;
57
+ deprecated?: boolean | undefined;
58
+ seeAlso?: string[] | undefined;
59
+ examples?: {
60
+ jsonld?: Record<string, unknown> | undefined;
61
+ turtle?: string | undefined;
62
+ }[] | undefined;
63
+ }>;
64
+ /**
65
+ * Schema for JSON-LD context mapping
66
+ */
67
+ export declare const ContextMappingSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodObject<{
68
+ '@id': z.ZodString;
69
+ '@type': z.ZodOptional<z.ZodString>;
70
+ '@container': z.ZodOptional<z.ZodString>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ '@id': string;
73
+ '@type'?: string | undefined;
74
+ '@container'?: string | undefined;
75
+ }, {
76
+ '@id': string;
77
+ '@type'?: string | undefined;
78
+ '@container'?: string | undefined;
79
+ }>]>>;
80
+ /**
81
+ * Main vocabulary source schema
82
+ */
83
+ export declare const VocabSourceSchema: z.ZodObject<{
84
+ module: z.ZodEnum<["core", "ui"]>;
85
+ namespace: z.ZodString;
86
+ docBase: z.ZodString;
87
+ title: z.ZodString;
88
+ description: z.ZodString;
89
+ version: z.ZodOptional<z.ZodString>;
90
+ status: z.ZodEnum<["ED", "TR"]>;
91
+ updated: z.ZodOptional<z.ZodString>;
92
+ terms: z.ZodArray<z.ZodObject<{
93
+ id: z.ZodString;
94
+ kind: z.ZodEnum<["Class", "Property"]>;
95
+ label: z.ZodString;
96
+ comment: z.ZodString;
97
+ domain: z.ZodOptional<z.ZodString>;
98
+ range: z.ZodOptional<z.ZodString>;
99
+ deprecated: z.ZodOptional<z.ZodBoolean>;
100
+ seeAlso: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
101
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
102
+ jsonld: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
103
+ turtle: z.ZodOptional<z.ZodString>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ jsonld?: Record<string, unknown> | undefined;
106
+ turtle?: string | undefined;
107
+ }, {
108
+ jsonld?: Record<string, unknown> | undefined;
109
+ turtle?: string | undefined;
110
+ }>, "many">>;
111
+ }, "strip", z.ZodTypeAny, {
112
+ id: string;
113
+ kind: "Class" | "Property";
114
+ label: string;
115
+ comment: string;
116
+ domain?: string | undefined;
117
+ range?: string | undefined;
118
+ deprecated?: boolean | undefined;
119
+ seeAlso?: string[] | undefined;
120
+ examples?: {
121
+ jsonld?: Record<string, unknown> | undefined;
122
+ turtle?: string | undefined;
123
+ }[] | undefined;
124
+ }, {
125
+ id: string;
126
+ kind: "Class" | "Property";
127
+ label: string;
128
+ comment: string;
129
+ domain?: string | undefined;
130
+ range?: string | undefined;
131
+ deprecated?: boolean | undefined;
132
+ seeAlso?: string[] | undefined;
133
+ examples?: {
134
+ jsonld?: Record<string, unknown> | undefined;
135
+ turtle?: string | undefined;
136
+ }[] | undefined;
137
+ }>, "many">;
138
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodObject<{
139
+ '@id': z.ZodString;
140
+ '@type': z.ZodOptional<z.ZodString>;
141
+ '@container': z.ZodOptional<z.ZodString>;
142
+ }, "strip", z.ZodTypeAny, {
143
+ '@id': string;
144
+ '@type'?: string | undefined;
145
+ '@container'?: string | undefined;
146
+ }, {
147
+ '@id': string;
148
+ '@type'?: string | undefined;
149
+ '@container'?: string | undefined;
150
+ }>]>>>;
151
+ }, "strip", z.ZodTypeAny, {
152
+ status: "ED" | "TR";
153
+ module: "core" | "ui";
154
+ namespace: string;
155
+ docBase: string;
156
+ title: string;
157
+ description: string;
158
+ terms: {
159
+ id: string;
160
+ kind: "Class" | "Property";
161
+ label: string;
162
+ comment: string;
163
+ domain?: string | undefined;
164
+ range?: string | undefined;
165
+ deprecated?: boolean | undefined;
166
+ seeAlso?: string[] | undefined;
167
+ examples?: {
168
+ jsonld?: Record<string, unknown> | undefined;
169
+ turtle?: string | undefined;
170
+ }[] | undefined;
171
+ }[];
172
+ version?: string | undefined;
173
+ updated?: string | undefined;
174
+ context?: Record<string, string | {
175
+ '@id': string;
176
+ '@type'?: string | undefined;
177
+ '@container'?: string | undefined;
178
+ }> | undefined;
179
+ }, {
180
+ status: "ED" | "TR";
181
+ module: "core" | "ui";
182
+ namespace: string;
183
+ docBase: string;
184
+ title: string;
185
+ description: string;
186
+ terms: {
187
+ id: string;
188
+ kind: "Class" | "Property";
189
+ label: string;
190
+ comment: string;
191
+ domain?: string | undefined;
192
+ range?: string | undefined;
193
+ deprecated?: boolean | undefined;
194
+ seeAlso?: string[] | undefined;
195
+ examples?: {
196
+ jsonld?: Record<string, unknown> | undefined;
197
+ turtle?: string | undefined;
198
+ }[] | undefined;
199
+ }[];
200
+ version?: string | undefined;
201
+ updated?: string | undefined;
202
+ context?: Record<string, string | {
203
+ '@id': string;
204
+ '@type'?: string | undefined;
205
+ '@container'?: string | undefined;
206
+ }> | undefined;
207
+ }>;
208
+ /**
209
+ * Build configuration schema
210
+ */
211
+ export declare const BuildConfigSchema: z.ZodObject<{
212
+ input: z.ZodString;
213
+ output: z.ZodDefault<z.ZodString>;
214
+ module: z.ZodEnum<["core", "ui"]>;
215
+ mode: z.ZodEnum<["ED", "TR"]>;
216
+ version: z.ZodOptional<z.ZodString>;
217
+ force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
218
+ baseUrl: z.ZodOptional<z.ZodString>;
219
+ git: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
220
+ redirects: z.ZodDefault<z.ZodOptional<z.ZodEnum<["none", "netlify", "cloudflare", "json"]>>>;
221
+ strict: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
222
+ }, "strip", z.ZodTypeAny, {
223
+ module: "core" | "ui";
224
+ input: string;
225
+ output: string;
226
+ mode: "ED" | "TR";
227
+ force: boolean;
228
+ git: boolean;
229
+ redirects: "none" | "netlify" | "cloudflare" | "json";
230
+ strict: boolean;
231
+ version?: string | undefined;
232
+ baseUrl?: string | undefined;
233
+ }, {
234
+ module: "core" | "ui";
235
+ input: string;
236
+ mode: "ED" | "TR";
237
+ version?: string | undefined;
238
+ output?: string | undefined;
239
+ force?: boolean | undefined;
240
+ baseUrl?: string | undefined;
241
+ git?: boolean | undefined;
242
+ redirects?: "none" | "netlify" | "cloudflare" | "json" | undefined;
243
+ strict?: boolean | undefined;
244
+ }>;
245
+ export type Example = z.infer<typeof ExampleSchema>;
246
+ export type TermDefinition = z.infer<typeof TermDefinitionSchema>;
247
+ export type ContextMapping = z.infer<typeof ContextMappingSchema>;
248
+ export type VocabSource = z.infer<typeof VocabSourceSchema>;
249
+ export type BuildConfig = z.infer<typeof BuildConfigSchema>;
250
+ /**
251
+ * Validate that TR mode requires a version
252
+ */
253
+ export declare function validateBuildConfig(config: BuildConfig): void;
254
+ /**
255
+ * Validate vocab source
256
+ */
257
+ export declare function validateVocabSource(source: VocabSource): void;
258
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;KAShC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAGH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAQ7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAmB7D"}
package/dist/model.js ADDED
@@ -0,0 +1,96 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for term examples (JSON-LD and/or Turtle)
4
+ */
5
+ export const ExampleSchema = z.object({
6
+ jsonld: z.record(z.unknown()).optional(),
7
+ turtle: z.string().optional(),
8
+ });
9
+ /**
10
+ * Schema for individual term definitions
11
+ */
12
+ export const TermDefinitionSchema = z.object({
13
+ id: z.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'Term ID must be a valid fragment identifier'),
14
+ kind: z.enum(['Class', 'Property']),
15
+ label: z.string(),
16
+ comment: z.string(),
17
+ domain: z.string().optional(),
18
+ range: z.string().optional(),
19
+ deprecated: z.boolean().optional(),
20
+ seeAlso: z.array(z.string().url()).optional(),
21
+ examples: z.array(ExampleSchema).optional(),
22
+ });
23
+ /**
24
+ * Schema for JSON-LD context mapping
25
+ */
26
+ export const ContextMappingSchema = z.record(z.union([
27
+ z.string(), // Simple mapping: "term": "http://..."
28
+ z.object({
29
+ '@id': z.string(),
30
+ '@type': z.string().optional(),
31
+ '@container': z.string().optional(),
32
+ }),
33
+ ]));
34
+ /**
35
+ * Main vocabulary source schema
36
+ */
37
+ export const VocabSourceSchema = z.object({
38
+ module: z.enum(['core', 'ui']),
39
+ namespace: z.string().regex(/#$/, 'Namespace must end with #'),
40
+ docBase: z.string().url(),
41
+ title: z.string(),
42
+ description: z.string(),
43
+ version: z.string().regex(/^\d+\.\d+\.\d+$/, 'Version must be valid SemVer (x.y.z)').optional(),
44
+ status: z.enum(['ED', 'TR']),
45
+ updated: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, 'Updated must be ISO date (YYYY-MM-DD)').optional(),
46
+ terms: z.array(TermDefinitionSchema),
47
+ context: ContextMappingSchema.optional(),
48
+ });
49
+ /**
50
+ * Build configuration schema
51
+ */
52
+ export const BuildConfigSchema = z.object({
53
+ input: z.string(),
54
+ output: z.string().default('dist'),
55
+ module: z.enum(['core', 'ui']),
56
+ mode: z.enum(['ED', 'TR']),
57
+ version: z.string().optional(),
58
+ force: z.boolean().optional().default(false),
59
+ baseUrl: z.string().url().optional(),
60
+ git: z.boolean().optional().default(false),
61
+ redirects: z.enum(['none', 'netlify', 'cloudflare', 'json']).optional().default('netlify'),
62
+ strict: z.boolean().optional().default(false),
63
+ });
64
+ /**
65
+ * Validate that TR mode requires a version
66
+ */
67
+ export function validateBuildConfig(config) {
68
+ if (config.mode === 'TR' && !config.version) {
69
+ throw new Error('TR mode requires a version to be specified');
70
+ }
71
+ if (config.mode === 'TR' && config.version && !config.version.match(/^\d+\.\d+\.\d+$/)) {
72
+ throw new Error('Version must be valid SemVer (x.y.z)');
73
+ }
74
+ }
75
+ /**
76
+ * Validate vocab source
77
+ */
78
+ export function validateVocabSource(source) {
79
+ // Ensure TR status has version
80
+ if (source.status === 'TR' && !source.version) {
81
+ throw new Error('TR status requires a version in the source file');
82
+ }
83
+ // Ensure ED status has updated date
84
+ if (source.status === 'ED' && !source.updated) {
85
+ throw new Error('ED status requires an updated date in the source file');
86
+ }
87
+ // Check for duplicate term IDs
88
+ const termIds = new Set();
89
+ for (const term of source.terms) {
90
+ if (termIds.has(term.id)) {
91
+ throw new Error(`Duplicate term ID: ${term.id}`);
92
+ }
93
+ termIds.add(term.id);
94
+ }
95
+ }
96
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}