UNPKG

@tupipu/translator

Version:

A lightweight, extensible, and production-ready translation framework built specifically for Next.js apps. This package simplifies internationalization (i18n) by combining static and dynamic translations, language detection, server/client rendering compat

12 lines (11 loc) 9.49 kB
import e,{createContext as r,useState as t,useEffect as n,useCallback as o,useContext as a}from"react";var i=function(){return i=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},i.apply(this,arguments)};function c(e,r,t,n){return new(t||(t=Promise))(function(o,a){function i(e){try{s(n.next(e))}catch(e){a(e)}}function c(e){try{s(n.throw(e))}catch(e){a(e)}}function s(e){var r;e.done?o(e.value):(r=e.value,r instanceof t?r:new t(function(e){e(r)})).then(i,c)}s((n=n.apply(e,r||[])).next())})}function s(e,r){var t,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=c(0),i.throw=c(1),i.return=c(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(c){return function(s){return function(c){if(t)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=r.call(e,a)}catch(e){c=[6,e],n=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,s])}}}"function"==typeof SuppressedError&&SuppressedError;var l,u={exports:{}},f={};var p,y,d={}; /** * @license React * react-jsx-runtime.development.js * * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */function b(){return p||(p=1,"production"!==process.env.NODE_ENV&&function(){function r(e){if(null==e)return null;if("function"==typeof e)return e.$$typeof===x?null:e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case y:return"Fragment";case m:return"Profiler";case b:return"StrictMode";case k:return"Suspense";case w:return"SuspenseList";case O:return"Activity"}if("object"==typeof e)switch("number"==typeof e.tag&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case p:return"Portal";case g:return(e.displayName||"Context")+".Provider";case v:return(e._context.displayName||"Context")+".Consumer";case h:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case S:return null!==(t=e.displayName||null)?t:r(e.type)||"Memo";case j:t=e._payload,e=e._init;try{return r(e(t))}catch(e){}}return null}function t(e){return""+e}function n(e){try{t(e);var r=!1}catch(e){r=!0}if(r){var n=(r=console).error,o="function"==typeof Symbol&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",o),t(e)}}function o(e){if(e===y)return"<>";if("object"==typeof e&&null!==e&&e.$$typeof===j)return"<...>";try{var t=r(e);return t?"<"+t+">":"<...>"}catch(e){return"<...>"}}function a(){return Error("react-stack-top-frame")}function i(){var e=r(this.type);return P[e]||(P[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),void 0!==(e=this.props.ref)?e:null}function c(e,t,o,a,c,u,p,y){var d,b=t.children;if(void 0!==b)if(a)if(E(b)){for(a=0;a<b.length;a++)s(b[a]);Object.freeze&&Object.freeze(b)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else s(b);if(T.call(t,"key")){b=r(e);var m=Object.keys(t).filter(function(e){return"key"!==e});a=0<m.length?"{key: someKey, "+m.join(": ..., ")+": ...}":"{key: someKey}",A[b+a]||(m=0<m.length?"{"+m.join(": ..., ")+": ...}":"{}",console.error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',a,b,m,b),A[b+a]=!0)}if(b=null,void 0!==o&&(n(o),b=""+o),function(e){if(T.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return void 0!==e.key}(t)&&(n(t.key),b=""+t.key),"key"in t)for(var v in o={},t)"key"!==v&&(o[v]=t[v]);else o=t;return b&&function(e,r){function t(){l||(l=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}t.isReactWarning=!0,Object.defineProperty(e,"key",{get:t,configurable:!0})}(o,"function"==typeof e?e.displayName||e.name||"Unknown":e),function(e,r,t,n,o,a,c,s){return t=a.ref,e={$$typeof:f,type:e,key:r,props:a,_owner:o},null!==(void 0!==t?t:null)?Object.defineProperty(e,"ref",{enumerable:!1,get:i}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:c}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:s}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}(e,b,u,0,null===(d=_.A)?null:d.getOwner(),o,p,y)}function s(e){"object"==typeof e&&null!==e&&e.$$typeof===f&&e._store&&(e._store.validated=1)}var l,u=e,f=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),y=Symbol.for("react.fragment"),b=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),v=Symbol.for("react.consumer"),g=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),k=Symbol.for("react.suspense"),w=Symbol.for("react.suspense_list"),S=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),O=Symbol.for("react.activity"),x=Symbol.for("react.client.reference"),_=u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T=Object.prototype.hasOwnProperty,E=Array.isArray,N=console.createTask?console.createTask:function(){return null},P={},R=(u={"react-stack-bottom-frame":function(e){return e()}})["react-stack-bottom-frame"].bind(u,a)(),$=N(o(a)),A={};d.Fragment=y,d.jsx=function(e,r,t,n,a){var i=1e4>_.recentlyCreatedOwnerStacks++;return c(e,r,t,!1,0,a,i?Error("react-stack-top-frame"):R,i?N(o(e)):$)},d.jsxs=function(e,r,t,n,a){var i=1e4>_.recentlyCreatedOwnerStacks++;return c(e,r,t,!0,0,a,i?Error("react-stack-top-frame"):R,i?N(o(e)):$)}}()),d}var m=(y||(y=1,"production"===process.env.NODE_ENV?u.exports=function(){if(l)return f;l=1;var e=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function t(r,t,n){var o=null;if(void 0!==n&&(o=""+n),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in n={},t)"key"!==a&&(n[a]=t[a]);else n=t;return t=n.ref,{$$typeof:e,type:r,key:o,ref:void 0!==t?t:null,props:n}}return f.Fragment=r,f.jsx=t,f.jsxs=t,f}():u.exports=b()),u.exports),v=r(void 0),g=function(e){var r=e.children,a=e.userId,l=e.email,u=e.apiKeyId,f=e.apiKey,p=t("en"),y=p[0],d=p[1];n(function(){var e=localStorage.getItem("lang")||navigator.language.slice(0,2);d(["fr","es","en"].includes(e)?e:"en")},[]),n(function(){localStorage.setItem("lang",y)},[y]);var b=o(function(e){return c(void 0,void 0,void 0,function(){var r,t,n,o;return s(this,function(c){switch(c.label){case 0:if("en"===y)return[2,e];r=new AbortController,t=setTimeout(function(){return r.abort()},3e4),c.label=1;case 1:return c.trys.push([1,4,,5]),[4,fetch("https://yjljx1tq80.execute-api.us-east-1.amazonaws.com/main/app/translator",{method:"POST",headers:i(i(i(i({"Content-Type":"application/json"},f&&{"x-api-key":f}),u&&{"x-api-key-id":u}),a&&{"x-user-id":a}),l&&{"x-user-email":l}),body:JSON.stringify({text:e,sourceLang:"en",targetLang:y})})];case 2:if(n=c.sent(),clearTimeout(t),!n.ok)throw new Error("HTTP error! status: ".concat(n.status));return[4,n.json()];case 3:return[2,c.sent().translatedText];case 4:return o=c.sent(),console.error("Translation error",o),[2,e];case 5:return[2]}})})},[y,f,u,a,l]);return m.jsx(v.Provider,{value:{language:y,setLanguage:d,translate:b},children:r})},h=function(){var e=a(v);if(!e)throw new Error("useTranslator must be used within LanguageTranslator");return e};function k(e,r){return r.split(".").reduce(function(e,r){return e&&e[r]?e[r]:void 0},e)}var w=function(e){var r=h(),t=r.language,n=r.translate,a=o(function(r){return c(void 0,void 0,void 0,function(){var o,a;return s(this,function(i){switch(i.label){case 0:return"string"==typeof(o=k(e[t],r))?[2,o]:"string"==typeof(a=k(e.en,r))?[2,a]:[4,n(r)];case 1:return[2,i.sent()]}})})},[t,n,e]);return{t:a}};export{g as TranslatorProvider,w as useTranslation,h as useTranslatorContext}; //# sourceMappingURL=index.mjs.map