UNPKG

react-static

Version:

A progressive static site generator for React

112 lines (106 loc) 14.8 kB
"use strict"; 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=