arcane-os 0.3.1 → 0.3.2
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.
- package/CHANGELOG.md +14 -0
- package/README.md +86 -117
- package/bin/arcane-test.mjs +170 -46
- package/browser-runtime/ai/browser-speech-artifacts.mjs +855 -895
- package/browser-runtime/ai/browser-speech-providers.mjs +80 -204
- package/browser-runtime/ai/browser-wasm-llm-provider.mjs +627 -819
- package/browser-runtime/ai/browser-wasm.mjs +24 -35
- package/browser-runtime/ai/browser-wllama-runtime.mjs +64 -316
- package/browser-runtime/ai/model-controller.mjs +584 -181
- package/browser-runtime/ai/speech-worker-client.mjs +8 -148
- package/browser-runtime/ai/speech-worker-runtime.mjs +642 -374
- package/browser-runtime/dom-event-instrumentation.mjs +55 -147
- package/browser-runtime/event-manager.mjs +239 -624
- package/package.json +5 -6
- package/runtime/arcane/components/app-bar.html +3 -15
- package/runtime/arcane/components/assistant-panel.html +10 -10
- package/runtime/arcane/components/calculator.html +1 -1
- package/runtime/arcane/components/chat.html +1359 -135
- package/runtime/arcane/components/conversation-view.html +2 -2
- package/runtime/arcane/components/document-inspector.html +11 -17
- package/runtime/arcane/components/file-manager.html +13 -56
- package/runtime/arcane/components/markdown-document.html +82 -281
- package/runtime/arcane/components/markdown-editor.html +7 -10
- package/runtime/arcane/components/media-embed.html +6 -6
- package/runtime/arcane/components/screen-capture.html +4 -4
- package/runtime/arcane/components/source-explanation.html +2 -2
- package/runtime/arcane/components/speech.html +112 -68
- package/runtime/arcane/components/terminal-workspace.html +4 -4
- package/runtime/arcane/components/theme-editor.html +1 -1
- package/runtime/arcane/components/unified-inbox.html +2 -2
- package/runtime/arcane/components/voice-transcription.html +31 -21
- package/runtime/arcane/entities/Calculation.js +2 -3
- package/runtime/arcane/entities/Chat.js +228 -43
- package/runtime/arcane/entities/Preference.js +3 -5
- package/runtime/arcane/entities/Weather.js +5 -5
- package/runtime/arcane/modules/AI.js +1042 -427
- package/runtime/arcane/modules/AIProviderRuntime.js +618 -359
- package/runtime/arcane/modules/AIResponseLength.js +9 -19
- package/runtime/arcane/modules/AIRuntimeState.js +109 -72
- package/runtime/arcane/modules/ArcaneNavigationPolicy.js +45 -32
- package/runtime/arcane/modules/BrowserTestSuite.js +78 -122
- package/runtime/arcane/modules/CalculatorEngine.js +9 -9
- package/runtime/arcane/modules/CommunicationAppController.js +3 -7
- package/runtime/arcane/modules/ComponentContracts.js +30 -32
- package/runtime/arcane/modules/ConfiguredAIChatSession.js +281 -230
- package/runtime/arcane/modules/ConversationActionItems.js +26 -59
- package/runtime/arcane/modules/ConversationClosingReport.js +34 -61
- package/runtime/arcane/modules/ConversationTimebox.js +27 -15
- package/runtime/arcane/modules/DBOPFSDocumentLibrary.js +152 -344
- package/runtime/arcane/modules/DocumentLexicalSearch.js +25 -91
- package/runtime/arcane/modules/HTMLImport.js +54 -1
- package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +40 -203
- package/runtime/arcane/modules/LocalAIReadiness.js +40 -60
- package/runtime/arcane/modules/LocalAIReadinessController.js +15 -13
- package/runtime/arcane/modules/MD.js +1 -45
- package/runtime/arcane/modules/Mail.js +51 -103
- package/runtime/arcane/modules/MailOutbox.mjs +95 -193
- package/runtime/arcane/modules/MailTransport.mjs +36 -57
- package/runtime/arcane/modules/ModelDefinition.js +22 -106
- package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +39 -101
- package/runtime/arcane/modules/PersistentAIChatSession.js +281 -18
- package/runtime/arcane/modules/PreferenceStore.js +102 -30
- package/runtime/arcane/modules/RiskSignalAnalyzer.js +8 -9
- package/runtime/arcane/modules/ScopedOPFSCache.js +7 -42
- package/runtime/arcane/modules/ScreenCapture.js +175 -128
- package/runtime/arcane/modules/SpeechPlayback.js +46 -149
- package/runtime/arcane/modules/StaticDocumentCatalog.js +173 -407
- package/runtime/arcane/modules/ToolCallRouter.js +25 -12
- package/runtime/arcane/modules/YouTubeMedia.js +6 -5
- package/schemas/arcane-app-bundle.schema.json +13 -78
- package/schemas/arcane-app.schema.json +9 -25
- package/schemas/arcane-lock.schema.json +18 -151
- package/schemas/arcane-package.schema.json +2 -16
- package/schemas/native-build-plan.schema.json +119 -122
- package/src/app-descriptor.mjs +75 -132
- package/src/application-tests.mjs +200 -0
- package/src/cli/main.mjs +27 -46
- package/src/constants.mjs +3 -4
- package/src/dev-server.mjs +30 -324
- package/src/doctor.mjs +92 -154
- package/src/dom-event-instrumentation.mjs +55 -147
- package/src/errors.mjs +2 -3
- package/src/event-manager.mjs +239 -624
- package/src/event-queue.mjs +3 -3
- package/src/import-map.mjs +273 -1028
- package/src/index.mjs +14 -16
- package/src/installed-sdk-runtime.mjs +27 -67
- package/src/integrated-provider-loader.mjs +53 -382
- package/src/mail-api.mjs +0 -2
- package/src/mail-server.mjs +224 -580
- package/src/mail.mjs +4 -10
- package/src/native-plan.mjs +163 -598
- package/src/native-provider-loader.mjs +104 -1063
- package/src/packager/core.mjs +485 -3229
- package/src/process.mjs +5 -10
- package/src/release-bundle.mjs +292 -2405
- package/src/runtime.mjs +76 -396
- package/src/scaffold.mjs +30 -80
- package/src/sdk-browser-runtime.mjs +70 -626
- package/src/source-server.mjs +588 -0
- package/src/targets/index.mjs +78 -188
- package/src/templates/workspace-template.mjs +19 -135
- package/src/testing-loader.mjs +164 -0
- package/src/testing.mjs +1 -1
- package/src/toolchain.mjs +131 -544
- package/src/update-check.mjs +26 -64
- package/src/workspace-operation-lock.mjs +139 -430
- package/src/workspace-runtime.mjs +109 -1558
- package/src/workspace.mjs +40 -302
- package/browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json +0 -218
- package/browser-runtime/ai/ARCANE_AI_BROWSER_SPEECH_COMPONENTS.json +0 -203
- package/browser-runtime/ai/ARCANE_AI_BROWSER_WASM_COMPONENTS.json +0 -80
- package/browser-runtime/ai/internal/sha256.mjs +0 -166
- package/docs/architecture.md +0 -344
- package/docs/compatibility.md +0 -36
- package/docs/event-manager.md +0 -294
- package/docs/platform-targets.md +0 -108
- package/docs/publishing.md +0 -201
- package/docs/reference/README.md +0 -185
- package/docs/reference/ai/browser-speech-package-authority.json +0 -835
- package/docs/reference/ai/browser-speech.md +0 -1295
- package/docs/reference/ai/browser-wasm.md +0 -530
- package/docs/reference/arcane-ollama.md +0 -288
- package/docs/reference/availability-and-normalization.md +0 -183
- package/docs/reference/behavioral-testing.md +0 -133
- package/docs/reference/cli.md +0 -779
- package/docs/reference/core/README.md +0 -62
- package/docs/reference/core/arcane-ai-contracts.md +0 -907
- package/docs/reference/core/arcane-api.md +0 -601
- package/docs/reference/core/arcane-entities.md +0 -65
- package/docs/reference/core/arcane-events.md +0 -134
- package/docs/reference/core/ollama-module.md +0 -181
- package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +0 -1909
- package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +0 -1057
- package/docs/reference/core/reference/arcane-api/core-and-events.md +0 -320
- package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +0 -610
- package/docs/reference/core/reference/arcane-api/namespaces.md +0 -1157
- package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +0 -1423
- package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +0 -315
- package/docs/reference/event-manager.md +0 -1511
- package/docs/reference/inventory/package-api.json +0 -3284
- package/docs/reference/inventory/runtime-components.json +0 -1011
- package/docs/reference/inventory/runtime-entities.json +0 -26
- package/docs/reference/inventory/runtime-modules.json +0 -1431
- package/docs/reference/mail.md +0 -316
- package/docs/reference/protocols.md +0 -719
- package/docs/reference/runtime-components.md +0 -1366
- package/docs/reference/runtime-entities.md +0 -303
- package/docs/reference/runtime-modules.md +0 -2965
- package/docs/reference/sdk-api.md +0 -6698
- package/docs/roadmap.md +0 -79
- package/docs/work-amplification.md +0 -129
- package/runtime/ARCANE_RUNTIME_RELEASE.json +0 -826
|
@@ -13,8 +13,8 @@ function nextOperationId(kind){operationSequence+=1;return `${events.descriptor.
|
|
|
13
13
|
function emit(type,detail={},publicDetail={},operationId=null){if(destroyed)return false;const publication=events.dispatch(type,detail,{publicDetail,operationId});return projectArcaneDOMEvent(host,publication.occurrence,{bubbles:true,composed:true})}
|
|
14
14
|
host.setConversation=(next,items=[],options={})=>{if(destroyed)return false;thread=next||null;advisories=options?.advisories instanceof Map?options.advisories:new Map();heading.hidden=!thread;composer.hidden=!thread;if(!thread){messages.innerHTML='<div class="blank"><div><strong>Select a conversation</strong><p>Choose a thread from the inbox, or connect a service in settings.</p></div></div>';return}root.querySelector('#title').textContent=thread.title;root.querySelector('#participants').textContent=(thread.participants||[]).join(', ');root.querySelector('#badge').textContent=`${thread.channel} · ${thread.providerId}`;render(items)};
|
|
15
15
|
host.setBusy=value=>{if(destroyed)return false;for(const control of composer.elements) control.disabled=Boolean(value)};host.setStatus=value=>{if(destroyed)return false;status.textContent=String(value||'')};
|
|
16
|
-
composer.addEventListener('submit',event=>{event.preventDefault();const value=body.value
|
|
17
|
-
function render(items){messages.replaceChildren(...Array.from(items||[]).map(item=>{const article=document.createElement('article'),text=document.createElement('p'),footer=document.createElement('footer'),time=document.createElement('time'),state=document.createElement('span');article.className=`message ${item.direction}`;text.textContent=item.body||item.subject||'';time.dateTime=item.timestamp;time.textContent=new Intl.DateTimeFormat(undefined,{dateStyle:'short',timeStyle:'short'}).format(new Date(item.timestamp));state.textContent=item.status;footer.append(time,state);article.append(text,footer);const advisory=advisories.get(item);if(advisory){const note=document.createElement('aside'),title=document.createElement('strong'),summary=document.createElement('p');note.className='advisory';note.dataset.level=String(advisory.level||'caution');note.setAttribute('role','note');title.textContent=String(advisory.title||'Content advisory');summary.textContent=String(advisory.summary||'Review this message carefully.');note.append(title,summary);const signals=Array.from(advisory.signals||[]).map(String).filter(Boolean)
|
|
16
|
+
composer.addEventListener('submit',event=>{event.preventDefault();const value=body.value;if(!value.trim())return;const detail={thread,body:value};emit('communication-send',detail,detail,nextOperationId('send'))},{signal:lifecycleController.signal});
|
|
17
|
+
function render(items){messages.replaceChildren(...Array.from(items||[]).map(item=>{const article=document.createElement('article'),text=document.createElement('p'),footer=document.createElement('footer'),time=document.createElement('time'),state=document.createElement('span');article.className=`message ${item.direction}`;text.textContent=item.body||item.subject||'';time.dateTime=item.timestamp;time.textContent=new Intl.DateTimeFormat(undefined,{dateStyle:'short',timeStyle:'short'}).format(new Date(item.timestamp));state.textContent=item.status;footer.append(time,state);article.append(text,footer);const advisory=advisories.get(item);if(advisory){const note=document.createElement('aside'),title=document.createElement('strong'),summary=document.createElement('p');note.className='advisory';note.dataset.level=String(advisory.level||'caution');note.setAttribute('role','note');title.textContent=String(advisory.title||'Content advisory');summary.textContent=String(advisory.summary||'Review this message carefully.');note.append(title,summary);const signals=Array.from(advisory.signals||[]).map(String).filter(Boolean);if(signals.length){const list=document.createElement('ul');for(const signal of signals){const entry=document.createElement('li');entry.textContent=signal;list.append(entry)}note.append(list)}if(advisory.actionLabel){const action=document.createElement('button');action.type='button';action.className='arcane-button arcane-button--tertiary';action.textContent=String(advisory.actionLabel);const detail={thread,message:item,advisory};action.addEventListener('click',()=>emit('communication-advisory-action',detail,detail,nextOperationId('advisory-action')),{signal:lifecycleController.signal});note.append(action)}article.append(note)}return article}));messages.scrollTop=messages.scrollHeight;}
|
|
18
18
|
function destroy(){if(destroyed)return false;destroyed=true;lifecycleController.abort();thread=null;advisories={};events.dispose();host.ready=false;return true}
|
|
19
19
|
host.clearComposer=()=>{if(destroyed)return false;body.value='';body.focus()};host.destroy=destroy;host.ready=true;emit('conversation-view-ready',{}, {ready:true});
|
|
20
20
|
</script>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
</div>
|
|
43
43
|
<div id="details-panel" class="panel details" role="tabpanel" aria-labelledby="details-tab" data-panel="details" hidden>
|
|
44
44
|
<section class="metadata"><h3>Source details</h3><dl data-metadata></dl></section>
|
|
45
|
-
<form class="review"><h3 data-review-heading>Review</h3><label>Status<select data-review-status></select></label><label data-classification-field hidden><span data-classification-label>Classification</span><select data-review-classification></select></label><div data-review-fields></div><label><span data-notes-label>Notes</span><textarea data-review-notes
|
|
45
|
+
<form class="review"><h3 data-review-heading>Review</h3><label>Status<select data-review-status></select></label><label data-classification-field hidden><span data-classification-label>Classification</span><select data-review-classification></select></label><div data-review-fields></div><label><span data-notes-label>Notes</span><textarea data-review-notes></textarea></label><button class="save" type="submit">Save review</button><span class="save-state" aria-live="polite"></span></form>
|
|
46
46
|
</div>
|
|
47
47
|
</section>
|
|
48
48
|
|
|
@@ -108,15 +108,13 @@
|
|
|
108
108
|
projectArcaneDOMEvent(host,publication.occurrence,{bubbles:true,composed:true});
|
|
109
109
|
},{signal:lifecycleController.signal});
|
|
110
110
|
|
|
111
|
-
function
|
|
111
|
+
function sourceUrl(value){
|
|
112
112
|
if(!String(value||'').trim()) throw new TypeError('A document source is required.');
|
|
113
|
-
|
|
114
|
-
if(url.origin!==location.origin) throw new TypeError('Document sources must use the current application origin.');
|
|
115
|
-
return url.href;
|
|
113
|
+
return new URL(String(value||''),document.baseURI).href;
|
|
116
114
|
}
|
|
117
115
|
|
|
118
116
|
function pdfSourceUrl(value,page=null){
|
|
119
|
-
const url=new URL(
|
|
117
|
+
const url=new URL(sourceUrl(value));
|
|
120
118
|
if(page===null||page===undefined||page==='') return url.href;
|
|
121
119
|
const resolvedPage=Number(page);
|
|
122
120
|
if(!Number.isSafeInteger(resolvedPage)||resolvedPage<1) throw new TypeError('PDF page must be a positive integer.');
|
|
@@ -143,12 +141,8 @@
|
|
|
143
141
|
surface.replaceChildren(paragraph);
|
|
144
142
|
}
|
|
145
143
|
|
|
146
|
-
function
|
|
147
|
-
|
|
148
|
-
template.innerHTML=new MD(markdown).safeRendered;
|
|
149
|
-
template.content.querySelectorAll('img,video,audio,source,picture').forEach(element=>element.remove());
|
|
150
|
-
template.content.querySelectorAll('a').forEach(link=>{link.removeAttribute('href');link.removeAttribute('target');link.removeAttribute('rel');});
|
|
151
|
-
return template.innerHTML;
|
|
144
|
+
function renderMarkdownHTML(markdown=''){
|
|
145
|
+
return new MD(markdown).safeRendered;
|
|
152
146
|
}
|
|
153
147
|
|
|
154
148
|
function showMarkdown(){
|
|
@@ -218,7 +212,7 @@
|
|
|
218
212
|
if(!reviewClassification.value&&reviewClassification.options.length) reviewClassification.selectedIndex=0;
|
|
219
213
|
reviewFields.replaceChildren();
|
|
220
214
|
for(const definition of Array.isArray(config.reviewFields)?config.reviewFields:[]){
|
|
221
|
-
const key=String(definition.key||'').replace(/[^a-z0-9._-]/gi,'-')
|
|
215
|
+
const key=String(definition.key||'').replace(/[^a-z0-9._-]/gi,'-');
|
|
222
216
|
if(!key) continue;
|
|
223
217
|
const label=document.createElement('label'); const caption=document.createElement('span'); caption.textContent=String(definition.label||key);
|
|
224
218
|
let field;
|
|
@@ -230,7 +224,7 @@
|
|
|
230
224
|
}else{
|
|
231
225
|
field=document.createElement('input'); field.type='text';
|
|
232
226
|
}
|
|
233
|
-
field.dataset.reviewField=key; field.
|
|
227
|
+
field.dataset.reviewField=key; field.placeholder=String(definition.placeholder||'');
|
|
234
228
|
field.value=String(config.review?.attributes?.[key]||'');
|
|
235
229
|
if(definition.type==='select'&&!field.value&&field.options.length&&![...field.options].some(option=>option.value==='')) field.selectedIndex=0;
|
|
236
230
|
label.append(caption,field); reviewFields.append(label);
|
|
@@ -241,7 +235,7 @@
|
|
|
241
235
|
if(hasPdf){
|
|
242
236
|
try{
|
|
243
237
|
const resolvedPage=config.pdfPage===null||config.pdfPage===undefined||config.pdfPage===''?null:Number(config.pdfPage);
|
|
244
|
-
const frame=document.createElement('iframe'); frame.className='pdf-frame'; frame.title=`Original PDF: ${config.title||'document'}${resolvedPage?`, page ${resolvedPage}`:''}`; frame.
|
|
238
|
+
const frame=document.createElement('iframe'); frame.className='pdf-frame'; frame.title=`Original PDF: ${config.title||'document'}${resolvedPage?`, page ${resolvedPage}`:''}`; frame.src=pdfSourceUrl(config.pdfUrl,resolvedPage); pdfPanel.append(frame);
|
|
245
239
|
}catch(error){showSurfaceMessage(pdfPanel,error.message,'error');}
|
|
246
240
|
}
|
|
247
241
|
rawMarkdown=''; renderedMarkdown=''; markdownMessage=null;
|
|
@@ -249,11 +243,11 @@
|
|
|
249
243
|
if(hasText){
|
|
250
244
|
showSurfaceMessage(markdownSurface,'Loading document text…');
|
|
251
245
|
try{
|
|
252
|
-
const response=await fetch(
|
|
246
|
+
const response=await fetch(sourceUrl(config.markdownUrl),{signal:controller.signal});
|
|
253
247
|
if(!response.ok) throw new Error(`Document text unavailable (${response.status}).`);
|
|
254
248
|
const markdown=await response.text();
|
|
255
249
|
if(destroyed||sequence!==loadSequence) return false;
|
|
256
|
-
rawMarkdown=markdown; renderedMarkdown=
|
|
250
|
+
rawMarkdown=markdown; renderedMarkdown=renderMarkdownHTML(rawMarkdown); showMarkdown();
|
|
257
251
|
}catch(error){
|
|
258
252
|
if(destroyed||sequence!==loadSequence||controller.signal.aborted) return false;
|
|
259
253
|
markdownMessage={message:error.message,className:'error'}; showMarkdown();
|
|
@@ -13,9 +13,6 @@
|
|
|
13
13
|
list-style:none;
|
|
14
14
|
padding:1em;
|
|
15
15
|
margin:0;
|
|
16
|
-
max-height: 1em;
|
|
17
|
-
overflow: hidden;
|
|
18
|
-
transition: max-height 250ms ease-out;
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
.directory.open{
|
|
@@ -314,15 +311,13 @@
|
|
|
314
311
|
|
|
315
312
|
.tree-entry-name{
|
|
316
313
|
min-width:0;
|
|
317
|
-
overflow:
|
|
318
|
-
text-overflow:ellipsis;
|
|
319
|
-
white-space:nowrap;
|
|
314
|
+
overflow-wrap:anywhere;
|
|
320
315
|
}
|
|
321
316
|
|
|
322
317
|
.tree-file-count{
|
|
323
318
|
color:var(--platinum,var(--text-color));
|
|
324
319
|
font-size:.75em;
|
|
325
|
-
|
|
320
|
+
overflow-wrap:anywhere;
|
|
326
321
|
}
|
|
327
322
|
|
|
328
323
|
.tree-empty,
|
|
@@ -512,24 +507,8 @@
|
|
|
512
507
|
return `${events.descriptor.instanceId}:${action}:${operationSequence}`;
|
|
513
508
|
}
|
|
514
509
|
|
|
515
|
-
function publicEventDetail(
|
|
516
|
-
|
|
517
|
-
const publicDetail={action:String(detail.action||''),kind:String(detail.entry?.kind||''),hasEntry:Boolean(detail.path)};
|
|
518
|
-
if(detail.code){
|
|
519
|
-
publicDetail.code=String(detail.code);
|
|
520
|
-
}
|
|
521
|
-
if(detail.reason){
|
|
522
|
-
publicDetail.reason=String(detail.reason);
|
|
523
|
-
}
|
|
524
|
-
return publicDetail;
|
|
525
|
-
}
|
|
526
|
-
if(name==='file-manager-open'){
|
|
527
|
-
return {trigger:String(detail.trigger||''),kind:String(detail.entry?.kind||''),hasEntry:Boolean(detail.path)};
|
|
528
|
-
}
|
|
529
|
-
if(name==='file-manager-select'){
|
|
530
|
-
return {selected:Boolean(detail.path),kind:String(detail.entry?.kind||'')};
|
|
531
|
-
}
|
|
532
|
-
return {};
|
|
510
|
+
function publicEventDetail(_name,detail={}){
|
|
511
|
+
return detail;
|
|
533
512
|
}
|
|
534
513
|
|
|
535
514
|
function emit(name,detail={},cancelable=false,operationId=null){
|
|
@@ -1467,31 +1446,11 @@
|
|
|
1467
1446
|
|
|
1468
1447
|
status.remove();
|
|
1469
1448
|
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
if(!layout){
|
|
1474
|
-
await dbopfs.delete(directory,fileName);
|
|
1475
|
-
if(destroyed||generation!==fileOpenGeneration){
|
|
1476
|
-
return false;
|
|
1477
|
-
}
|
|
1478
|
-
await loadAll();
|
|
1479
|
-
if(destroyed||generation!==fileOpenGeneration){
|
|
1480
|
-
return false;
|
|
1481
|
-
}
|
|
1482
|
-
empty.innerText='File was empty and has been deleted';
|
|
1483
|
-
}else{
|
|
1484
|
-
empty.innerText='File is empty';
|
|
1485
|
-
}
|
|
1486
|
-
|
|
1487
|
-
content.append(empty);
|
|
1488
|
-
}else{
|
|
1489
|
-
const rendered=await renderFile(fileRef,{directory,fileName});
|
|
1490
|
-
if(destroyed||generation!==fileOpenGeneration){
|
|
1491
|
-
return false;
|
|
1492
|
-
}
|
|
1493
|
-
content.append(rendered);
|
|
1449
|
+
const rendered=await renderFile(fileRef,{directory,fileName});
|
|
1450
|
+
if(destroyed||generation!==fileOpenGeneration){
|
|
1451
|
+
return false;
|
|
1494
1452
|
}
|
|
1453
|
+
content.append(rendered);
|
|
1495
1454
|
return true;
|
|
1496
1455
|
}catch(error){
|
|
1497
1456
|
if(!destroyed&&generation===fileOpenGeneration){
|
|
@@ -1551,13 +1510,11 @@
|
|
|
1551
1510
|
){
|
|
1552
1511
|
preview=await host.previewTransform(
|
|
1553
1512
|
preview,
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
}
|
|
1560
|
-
)
|
|
1513
|
+
{
|
|
1514
|
+
directory:String(context.directory||''),
|
|
1515
|
+
extension:String(fileRef.ext||''),
|
|
1516
|
+
fileName:String(context.fileName||fileRef.name||'')
|
|
1517
|
+
}
|
|
1561
1518
|
);
|
|
1562
1519
|
}
|
|
1563
1520
|
|