next-slicezone
Version:
A component that maps other components to Prismic slices
2 lines (1 loc) • 3.9 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs"),n=require("path");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e),o=t(n);function i(e,n,t,r,o,i,c){try{var a=e[i](c),s=a.value}catch(e){return void t(e)}a.done?n(s):Promise.resolve(s).then(r,o)}function c(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var c=e.apply(n,t);function a(e){i(c,r,o,a,s,"next",e)}function s(e){i(c,r,o,a,s,"throw",e)}a(void 0)}))}}var a="sm.config.json",s="sm.json",l=/-(\w)/g;var u=/\B([A-Z])/g;function p(e){return e.replace(u,"-$1").toLowerCase()}var f={pascalize:function(e){return e?(e=e.replace(/_/g,"-").replace(l,((e,n)=>n?n.toUpperCase():"")))[0].toUpperCase()+e.slice(1):""},hyphenate:p,snakelize:function(e){return p(e).replace(/-/g,"_")}},d=e=>{const n=/^\\\\\?\\/.test(e),t=/[^\u0000-\u0080]+/.test(e);return n||t?e:e.replace(/\\/g,"/")};function m(e,n){var t=void 0!==["@/","~","/"].find((n=>0===e.indexOf(n))),i=o.default.join(n||process.cwd(),t?"":"node_modules",t?e.substring(1,e.length):e),c=o.default.join(i,a),s=r.default.existsSync(i),l={};r.default.existsSync(c)&&(l=JSON.parse(r.default.readFileSync(c)));var u=o.default.join(i,l.pathToLibrary||".",l.slicesFolder||(t?".":"slices"));return{config:l,isLocal:t,pathExists:s,pathToLib:d(i),pathToSlices:d(u)}}function v(){return(v=c((function*(e,n){var{isLocal:t,pathExists:r,pathToSlices:o}=yield m(e,n);if(!r)return console.warn('[next-slicezone] path to library "'.concat(o,'" does not exist. Skipping.')),null;var i=t?e.slice(2):e,c="".concat(t?"./":"").concat(i).concat(o.split(i).slice(1).join("")),a=f.pascalize(i);return{isLocal:t,from:i,name:a,importName:a.replace(/\//,"_"),pathToSlices:c}}))).apply(this,arguments)}var y=function(){var e=c((function*(e){var n=e||o.default.posix.join(process.cwd(),s),{libraries:t}=r.default.existsSync(n)?JSON.parse(r.default.readFileSync(n)):{};if(!t)return console.warn('[next-slicezone] expects a non-empty "libraries" array in file "'.concat(s,'"'));if(!Array.isArray(t)||!t.length)return console.error('[next-slicezone] expects "libraries" option to be a non-empty array');var i,a,l,u=o.default.dirname(n),p=yield Promise.all(t.map(function(){var e=c((function*(e){return yield function(e,n){return v.apply(this,arguments)}(e,u)}));return function(n){return e.apply(this,arguments)}}())),f=(i=p.filter((e=>e)),a=i.reduce(((e,n)=>{var{importName:t,from:r,isLocal:o}=n;return o?"".concat(e,"import * as ").concat(t," from './").concat(r,"'\n"):"".concat(e,"import { Slices as ").concat(t," } from '").concat(r,"'\n")}),""),l="const ".concat("__allSlices"," = { ").concat(i.reverse().reduce(((e,n)=>{var{importName:t}=n;return"".concat(e," ...").concat(t,",")}),"")," }"),"".concat(a,"\n").concat(l,"\n")),d="".concat(f,"\n").concat("const NotFound = ({ sliceName, slice, i }) => {\n console.error(`[sm-resolver] component \"${sliceName}\" not found at index ${i}.`)\n console.warn(`slice data: ${slice}`)\n\treturn process.env.NODE_ENV !== 'production' ? (\n <div\n style={{\n height: '30vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n textAlign: 'center',\n background: '#FAFAFA'\n }}\n >\n <h2>\n Slice \"{sliceName}\" not found.\n </h2>\n <p style={{ maxWidth: '320px', fontSize: '16px' }}>\n Check that you registered this component in your slices library!\n </p>\n </div>\n ) : null\n}\n\nexport default function SliceResolver({ sliceName, ...rest }) {\n\treturn __allSlices[sliceName] ? __allSlices[sliceName] : () => <NotFound sliceName={sliceName} {...rest} />\n}\n","\n ");return r.default.writeFileSync(o.default.join(u,"sm-resolver.js"),d,"utf-8")}));return function(n){return e.apply(this,arguments)}}();exports.createResolver=y;