訂判斷及所需輸入
題內應用參考 /original-workstation/helper.js。假設原環境提供它,輸入三得六,但未證明獨立包可用。更正載入器只讀所附包集合,原例欠 helper 就停;不查看真正檔案系統。
| 情況 | 輸入 JSON |
|---|---|
| 原例測試 | {"portableReference":false,"helperBundled":false,"editableTemplate":true} |
跑所附比較
完整包用相對 helper 及可編輯範本,先跑×2 得六,再把範本重編為×3,真正再生成九。只有已編或已呈現結果、沒有範本,做不完此再生成要求。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"isolatedReady":true,"originalResult":6} |
| 所需路徑 | {"isolatedReady":false,"reason":"missing-helper"} |
import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
const files=new Map([['app.js','module.exports=require("'+(i.portableReference?'./helper.js':'/original-workstation/helper.js')+'");']]);
if(i.helperBundled)files.set('./helper.js','module.exports=x=>x*2;');
if(i.editableTemplate)files.set('template.src','module.exports=x=>x*{{factor}};');
const outside=new Map([['/original-workstation/helper.js','module.exports=x=>x*2;']]);
const load=(name,allowOutside)=>{const source=files.get(name)??(allowOutside?outside.get(name):undefined);if(source===undefined)throw new Error('missing-helper');const module={exports:{}};Function('module','require',source)(module,n=>load(n,allowOutside));return module.exports;};
if(!corrected)return {isolatedReady:true,originalResult:load('app.js',true)(3)};
let original;try{original=load('app.js',false)(3);}catch{return {isolatedReady:false,reason:'missing-helper'};}
if(!files.has('template.src'))return {isolatedReady:false,reason:'missing-editable-template',originalResult:original};
files.set('./helper.js',files.get('template.src').replace('{{factor}}','3'));
return {isolatedReady:true,originalResult:original,regeneratedResult:load('app.js',false)(3)};
};
const cases=[{"input":{"portableReference":false,"helperBundled":false,"editableTemplate":true},"corrected":false,"expected":{"isolatedReady":true,"originalResult":6}},{"input":{"portableReference":false,"helperBundled":false,"editableTemplate":true},"corrected":true,"expected":{"isolatedReady":false,"reason":"missing-helper"}},{"input":{"portableReference":true,"helperBundled":true,"editableTemplate":true},"corrected":true,"expected":{"isolatedReady":true,"originalResult":6,"regeneratedResult":9}},{"input":{"portableReference":true,"helperBundled":true,"editableTemplate":false},"corrected":true,"expected":{"isolatedReady":false,"reason":"missing-editable-template","originalResult":6}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
按邊界依據作判斷
完整獨立邊界先六、後九;只有已編內容雖可跑六,仍以 missing-editable-template 暫停。源碼字串及集合全是固定假設材料。
- 只載明列包內材料
- 跑獨立初始結果
- 由保留來源改動再生成
不掃主機依賴,也不執行任意外來項目。
| 條件 | 輸入 JSON | 預期輸出 JSON |
|---|---|---|
| 獨立再生成材料齊備 | {"portableReference":true,"helperBundled":true,"editableTemplate":true} | {"isolatedReady":true,"originalResult":6,"regeneratedResult":9} |
| 只有已呈現或已編結果 | {"portableReference":true,"helperBundled":true,"editableTemplate":false} | {"isolatedReady":false,"reason":"missing-editable-template","originalResult":6} |
原例在原環境跑到六,可證明能移交獨立使用嗎?
查看參考答案
不能,獨立包欠 helper。須有可對到的材料,並證明所需來源修改可再生成,不靠原環境。