mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 21:11:30 +08:00 
			
		
		
		
	added require() method for commonJS compliancy
This commit is contained in:
		
							parent
							
								
									354999f37a
								
							
						
					
					
						commit
						f6c7f6a0f2
					
				| @ -1,8 +1,22 @@ | |||||||
| function ScriptContext(startNote, allNotes) { | function ScriptContext(startNote, allNotes) { | ||||||
|  |     const modules = {}; | ||||||
|  | 
 | ||||||
|     return { |     return { | ||||||
|         modules: {}, |         modules: modules, | ||||||
|         notes: toObject(allNotes, note => [note.noteId, note]), |         notes: toObject(allNotes, note => [note.noteId, note]), | ||||||
|         apis: toObject(allNotes, note => [note.noteId, ScriptApi(startNote, note)]), |         apis: toObject(allNotes, note => [note.noteId, ScriptApi(startNote, note)]), | ||||||
|  |         require: moduleNoteIds => { | ||||||
|  |             return moduleName => { | ||||||
|  |                 const candidates = allNotes.filter(note => moduleNoteIds.includes(note.noteId)); | ||||||
|  |                 const note = candidates.find(c => c.title === moduleName); | ||||||
|  | 
 | ||||||
|  |                 if (!note) { | ||||||
|  |                     throw new Error("Could not find module note " + moduleName); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 return modules[note.noteId].exports; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -111,13 +111,15 @@ async function getScriptBundle(note, root = true, scriptEnv = null, includedNote | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     const moduleNoteIds = modules.map(mod => mod.noteId); | ||||||
|  | 
 | ||||||
|     if (note.isJavaScript()) { |     if (note.isJavaScript()) { | ||||||
|         bundle.script += ` |         bundle.script += ` | ||||||
| apiContext.modules['${note.noteId}'] = {}; | apiContext.modules['${note.noteId}'] = {}; | ||||||
| ${root ? 'return ' : ''}await (async function(exports, module, api` + (modules.length > 0 ? ', ' : '') +
 | ${root ? 'return ' : ''}await (async function(exports, module, require, api` + (modules.length > 0 ? ', ' : '') +
 | ||||||
|             modules.map(child => sanitizeVariableName(child.title)).join(', ') + `) {
 |             modules.map(child => sanitizeVariableName(child.title)).join(', ') + `) {
 | ||||||
| ${note.content} | ${note.content} | ||||||
| })({}, apiContext.modules['${note.noteId}'], apiContext.apis['${note.noteId}']` + (modules.length > 0 ? ', ' : '') +
 | })({}, apiContext.modules['${note.noteId}'], apiContext.require(${JSON.stringify(moduleNoteIds)}), apiContext.apis['${note.noteId}']` + (modules.length > 0 ? ', ' : '') +
 | ||||||
|             modules.map(mod => `apiContext.modules['${mod.noteId}'].exports`).join(', ') + `);
 |             modules.map(mod => `apiContext.modules['${mod.noteId}'].exports`).join(', ') + `);
 | ||||||
| `;
 | `;
 | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -15,6 +15,18 @@ function ScriptContext(dataKey, startNote, allNotes) { | |||||||
|     this.modules = {}; |     this.modules = {}; | ||||||
|     this.notes = utils.toObject(allNotes, note => [note.noteId, note]); |     this.notes = utils.toObject(allNotes, note => [note.noteId, note]); | ||||||
|     this.apis = utils.toObject(allNotes, note => [note.noteId, new ScriptApi(dataKey, startNote, note)]); |     this.apis = utils.toObject(allNotes, note => [note.noteId, new ScriptApi(dataKey, startNote, note)]); | ||||||
|  |     this.require = moduleNoteIds => { | ||||||
|  |         return moduleName => { | ||||||
|  |             const candidates = allNotes.filter(note => moduleNoteIds.includes(note.noteId)); | ||||||
|  |             const note = candidates.find(c => c.title === moduleName); | ||||||
|  | 
 | ||||||
|  |             if (!note) { | ||||||
|  |                 throw new Error("Could not find module note " + moduleName); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return this.modules[note.noteId].exports; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function ScriptApi(dataKey, startNote, currentNote) { | function ScriptApi(dataKey, startNote, currentNote) { | ||||||
| @ -26,7 +38,8 @@ function ScriptApi(dataKey, startNote, currentNote) { | |||||||
| 
 | 
 | ||||||
|     this.utils = { |     this.utils = { | ||||||
|         unescapeHtml: utils.unescapeHtml, |         unescapeHtml: utils.unescapeHtml, | ||||||
|         isoDateTimeStr: utils.dateStr |         isoDateTimeStr: utils.dateStr, | ||||||
|  |         isoDateStr: date => utils.dateStr(date).substr(0, 10) | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     this.getInstanceName = () => config.General ? config.General.instanceName : null; |     this.getInstanceName = () => config.General ? config.General.instanceName : null; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 azivner
						azivner