@image-marker/web 0.1.0

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.
Files changed (124) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +100 -0
  3. package/api-contract.json +224 -0
  4. package/lib/commonjs/core/batch.d.ts +32 -0
  5. package/lib/commonjs/core/batch.js +85 -0
  6. package/lib/commonjs/core/content-credentials.d.ts +53 -0
  7. package/lib/commonjs/core/content-credentials.js +96 -0
  8. package/lib/commonjs/core/image-info.d.ts +30 -0
  9. package/lib/commonjs/core/image-info.js +348 -0
  10. package/lib/commonjs/core/index.d.ts +1014 -0
  11. package/lib/commonjs/core/index.js +92 -0
  12. package/lib/commonjs/core/invisible-watermark.d.ts +102 -0
  13. package/lib/commonjs/core/invisible-watermark.js +913 -0
  14. package/lib/commonjs/core/job.d.ts +57 -0
  15. package/lib/commonjs/core/job.js +151 -0
  16. package/lib/commonjs/core/layout.d.ts +19 -0
  17. package/lib/commonjs/core/layout.js +75 -0
  18. package/lib/commonjs/core/marker.d.ts +1 -0
  19. package/lib/commonjs/core/marker.js +11 -0
  20. package/lib/commonjs/core/recipe.d.ts +44 -0
  21. package/lib/commonjs/core/recipe.js +175 -0
  22. package/lib/commonjs/core/result.d.ts +34 -0
  23. package/lib/commonjs/core/result.js +41 -0
  24. package/lib/commonjs/core/trace-runtime.d.ts +43 -0
  25. package/lib/commonjs/core/trace-runtime.js +92 -0
  26. package/lib/commonjs/core/validate.d.ts +4 -0
  27. package/lib/commonjs/core/validate.js +192 -0
  28. package/lib/commonjs/core/web/browser.d.ts +105 -0
  29. package/lib/commonjs/core/web/browser.js +434 -0
  30. package/lib/commonjs/core/web/helpers.d.ts +41 -0
  31. package/lib/commonjs/core/web/helpers.js +264 -0
  32. package/lib/commonjs/core/web/index.d.ts +59 -0
  33. package/lib/commonjs/core/web/index.js +724 -0
  34. package/lib/commonjs/core/web/invisible-worker-client.d.ts +13 -0
  35. package/lib/commonjs/core/web/invisible-worker-client.js +140 -0
  36. package/lib/commonjs/core/web/renderer.d.ts +20 -0
  37. package/lib/commonjs/core/web/renderer.js +665 -0
  38. package/lib/commonjs/core/web/runtime.d.ts +106 -0
  39. package/lib/commonjs/core/web/runtime.js +2 -0
  40. package/lib/commonjs/editor/adapter.d.ts +26 -0
  41. package/lib/commonjs/editor/adapter.js +102 -0
  42. package/lib/commonjs/editor/controller.d.ts +106 -0
  43. package/lib/commonjs/editor/controller.js +919 -0
  44. package/lib/commonjs/editor/core-contract.d.ts +2 -0
  45. package/lib/commonjs/editor/core-contract.js +23 -0
  46. package/lib/commonjs/editor/geometry.d.ts +8 -0
  47. package/lib/commonjs/editor/geometry.js +109 -0
  48. package/lib/commonjs/editor/headless.d.ts +5 -0
  49. package/lib/commonjs/editor/headless.js +22 -0
  50. package/lib/commonjs/editor/presets.d.ts +19 -0
  51. package/lib/commonjs/editor/presets.js +64 -0
  52. package/lib/commonjs/editor/projection.d.ts +12 -0
  53. package/lib/commonjs/editor/projection.js +195 -0
  54. package/lib/commonjs/editor/types.d.ts +166 -0
  55. package/lib/commonjs/editor/types.js +2 -0
  56. package/lib/commonjs/editor-adapter.d.ts +7 -0
  57. package/lib/commonjs/editor-adapter.js +17 -0
  58. package/lib/commonjs/headless.d.ts +2 -0
  59. package/lib/commonjs/headless.js +26 -0
  60. package/lib/commonjs/index.d.ts +5 -0
  61. package/lib/commonjs/index.js +27 -0
  62. package/lib/commonjs/package.json +1 -0
  63. package/lib/module/core/batch.d.ts +32 -0
  64. package/lib/module/core/batch.js +82 -0
  65. package/lib/module/core/content-credentials.d.ts +53 -0
  66. package/lib/module/core/content-credentials.js +92 -0
  67. package/lib/module/core/image-info.d.ts +30 -0
  68. package/lib/module/core/image-info.js +343 -0
  69. package/lib/module/core/index.d.ts +1014 -0
  70. package/lib/module/core/index.js +56 -0
  71. package/lib/module/core/invisible-watermark.d.ts +102 -0
  72. package/lib/module/core/invisible-watermark.js +897 -0
  73. package/lib/module/core/job.d.ts +57 -0
  74. package/lib/module/core/job.js +143 -0
  75. package/lib/module/core/layout.d.ts +19 -0
  76. package/lib/module/core/layout.js +70 -0
  77. package/lib/module/core/marker.d.ts +1 -0
  78. package/lib/module/core/marker.js +4 -0
  79. package/lib/module/core/recipe.d.ts +44 -0
  80. package/lib/module/core/recipe.js +169 -0
  81. package/lib/module/core/result.d.ts +34 -0
  82. package/lib/module/core/result.js +38 -0
  83. package/lib/module/core/trace-runtime.d.ts +43 -0
  84. package/lib/module/core/trace-runtime.js +89 -0
  85. package/lib/module/core/validate.d.ts +4 -0
  86. package/lib/module/core/validate.js +187 -0
  87. package/lib/module/core/web/browser.d.ts +105 -0
  88. package/lib/module/core/web/browser.js +427 -0
  89. package/lib/module/core/web/helpers.d.ts +41 -0
  90. package/lib/module/core/web/helpers.js +251 -0
  91. package/lib/module/core/web/index.d.ts +59 -0
  92. package/lib/module/core/web/index.js +709 -0
  93. package/lib/module/core/web/invisible-worker-client.d.ts +13 -0
  94. package/lib/module/core/web/invisible-worker-client.js +137 -0
  95. package/lib/module/core/web/renderer.d.ts +20 -0
  96. package/lib/module/core/web/renderer.js +661 -0
  97. package/lib/module/core/web/runtime.d.ts +106 -0
  98. package/lib/module/core/web/runtime.js +1 -0
  99. package/lib/module/editor/adapter.d.ts +26 -0
  100. package/lib/module/editor/adapter.js +99 -0
  101. package/lib/module/editor/controller.d.ts +106 -0
  102. package/lib/module/editor/controller.js +915 -0
  103. package/lib/module/editor/core-contract.d.ts +2 -0
  104. package/lib/module/editor/core-contract.js +2 -0
  105. package/lib/module/editor/geometry.d.ts +8 -0
  106. package/lib/module/editor/geometry.js +103 -0
  107. package/lib/module/editor/headless.d.ts +5 -0
  108. package/lib/module/editor/headless.js +4 -0
  109. package/lib/module/editor/presets.d.ts +19 -0
  110. package/lib/module/editor/presets.js +57 -0
  111. package/lib/module/editor/projection.d.ts +12 -0
  112. package/lib/module/editor/projection.js +188 -0
  113. package/lib/module/editor/types.d.ts +166 -0
  114. package/lib/module/editor/types.js +1 -0
  115. package/lib/module/editor-adapter.d.ts +7 -0
  116. package/lib/module/editor-adapter.js +10 -0
  117. package/lib/module/headless.d.ts +2 -0
  118. package/lib/module/headless.js +2 -0
  119. package/lib/module/index.d.ts +5 -0
  120. package/lib/module/index.js +3 -0
  121. package/lib/module/package.json +1 -0
  122. package/lib/source-manifest.json +34 -0
  123. package/lib/worker/invisible-watermark.js +1 -0
  124. package/package.json +85 -0
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var q="dct-qim-v1";var et=[.95,1.05,.9,1.1],nt=[1,.9,.8,.7,.6],b=8,P=16,z=11,G=22,v=G*8,F=4,rt=12,T=16,L=18,at=73,it=77,ot=1,W=64,st=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ct=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Y=[[1,2,2,1],[2,3,3,2],[1,3,3,1],[2,4,4,2]],$={subtle:18,balanced:28,robust:42};function O(t){let e={detected:t.detected,confidence:t.confidence,algorithm:t.algorithm};return t.payload!==void 0&&(e.payload=t.payload),t.bitErrorRate!==void 0&&(e.bitErrorRate=t.bitErrorRate),t.scale!==void 0&&t.scale!==1&&(e.scale=t.scale),e}function w(t,e){return t>>>e|t<<32-e}function U(t){let e=t.length*8,n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128;let i=new DataView(r.buffer);i.setUint32(n-8,Math.floor(e/4294967296)),i.setUint32(n-4,e>>>0);let a=new Uint32Array(st),o=new Uint32Array(64);for(let d=0;d<n;d+=64){for(let l=0;l<16;l+=1)o[l]=i.getUint32(d+l*4);for(let l=16;l<64;l+=1){let k=o[l-15],A=o[l-2],g=w(k,7)^w(k,18)^k>>>3,E=w(A,17)^w(A,19)^A>>>10;o[l]=o[l-16]+g+o[l-7]+E>>>0}let m=a[0],f=a[1],x=a[2],h=a[3],I=a[4],y=a[5],p=a[6],u=a[7];for(let l=0;l<64;l+=1){let k=w(I,6)^w(I,11)^w(I,25),A=I&y^~I&p,g=u+k+A+ct[l]+o[l]>>>0,E=w(m,2)^w(m,13)^w(m,22),M=m&f^m&x^f&x,R=E+M>>>0;u=p,p=y,y=I,I=h+g>>>0,h=x,x=f,f=m,m=g+R>>>0}a[0]=a[0]+m>>>0,a[1]=a[1]+f>>>0,a[2]=a[2]+x>>>0,a[3]=a[3]+h>>>0,a[4]=a[4]+I>>>0,a[5]=a[5]+y>>>0,a[6]=a[6]+p>>>0,a[7]=a[7]+u>>>0}let c=new Uint8Array(32),s=new DataView(c.buffer);return a.forEach((d,m)=>s.setUint32(m*4,d)),c}function j(t,e){let n=t.length>W?U(t):t;if(n.length<W){let s=new Uint8Array(W);s.set(n),n=s}let r=new Uint8Array(W),i=new Uint8Array(W);for(let s=0;s<W;s+=1)r[s]=n[s]^54,i[s]=n[s]^92;let a=new Uint8Array(r.length+e.length);a.set(r),a.set(e,r.length);let o=U(a),c=new Uint8Array(i.length+o.length);return c.set(i),c.set(o,i.length),U(c)}function D(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t.charCodeAt(n);if(r>=55296&&r<=56319){let i=t.charCodeAt(n+1);i>=56320&&i<=57343?(r=65536+(r-55296<<10)+(i-56320),n+=1):r=65533}else r>=56320&&r<=57343&&(r=65533);r<=127?e.push(r):r<=2047?e.push(192|r>>6,128|r&63):r<=65535?e.push(224|r>>12,128|r>>6&63,128|r&63):e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63)}return new Uint8Array(e)}function lt(t){let e="";for(let n=0;n<t.length;){let r=t[n++],i;r<128?i=r:(r&224)===192&&n<t.length?i=(r&31)<<6|t[n++]&63:(r&240)===224&&n+1<t.length?i=(r&15)<<12|(t[n++]&63)<<6|t[n++]&63:(r&248)===240&&n+2<t.length?i=(r&7)<<18|(t[n++]&63)<<12|(t[n++]&63)<<6|t[n++]&63:i=65533,e+=String.fromCodePoint(i)}return e}function dt(t){let e=65535;for(let n of t){e^=n<<8;for(let r=0;r<8;r+=1)e=(e<<1^(e&32768?4129:0))&65535}return e}function ut(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r+=1)n|=t[r]^e[r];return n===0}function mt(t){let e=new Uint8Array(Math.ceil(t.length/8));for(let n=0;n<t.length;n+=1)e[n>>>3]=e[n>>>3]|t[n]<<7-(n&7);return e}function ft(t,e){if(t.length!==G||t[0]!==at||t[1]!==it||t[2]!==ot||t[3]<1||t[3]>rt)return null;let n=dt(t.subarray(0,T)),r=t[T]<<8|t[T+1];if(n!==r)return null;let i=j(e,t.subarray(0,L)).subarray(0,4);return ut(i,t.subarray(L))?lt(t.subarray(F,F+t[3])):null}function ht(t){let e=t>>>0;return e^=e<<13,e^=e>>>17,e^=e<<5,e>>>0}function Z(t){let e=D("react-native-image-marker:dct-qim-v1"),n=j(t,e);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0)||1831565813}function bt(t){let e=D(t);if(e.length<16)throw new Error("key must contain at least 16 UTF-8 bytes.");let n=new Uint16Array(v);for(let i=0;i<n.length;i+=1)n[i]=i;let r=Z(e);for(let i=n.length-1;i>0;i-=1){r=ht(r);let a=r%(i+1),o=n[i];n[i]=n[a],n[a]=o}return n}function xt(t,e){let n=(t^Math.imul(e+1,2654435761))>>>0;return n^=n>>>16,n=Math.imul(n,2246822507)>>>0,n^=n>>>13,n=Math.imul(n,3266489909)>>>0,n^=n>>>16,n>>>0}function It(t,e){if(!Number.isInteger(t)||!Number.isInteger(e)||t<128||e<88)throw new Error("invisible watermark images must be at least 128x88 pixels.")}function gt(t){let e=t??"balanced";if(!Object.prototype.hasOwnProperty.call($,e))throw new Error(`Unsupported invisible watermark strength: ${e}.`);return e}function yt(t){let e=t??"fast";if(e!=="fast"&&e!=="robust")throw new Error(`Unsupported invisible watermark search mode: ${e}.`);return e}function pt(t,e,n,r,i=b){let a=Math.sqrt(t===0?1/i:2/i),o=Math.sqrt(e===0?1/i:2/i);return a*o*Math.cos((2*n+1)*t*Math.PI/(2*i))*Math.cos((2*r+1)*e*Math.PI/(2*i))}var K=new Map;function V(t,e){let n=`${t}:${e}`,r=K.get(n);if(r)return r;let i=new Float64Array(b*b);for(let a=0;a<b;a+=1)for(let o=0;o<b;o+=1)i[a*b+o]=pt(t,e,o,a);return K.set(n,i),i}function kt(t,e,n){let r=new Float64Array(b*b),i=0;for(let a=0;a<b;a+=1)for(let o=0;o<b;o+=1){let c=((n+a)*t.width+e+o)*4;t.data[c+3]>=224&&(i+=1),r[a*b+o]=t.data[c]*.299+t.data[c+1]*.587+t.data[c+2]*.114}return{luminance:r,usable:i>=56}}function X(t,e){let n=0;for(let r=0;r<t.length;r+=1)n+=t[r]*e[r];return n}function At(t,e){return X(t,V(e[0],e[1]))-X(t,V(e[2],e[3]))}function Q(t,e,n){let r=Math.floor((t.width-e)/b),i=Math.floor((t.height-n)/b),a=[];for(let o=0;o<i;o+=1)for(let c=0;c<r;c+=1){let s=kt(t,e+c*b,n+o*b);if(!s.usable)continue;let d=new Float64Array(Y.length);Y.forEach((m,f)=>{d[f]=At(s.luminance,m)}),a.push({differences:d,blockX:c,blockY:o})}return a}function J(t,e,n,r,i,a,o){let c=new Float64Array(v),s=new Uint32Array(v),d=new Uint8Array(t.length),m=new Uint16Array(t.length);if(t.forEach((u,l)=>{let k=(u.blockY+o)%z*P+(u.blockX+a)%P,A=xt(r,k),g=A&3,E=((A>>>8&16777215)/16777216-.5)*i,M=(u.differences[g]-E)/i,R=Math.round(M),N=Math.abs(R%2),C=Math.max(0,Math.min(1,Math.abs(M-Math.floor(M)-.5)*2)),_=n[k];c[_]=c[_]+(N===1?C:-C),s[_]=s[_]+1,d[l]=N,m[l]=_}),s.some(u=>u===0))return null;let f=new Uint8Array(v);for(let u=0;u<v;u+=1)f[u]=c[u]>=0?1:0;let x=mt(f),h=ft(x,e);if(h===null)return null;let I=0;d.forEach((u,l)=>{u!==f[m[l]]&&(I+=1)});let y=t.length?I/t.length:1,p=0;for(let u=0;u<v;u+=1)p+=Math.min(1,Math.abs(c[u])/s[u]);return p/=v,{detected:!0,payload:h,confidence:Math.max(0,Math.min(1,p*.6+(1-y)*.4)),bitErrorRate:y,algorithm:q,frame:x}}function wt(t){let e=D(t.key??"");if(e.length<16)throw new Error("key must contain at least 16 UTF-8 bytes.");return{keyBytes:e,delta:$[gt(t.strength)],permutation:bt(t.key),seed:Z(e)}}function Et(t){if(It(t.width,t.height),t.data.length<t.width*t.height*4)throw new Error("RGBA pixel buffer is smaller than its declared dimensions.")}function H(t,e,n,r=1){let i=n==="robust"?b:1,a=n==="robust"?P:1,o=n==="robust"?z:1,c=null;for(let s=0;s<i;s+=1)for(let d=0;d<i;d+=1){let m=Q(t,d,s);for(let f=0;f<o;f+=1)for(let x=0;x<a;x+=1){let h=J(m,e.keyBytes,e.permutation,e.seed,e.delta,x,f);if(h&&(!c||h.confidence>c.confidence)&&(h.scale=r,c=h,n==="fast"||h.confidence>=.98))return h}}return c}function Mt(t,e,n){let r=Q(t,0,0);for(let i of nt){let a=J(r,e.keyBytes,e.permutation,e.seed,e.delta*i,0,0);if(a)return a.scale=n,a}return null}function vt(t,e){let n=Math.max(1,Math.round(t.width/e)),r=Math.max(1,Math.round(t.height/e));return n>=128&&r>=88?{width:n,height:r}:null}function Wt(t,e,n){if(!Number.isInteger(e)||!Number.isInteger(n)||e<=0||n<=0)throw new Error("Invisible watermark resize dimensions must be positive integers.");let r=new Uint8ClampedArray(e*n*4),i=t.width/e,a=t.height/n;for(let o=0;o<n;o+=1){let c=(o+.5)*a-.5,s=Math.max(0,Math.min(t.height-1,Math.floor(c))),d=Math.min(t.height-1,s+1),m=Math.max(0,Math.min(1,c-s));for(let f=0;f<e;f+=1){let x=(f+.5)*i-.5,h=Math.max(0,Math.min(t.width-1,Math.floor(x))),I=Math.min(t.width-1,h+1),y=Math.max(0,Math.min(1,x-h)),p=(s*t.width+h)*4,u=(s*t.width+I)*4,l=(d*t.width+h)*4,k=(d*t.width+I)*4,A=(o*e+f)*4;for(let g=0;g<4;g+=1){let E=t.data[p+g]*(1-y)+t.data[u+g]*y,M=t.data[l+g]*(1-y)+t.data[k+g]*y;r[A+g]=E*(1-m)+M*m}}}return{data:r,width:e,height:n}}function _t(t,e,n){let r=new Uint8ClampedArray(e*n*4);for(let i=0;i<n;i+=1){let a=Math.min(t.height-1,Math.floor((i+.5)*t.height/n));for(let o=0;o<e;o+=1){let c=Math.min(t.width-1,Math.floor((o+.5)*t.width/e)),s=(a*t.width+c)*4,d=(i*e+o)*4;r[d]=t.data[s],r[d+1]=t.data[s+1],r[d+2]=t.data[s+2],r[d+3]=t.data[s+3]}}return{data:r,width:e,height:n}}function St(){return{detected:!1,confidence:0,algorithm:q}}function tt(t,e){Et(t);let n=wt(e),r=yt(e.search),i=r==="robust"?[1,...et]:[1];for(let a of i){let o=a===1?null:vt(t,a);if(a!==1&&!o)continue;let c=o?a<1?_t(t,o.width,o.height):Wt(t,o.width,o.height):t,s=o?Mt(c,n,a):H(c,n,"fast",a);if(s)return O(s)}if(r==="robust"){let a=H(t,n,"robust");if(a)return O(a)}return St()}var S=1,B=self;B.onmessage=t=>{let e=t.data;if(e?.protocol!==S||e.type!=="detect"||typeof e.id!="string"||!(e.pixels instanceof ArrayBuffer)||typeof e.width!="number"||typeof e.height!="number"||!e.options){B.postMessage({protocol:S,id:typeof e?.id=="string"?e.id:"",type:"error",code:"INVALID_REQUEST",message:"The detection request is invalid."});return}try{let n=tt({data:new Uint8ClampedArray(e.pixels),width:e.width,height:e.height},e.options);B.postMessage({protocol:S,id:e.id,type:"result",result:n})}catch{B.postMessage({protocol:S,id:e.id,type:"error",code:"DETECTION_FAILED",message:"The image or detection options could not be processed."})}};B.postMessage({protocol:S,type:"ready"});})();
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@image-marker/web",
3
+ "version": "0.1.0",
4
+ "description": "Standalone browser image watermarks, recipes and headless editing without React Native",
5
+ "license": "MIT",
6
+ "homepage": "https://image-marker.corerobin.com/guides/web-sdk/",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/JimmyDaddy/react-native-image-marker.git",
10
+ "directory": "packages/web"
11
+ },
12
+ "main": "lib/commonjs/index.js",
13
+ "module": "lib/module/index.js",
14
+ "types": "lib/module/index.d.ts",
15
+ "sideEffects": false,
16
+ "files": [
17
+ "lib",
18
+ "api-contract.json",
19
+ "README.md",
20
+ "CHANGELOG.md"
21
+ ],
22
+ "exports": {
23
+ ".": {
24
+ "import": {
25
+ "types": "./lib/module/index.d.ts",
26
+ "default": "./lib/module/index.js"
27
+ },
28
+ "require": {
29
+ "types": "./lib/commonjs/index.d.ts",
30
+ "default": "./lib/commonjs/index.js"
31
+ }
32
+ },
33
+ "./headless": {
34
+ "import": {
35
+ "types": "./lib/module/headless.d.ts",
36
+ "default": "./lib/module/headless.js"
37
+ },
38
+ "require": {
39
+ "types": "./lib/commonjs/headless.d.ts",
40
+ "default": "./lib/commonjs/headless.js"
41
+ }
42
+ },
43
+ "./editor-adapter": {
44
+ "import": {
45
+ "types": "./lib/module/editor-adapter.d.ts",
46
+ "default": "./lib/module/editor-adapter.js"
47
+ },
48
+ "require": {
49
+ "types": "./lib/commonjs/editor-adapter.d.ts",
50
+ "default": "./lib/commonjs/editor-adapter.js"
51
+ }
52
+ },
53
+ "./worker": "./lib/worker/invisible-watermark.js",
54
+ "./worker/invisible-watermark.js": "./lib/worker/invisible-watermark.js",
55
+ "./package.json": "./package.json"
56
+ },
57
+ "scripts": {
58
+ "build": "npm run build:recipe --prefix ../.. && node ../../scripts/build-web-package.mjs",
59
+ "check:api": "node ../../scripts/verify-web-api-contract.mjs",
60
+ "prepack": "npm run build"
61
+ },
62
+ "dependencies": {
63
+ "@image-marker/recipe": "^0.1.0"
64
+ },
65
+ "engines": {
66
+ "node": ">=20.19.0"
67
+ },
68
+ "publishConfig": {
69
+ "access": "public",
70
+ "registry": "https://registry.npmjs.org/",
71
+ "provenance": true
72
+ },
73
+ "release-it": {
74
+ "git": {
75
+ "commitMessage": "chore(web): release ${version}",
76
+ "tagName": "web-v${version}"
77
+ },
78
+ "npm": {
79
+ "publish": false
80
+ },
81
+ "github": {
82
+ "release": true
83
+ }
84
+ }
85
+ }