UNPKG

20.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../lib/matcher.js","../lib/history.js","../lib/state.js","../lib/router.js","../lib/Hypr.js","../lib/client.js","../lib/server.js","../lib/Link.js","../lib/Router.js","../lib/createStatic.js"],"sourcesContent":["import { parse, match, exec } from 'matchit'\n\nexport default function matcher (routes, redirects = []) {\n const matchers = routes.map(route => parse(route[0]))\n const dictionary = routes.reduce((dict, route) => {\n dict[route[0]] = route[1]\n return dict\n }, {})\n\n return function route (path) {\n const m = match(path, matchers)\n\n if (!m.length) return []\n\n return [\n dictionary[m[0].old],\n exec(path, m)\n ]\n }\n}\n","import React from 'react'\nimport createStore from 'picostate'\n\nexport const store = createStore({})\n\nfunction historyUpdater (url, cb) {\n let location = typeof url === 'function' ? (\n url(store.state)\n ) : (\n url\n )\n\n location = location.replace(window.location.origin, '')\n\n store.hydrate({ location })(() => {\n cb(location)\n })\n}\n\nexport const history = {\n get state () {\n return store.state\n },\n replaceState (url) {\n historyUpdater(url, sanitized => {\n window.history.replaceState({}, '', sanitized)\n })\n },\n pushState (url, popstate) {\n historyUpdater(url, sanitized => {\n !popstate && window.history.pushState({}, '', sanitized)\n })\n }\n}\n\nexport function withHistory (Component) {\n return props => (\n <Component history={history} {...props} />\n )\n}\n","import createStore from 'picostate'\nimport { connect } from '@picostate/react'\n\nexport const store = createStore({})\n\nexport const withState = connect\n","import React from 'react'\nimport * as state from './state.js'\nimport { store, history } from './history.js'\n\nexport default class Router extends React.Component {\n constructor (props) {\n super(props)\n\n this.state = {\n children: props.children.pop ? props.children[0] : props.children\n }\n\n this.currentLocation = props.location\n\n store.listen(({ location }) => {\n const [ route, params ] = props.router(location)\n\n if (location === this.currentLocation) return\n if (route.redirect) return history.pushState(route.redirect.to)\n\n props.resolve({ location, params, route }, children => {\n this.currentLocation = location\n this.setState({ children })\n })\n })\n }\n\n componentDidMount () {\n window.addEventListener('popstate', e => {\n if (!e.target.window) return\n history.pushState(e.target.location.href, true)\n })\n }\n\n render () {\n const { children: Child } = this.state\n return typeof Child === 'function' ? <Child {...state.store.state} /> : Child\n }\n}\n","import React from 'react'\nimport { Provider } from '@picostate/react'\nimport Router from './router.js'\n\n/**\n * this is used internally for server.js, client.js, and App.js\n */\nexport default function Hypr ({ store, router, location, resolve, children }) {\n return (\n <Provider store={store}>\n <Router router={router} location={location} resolve={resolve}>\n {children}\n </Router>\n </Provider>\n )\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport createStore from 'picostate'\nimport { parse } from 'flatted/esm'\n\nimport matcher from './matcher.js'\nimport { history, withHistory } from './history.js'\nimport { store } from './state.js'\nimport Hypr from './Hypr.js'\n\nlet plugins = []\n\ntry {\n plugins = require('@/rola.plugins.js').default\n} catch (e) {}\n\nconst createClientRoot = require('@rola/util/createClientRoot.js')\n\nfunction clone (obj) {\n return Object.assign({}, obj)\n}\n\nexport default function client (routes, initialState = {}, options = {}) {\n const location = window.location.href.replace(window.location.origin, '')\n\n const router = matcher(routes.map(({ pathname, ...route }) => [\n pathname,\n route\n ]))\n\n const [ route, params ] = router(location)\n\n const serverContext = parse(JSON.stringify(window.__rola))\n\n store.hydrate(Object.assign({}, serverContext.state, initialState, {\n router: {\n location,\n params\n }\n }))\n\n let view = route.view\n\n const context = {\n state: store.state,\n pathname: window.location.pathname\n }\n\n const View = createClientRoot({\n root: view,\n context: { ...context },\n plugins\n })\n\n return function render (root) {\n ReactDOM.hydrate((\n <Hypr\n store={store}\n router={router}\n location={location}\n resolve={({ location, params, route }, done) => {\n store.hydrate({\n router: {\n location,\n params\n }\n })\n\n const {\n load = () => {},\n view\n } = route\n\n Promise.resolve(load(store.state))\n .then(({ redirect, state }) => {\n if (redirect) return history.pushState(redirect.to)\n\n const meta = state.meta || {}\n\n store.hydrate(state)\n\n Promise.resolve(options.resolve ? options.resolve({ state: store.state, pathname: route.pathname }) : null)\n .then(() => {\n document.title = meta.title || document.title\n\n let view = route.view\n\n const context = {\n state: store.state,\n pathname: route.pathname\n }\n\n const View = createClientRoot({\n root: view,\n context: { ...context },\n plugins\n })\n\n done(<View {...context} />)\n })\n .catch(e => {\n console.error('options.resolve failed')\n console.error(e)\n })\n })\n .catch(e => {\n console.error('route.load failed')\n console.error(e)\n })\n }}>\n <View {...context} />\n </Hypr>\n ), root)\n }\n}\n","import React from 'react'\nimport ReactDOMServer from 'react-dom/server'\nimport createStore from 'picostate'\n\nimport matcher from './matcher.js'\nimport Hypr from './Hypr.js'\n\nlet plugins = []\n\ntry {\n plugins = require('@/rola.plugins.js').default\n} catch (e) {}\n\nconst doc = require('@rola/util/document.js')\nconst createDocument = require('@rola/util/createDocument.js')\nconst createServerRoot = require('@rola/util/createServerRoot.js')\nconst postServerRender = require('@rola/util/postServerRender.js')\nconst preServerRender = require('@rola/util/preServerRender.js')\n\nfunction redir (res, Location, Referer, status = 302) {\n res.writeHead(status, { Location, Referer })\n res.end()\n}\n\nexport default function server (routes, initialState = {}, options = {}) {\n const router = matcher(routes.map(({ pathname, ...route }) => [\n pathname,\n route\n ]))\n\n return function handler (req, res, next, serverProps) {\n const store = createStore({})\n\n const [ route, params ] = router(req.url)\n\n if (!route) {\n return next()\n }\n\n let {\n state: initialRouteState = {},\n load = () => {},\n view,\n redirect\n } = route\n\n if (redirect) return redir(res, redirect)\n\n store.hydrate(Object.assign(\n initialState,\n initialRouteState,\n {\n router: {\n location: req.url,\n params\n }\n }\n ))\n\n return Promise.resolve(load(store.state, req))\n .then(({ redirect, cache, status, pathname, state = {} } = {}) => {\n if (redirect) return redir(res, redirect)\n\n /**\n * set default response headers\n */\n res.statusCode = status || 200\n res.setHeader('Content-Type', 'text/html')\n res.setHeader(\n 'Cache-Control',\n typeof cache === 'string' ? cache : (\n cache === false ? (\n `no-cache, no-store, must-revalidate`\n ) : (\n `public, max-age=${cache || 86400}`\n )\n )\n )\n\n /**\n * add any loaded state to store\n */\n store.hydrate(state)\n\n /**\n * create initial context\n */\n let context = {\n state: store.state,\n pathname: route.pathname || pathname\n }\n\n const View = createServerRoot({\n root: view,\n context: { ...context },\n plugins\n })\n\n /**\n * preServerRender hook\n */\n const preRenderData = preServerRender({\n context: { ...context },\n plugins\n })\n\n /**\n * render\n */\n const renderedView = ReactDOMServer.renderToString(\n <Hypr store={store} router={router} location={req.url}>\n <View {...context} {...preRenderData} />\n </Hypr>\n )\n\n /**\n * postServerRender hook\n */\n const postRenderData = postServerRender({\n context: { ...context },\n plugins\n })\n\n /**\n * create tags with new context\n */\n const tags = createDocument({\n context: {\n ...context,\n ...serverProps.context\n },\n plugins,\n ...preRenderData,\n ...postRenderData,\n ...serverProps.tags // { head, body }\n })\n\n /**\n * return response\n */\n res.end(\n doc({ ...tags, context, view: renderedView })\n )\n }).catch(e => {\n res.statusCode = 500\n res.setHeader('Content-Type', 'text/plain')\n res.end('rola error')\n console.log(e)\n })\n }\n}\n","import React from 'react'\nimport cx from 'nanoclass'\nimport { history } from './history.js'\n\nexport default function Link (props) {\n const {\n children,\n href,\n className,\n target,\n download,\n ...rest\n } = props\n\n const cn = cx([\n className,\n (history.location === href) && 'active'\n ])\n\n const opts = {}\n\n if (target) opts.target = target\n if (download) opts.download = download\n\n return (\n <a href={href} className={cn} onClick={e => {\n if (\n e.ctrlKey ||\n e.metaKey ||\n e.altKey ||\n e.shiftKey ||\n e.defaultPrevented ||\n opts.target === '_blank' ||\n opts.download ||\n /mailto|tel/.test(href) ||\n /^(https?:)?\\/\\//.test(href)\n ) return\n\n e.preventDefault()\n\n history.pushState(href)\n }} {...opts} {...rest}>{children}</a>\n )\n}\n","import React from 'react'\nimport * as state from './state.js'\nimport { store, history } from './history.js'\n\nexport default class Router extends React.Component {\n constructor (props) {\n super(props)\n\n this.state = {\n children: props.children.pop ? props.children[0] : props.children\n }\n\n this.currentLocation = props.location\n\n store.listen(({ location }) => {\n const [ route, params ] = props.router(location)\n\n if (location === this.currentLocation) return\n if (route.redirect) return history.pushState(route.redirect.to)\n\n props.resolve({ location, params, route }, children => {\n this.currentLocation = location\n this.setState({ children })\n })\n })\n }\n\n componentDidMount () {\n window.addEventListener('popstate', e => {\n if (!e.target.window) return\n history.pushState(e.target.location.href, true)\n })\n }\n\n render () {\n const { children: Child } = this.state\n return typeof Child === 'function' ? <Child {...state.store.state} /> : Child\n }\n}\n","import React from 'react'\nimport { renderToString } from 'react-dom/server'\nimport createStore from 'picostate'\nimport matcher from './matcher.js'\nimport Hypr from './Hypr.js'\n\nimport plugins from '@/rola.plugins.js'\n\nconst doc = require('@rola/util/document.js')\nconst createDocument = require('@rola/util/createDocument.js')\nconst createServerRoot = require('@rola/util/createServerRoot.js')\nconst postServerRender = require('@rola/util/postServerRender.js')\nconst preServerRender = require('@rola/util/preServerRender.js')\n\nexport default function createStatic (view) {\n return function StaticComponent (context, serverProps) {\n const View = createServerRoot({\n root: view,\n context: { ...context },\n plugins\n })\n\n /**\n * preServerRender hook\n */\n const preRenderData = preServerRender({\n context: { ...context },\n plugins\n })\n\n /**\n * render\n */\n const renderedView = renderToString(\n <Hypr store={createStore(context.state)} router={matcher([])} location={context.pathname}>\n <View {...context} {...preRenderData} />\n </Hypr>\n )\n\n /**\n * postServerRender hook\n */\n const postRenderData = postServerRender({\n context: { ...context },\n plugins: plugins\n })\n\n /**\n * create tags with new context\n */\n const tags = createDocument({\n context: {\n ...context,\n ...serverProps.context\n },\n plugins,\n ...preRenderData,\n ...postRenderData,\n ...serverProps.tags // { head, body }\n }, true)\n\n return doc({ ...tags, context, view: renderedView })\n }\n}\n"],"names":["matcher","routes","matchers","map","route","parse","dictionary","reduce","dict","path","m","match","length","old","exec","store","createStore","historyUpdater","url","cb","location","state","replace","window","origin","hydrate","history","replaceState","sanitized","pushState","popstate","withHistory","Component","props","React","withState","connect","Router","children","pop","currentLocation","listen","router","params","_this","redirect","to","resolve","setState","addEventListener","e","target","href","Child","this","Hypr","Provider","plugins","require","default","createClientRoot","client","initialState","options","pathname","serverContext","JSON","stringify","__rola","Object","assign","view","context","View","root","ReactDOM","done","load","Promise","then","meta","document","title","catch","console","error","doc","createDocument","createServerRoot","postServerRender","preServerRender","redir","res","Location","Referer","status","writeHead","end","server","req","next","serverProps","initialRouteState","cache","statusCode","setHeader","preRenderData","renderedView","ReactDOMServer","renderToString","postRenderData","tags","log","Link","className","download","rest","cn","cx","opts","onClick","ctrlKey","metaKey","altKey","shiftKey","defaultPrevented","test","preventDefault","createStatic"],"mappings":"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"}
\No newline at end of file