@localess/client 3.0.6-dev.20260506093132 → 3.0.6-dev.20260512202133

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -50,15 +50,15 @@ const client = localessClient({
50
50
 
51
51
  ### Client Options
52
52
 
53
- | Option | Type | Required | Default | Description |
54
- |--------|------|----------|---------|-------------|
55
- | `origin` | `string` | ✅ | — | Fully qualified domain with protocol (e.g., `https://my-localess.web.app`) |
56
- | `spaceId` | `string` | ✅ | — | Localess Space ID, found in Space settings |
57
- | `token` | `string` | ✅ | — | Localess API token, found in Space settings |
58
- | `version` | `'draft' \| string` | ❌ | `'published'` | Default content version to fetch |
59
- | `debug` | `boolean` | ❌ | `false` | Enable debug logging |
60
- | `cacheTTL` | `number \| false` | ❌ | `300` | Cache TTL in **seconds** (default: 5 minutes). Set `false` to disable caching entirely — takes precedence over `fileSystemCache` |
61
- | `fileSystemCache` | `boolean` | ❌ | `false` | Use a file-system cache instead of the default in-memory cache. Shared across all processes pointing to the same working directory (e.g. Next.js parallel build workers). Respects `cacheTTL` for TTL value |
53
+ | Option | Type | Required | Default | Description |
54
+ |-------------------|---------------------|----------|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
55
+ | `origin` | `string` | ✅ | — | Fully qualified domain with protocol (e.g., `https://my-localess.web.app`) |
56
+ | `spaceId` | `string` | ✅ | — | Localess Space ID, found in Space settings |
57
+ | `token` | `string` | ✅ | — | Localess API token, found in Space settings |
58
+ | `version` | `'draft' \| string` | ❌ | `'published'` | Default content version to fetch |
59
+ | `debug` | `boolean` | ❌ | `false` | Enable debug logging |
60
+ | `cacheTTL` | `number \| false` | ❌ | `300` | Cache TTL in **seconds** (default: 5 minutes). Set `false` to disable caching entirely — takes precedence over `fileSystemCache` |
61
+ | `fileSystemCache` | `boolean` | ❌ | `false` | Use a file-system cache instead of the default in-memory cache. Shared across all processes pointing to the same working directory (e.g. Next.js parallel build workers). Respects `cacheTTL` for TTL value |
62
62
 
63
63
  ---
64
64
 
@@ -95,12 +95,12 @@ const content = await client.getContentById<Page>('FRnIT7CUABoRCdSVVGGs', {
95
95
 
96
96
  ### Content Fetch Parameters
97
97
 
98
- | Parameter | Type | Default | Description |
99
- |-----------|------|---------|-------------|
100
- | `version` | `'draft' \| string` | Client default | Override the client's default content version |
101
- | `locale` | `string` | — | ISO 639-1 locale code (e.g., `'en'`, `'de'`) |
102
- | `resolveReference` | `boolean` | `false` | Resolve content references inline |
103
- | `resolveLink` | `boolean` | `false` | Resolve content links inline |
98
+ | Parameter | Type | Default | Description |
99
+ |--------------------|---------------------|----------------|-----------------------------------------------|
100
+ | `version` | `'draft' \| string` | Client default | Override the client's default content version |
101
+ | `locale` | `string` | — | ISO 639-1 locale code (e.g., `'en'`, `'de'`) |
102
+ | `resolveReference` | `boolean` | `false` | Resolve content references inline |
103
+ | `resolveLink` | `boolean` | `false` | Resolve content links inline |
104
104
 
105
105
  ---
106
106
 
@@ -122,11 +122,11 @@ const legalLinks = await client.getLinks({
122
122
  });
123
123
  ```
124
124
 
125
- | Parameter | Type | Description |
126
- |-----------|------|-------------|
127
- | `kind` | `'DOCUMENT' \| 'FOLDER'` | Filter results by content kind |
128
- | `parentSlug` | `string` | Filter by parent slug (e.g., `'legal/policy'`) |
129
- | `excludeChildren` | `boolean` | When `true`, excludes nested sub-slugs from results |
125
+ | Parameter | Type | Description |
126
+ |-------------------|--------------------------|-----------------------------------------------------|
127
+ | `kind` | `'DOCUMENT' \| 'FOLDER'` | Filter results by content kind |
128
+ | `parentSlug` | `string` | Filter by parent slug (e.g., `'legal/policy'`) |
129
+ | `excludeChildren` | `boolean` | When `true`, excludes nested sub-slugs from results |
130
130
 
131
131
  ---
132
132
 
@@ -240,15 +240,15 @@ if (window.localess) {
240
240
 
241
241
  ### Available Event Types
242
242
 
243
- | Event | Payload | Description |
244
- |-------|---------|-------------|
245
- | `input` | `{ type: 'input', data: any }` | Fired while a field is being edited (real-time) |
246
- | `change` | `{ type: 'change', data: any }` | Fired after a field value is confirmed |
247
- | `save` | `{ type: 'save' }` | Fired when content is saved |
248
- | `publish` | `{ type: 'publish' }` | Fired when content is published |
249
- | `pong` | `{ type: 'pong' }` | Heartbeat response from the editor |
250
- | `enterSchema` | `{ type: 'enterSchema', id, schema, field? }` | Fired when hovering over a schema element |
251
- | `hoverSchema` | `{ type: 'hoverSchema', id, schema, field? }` | Fired when entering a schema element |
243
+ | Event | Payload | Description |
244
+ |---------------|-----------------------------------------------|-------------------------------------------------|
245
+ | `input` | `{ type: 'input', data: any }` | Fired while a field is being edited (real-time) |
246
+ | `change` | `{ type: 'change', data: any }` | Fired after a field value is confirmed |
247
+ | `save` | `{ type: 'save' }` | Fired when content is saved |
248
+ | `publish` | `{ type: 'publish' }` | Fired when content is published |
249
+ | `pong` | `{ type: 'pong' }` | Heartbeat response from the editor |
250
+ | `enterSchema` | `{ type: 'enterSchema', id, schema, field? }` | Fired when hovering over a schema element |
251
+ | `hoverSchema` | `{ type: 'hoverSchema', id, schema, field? }` | Fired when entering a schema element |
252
252
 
253
253
  ---
254
254
 
@@ -389,11 +389,11 @@ A key-value map of translation keys to translated string values.
389
389
 
390
390
  ## Utility Functions
391
391
 
392
- | Function | Returns | Description |
393
- |----------|---------|-------------|
394
- | `isBrowser()` | `boolean` | Returns `true` if code is running in a browser environment |
395
- | `isServer()` | `boolean` | Returns `true` if code is running in a server/Node.js environment |
396
- | `isIframe()` | `boolean` | Returns `true` if the page is rendered inside an iframe |
392
+ | Function | Returns | Description |
393
+ |---------------|-----------|-------------------------------------------------------------------|
394
+ | `isBrowser()` | `boolean` | Returns `true` if code is running in a browser environment |
395
+ | `isServer()` | `boolean` | Returns `true` if code is running in a server/Node.js environment |
396
+ | `isIframe()` | `boolean` | Returns `true` if the page is rendered inside an iframe |
397
397
 
398
398
  ---
399
399
 
package/SKILL.md CHANGED
@@ -89,12 +89,12 @@ const url = client.assetLink(content.data.image);
89
89
 
90
90
  ## Content Fetch Parameters
91
91
 
92
- | Parameter | Type | Default | Description |
93
- |--------------------|-----------|---------------|----------------------------------------|
94
- | `version` | `'draft' \| undefined` | `undefined` | `'draft'` for preview, omit for published |
95
- | `locale` | `string` | — | ISO 639-1 code: `'en'`, `'de'`, etc. |
96
- | `resolveReference` | `boolean` | `false` | Inline referenced content objects |
97
- | `resolveLink` | `boolean` | `false` | Inline linked content metadata |
92
+ | Parameter | Type | Default | Description |
93
+ |--------------------|------------------------|-------------|-------------------------------------------|
94
+ | `version` | `'draft' \| undefined` | `undefined` | `'draft'` for preview, omit for published |
95
+ | `locale` | `string` | — | ISO 639-1 code: `'en'`, `'de'`, etc. |
96
+ | `resolveReference` | `boolean` | `false` | Inline referenced content objects |
97
+ | `resolveLink` | `boolean` | `false` | Inline linked content metadata |
98
98
 
99
99
  ---
100
100
 
@@ -179,15 +179,15 @@ if (window.localess) {
179
179
 
180
180
  **Event types:**
181
181
 
182
- | Event | When |
183
- |---------------|---------------------------------------------|
184
- | `input` | User is typing in a field (real-time) |
185
- | `change` | Field value confirmed |
186
- | `save` | Content saved |
187
- | `publish` | Content published |
188
- | `pong` | Editor heartbeat response |
189
- | `enterSchema` | User enters a schema element |
190
- | `hoverSchema` | User hovers over a schema element |
182
+ | Event | When |
183
+ |---------------|---------------------------------------|
184
+ | `input` | User is typing in a field (real-time) |
185
+ | `change` | Field value confirmed |
186
+ | `save` | Content saved |
187
+ | `publish` | Content published |
188
+ | `pong` | Editor heartbeat response |
189
+ | `enterSchema` | User enters a schema element |
190
+ | `hoverSchema` | User hovers over a schema element |
191
191
 
192
192
  ---
193
193
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=((e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports))(((e,t)=>{t.exports={}}))(),t=class{cache=new Map;set(e,t){this.cache.set(e,t)}get(e){return this.cache.get(e)}has(e){return this.cache.has(e)}},n=class{set(e,t){}get(e){}has(e){return!1}},r=class{cache=new Map;constructor(e=3e5){this.ttlMs=e}set(e,t){this.cache.set(e,{value:t,expiresAt:Date.now()+this.ttlMs})}get(e){let t=this.cache.get(e);if(t){if(Date.now()>t.expiresAt){this.cache.delete(e);return}return t.value}}has(e){return this.get(e)!==void 0}},i=class{dir;ttlMs;constructor(t=`.localess-cache`,n=3e5){this.dir=t,this.ttlMs=n,(0,e.existsSync)(t)||(0,e.mkdirSync)(t,{recursive:!0})}keyToPath(t){let n=(0,e.createHash)(`md5`).update(t).digest(`hex`);return(0,e.join)(this.dir,`${n}.json`)}set(t,n){try{(0,e.writeFileSync)(this.keyToPath(t),JSON.stringify({value:n,expiresAt:Date.now()+this.ttlMs}))}catch{}}get(t){try{let n=(0,e.readFileSync)(this.keyToPath(t),`utf-8`),r=JSON.parse(n);if(Date.now()>r.expiresAt){try{(0,e.unlinkSync)(this.keyToPath(t))}catch{}return}return r.value}catch{return}}has(e){return this.get(e)!==void 0}},a=`\x1B[0m`,o=`\x1B[34m`,s=()=>typeof window<`u`,c=()=>typeof window>`u`,l=()=>s()&&window.self!==window.top,u=`${o}[Localess:Client]${a}`;function d(e){e.debug&&console.log(u,`Client Options : `,e);let t=e.origin.replace(/\/+$/,``),a={redirect:`follow`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Localess-Agent":`Localess-JS-Client`,"X-Localess-Agent-Version":`0.9.0`}},o=typeof e.cacheTTL==`number`?e.cacheTTL*1e3:void 0,s=e.cacheTTL===!1?new n:e.fileSystemCache?new i(void 0,o):new r(o);return{async getLinks(n){e.debug&&console.log(u,`getLinks() params : `,JSON.stringify(n));let r=``;n?.kind&&(r=`&kind=${n.kind}`);let i=``;n?.parentSlug&&(i=`&parentSlug=${n.parentSlug}`);let o=``;n?.excludeChildren&&(o=`&excludeChildren=${n.excludeChildren}`);let c=`${t}/api/v1/spaces/${e.spaceId}/links?token=${e.token}${r}${i}${o}`;if(e.debug&&console.log(u,`getLinks fetch url : `,c),s.has(c))return e.debug&&console.log(u,`getLinks cache hit`),s.get(c);try{let t=await fetch(c,a);e.debug&&console.log(u,`getLinks status : `,t.status);let n=await t.json();return s.set(c,n),n}catch(e){return console.error(u,`getLinks error : `,e),{}}},async getContentBySlug(n,r){e.debug&&(console.log(u,`getContentBySlug() slug : `,n),console.log(u,`getContentBySlug() params : `,JSON.stringify(r)));let i=``;e?.version&&e.version==`draft`&&(i=`&version=${e.version}`),r?.version&&r.version==`draft`&&(i=`&version=${r.version}`);let o=r?.locale?`&locale=${r.locale}`:``,c=r?.resolveReference?`&resolveReference=${r.resolveReference}`:``,l=r?.resolveLink?`&resolveLink=${r.resolveLink}`:``,d=`${t}/api/v1/spaces/${e.spaceId}/contents/slugs/${n}?token=${e.token}${i}${o}${c}${l}`;if(e.debug&&console.log(u,`getContentBySlug fetch url : `,d),s.has(d))return e.debug&&console.log(u,`getContentBySlug cache hit`),s.get(d);try{let t=await fetch(d,a);e.debug&&console.log(u,`getContentBySlug status : `,t.status);let n=await t.json();return s.set(d,n),n}catch(e){return console.error(u,`getContentBySlug error : `,e),{}}},async getContentById(n,r){e.debug&&(console.log(u,`getContentById() id : `,n),console.log(u,`getContentById() params : `,JSON.stringify(r)));let i=``;e?.version&&e.version==`draft`&&(i=`&version=${e.version}`),r?.version&&r.version==`draft`&&(i=`&version=${r.version}`);let o=r?.locale?`&locale=${r.locale}`:``,c=r?.resolveReference?`&resolveReference=${r.resolveReference}`:``,l=r?.resolveLink?`&resolveLink=${r.resolveLink}`:``,d=`${t}/api/v1/spaces/${e.spaceId}/contents/${n}?token=${e.token}${i}${o}${c}${l}`;if(e.debug&&console.log(u,`getContentById fetch url : `,d),s.has(d))return e.debug&&console.log(u,`getContentById cache hit`),s.get(d);try{let t=await fetch(d,a);e.debug&&console.log(u,`getContentById status : `,t.status);let n=await t.json();return s.set(d,n),n}catch(e){return console.error(u,`getContentById error : `,e),{}}},async getTranslations(n){e.debug&&console.log(u,`getTranslations() locale : `,n);let r=`${t}/api/v1/spaces/${e.spaceId}/translations/${n}?token=${e.token}`;if(e.debug&&console.log(u,`getTranslations fetch url : `,r),s.has(r))return e.debug&&console.log(u,`getTranslations cache hit`),s.get(r);try{let t=await fetch(r,a);e.debug&&console.log(u,`getTranslations status : `,t.status);let n=await t.json();return s.set(r,n),n}catch(e){return console.error(u,`getTranslations error : `,e),{}}},syncScriptUrl(){return`${t}/scripts/sync-v1.js`},assetLink(n){return typeof n==`string`?`${t}/api/v1/spaces/${e.spaceId}/assets/${n}`:`${t}/api/v1/spaces/${e.spaceId}/assets/${n.uri}`}}}function f(e){return{"data-ll-id":e._id,"data-ll-schema":e._schema}}function p(e){return{"data-ll-field":e}}var m=`localess-js-sync`;async function h(e,t=!1){return new Promise((t,n)=>{if(c()){n(void 0);return}if(!l()){console.warn(`Localess Sync is loaded only in Visual Editor.`),n(void 0);return}if(window.localess!==void 0){n(void 0);return}if(document.getElementById(m)){n(void 0);return}let r=document.createElement(`script`);r.id=m,r.type=`text/javascript`,r.src=`${e}/scripts/sync-v1.js`,r.async=!0,r.onerror=e=>n(e),r.onload=e=>{console.info(`Localess Sync Script loaded`),t()},document.head.appendChild(r)})}exports.Cache=t,exports.FileSystemCache=i,exports.NoCache=n,exports.TTLCache=r,exports.isBrowser=s,exports.isIframe=l,exports.isServer=c,exports.loadLocalessSync=h,exports.localessClient=d,exports.localessEditable=f,exports.localessEditableField=p;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=((e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports))(((e,t)=>{t.exports={}}))(),t=class{cache=new Map;set(e,t){this.cache.set(e,t)}get(e){return this.cache.get(e)}has(e){return this.cache.has(e)}},n=class{set(e,t){}get(e){}has(e){return!1}},r=class{cache=new Map;constructor(e=3e5){this.ttlMs=e}set(e,t){this.cache.set(e,{value:t,expiresAt:Date.now()+this.ttlMs})}get(e){let t=this.cache.get(e);if(t){if(Date.now()>t.expiresAt){this.cache.delete(e);return}return t.value}}has(e){return this.get(e)!==void 0}},i=class{dir;ttlMs;constructor(t=`.localess/cache`,n=3e5){this.dir=t,this.ttlMs=n,(0,e.existsSync)(t)||(0,e.mkdirSync)(t,{recursive:!0})}keyToPath(t){let n=(0,e.createHash)(`md5`).update(t).digest(`hex`);return(0,e.join)(this.dir,`${n}.json`)}set(t,n){try{(0,e.writeFileSync)(this.keyToPath(t),JSON.stringify({value:n,expiresAt:Date.now()+this.ttlMs}))}catch{}}get(t){try{let n=(0,e.readFileSync)(this.keyToPath(t),`utf-8`),r=JSON.parse(n);if(Date.now()>r.expiresAt){try{(0,e.unlinkSync)(this.keyToPath(t))}catch{}return}return r.value}catch{return}}has(e){return this.get(e)!==void 0}},a=`\x1B[0m`,o=`\x1B[34m`,s=()=>typeof window<`u`,c=()=>typeof window>`u`,l=()=>s()&&window.self!==window.top,u=`${o}[Localess:Client]${a}`;function d(e){e.debug&&console.log(u,`Client Options : `,e);let t=e.origin.replace(/\/+$/,``),a={redirect:`follow`,headers:{"Content-Type":`application/json`,Accept:`application/json`,"X-Localess-Agent":`Localess-JS-Client`,"X-Localess-Agent-Version":`0.9.0`}},o=typeof e.cacheTTL==`number`?e.cacheTTL*1e3:void 0,s=e.cacheTTL===!1?new n:e.fileSystemCache?new i(void 0,o):new r(o);return{async getLinks(n){e.debug&&console.log(u,`getLinks() params : `,JSON.stringify(n));let r=``;n?.kind&&(r=`&kind=${n.kind}`);let i=``;n?.parentSlug&&(i=`&parentSlug=${n.parentSlug}`);let o=``;n?.excludeChildren&&(o=`&excludeChildren=${n.excludeChildren}`);let c=`${t}/api/v1/spaces/${e.spaceId}/links?token=${e.token}${r}${i}${o}`;if(e.debug&&console.log(u,`getLinks fetch url : `,c),s.has(c))return e.debug&&console.log(u,`getLinks cache hit`),s.get(c);try{let t=await fetch(c,a);e.debug&&console.log(u,`getLinks status : `,t.status);let n=await t.json();return s.set(c,n),n}catch(e){return console.error(u,`getLinks error : `,e),{}}},async getContentBySlug(n,r){e.debug&&(console.log(u,`getContentBySlug() slug : `,n),console.log(u,`getContentBySlug() params : `,JSON.stringify(r)));let i=``;e?.version&&e.version==`draft`&&(i=`&version=${e.version}`),r?.version&&r.version==`draft`&&(i=`&version=${r.version}`);let o=r?.locale?`&locale=${r.locale}`:``,c=r?.resolveReference?`&resolveReference=${r.resolveReference}`:``,l=r?.resolveLink?`&resolveLink=${r.resolveLink}`:``,d=`${t}/api/v1/spaces/${e.spaceId}/contents/slugs/${n}?token=${e.token}${i}${o}${c}${l}`;if(e.debug&&console.log(u,`getContentBySlug fetch url : `,d),s.has(d))return e.debug&&console.log(u,`getContentBySlug cache hit`),s.get(d);try{let t=await fetch(d,a);e.debug&&console.log(u,`getContentBySlug status : `,t.status);let n=await t.json();return s.set(d,n),n}catch(e){return console.error(u,`getContentBySlug error : `,e),{}}},async getContentById(n,r){e.debug&&(console.log(u,`getContentById() id : `,n),console.log(u,`getContentById() params : `,JSON.stringify(r)));let i=``;e?.version&&e.version==`draft`&&(i=`&version=${e.version}`),r?.version&&r.version==`draft`&&(i=`&version=${r.version}`);let o=r?.locale?`&locale=${r.locale}`:``,c=r?.resolveReference?`&resolveReference=${r.resolveReference}`:``,l=r?.resolveLink?`&resolveLink=${r.resolveLink}`:``,d=`${t}/api/v1/spaces/${e.spaceId}/contents/${n}?token=${e.token}${i}${o}${c}${l}`;if(e.debug&&console.log(u,`getContentById fetch url : `,d),s.has(d))return e.debug&&console.log(u,`getContentById cache hit`),s.get(d);try{let t=await fetch(d,a);e.debug&&console.log(u,`getContentById status : `,t.status);let n=await t.json();return s.set(d,n),n}catch(e){return console.error(u,`getContentById error : `,e),{}}},async getTranslations(n){e.debug&&console.log(u,`getTranslations() locale : `,n);let r=`${t}/api/v1/spaces/${e.spaceId}/translations/${n}?token=${e.token}`;if(e.debug&&console.log(u,`getTranslations fetch url : `,r),s.has(r))return e.debug&&console.log(u,`getTranslations cache hit`),s.get(r);try{let t=await fetch(r,a);e.debug&&console.log(u,`getTranslations status : `,t.status);let n=await t.json();return s.set(r,n),n}catch(e){return console.error(u,`getTranslations error : `,e),{}}},syncScriptUrl(){return`${t}/scripts/sync-v1.js`},assetLink(n){return typeof n==`string`?`${t}/api/v1/spaces/${e.spaceId}/assets/${n}`:`${t}/api/v1/spaces/${e.spaceId}/assets/${n.uri}`}}}function f(e){return{"data-ll-id":e._id,"data-ll-schema":e._schema}}function p(e){return{"data-ll-field":e}}var m=`localess-js-sync`;async function h(e,t=!1){return new Promise((t,n)=>{if(c()){n(void 0);return}if(!l()){console.warn(`Localess Sync is loaded only in Visual Editor.`),n(void 0);return}if(window.localess!==void 0){n(void 0);return}if(document.getElementById(m)){n(void 0);return}let r=document.createElement(`script`);r.id=m,r.type=`text/javascript`,r.src=`${e}/scripts/sync-v1.js`,r.async=!0,r.onerror=e=>n(e),r.onload=e=>{console.info(`Localess Sync Script loaded`),t()},document.head.appendChild(r)})}exports.Cache=t,exports.FileSystemCache=i,exports.NoCache=n,exports.TTLCache=r,exports.isBrowser=s,exports.isIframe=l,exports.isServer=c,exports.loadLocalessSync=h,exports.localessClient=d,exports.localessEditable=f,exports.localessEditableField=p;
package/dist/index.mjs CHANGED
@@ -46,7 +46,7 @@ var e = (/* @__PURE__ */ ((e, t) => () => (t || (e((t = { exports: {} }).exports
46
46
  }, i = class {
47
47
  dir;
48
48
  ttlMs;
49
- constructor(t = ".localess-cache", n = 3e5) {
49
+ constructor(t = ".localess/cache", n = 3e5) {
50
50
  this.dir = t, this.ttlMs = n, (0, e.existsSync)(t) || (0, e.mkdirSync)(t, { recursive: !0 });
51
51
  }
52
52
  keyToPath(t) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@localess/client",
3
- "version": "3.0.6-dev.20260506093132",
3
+ "version": "3.0.6-dev.20260512202133",
4
4
  "description": "Universal JavaScript/TypeScript SDK for Localess's API.",
5
5
  "keywords": [
6
6
  "localess",