react-static
Version:
A progressive static site generator for React
112 lines (106 loc) • 14.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validatePlugin = exports["default"] = void 0;
var _utils = require("../utils");
var hooks = {
afterGetConfig: function afterGetConfig(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterGetConfig');
return (0, _utils.reduceHooks)(hooks, {
sync: true
})(state);
},
beforePrepareBrowserPlugins: function beforePrepareBrowserPlugins(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforePrepareBrowserPlugins');
return (0, _utils.reduceHooks)(hooks)(state);
},
afterPrepareBrowserPlugins: function afterPrepareBrowserPlugins(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterPrepareBrowserPlugins');
return (0, _utils.reduceHooks)(hooks)(state);
},
beforePrepareRoutes: function beforePrepareRoutes(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforePrepareRoutes');
return (0, _utils.reduceHooks)(hooks)(state);
},
getRoutes: function getRoutes(routes, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'getRoutes');
return (0, _utils.reduceHooks)(hooks)(routes, state);
},
normalizeRoute: function normalizeRoute(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'normalizeRoute');
return function (route) {
return (0, _utils.reduceHooks)(hooks, {
sync: true
})(route, state);
};
},
afterPrepareRoutes: function afterPrepareRoutes(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterPrepareRoutes');
return (0, _utils.reduceHooks)(hooks)(state);
},
webpack: function webpack(config, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'webpack');
return (0, _utils.reduceHooks)(hooks, {
sync: true
})(config, state);
},
afterBundle: function afterBundle(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterBundle');
return (0, _utils.reduceHooks)(hooks)(state);
},
afterDevServerStart: function afterDevServerStart(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterDevServerStart');
return (0, _utils.reduceHooks)(hooks)(state);
},
routeInfo: function routeInfo(_routeInfo, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'routeInfo');
return (0, _utils.reduceHooks)(hooks)(_routeInfo);
},
beforeRenderToElement: function beforeRenderToElement(Comp, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforeRenderToElement');
return (0, _utils.reduceHooks)(hooks)(Comp, state);
},
beforeRenderToHtml: function beforeRenderToHtml(element, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforeRenderToHtml');
return (0, _utils.reduceHooks)(hooks)(element, state);
},
htmlProps: function htmlProps(props, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'htmlProps');
return (0, _utils.reduceHooks)(hooks)(props, state);
},
headElements: function headElements(elements, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'headElements');
return (0, _utils.reduceHooks)(hooks)(elements, state);
},
beforeHtmlToDocument: function beforeHtmlToDocument(html, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforeHtmlToDocument');
return (0, _utils.reduceHooks)(hooks)(html, state);
},
beforeDocumentToFile: function beforeDocumentToFile(html, state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'beforeDocumentToFile');
return (0, _utils.reduceHooks)(hooks)(html, state);
},
afterExport: function afterExport(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'afterExport');
return (0, _utils.reduceHooks)(hooks)(state);
},
plugins: function plugins(state) {
var hooks = (0, _utils.getHooks)(state.plugins, 'plugins');
return (0, _utils.reduceHooks)(hooks)(state);
}
};
var _default = hooks;
exports["default"] = _default;
var validatePlugin = function validatePlugin(plugin) {
var validHookKeys = Object.keys(hooks);
var hookKeys = Object.keys(plugin.hooks);
var badKeys = hookKeys.filter(function (key) {
return !validHookKeys.includes(key);
});
if (badKeys.length) {
throw new Error("Unknown plugin hooks: \"".concat(badKeys.join(', '), "\" found in plugin: ").concat(plugin.location));
}
};
exports.validatePlugin = validatePlugin;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0aWMvcGx1Z2lucy5qcyJdLCJuYW1lcyI6WyJob29rcyIsImFmdGVyR2V0Q29uZmlnIiwic3RhdGUiLCJwbHVnaW5zIiwic3luYyIsImJlZm9yZVByZXBhcmVCcm93c2VyUGx1Z2lucyIsImFmdGVyUHJlcGFyZUJyb3dzZXJQbHVnaW5zIiwiYmVmb3JlUHJlcGFyZVJvdXRlcyIsImdldFJvdXRlcyIsInJvdXRlcyIsIm5vcm1hbGl6ZVJvdXRlIiwicm91dGUiLCJhZnRlclByZXBhcmVSb3V0ZXMiLCJ3ZWJwYWNrIiwiY29uZmlnIiwiYWZ0ZXJCdW5kbGUiLCJhZnRlckRldlNlcnZlclN0YXJ0Iiwicm91dGVJbmZvIiwiYmVmb3JlUmVuZGVyVG9FbGVtZW50IiwiQ29tcCIsImJlZm9yZVJlbmRlclRvSHRtbCIsImVsZW1lbnQiLCJodG1sUHJvcHMiLCJwcm9wcyIsImhlYWRFbGVtZW50cyIsImVsZW1lbnRzIiwiYmVmb3JlSHRtbFRvRG9jdW1lbnQiLCJodG1sIiwiYmVmb3JlRG9jdW1lbnRUb0ZpbGUiLCJhZnRlckV4cG9ydCIsInZhbGlkYXRlUGx1Z2luIiwicGx1Z2luIiwidmFsaWRIb29rS2V5cyIsIk9iamVjdCIsImtleXMiLCJob29rS2V5cyIsImJhZEtleXMiLCJmaWx0ZXIiLCJrZXkiLCJpbmNsdWRlcyIsImxlbmd0aCIsIkVycm9yIiwiam9pbiIsImxvY2F0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUEsSUFBTUEsS0FBSyxHQUFHO0FBQ1pDLEVBQUFBLGNBQWMsRUFBRSx3QkFBQUMsS0FBSyxFQUFJO0FBQ3ZCLFFBQU1GLEtBQUssR0FBRyxxQkFBU0UsS0FBSyxDQUFDQyxPQUFmLEVBQXdCLGdCQUF4QixDQUFkO0FBQ0EsV0FBTyx3QkFBWUgsS0FBWixFQUFtQjtBQUFFSSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUFuQixFQUFtQ0YsS0FBbkMsQ0FBUDtBQUNELEdBSlc7QUFLWkcsRUFBQUEsMkJBQTJC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IHsgZ2V0SG9va3MsIHJlZHVjZUhvb2tzIH0gZnJvbSAnLi4vdXRpbHMnXG5cbmNvbnN0IGhvb2tzID0ge1xuICBhZnRlckdldENvbmZpZzogc3RhdGUgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2FmdGVyR2V0Q29uZmlnJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MsIHsgc3luYzogdHJ1ZSB9KShzdGF0ZSlcbiAgfSxcbiAgYmVmb3JlUHJlcGFyZUJyb3dzZXJQbHVnaW5zOiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYmVmb3JlUHJlcGFyZUJyb3dzZXJQbHVnaW5zJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKHN0YXRlKVxuICB9LFxuICBhZnRlclByZXBhcmVCcm93c2VyUGx1Z2luczogc3RhdGUgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2FmdGVyUHJlcGFyZUJyb3dzZXJQbHVnaW5zJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKHN0YXRlKVxuICB9LFxuICBiZWZvcmVQcmVwYXJlUm91dGVzOiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYmVmb3JlUHJlcGFyZVJvdXRlcycpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShzdGF0ZSlcbiAgfSxcbiAgZ2V0Um91dGVzOiAocm91dGVzLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2dldFJvdXRlcycpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShyb3V0ZXMsIHN0YXRlKVxuICB9LFxuICBub3JtYWxpemVSb3V0ZTogc3RhdGUgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ25vcm1hbGl6ZVJvdXRlJylcbiAgICByZXR1cm4gcm91dGUgPT4gcmVkdWNlSG9va3MoaG9va3MsIHsgc3luYzogdHJ1ZSB9KShyb3V0ZSwgc3RhdGUpXG4gIH0sXG4gIGFmdGVyUHJlcGFyZVJvdXRlczogc3RhdGUgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2FmdGVyUHJlcGFyZVJvdXRlcycpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShzdGF0ZSlcbiAgfSxcbiAgd2VicGFjazogKGNvbmZpZywgc3RhdGUpID0+IHtcbiAgICBjb25zdCBob29rcyA9IGdldEhvb2tzKHN0YXRlLnBsdWdpbnMsICd3ZWJwYWNrJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MsIHsgc3luYzogdHJ1ZSB9KShjb25maWcsIHN0YXRlKVxuICB9LFxuICBhZnRlckJ1bmRsZTogc3RhdGUgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2FmdGVyQnVuZGxlJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKHN0YXRlKVxuICB9LFxuICBhZnRlckRldlNlcnZlclN0YXJ0OiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYWZ0ZXJEZXZTZXJ2ZXJTdGFydCcpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShzdGF0ZSlcbiAgfSxcbiAgcm91dGVJbmZvOiAocm91dGVJbmZvLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ3JvdXRlSW5mbycpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShyb3V0ZUluZm8pXG4gIH0sXG4gIGJlZm9yZVJlbmRlclRvRWxlbWVudDogKENvbXAsIHN0YXRlKSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYmVmb3JlUmVuZGVyVG9FbGVtZW50JylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKENvbXAsIHN0YXRlKVxuICB9LFxuICBiZWZvcmVSZW5kZXJUb0h0bWw6IChlbGVtZW50LCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2JlZm9yZVJlbmRlclRvSHRtbCcpXG4gICAgcmV0dXJuIHJlZHVjZUhvb2tzKGhvb2tzKShlbGVtZW50LCBzdGF0ZSlcbiAgfSxcbiAgaHRtbFByb3BzOiAocHJvcHMsIHN0YXRlKSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnaHRtbFByb3BzJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKHByb3BzLCBzdGF0ZSlcbiAgfSxcbiAgaGVhZEVsZW1lbnRzOiAoZWxlbWVudHMsIHN0YXRlKSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnaGVhZEVsZW1lbnRzJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKGVsZW1lbnRzLCBzdGF0ZSlcbiAgfSxcbiAgYmVmb3JlSHRtbFRvRG9jdW1lbnQ6IChodG1sLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGhvb2tzID0gZ2V0SG9va3Moc3RhdGUucGx1Z2lucywgJ2JlZm9yZUh0bWxUb0RvY3VtZW50JylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKGh0bWwsIHN0YXRlKVxuICB9LFxuICBiZWZvcmVEb2N1bWVudFRvRmlsZTogKGh0bWwsIHN0YXRlKSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYmVmb3JlRG9jdW1lbnRUb0ZpbGUnKVxuICAgIHJldHVybiByZWR1Y2VIb29rcyhob29rcykoaHRtbCwgc3RhdGUpXG4gIH0sXG4gIGFmdGVyRXhwb3J0OiBzdGF0ZSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBnZXRIb29rcyhzdGF0ZS5wbHVnaW5zLCAnYWZ0ZXJFeHBvcnQnKVxuICAgIHJldHVybiByZWR1Y2VIb29rcyhob29rcykoc3RhdGUpXG4gIH0sXG4gIHBsdWdpbnM6IHN0YXRlID0+IHtcbiAgICBjb25zdCBob29rcyA9IGdldEhvb2tzKHN0YXRlLnBsdWdpbnMsICdwbHVnaW5zJylcbiAgICByZXR1cm4gcmVkdWNlSG9va3MoaG9va3MpKHN0YXRlKVxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBob29rc1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBjb25zdCB2YWxpZEhvb2tLZXlzID0gT2JqZWN0LmtleXMoaG9va3MpXG4gIGNvbnN0IGhvb2tLZXlzID0gT2JqZWN0LmtleXMocGx1Z2luLmhvb2tzKVxuICBjb25zdCBiYWRLZXlzID0gaG9va0tleXMuZmlsdGVyKGtleSA9PiAhdmFsaWRIb29rS2V5cy5pbmNsdWRlcyhrZXkpKVxuICBpZiAoYmFkS2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5rbm93biBwbHVnaW4gaG9va3M6IFwiJHtiYWRLZXlzLmpvaW4oJywgJyl9XCIgZm91bmQgaW4gcGx1Z2luOiAke1xuICAgICAgICBwbHVnaW4ubG9jYXRpb25cbiAgICAgIH1gXG4gICAgKVxuICB9XG59XG4iXX0=