审查生成的插件规范化函数

来自 Symbol
Node 24 高级 6分钟 找出 4处问题

在这段生成的边界代码接收不可信插件记录前,对它进行审查。

只接受 name 字符串与可信的 RUN Symbol 钩子,拒绝其他所有自有键,附加不可枚举内部元数据,只输出含 name 的公开 JSON,并安全记录字符串键或 Symbol 键。

JavaScript
const RUN = Symbol('plugin.run');
const INTERNAL = Symbol('plugin.internal');

function preparePlugin(input) {
  const plugin = {};
  for (const key of Object.keys(input)) {
    plugin[key] = input[key];
  }
  plugin[INTERNAL] = { loadedAt: Date.now() };
  return plugin;
}

function publicJson(plugin) {
  return JSON.stringify({ ...plugin });
}

function logKey(key) {
  return `plugin key: ${key}`;
}

const input = { name: 'search', debug: true, [RUN]: () => 'ok' };
const plugin = preparePlugin(input);
console.log(publicJson(plugin));
console.log(logKey(INTERNAL));

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误