mirror of
				https://github.com/goccy/go-yaml.git
				synced 2025-11-03 23:01:05 +00:00 
			
		
		
		
	
		
			
	
	
		
			113 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import './wasm_exec';
							 | 
						||
| 
								 | 
							
								import { YAMLFuncMap, YAMLProcessResultType, YAMLProcessResult, Token, GroupedToken, initWASM } from './YAML.ts';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const yaml = initWASM();
							 | 
						||
| 
								 | 
							
								const funcMap = yaml.then((v): Promise<YAMLFuncMap> => {
							 | 
						||
| 
								 | 
							
								    const decode = (code: string): Promise<YAMLProcessResult> => {
							 | 
						||
| 
								 | 
							
								        return new Promise((resolve) => {
							 | 
						||
| 
								 | 
							
								            const res = v.decode(code);
							 | 
						||
| 
								 | 
							
								            if (res.error !== undefined) {
							 | 
						||
| 
								 | 
							
								                resolve({
							 | 
						||
| 
								 | 
							
								                    type: YAMLProcessResultType.Decode,
							 | 
						||
| 
								 | 
							
								                    result: res.error,
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								                return
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            resolve({
							 | 
						||
| 
								 | 
							
								                type: YAMLProcessResultType.Decode,
							 | 
						||
| 
								 | 
							
								                result: res.response as string,
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    const tokenize = (code: string): Promise<YAMLProcessResult> => {
							 | 
						||
| 
								 | 
							
								        return new Promise((resolve) => {
							 | 
						||
| 
								 | 
							
								            const res = v.tokenize(code);
							 | 
						||
| 
								 | 
							
								            if (res.error !== undefined) {
							 | 
						||
| 
								 | 
							
								                resolve({
							 | 
						||
| 
								 | 
							
								                    type: YAMLProcessResultType.Lexer,
							 | 
						||
| 
								 | 
							
								                    result: res.error,
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								                return
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            resolve({
							 | 
						||
| 
								 | 
							
								                type: YAMLProcessResultType.Lexer,
							 | 
						||
| 
								 | 
							
								                result: JSON.parse(res.response) as Token[],
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    const parseGroup = (code: string): Promise<YAMLProcessResult> => {
							 | 
						||
| 
								 | 
							
								        return new Promise((resolve) => {
							 | 
						||
| 
								 | 
							
								            const res = v.parseGroup(code);
							 | 
						||
| 
								 | 
							
								            if (res.error !== undefined) {
							 | 
						||
| 
								 | 
							
								                resolve({
							 | 
						||
| 
								 | 
							
								                    type: YAMLProcessResultType.ParserGroup,
							 | 
						||
| 
								 | 
							
								                    result: res.error,
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								                return
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            resolve({
							 | 
						||
| 
								 | 
							
								                type: YAMLProcessResultType.ParserGroup,
							 | 
						||
| 
								 | 
							
								                result: JSON.parse(res.response) as GroupedToken[],
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    const parse = (code: string): Promise<YAMLProcessResult> => {
							 | 
						||
| 
								 | 
							
								        return new Promise((resolve) => {
							 | 
						||
| 
								 | 
							
								            const res = v.parse(code);
							 | 
						||
| 
								 | 
							
								            if (res.error !== undefined) {
							 | 
						||
| 
								 | 
							
								                resolve({
							 | 
						||
| 
								 | 
							
								                    type: YAMLProcessResultType.Parser,
							 | 
						||
| 
								 | 
							
								                    result: res.error,
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								                return
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            resolve({
							 | 
						||
| 
								 | 
							
								                type: YAMLProcessResultType.Parser,
							 | 
						||
| 
								 | 
							
								                result: res.response as string,
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return new Promise((resolve) => {
							 | 
						||
| 
								 | 
							
								        resolve({
							 | 
						||
| 
								 | 
							
								            decode: decode,
							 | 
						||
| 
								 | 
							
								            tokenize: tokenize,
							 | 
						||
| 
								 | 
							
								            parseGroup: parseGroup,
							 | 
						||
| 
								 | 
							
								            parse: parse,
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								self.addEventListener('message', (e) => {
							 | 
						||
| 
								 | 
							
								    const data = e.data as {
							 | 
						||
| 
								 | 
							
								        code: string
							 | 
						||
| 
								 | 
							
								        tabIndex: number
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    funcMap.then((v) => {
							 | 
						||
| 
								 | 
							
								        switch (data.tabIndex) {
							 | 
						||
| 
								 | 
							
								            case 0:
							 | 
						||
| 
								 | 
							
								                v.decode(data.code).then((value) => {
							 | 
						||
| 
								 | 
							
								                    self.postMessage(value);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            case 1:
							 | 
						||
| 
								 | 
							
								                v.parse(data.code).then((value) => {
							 | 
						||
| 
								 | 
							
								                    self.postMessage(value);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            case 2:
							 | 
						||
| 
								 | 
							
								                v.parseGroup(data.code).then((value) => {
							 | 
						||
| 
								 | 
							
								                    self.postMessage(value);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            case 3:
							 | 
						||
| 
								 | 
							
								                v.tokenize(data.code).then((value) => {
							 | 
						||
| 
								 | 
							
								                    self.postMessage(value);
							 | 
						||
| 
								 | 
							
								                })
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								            default:
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default {}
							 |