35 lines
1.1 KiB
JavaScript
35 lines
1.1 KiB
JavaScript
|
|
import { RetrieveGlobals } from "node-retrieve-globals";
|
|||
|
|
|
|||
|
|
// `javascript` Front Matter Type
|
|||
|
|
export default function (frontMatterCode, context = {}) {
|
|||
|
|
let { filePath } = context;
|
|||
|
|
|
|||
|
|
// context.language would be nice as a guard, but was unreliable
|
|||
|
|
if (frontMatterCode.trimStart().startsWith("{")) {
|
|||
|
|
return context.engines.jsLegacy.parse(frontMatterCode, context);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
let vm = new RetrieveGlobals(frontMatterCode, {
|
|||
|
|
filePath,
|
|||
|
|
// ignored if vm.Module is stable (or --experimental-vm-modules)
|
|||
|
|
transformEsmImports: true,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// Future warning until vm.Module is stable:
|
|||
|
|
// If the frontMatterCode uses `import` this uses the `experimentalModuleApi`
|
|||
|
|
// option in node-retrieve-globals to workaround https://github.com/zachleat/node-retrieve-globals/issues/2
|
|||
|
|
let data = {
|
|||
|
|
page: {
|
|||
|
|
// Theoretically fileSlug and filePathStem could be added here but require extensionMap
|
|||
|
|
inputPath: filePath,
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// this is async, but it’s handled in Eleventy upstream.
|
|||
|
|
return vm.getGlobalContext(data, {
|
|||
|
|
reuseGlobal: true,
|
|||
|
|
dynamicImport: true,
|
|||
|
|
// addRequire: true,
|
|||
|
|
});
|
|||
|
|
}
|