mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-31 10:54:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { JSONSchemaType } from 'ajv/dist/2019.js';
 | |
| import type { MermaidConfig } from '../packages/mermaid/src/config.type.js';
 | |
| import { readFile } from 'node:fs/promises';
 | |
| import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | |
| 
 | |
| /**
 | |
|  * ESBuild plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | |
|  *
 | |
|  * Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
 | |
|  */
 | |
| 
 | |
| export const jsonSchemaPlugin = {
 | |
|   name: 'json-schema-plugin',
 | |
|   setup(build) {
 | |
|     let schema: JSONSchemaType<MermaidConfig> | undefined = undefined;
 | |
|     let content = '';
 | |
| 
 | |
|     build.onLoad({ filter: /config\.schema\.yaml$/ }, async (args) => {
 | |
|       // Load the file from the file system
 | |
|       const source = await readFile(args.path, 'utf8');
 | |
|       const resolvedSchema: JSONSchemaType<MermaidConfig> =
 | |
|         content === source && schema ? schema : loadSchema(source, args.path);
 | |
|       if (content !== source) {
 | |
|         content = source;
 | |
|         schema = resolvedSchema;
 | |
|       }
 | |
|       const contents = args.suffix.includes('only-defaults')
 | |
|         ? getDefaults(resolvedSchema)
 | |
|         : getSchema(resolvedSchema);
 | |
|       return { contents, warnings: [] };
 | |
|     });
 | |
|   },
 | |
| };
 | |
| 
 | |
| export default jsonSchemaPlugin;
 | 
